Tivoli Service Desk 6.0 Developer's Toolkit - Guide de programmation TSD Script
Retour à la table des matières
TSD Script permet de créer des fenêtres génériques, des fenêtres virtuelles défilantes et des formulaires. Le système de fenêtrage de TSD Script se compose d'un ensemble d'instructions TSD Script qui permettent de créer une interface utilisateur personnalisée.
Ce chapitre :
Une fenêtre est une portion de l'écran ou du bureau qui contient son propre document ou message. Les termes suivants sont utilisés pour décrire les éléments et parties d'une fenêtre générique.
WinCreate est utilisé pour créer des fenêtres génériques. Une fenêtre générique constitue la forme la plus simple et la plus souple de fenêtre fournie par TSD Script. Les fenêtres génériques peuvent aussi contenir leurs propres messages.
VARIABLES mainWindow: Window; ACTIONS WinCreate($Desktop,mainWindow,MainEvent, 1,1,100,30,'',0);
Voici la description des arguments de WinCreate utilisés dans la section ACTION de l'exemple précédent :
L'origine du système de coordonnées (1,1) correspond à l'angle supérieur gauche de l'écran. Les coordonnées x augmentent en progressant vers la droite ; les coordonnées y augmentent en progressant vers le bas.
Les deux arguments suivants sont, respectivement, la largeur et la hauteur de la surface utile (ou zone client) de la nouvelle fenêtre. Ces mesures sont exprimées en unités de caractère.
La fenêtre créée dans cet exemple a son angle supérieur gauche placé dans l'angle supérieur gauche de l'écran. Elle est large de 100 caractères et haute de 30 caractères.
Dans l'exemple suivant, le dernier argument est une expression entière dans laquelle chaque emplacement de bit représente un fanion (indication de type actif/inactif). Voir l'exemple ci-dessous.
WinCreate($Desktop,mainWindow,MainEvent, 1,1,100,30,'', BitOr($WinTitle,$WinBorder,$WinMinMax));
Le résultat de la fonction BitOr signifie que cette fenêtre est créée avec trois éléments : une barre de titre, une bordure et un jeu de boutons Réduction/Agrandissement placé dans l'angle supérieur droit.
Pour des informations plus détaillées sur les fanions de création fournis par TSD Script, reportez-vous au manuel Tivoli Service Desk 6.0 Developer's Toolkit - Manuel de référence du langage TSD Script.
TSD Script permet de créer la fenêtre principale d'une application. Dans TSD Script, la création d'une fenêtre implique les étapes suivantes :
Remarque : Si les actions du gestionnaire d'événements ont pour résultat de changer la taille de la surface utile de la fenêtre, un nouveau message $MsgSize est généré. On entend par surface utile (ou zone client) la zone de la fenêtre sur laquelle l'utilisateur final peut intervenir. Les éléments suivants ne font pas partie de cette surface :
Parmi ces quatre étapes, seules la deuxième et la quatrième concernent la plupart des fenêtres. Le message $MsgCreate est important, car il indique au gestionnaire d'événements le moment opportun pour procéder aux derniers ajustements de la fenêtre avant de l'afficher et pour initialiser les valeurs dans les données d'instance.
Lorsque la routine MainEvent reçoit le message $MsgCreate, elle entreprend deux actions :
- Elle crée d'abord une liste de noms d'icône.
- Puis elle utilise WinSetIconBar pour envoyer un message à la fenêtre sur le point d'être créée et lui demander d'ajouter ces icônes à sa barre d'outils. Voir l'exemple ci-dessous.
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 *);
Remarque :
Le fanion (flag) $WinIconBar de l'instruction WinCreate du programme principal détermine si la nouvelle fenêtre est dimensionnée correctement, de sorte que la surface utile ait la taille correcte une fois la barre d'outils ajoutée.Cette section traite de la création d'un système de menus. Imaginez que vous vouliez construire un système de trois menus : Fichier, Edition et Aide. Le menu Fichier comprend les commandes suivantes :
Le menu Edition comprend les commandes suivantes :
Enfin, le menu Aide comprend les commandes suivantes :
La structure bidimensionnelle du système de menus est transformée en une liste unidimensionnelle, en ajoutant les options de haut en bas et de gauche à droite.
ListInsert(menuList,'');
ListInsert(menuList,'Enr~egistrer sous');
WinSetMenuBar($Handle,{'Fichier','Nouveau','Ouvrir',..., 'Aide générale''}: LIST OF STRING);
L'utilisation de '/L-' permet de faire apparaître un séparateur entre les commandes de menu.
WinSetMenuBar($Handle,{'Fichier','Nouveau','Ouvrir',..., '/L-', 'Aide générale'}: LIST OF STRING);
Lorsque l'utilisateur sélectionne une commande de menu, le gestionnaire d'événements de la fenêtre reçoit un message $MsgMenu. Le premier paramètre d'événement $MenuSelection (INTEGER) contient un entier qui indique quelle commande de menu a été sélectionnée. Cet entier est codé comme suit :
majeur*100 + mineur
Majeur est le numéro de menu dans le sens horizontal (100 pour le plus à gauche) et
mineur est le numéro de commande de menu dans le sens vertical (101 pour celle du haut).
Par exemple, si l'utilisateur choisit la commande Coller dans le menu Edition, le premier
paramètre sans nom (entier) de l'événement aura la valeur 203, car Edition est le deuxième
menu en partant de la gauche et Coller est la troisième commande de ce menu en partant
du haut.
Les numéros 1 à 99 sont réservés aux outils, car les événements de sélection d'outil sont
également signalés par le message $MsgMenu.
TSD Script fournit un ensemble d'instructions qui permettent d'agir sur l'apparence de la surface utile d'une fenêtre générique. Les fenêtres génériques assurent, en interne, le suivi de la position en cours du curseur. Il s'agit d'une position (x,y) où ont lieu certaines opérations de sortie (telles que WinWrite).
La position du dessin dans le système de coordonnées sélectionné peut être
mesurée par rapport à la position
(1,1), qui correspond à l'angle supérieur gauche de la surface utile.
Elle peut être exprimée en :
Les coordonnées 'x' augmentent en progressant vers la droite, et les coordonnées 'y' augmentent en progressant vers le bas.
Les instructions utilisables avec les fenêtres génériques sont répertoriées dans le tableau ci-après. Leurs paramètres sont énumérés dans le manuel Tivoli Service Desk 6.0 Developer's Toolkit - Guide de programmation.
Instruction | Description |
WinGoToXY | Déplace la position en cours vers les coordonnées (x,y) indiquées. |
WinWrite | Ecrit une chaîne à la position en cours. |
WinWriteAt | Ecrit une chaîne à la position indiquée. |
WinWriteLN | Ecrit une chaîne à la position en cours et amène le pointeur de position au début de la ligne suivante. |
WinX | Renvoie la coordonnée x de la position de sortie de texte en cours. |
WinY | Renvoie la coordonnée y de la position de sortie de texte en cours. |
WinWidth | Renvoie la largeur de la fenêtre, exprimée en caractères. |
WinHeight | Renvoie la hauteur de la fenêtre, exprimée en coordonnées. |
WinClear | Efface la fenêtre entière en y appliquant la couleur d'arrière-plan en cours. |
WinClearEOL | Efface le contenu de la fenêtre (de la position en cours du curseur jusqu'à la fin de la ligne en cours) en y appliquant la couleur d'arrière-plan en cours. |
WinClearEOW | Efface le contenu de la fenêtre (à partir de la droite de la position en cours du curseur) en y appliquant la couleur d'arrière-plan en cours. |
WinClearRectangle | Efface la zone rectangulaire indiquée en y appliquant la couleur d'arrière-plan en cours. |
WinGetXPos | Renvoie la coordonnée x d'un descripteur de fenêtre valide. |
WinGetYPos | Renvoie la coordonnée y d'un descripteur de fenêtre valide. |
WinSetColor | Définit les couleurs de premier plan et d'arrière-plan de la fenêtre. |
Les instructions suivantes servent à la création de fenêtres.
Instruction | Description |
WinSetIconBar | Définit le contenu de la barre d'icônes (ou barre d'outils). |
WinSetMenuBar | Définit le contenu de la barre de menus. |
WinCreateClock | Crée une fenêtre d'horloge ou de minuterie (timer) à l'intérieur de la fenêtre générique. |
WinCreateImage | Crée un afficheur d'image à l'intérieur de la fenêtre générique et y fait apparaître le fichier image indiqué. |
WinCreateMouseRect | Crée un "point chaud" (ou zone réactive) rectangulaire dans la fenêtre, à l'emplacement indiqué. Les clics de souris reçus dans cette zone génèrent des événements destinés au gestionnaire d'événements de la fenêtre générique. |
L'événement $MsgPaint (également appelé message de "retraçage") indique qu'une partie de la fenêtre générique a besoin d'être redessinée.
Le gestionnaire de fenêtres doit redessiner le contenu de la fenêtre générique lorsque l'utilisateur clique dessus ou ferme une autre fenêtre. Pour cela, il envoie le message $MsgPaint. Comme le gestionnaire de fenêtres ne mémorise pas le contenu de chaque fenêtre ouverte sur le bureau, il attend de chacune qu'elle soit en mesure de se redessiner seule.
Prenons pour exemple le cas suivant :
Si l'utilisateur clique sur cette autre fenêtre, elle vient au premier plan et tout ou partie de la fenêtre générique se retrouve alors derrière elle. La mise à jour de l'écran implique que les deux fenêtres se redessinent.
Un gestionnaire d'événements peut recevoir à tout moment un message $MsgPaint pour une fenêtre qu'il gère. Deux événements de base sont susceptibles de conduire à l'émission du message de retraçage :
Remarque : D'une manière générale, les fenêtres génériques qui écrivent
dans leur surface utile ne doivent le faire que dans la partie du gestionnaire d'événements
qui gère l'événement $MsgPaint.
Les fenêtres génériques doivent être capables de gérer les messages de retraçage et de régénérer leur propre contenu à tout moment. TSD Script permet de créer des fenêtres virtuelles défilantes qui présentent les caractéristiques suivantes :
Une fenêtre de ce type est entièrement virtuelle. Vous pouvez écrire des informations n'importe où dans leur espace bidimensionnel et utiliser les barres de défilement horizontal et vertical pour visualiser ces informations.
Remarque : Une fenêtre virtuelle défilante ignore tout de la structure de vos données. Elle est plus simple à mettre en oeuvre qu'une fenêtre générique, mais elle peut se révéler moins efficace.
L'instruction qui permet de créer ce type de fenêtre est WinCreateScrollWindow. Ses arguments sont les suivants :
Nom de l'argument | Description |
whdlParent | Descripteur de la fenêtre mère de la fenêtre nouvellement créée. |
whdl | Le descripteur de la fenêtre nouvellement créée est renvoyé dans ce paramètre. En cas d'erreur, la variable prend la valeur $Unknown (inconnu). |
EventHandler | Gestionnaire d'événements chargé de traiter les événements générés par la fenêtre ou la boîte de dialogue. Si aucun traitement d'événement n'est requis, le mot clé $NullHander peut être utilisé pour l'indiquer. |
xLoc | Coordonnée x de l'angle supérieur gauche de la fenêtre. Les coordonnées x sont exprimées en cellules de caractère. |
yLoc | Coordonnée y de l'angle supérieur gauche de la fenêtre. Les coordonnées y sont exprimées en cellules de caractère. |
width | Largeur (dimension x) de la fenêtre, bordure non comprise. Les coordonnées x sont exprimées en cellules de caractère. |
height | Hauteur (dimension y) de la fenêtre, bordure, barre de titre, barre de menus, barre d'icônes et barre d'état non comprises. Les coordonnées y sont exprimées en cellules de caractère. |
title | Titre à afficher sur la barre de titre. La fenêtre doit pour cela comporter une barre de titre. Utilisez le style $WinTitle. |
font | Nom d'une police système disponible. |
pointSize | Taille en points (ou corps) de la police à utiliser dans la fenêtre. |
style | Masque de contrôle des données entières représentant une liste d'indicateurs de style permettant de contrôler l'aspect de la fenêtre. |
Les fenêtres virtuelles défilantes sont particulièrement utiles lorsqu'il faut enregistrer une seule ligne d'informations à la fois. Dans l'exemple suivant, on crée une sorte de "tableau d'affichage" défilant. Il servira à dresser la liste des noms et des numéros de sécurité sociale de tous les employés inscrits dans la table de base de données EMPLOYEES. L'écriture des noms et des numéros dans la fenêtre s'effectue ligne par ligne, en commençant par le haut.
VARIABLES vWin: Window; i: INTEGER; cursor: SQLCursor; ACTIONS WinCreateScrollWindow($Desktop,vWin,$NullHandler, 1,1, 80,25,'Liste du personnel', 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);
Comme le style $WinAutoScroll est utilisé, les premières entrées montent d'un cran et disparaissent de la fenêtre dès que le bas de celle-ci est atteint.
Vous pouvez utiliser à tout moment la barre de défilement vertical pour remonter la liste et revoir les premières entrées. Lorsque l'utilisateur a fini d'utiliser la fenêtre, il peut la fermer à l'aide du menu système, ou bien un message $MsgClose peut être envoyé explicitement dans l'application.
Les instructions suivantes permettent de changer l'apparence et les fonctions d'une fenêtre virtuelle défilante :
Nom d'instruction | Description |
WinGoToXY | Place la position en cours aux coordonnées virtuelles (x,y) indiquées. |
WinWrite | Ecrit une chaîne à la position en cours. |
WinWriteAt | Ecrit une chaîne à la position indiquée. |
WinWriteLN | Ecrit une chaîne à la position en cours et amène le pointeur de position au début de la ligne suivante. Si la position en cours se trouve sur la dernière ligne de la fenêtre et que vous utilisez le style $WinAutoScroll, le contenu entier de la fenêtre monte d'une ligne. |
WinX | Renvoie la coordonnée x de la position de sortie de texte en cours. |
WinY | Renvoie la coordonnée y de la position de sortie de texte en cours. |
WinWidth | Renvoie la largeur de la fenêtre (physique), exprimée en caractères. |
WinHeight | Renvoie la hauteur de la fenêtre (physique), exprimée en coordonnées. |
WinClear | Efface la fenêtre entière en y appliquant la couleur d'arrière-plan en cours. |
WinClearEOL | Efface le contenu de la fenêtre virtuelle, de la position du curseur jusqu'à la fin de la ligne en cours, en y appliquant la couleur d'arrière-plan en cours. |
WinClearEOW | Efface le contenu de la fenêtre (à partir de la droite de la position en cours du curseur) en y appliquant la couleur d'arrière-plan en cours. |
WinClearRectangle | Efface la zone rectangulaire indiquée en y appliquant la couleur d'arrière-plan en cours. |
WinSetColor | Définit les couleurs de premier plan et d'arrière-plan de la fenêtre. |
WinSetIconBar | Définit le contenu de la barre d'icônes (ou barre d'outils). |
WinSetMenuBar | Définit le contenu de la barre de menus. |
WinCreateClock | Crée une fenêtre d'horloge ou de minuterie (timer) à l'intérieur de la fenêtre défilante. L'horloge défile automatiquement à l'intérieur de la fenêtre. |
WinCreateImage | Crée un afficheur d'image à l'intérieur de la fenêtre défilante et y fait apparaître le fichier image indiqué. L'image défile automatiquement à l'intérieur de la fenêtre. |
WinGetXPos | Renvoie la coordonnée x d'un descripteur de fenêtre valide. |
WinGetYPos | Renvoie la coordonnée y d'un descripteur de fenêtre valide. |
WinCreateMouseRect | Crée un "point chaud" (ou zone réactive) rectangulaire dans la fenêtre, à l'emplacement indiqué. Les clics de souris reçus dans cette zone génère des événements destinés au gestionnaire d'événements de la fenêtre défilante. |
Comme les fenêtres génériques, les fenêtres virtuelles gèrent en interne la position (x,y) du curseur. Cette position indique où commencent certaines opérations de sortie (telles que WinWrite). Après une opération WinWrite, la position x du curseur est augmentée du nombre de caractères écrits.
La position du curseur peut être obtenue par l'appel des fonctions WinX et WinY. Il est possible de la changer en appelant la fonction WinGotoXY( ).
Tivoli Service Desk 6.0 Developer's Toolkit - Guide de programmation TSD Script