Tivoli Service Desk 6.0 Developer's Toolkit - Guide de programmation TSD Script

Chapitre 6 : Utilisation du système de fenêtrage de TSD Script

Retour à la table des matières


Introduction

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 :

Description d'une fenêtre

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.

Utilisation de WinCreate

Création 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); 

Exemples d'arguments de WinCreate

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.

Utilisation des fanions de création

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.

Création d'une fenêtre

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 :

  1. Le gestionnaire d'événements associé à la fenêtre est appelé par un événement $MsgSize. Cet appel intervient avant que la fenêtre ne soit dessinée sur l'écran.
    Par ailleurs, deux autres éléments d'information sont transmis aux coordonnées en cours du gestionnaire d'événements : la largeur et la hauteur de la nouvelle fenêtre, exprimées en caractères. Ces deux valeurs sont transmises, respectivement, dans les premier et deuxième paramètres sans nom (INTEGER) de l'événement.
  2. Le gestionnaire d'événements est ensuite appelé par un événement $MsgCreate. Il signale au gestionnaire que la fenêtre est sur le point d'être dessinée sur l'écran. A ce stade, le gestionnaire d'événements doit entreprendre les actions appropriées pour ajouter les commandes de menu, les outils et autres éléments visuels requis.

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 :

  1. Le cadre de la fenêtre est dessiné sur l'écran.
  2. Le gestionnaire d'événements est appelé par un message $MsgPaint. C'est à ce stade qu'il dessine tous les autres éléments qui doivent apparaître à l'intérieur de la surface utile de la fenêtre.

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 :

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.

Menus déroulants

Création d'un système de menus déroulants

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 :

Options de menu

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); 
WinSetMenuBar($Handle,{'Fichier','Nouveau','Ouvrir',..., '/L-',
'Aide générale'}: LIST OF STRING);


Paramètres d'événement et commandes de menu

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.

Fenêtres génériques

Position du curseur dans une fenêtre générique

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.

Instructions de fenêtre

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.

Instructions de création de 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.

Retraçage des fenêtres génériques

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.

Fenêtres virtuelles défilantes

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.

Création d'une fenêtre virtuelle défilante

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.

Exemple de fenêtre virtuelle défilante

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.

Instructions des fenêtres virtuelles défilantes

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.

Position du curseur

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

Retour à la table des matières

Copyright