Manuale per la programmazione Tivoli Service Desk 6.0 Developer's Toolkit Script
Utilizzando il TSD Script, è possibile creare finestre generiche, finestre a scorrimento virtuali e moduli. Il sistema di finestre TSD Script è composto da un numero di istruzioni TSD Script che consentono di creare un'interfaccia utente personalizzata.
Questo capitolo:
Una finestra è una parte di schermo o di desktop che contiene un documento o un messaggio. I seguenti termini vengono utilizzati per descrivere le parti di una finestra generica.
WinCreate viene utilizzato per creare finestre generiche. Una finestra generica è la finestra più semplice e flessibile fornita da TSD Script. Le finestre generiche possono inoltre contenere messaggi propri.
VARIABLES mainWindow: Window; ACTIONS WinCreate($Desktop,mainWindow,MainEvent, 1,1,100,30,'',0);
La seguente spiegazione descrive gli argomenti WinCreate utilizzati nella sezione delle azioni dell'esempio precedente:
Il sistema di coordinate inizia con (1,1) posizionato nell'angolo sinistro superiore dello schermo. Le coordinate X aumentano man mano verso destra; le coordinate y aumentano man mano che scendono verso il basso dello schermo.
I due argomenti successivi sono (rispettivamente) la larghezza e l'altezza dell'area client della nuova finestra. Vengono espressi in unità di carattere.
La finestra creata nell'esempio ha l'angolo superiore sinistro nell'angolo superiore sinistro dello schermo. Ha una larghezza di 100 caratteri e un'altezza di 30 caratteri.
Nel seguente esempio, l'ultimo argomento è un'espressione intera dove ogni posizione bit rappresenta un indicatore on/off. Ad esempio:
WinCreate($Desktop,mainWindow,MainEvent, 1,1,100,30,'', BitOr($WinTitle,$WinBorder,$WinMinMax));
Il risultato della funzione BitOr indica che questa finestra viene creata con tre voci: una barra dei titoli, un margine e una serie di pulsanti minimizza/ingrandisci nell'angolo superiore destro.
Per informazioni dettagliate sugli indicatori della creazione forniti dal TSD Script, consultare Riferimento Lingua del TSD 6.0 Developer's Toolkit Script.
E' possibile creare la finestra principale delle applicazioni in TSD Script. In TSD Script, la creazione di una finestra coinvolge i seguenti passi:
Nota: Se l'handler degli eventi esegue delle azioni che modificano le dimensioni dell'area client della finestra, viene creato un nuovo messaggio $MsgSize. L'area client di una finestra è l'area di lavoro di un utente finale. Gli elementi non inseriti nell'area client comprendono:
La maggior parte delle finestre sono interessate solo dal secondo e dal quarto passo tra i quattro riportati. Il messaggio $MsgCreate è importante perché indica all'handler degli eventi il momento opportuno per apportare delle modifiche finali alla finestra, prima di essere visualizzata, e per inizializzare i valori nei dati di istanza.
Quando la routine MainEvent riceve il messaggio $MsgCreate, essa esegue due azioni:
- Innanzitutto, crea un elenco di nomi delle icone.
- Poi utilizza WinSetIconBar per inviare un messaggio alla finestra che sta per essere creata, indicandole di aggiungere queste icone alla propria barra degli strumenti. Ad esempio:
EVENT MainEvent(REF context: ContextRecord) IS VARIABLES iconList: List of String; ACTIONS WHEN $Event IS $MsgCreate THEN iconList:={'ADDINV.ICO','SRCHINV.ICO', 'REPORTS.ICO'): LIST OF STRING; WinSetIconBar($Handle,iconList); ELSWHEN $MsgSelect THEN WHEN $EventParm(1,Integer) IS 1 THEN CreateAddWindow; ELSWHEN 2 THEN CreateSearchWindow; ELSWHEN 3 THEN CreateReportWindow; END; ELSWHEN QUERY_CURRENT_ID THEN $EventParm(1,String):=context.current_ID; END; END (* Main Event *);
Nota:
L'indicatore $WinIconBar nell'istruzione WinCreate del programma principale determina che le dimensioni della nuova finestra sono corrette, in tal modo l'area client sarà pronta nel momento in cui viene aggiunta la barra degli strumenti.Questa sezione indica come creare un sistema di menu. Si immagini di voler creare un sistema di menu con tre menu: File, Modifica e ?. Nel menu File sono riportati i seguenti comandi:
Nel menu Modifica sono riportati i seguenti comandi:
Infine, nel menu ? sono riportati i seguenti comandi:
La struttura del menu bidimensionale viene convertita in un elenco unidimensionale aggiungendo le opzioni dall'alto verso il basso e da sinistra verso destra.
ListInsert(menuList,'');
ListInsert(menuList,'Save ~As');
WinSetMenuBar($Handle,{'File','New','Open',..., 'General Help''}: LIST OF STRING);
Utilizzando '/L-' si specifica che un separatore deve comparire tra i comandi del menu.
WinSetMenuBar($Handle,{'File','New','Open',..., '/L-', 'General Help'}: LIST OF STRING);
Quando un utente seleziona un comando menu, l'handler degli eventi per la finestra riceve un messaggio $MsgMenu. Il primo parametro degli eventi $MenuSelection (INTEGER) contiene un numero intero che indica il comando del menu selezionato. Questo numero intero viene codificato come:
major*100 + minor
Major è il numero del comando del menu orizzontale
selezionato (100 per quello più a sinistra), e minor è il numero del
comando del menu verticale selezionato (101 per quello in alto). In
questo modo, se l'utente seleziona il comando Incolla nel menu
Modifica, il primo parametro degli eventi non denominato (valore
intero)
deve avere il valore 203 perché Modifica è il secondo comando
orizzontale e Incolla è il terzo comando verticale. I numeri compresi
tra 1 e 99 rappresentano i tool, perché anche gli eventi del tool
vengono gestiti da $MsgMenu.
TSD Script fornisce un numero di istruzioni che modificano l'aspetto dell'area client di una finestra generica. Internamente, le finestre generiche tengono traccia della posizione corrente del cursore. Questa è una posizione (x,y) dove si verificano alcune operazioni di emissione (come ad esempio WinWrite).
La posizione evidenziata nel sistema di coordinate al momento
selezionato può essere misurata dalla posizione (1,1), nell'angolo
superiore sinistro dell'area client. La posizione evidenziata può
essere misurata in:
Le posizioni della coordinata X aumentano verso destra e le posizioni della coordinata y aumentano verso il basso.
Le istruzioni che possono essere utilizzate con le finestre generiche sono elencate nella tabella seguente. I parametri vengono elencati in Manuale per la programmazione Tivoli Service Desk 6.0 Developer's Toolkit Script.
Istruzione | Descrizione |
WinGoToXY | Sposta la posizione corrente in una determinata coordinata (x,y). |
WinWrite | Scrive una stringa nella posizione corrente. |
WinWriteAt | Scrive una stringa in una determinata posizione. |
WinWriteLN | Scrive una stringa nella posizione corrente e sposta il puntatore della posizione all'inizio della riga successiva. |
WinX | Restituisce la coordinata x dell'emissione di testo corrente. |
WinY | Restituisce la coordinata y dell'emissione di testo corrente. |
WinWidth | Restituisce la larghezza della finestra in caratteri. |
WinHeight | Restituisce l'altezza della finestra in coordinate. |
WinClear | Elimina dall'intera finestra il colore dello sfondo corrente. |
WinClearEOL | Elimina dall'intera finestra il colore dello sfondo corrente (iniziando dalla posizione corrente del cursore alla fine della riga corrente). |
WinClearEOW | Ripulisce la finestra nel colore di sfondo corrente (partendo dalla destra della posizione cursore corrente e andando in fondo alla posizione corrente del cursore). |
WinClearRectangle | Elimina da un'area rettangolare il colore evidenziato dello sfondo corrente. |
WinGetXPos | Restituisce la posizione della coordinata x di un handle della finestra valido. |
WinGetYPos | Restituisce la posizione della coordinata y di un handle della finestra valido. |
WinSetColor | Imposta i colori evidenziati dello sfondo e del primo piano per la finestra. |
Le seguenti istruzioni sono le funzioni utilizzate per creare le finestre.
Istruzione | Descrizione |
WinSetIconBar | Imposta il contenuto della barra delle icone. |
WinSetMenuBar | Imposta il contenuto della barra dei menu. |
WinCreateClock | Crea una finestra timer o orologio all'interno della finestra generica. |
WinCreateImage | Crea un programma di visualizzazione delle immagini all'interno della finestra generica che visualizza un determinato file di immagini. |
WinCreateMouseRect | Crea un'"area sensibile" rettangolare sulla finestra in una determinata posizione. I clic del mouse in quest'area creano gli eventi per l'handler degli eventi della finestra generica. |
L'evento $MsgPaint (definito anche come messaggio di aggiornamento) indica che alcune parti della finestra generica devono essere ridisegnate.
Se un utente chiude un'altra finestra oppure fa clic sulla finestra generica, il gestore della finestra deve rivisualizzare il contenuto della finestra generica. Per far ciò è necessario inviare il messaggio $MsgPaint. Poiché il gestore delle finestre non ricorda il contenuto di ogni finestra che viene aperta sul desktop, prevede che ogni finestra sia in grado di riaggiornarsi da sola.
Ad esempio, si supponga che:
Se un utente fa clic sull'altra finestra, questa viene evidenziata andando così a ricoprire una parte (o tutta) della finestra generica. Per aggiornare la visualizzazione, entrambe le finestre devono aggiornarsi.
Un handler degli eventi può ricevere in un qualsiasi momento un messaggio $MsgPaint per una finestra che gestisce. Esistono due trigger di base che risultano nel messaggio di aggiornamento:
Nota: In generale, le finestre generiche che
scrivono nella parte client della finestra devono operare in questo
modo solo nella parte dell'handler degli eventi che serve l'evento
$MsgPaint.
Le finestre generiche devono essere in grado di gestire i messaggi di aggiornamento e di ricreare il loro contenuto in un qualsiasi momento. TSD Script fornisce una finestra a scorrimento virtuale che opera le seguenti attività:
Una finestra a scorrimento virtuale è completamente virtuale. E' possibile scrivere le informazioni ovunque nello spazio bidimensionale e utilizzare le barre di scorrimento (orizzontale e verticale) per visualizzarle.
Nota: Una finestra di scorrimento virtuale non ha alcuna nozione della struttura dei dati. E' più facile utilizzare da utilizzare rispetto ad una finestra generica, ma può rivelarsi meno efficiente.
Una finestra a scorrimento virtuale viene creata con l'istruzione WinCreateScrollWindow. Questa istruzione prende i seguenti argomenti:
Nome dell'argomento | Descrizione |
whdlParent | L'handle per la finestra padre di una finestra appena creata. |
whdl | L'handle della finestra appena creata viene restituito in questo parametro. In caso di errore, la variabile viene impostata su $Unknown. |
EventHandler | Un handler degli eventi per elaborare gli eventi creati dalla finestra o dalla casella di dialogo. Qualora non venisse richiesta l'elaborazione degli eventi, è possibile utilizzare la parola chiave $NullHander. |
xLoc | La posizione della X dell'angolo superiore sinistro della finestra. Le coordinate X vengono misurate in celle di caratteri. |
yLoc | La posizione della Y dell'angolo superiore sinistro della finestra. Le coordinate Y vengono misurate in celle di caratteri. |
width | La larghezza (dimensione X) della finestra, escluso il bordo. Le coordinate X vengono misurate in celle di caratteri. |
height | L'altezza (dimensione Y) della finestra escluso il bordo, la barra dei titolo, la barra dei menu, la barra delle icone e la barra di stato. Le coordinate Y vengono misurate in celle di caratteri. |
titolo | Il titolo da visualizzare nella barra dei titoli della finestra. La finestra deve avere una barra dei titoli per un titolo che deve essere visualizzato. Utilizzare lo stile $WinTitle. |
font | Il nome di un font del sistema disponibile. |
pointSize | La dimensione in punti del font da utilizzare all'interno della finestra a scorrimento. |
style | Una maschera bit intera che rappresenta un elenco di indicatori di stile utilizzati per controllare l'aspetto della finestra. |
Le finestre a scorrimento virtuali sono utili per registrare le informazioni "una riga alla volta". Il seguente esempio crea una finestra che opera come "lavagna scorrevole" La finestra viene utilizzata per elencare i nomi e i numeri della previdenza sociale di tutti i dipendenti nella tabella EMPLOYEES. Questi nomi e numeri sono scritti nella finestra una riga alla volta, partendo dalla parte superiore della finestra.
VARIABLES vWin: Window; i: INTEGER; cursor: SQLCursor; ACTIONS WinCreateScrollWindow($Desktop,vWin,$NullHandler, 1,1, 80,25,'Matches', SystemMonospaced, 10, BitOr($WinDefaultStyle, $WinViscroll, $WinAutoScroll)); i:=SQLSelect(cursor,'SELECT * FROM EMPLOYEES'); WHILE i > 0 DO i:=SQLFetch(cursor,employee); IF i > 0 THEN WinWriteLn(vWin,employee.first_name & ' ' & employee.last_name & ' ' & employee.ssn); END; END; SQLCloseCursor(cursor);
Poiché viene utilizzato lo stile $WinAutoScroll, le voci meno recenti ripartono dall'alto una volta raggiunta la fine della finestra.
E' possibile utilizzare la barra di scorrimento verticale ogni volta per ritornare indietro e visualizzare le voci meno recenti. Quando un utente ha terminato con la finestra, può chiudere la finestra con il menu del sistema oppure è possibile inviare esplicitamente un messaggio $MsgClose all'applicazione.
Le seguenti istruzioni possono essere utilizzate per modificare l'aspetto e la funzione di una finestra a scorrimento virtuale:
Nome dell'istruzione | Descrizione |
WinGoToXY | Sposta la posizione corrente su una determinata coordinata (x,y) virtuale. |
WinWrite | Scrive una stringa nella posizione corrente. |
WinWriteAt | Scrive una stringa in una determinata posizione. |
WinWriteLN | Scrive una stringa nella posizione corrente e sposta il puntatore della posizione all'inizio della riga successiva. Se la posizione corrente è quella nella parte inferiore della finestra e si utilizza lo stile $WinAutoScroll, l'intera finestra viene spostata in alto di una riga. |
WinX | Restituisce la coordinata x della posizione dell'emissione di testo corrente. |
WinY | Restituisce la coordinata y della posizione dell'emissione di testo corrente. |
WinWidth | Restituisce la larghezza della finestra (fisica) in caratteri. |
WinHeight | Restituisce l'altezza della finestra (fisica) in coordinate. |
WinClear | Elimina dall'intera finestra il colore dello sfondo corrente. |
WinClearEOL | Elimina dalla finestra virtuale, dalla posizione del cursore alla fine della riga corrente, il colore dello sfondo corrente. |
WinClearEOW | Ripulisce la finestra nel colore di sfondo corrente (partendo dalla destra della posizione cursore corrente e andando in fondo alla posizione corrente del cursore). |
WinClearRectangle | Elimina da un'area rettangolare il colore dello sfondo corrente. |
WinSetColor | Imposta i colori evidenziati dello sfondo e del primo piano per la finestra. |
WinSetIconBar | Imposta il contenuto della barra delle icone. |
WinSetMenuBar | Imposta il contenuto della barra dei menu. |
WinCreateClock | Crea una finestra timer o orologio all'interno della finestra a scorrimento. L'orologio scorre automaticamente all'interno della finestra di scorrimento. |
WinCreateImage | Crea un programma di visualizzazione delle immagini all'interno della finestra di scorrimento che visualizza un determinato file di immagini. Questa immagine scorre automaticamente all'interno della finestra di scorrimento. |
WinGetXPos | Restituisce la posizione della coordinata x di un handle di finestra valido |
WinGetYPos | Restituisce la posizione della coordinata y di un handle della finestra valido. |
WinCreateMouseRect | Crea un'area sensibile rettangolare sulla finestra in una determinata posizione. I clic del mouse in quest'area creano gli eventi per l'handler degli eventi della finestra di scorrimento. |
Come accade per le finestre generiche, le finestre virtuali conservano una posizione del cursore (x,y) interna. Questa posizione del cursore indica dove hanno inizio determinate operazioni di emissione (come ad esempio WinWrite). Dopo un operazione WinWrite, la posizione x del cursore viene incrementata dal numero dei caratteri scritti.
E' possibile rilevare la posizione del cursore richiamando le funzioni WinX e WinY. La posizione del cursore può essere modificata richiamando la funzione WinGotoXY( ).
Manuale per la programmazione Tivoli Service Desk 6.0 Developer's Toolkit Script