Suivez-nous sur X
|
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z,
ALL
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
A propos d'Obligement
|
|
David Brunet
|
|
|
|
Programmation : Amiga C Manual - Les requêtes
(Article écrit par Anders Bjerin et extrait d'Amiga C Manual - mars 1990)
|
|
Note : traduction par Serge Hammouche.
5. Les requêtes
5.1 Introduction
Les requêtes sont des cadres pleins d'un type d'information qui
attend une réponse en provenance de l'utilisateur. Il pourra s'agir d'une
demande aussi simple que celle d'insérer une disquette dans le lecteur
de disquette interne comme d'une requête de fichier totalement
fonctionnelle. Les requêtes ressemblent à des petites fenêtres
auxquelles on aurait relié des gadgets ; ils disparaîtront de l'écran
dès que l'utilisateur "aura satisfait à la demande".
5.2 Les différents types de requêtes
Il y a trois types différents de requêtes :
- Les requêtes du système.
- Les requêtes d'application.
- Les requêtes double-menu.
5.2.1 Les requêtes du système
Les requêtes du système sont ouvertes et gérées par Intuition et
votre programme n'a aucun moyen de contrôle sur celles-ci. Par exemple,
si l'utilisateur essaie de charger un fichier à partir du lecteur de
disquettes DF1: et qu'il n'y a pas de disquette dans le lecteur, le
système d'exploitation affichera la demande suivante :
-----------------------------------
| Requête du système ========[*][*]
-----------------------------------
| Pas de disquette présente | |
| dans l'unité 1 | |
| | |
| ------------- ----------- | |
| | Réessayer | | Annuler | | |
| ------------- ----------- | |
--------------------------------[*]
|
Une chose importante au sujet des requêtes du système est qu'elles
ressemblent à des petites fenêtres. Vous pourrez les faire bouger, les
envoyer derrière ou devant d'autres fenêtres/requêtes et les redimensionner.
5.2.2 Les requêtes d'application
C'est un type de requêtes qu'on peut ouvrir par programme. Elles
peuvent avoir une taille quelconque (limitée seulement par la taille
de l'écran) et pourront être aussi simples ou aussi compliquées que vous le voudrez.
Si vous voulez seulement une requête de type Oui/Non (Vrai/Faux),
vous pourrez appeler la fonction AutoRequest() et Intuition ouvrira la
requête et s'occupera du reste. Par ailleurs, si vous voulez une
requête plus sophistiquée, vous devrez déclarer et initialiser une
structure Requester avec vos spécifications et appeler ensuite la fonction Request().
Il est important de faire remarquer qu'on ne peut pas faire bouger,
redimensionner, etc. une requête d'application (naturellement, on pourra
toujours faire bouger et redimensionner la fenêtre où se trouve la
requête). Seules les requêtes du système et celles bien simples
ouvertes par la fonction AutoRequest se comportent comme des petites fenêtres.
Il y a aussi une autre différence importante. Lorsqu'on active une
requête d'application, l'utilisateur ne pourra plus sélectionner les
gadgets reliés à la fenêtre. La fenêtre est "gelée". Par exemple, essayez
l'exemple 4 (voir fin d'article) et vous vous apercevrez que vous ne pouvez plus sélectionner
le gadget de fermeture de la fenêtre tant que la requête est active.
Par contre, si on a activée une requête du système, l'utilisateur
pourra toujours cliquer sur le gadget de fermeture de la fenêtre et
Intuition enverra le message CLOSEWINDOW.
5.2.3 Les requêtes double-menu
Les requêtes double-menu (réagissant à un double-clic du bouton droit de la
souris) ressemblent aux requêtes d'application normales, si l'on excepte
qu'elles s'afficheront dès que - et seulement si - l'utilisateur clique deux
fois sur le bouton droit de la souris (bouton de menu). Pour créer une requête de ce
type, vous devrez déclarer et initialiser une structure Requester et
appeler ensuite la fonction SetDMRequest(). À partir de ce moment, chaque
fois que l'utilisateur cliquera deux fois sur le bouton droit de la
souris, la requête s'affichera à l'écran. Appelez la fonction
ClearDMRequest(), si vous ne voulez plus que l'utilisateur puisse avoir accès à la requête.
On ne peut mettre qu'une seule requête de ce type par fenêtre.
5.3 Le graphisme des requêtes
Vous pouvez représenter une requête de deux manières différentes.
Soit vous pouvez informer Intuition de ce que vous souhaitez - et Intuition
s'occupera de tout -, soit vous pouvez fournir à Intuition votre image (bitmap)
personnalisée (que vous aurez configurée vous-même).
Si vous souhaitez qu'Intuition dessine la requête à votre place,
il vous suffira de décider de la couleur de fond de la requête, de
déclarer et d'initialiser une ou plusieurs structures Border et IntuiText.
Si vous fournissez votre image personnalisée, Intuition ne dessinera
plus rien. En d'autres termes, tous les gadgets reliés à la requête
n'auront plus besoin de structures Border/IntuiText/Image du moment
qu'Intuition ne s'en occupera pas.
5.4 Le positionnement
On peut positionner une requête soit par rapport au coin supérieur
gauche de la fenêtre, soit par rapport à la position du pointeur. Si vous
souhaitez la positionner par rapport à la fenêtre, vous devrez tout
simplement mettre les variables LeftEdge et TopEdge à la valeur voulue.
Par contre, si vous souhaitez positionner la requête par rapport à
la position du pointeur, mettez à 1 le drapeau POINTREL et initialisez
RelLeft et RelTop aux valeurs voulues.
5.5 Les requêtes et les gadgets
Quand vous créez une requête, sauf si vous le faites en appelant la
fonction AutoRequest(), vous devrez lui relier au moins un gadget. Ces
gadgets travaillent exactement comme ceux qui sont reliés aux fenêtres,
mais en diffèrent sur deux points importants :
- Pour chaque gadget relié à une requête, on devra mettre à 1 le drapeau REQGADGET du champ GadgetType.
- Un gadget au moins devra pouvoir satisfaire à une demande,
ce qui veut dire qu'un gadget au moins, devra avoir son drapeau ENDGADGET du champ Activation mis à 1
(lorsqu'on sélectionnera un gadget avec son drapeau ENDGADGET validé, la requête aura une réponse en retour
et disparaîtra de l'écran).
Rappelez-vous que l'utilisateur devra toujours pouvoir avoir un moyen
sûr d'abandonner la requête sans rien déranger. On devra toujours
placer une "sortie par l'intermédiaire du gadget" dans la partie droite
de la requête. Voici un exemple :
---------------------------------------
| Requête du système ============[*][*]
---------------------------------------
| Voulez-vous vraiment quitter ? | |
| | |
| | |
| ------- ------- | |
| | Oui | | Non | | |
| ------- ------- | |
------------------------------------[*]
|
Remarquez que le bouton Oui/Vrai/Réessayer se trouve toujours à
gauche et que le bouton Non/Faux/Annuler est toujours à droite.
Important : assurez-vous que les gadgets se trouvent à l'intérieur de
la requête car Intuition n'opère aucune vérification des lignes de démarcation.
5.6 Les requêtes simples
Si vous voulez créer une requête simple avec une option Vrai/Faux
(ou seulement Faux), vous pourrez employer la fonction AutoRequest().
Vous donnerez à Intuition des informations sur l'aspect de la requête
(hauteur, texte, etc.) et Intuition prendra en charge tout le reste.
Elle ouvrira la requête, mettra le programme en attente et, dès
qu'on en aura fini, renverra au programme une valeur booléenne qui
l'informera sur la sélection faite par l'utilisateur. Si l'utilisateur
sélectionne le gadget de gauche (réponse affirmative), Intuition
retournera TRUE [VRAI], si l'utilisateur sélectionne le gadget de
droite (réponse négative), Intuition retournera FALSE [FAUX].
Exemple :
- resultat = AutoRequest( window, info_text, pos_text, neg_text, pos_IDCMP, neg_IDCMP, width, height );
- window : pointeur sur une fenêtre s'il y en a une, autrement NULL.
- info_text : pointeur sur une structure IntuiText contenant le "texte général".
- pos_text : pointeur sur une structure IntuiText contenant le "texte affirmatif". Par exemple "TRUE", "YES", "RETRY", etc. (optionnel).
- neg_text : pointeur sur une structure IntuiText contenant le "texte négatif". Par exemple "FALSE", "NO", "CANCEL", etc.
- pos_IDCMP : Les drapeaux IDCMP indispensables pour satisfaire à la condition du gadget "affirmatif" (le drapeau
RELVERIFY est déjà mis à 1).
- neg_IDCMP : les drapeaux IDCMP nécessaires pour satisfaire à la condition du gadget "négatif" (le drapeau RELVERIFY
est déjà mis à 1).
- width : largeur de la requête en pixels.
- height : hauteur de la requête en lignes.
5.7 L'ouverture d'une requête
Si, à la place d'une requête simple, vous souhaitez en employer une plus compliquée, vous devrez :
- Déclarer et initialiser une structure Requester répondant à vos besoins.
- Déclarer et initialiser les structures Gadget qui devront être reliées à la requête.
- Appeler la fonction Request() pour afficher la requête en tant que requête normale ou
appeler la fonction SetDMRequest() pour permettre à l'utilisateur de faire apparaître la
requête en tant que requête double-menu.
5.7.1 L'initialisation d'une requête
Si vous souhaitez employer une requête, il vous faudra déclarer et initialiser une structure Requester
qui ressemble à ceci :
struct Requester
{
struct Requester *OlderRequest;
SHORT LeftEdge, TopEdge;
SHORT Width, Height;
SHORT RelLeft, RelTop;
struct Gadget *ReqGadget;
struct Border *ReqBorder;
struct IntuiText *ReqText;
USHORT Flags;
UBYTE BackFill;
struct Layer *ReqLayer;
UBYTE ReqPad1[32];
struct BitMap *ImageBMap;
struct Window *RWindow;
UBYTE ReqPad2[36];
};
|
- OlderRequest : initialisé et géré par Intuition. Le mettre à la valeur NULL.
- LeftEdge, TopEdge : position de la requête par rapport au coin supérieur gauche de la fenêtre
(si le drapeau POINTREL n'est pas mis à 1).
- Width, Height : dimensions de la requête.
- RelLeft, RelTop : si le drapeau POINTREL est mis à 1, ces valeurs indiquent la position de la
requête par rapport au pointeur.
- ReqGadget : pointeur sur le premier gadget d'une liste chaînée. Rappelez-vous qu'il doit y avoir
au moins un gadget relié à la requête, avec son drapeau ENDGADGET mis à 1.
- ReqBorder : pointeur sur une structure Border employée pour représenter la requête.
- ReqText : pointeur sur une structure IntuiText employée pour "imprimer" le texte de la requête.
- Flags : il y a deux drapeaux que vous devrez mettre à 1 :
- POINTREL : mettez à 1 ce drapeau, si vous souhaitez positionner la requête par rapport
au pointeur. Il fixe RelLeft et RelTop à l'endroit voulu.
- PREDRAWN : si vous fournissez votre propre image personnalisée, mettez ce drapeau à 1,
de la sorte Intuition n'essaiera pas de dessiner quelque chose.
Intuition met à 1 les drapeaux suivants :
- REQACTIVE : ce drapeau est mis à 1 lorsqu'on active la requête et il est mis à 0 lorsqu'on ferme la
requête (on le désactive).
- REQOFFWINDOW : ce drapeau est mis à 1 lorsque la requête est active et se trouve à l'extérieur de la fenêtre
(l'utilisateur a peut-être diminué la taille de la fenêtre de sorte que celle-ci est bien plus petite
que vous ne l'auriez pensé).
- SYSREQUEST : ce drapeau est mis à 1 lorsque la requête est du type requête du système.
- BackFill : registre de couleur employé pour colorier la requête avant d'y dessiner quelque chose.
Par exemple, pour dessiner des graphismes sur un fond orange, vous mettrez à la valeur 3
le champ BackFill (l'orange est l'une des couleurs du WorkBench par défaut).
- ReqLayer : pointeur sur la structure Layer de cette requête. Initialisé et géré par Intuition.
Le mettre à la valeur NULL.
- ReqPad1 : initialisé et géré par Intuition. Le mettre à la valeur NULL (employé par le système).
- ImageBMap : si l'attribut PREDRAWN est mis à 1, ce champ devra contenir un pointeur sur une image
personnalisée, autrement le mettre à la valeur NULL.
- RWindow : initialisé et géré par Intuition. Le mettre à la valeur NULL (employé par le système, il
pointe sur la fenêtre à laquelle est reliée cette requête).
- ReqPad2 : initialisé et géré par Intuition. Le mettre à la valeur NULL (employé par le système).
Voici un exemple d'initialisation d'une structure Requester :
struct Requester my_requester=
{
NULL, /* OlderRequester, utilisé par Intuition. */
40, 20, /* LeftEdge, TopEdge, valeur X du point de */
/* (40 pixels), valeur Y du point de départ */
/* (20 lignes). */
320, 100, /* Width, Height, largeur 320 pixels, */
/* hauteur 100 lignes. */
0, 0, /* RelLeft, RelTop, étant donné que le */
/* drapeau POINTREL n'est pas mis à 1, */
/* Intuition ignorera ces valeurs. */
&my_first_gadget, /* ReqGadget, pointeur sur le premier */
/* gadget. */
&my_border, /* ReqBorder, pointeur sur une structure */
/* Border. */
&my_text, /* ReqText, pointeur sur une structure */
/* IntuiText. */
NULL, /* Flags, aucun drapeau n'est mis à 1. */
3, /* BackFill, dessinera tout sur un fond */
/* orange. */
NULL, /* ReqLayer, utilisé par Intuition. */
/* Le mettre à la valeur NULL. */
NULL, /* ReqPad1, utilisé par Intuition. */
/* Le mettre à la valeur NULL. */
NULL, /* ImageBMap, aucune 'Bitmap' configurée */
/* à l'avance. Mettez-le à la valeur NULL */
/* (on n'a pas mis à 1 le drapeau PREDRAWN) */
NULL, /* RWindow, utilisé par Intuition. */
/* Le mettre à la valeur NULL. */
NULL /* ReqPad2, utilisé par Intuition. */
/* Le mettre à la valeur NULL. */
};
|
Si vous souhaitiez employer votre propre image personnalisée et
configurée à l'avance, au lieu de laisser dessiner la requête par
Intuition, il vous faudrait :
- Mettre à 1 le drapeau PREDRAWN dans le champ Flags.
- Fixer ImageBMap pour qu'il pointe sur votre structure BitMap.
Rappelez-vous qu'à partir de cet instant Intuition ne dessinera plus
rien à votre place. Les variables ReqBorder, ReqText et BackFill seront
ignorées et par conséquent devront être mises à la valeur NULL.
De plus, Intuition ne s'occupera plus du dessin des gadgets reliés
à la requête. Il est donc important qu'on exécute avec soin le rendu
de l'image et que l'emplacement des graphismes corresponde à
l'endroit où se trouveront les gadgets, etc.
5.7.2 Comment activer une requête d'application
Si vous avez déclaré et initialisé une structure Requester, vous
n'aurez plus qu'à appeler la fonction Request() pour l'activer.
Exemple :
- resultat = Request( my_requester, my_window );
- my_requester : pointeur sur une structure Requester.
- my_window : pointeur sur la structure Window à laquelle la requête devra être reliée.
- resultat : valeur booléenne en retour. Si Intuition a pu ouvrir avec succès la requête,
la fonction retournera TRUE, autrement (quelque chose n'a pas fonctionné : mémoire insuffisante, etc.)
la fonction retournera FALSE.
Par contre, si vous souhaitez que la requête soit une requête double-menu, vous devrez appeler la fonction
SetDMRequest() qui permettra à l'utilisateur d'activer la requête en cliquant deux fois sur le bouton droit de
la souris.
Exemple :
- resultat = SetDMRequest( my_window, my_requester );
- my_window : pointeur sur la structure Window à laquelle la requête devra être reliée.
- my_requester : pointeur sur une structure Requester.
- resultat : valeur booléenne en retour. Si Intuition a pu ouvrir avec succès la requête,
la fonction retournera TRUE, autrement (quelque chose n'a pas fonctionné : mémoire insuffisante ou la
requête en question est déjà reliée à la fenêtre, etc.) la fonction retournera FALSE.
Après avoir appelé la fonction SetDMRequest() avec succès, vous pourrez
enlever à l'utilisateur la possibilité d'ouvrir la requête, en appelant la fonction ClearDMRequest().
Exemple :
- resultat = ClearDMRequest( my_window );
- my_window : pointeur sur la structure Window à laquelle la requête est reliée.
- resultat : si la fonction a pu empêcher l'utilisateur d'activer cette requête, elle retournera TRUE,
autrement (quelque chose n'a pas fonctionné : la requête est en service, etc.) elle retournera FALSE.
5.8 Les drapeaux IDCMP
Il y a trois drapeaux destinés tout spécialement aux requêtes. Lorsqu'une requête est activée, vous pourrez -
si vous le souhaitez - recevoir un message qui vous dira qu'on a activé une requête. Ceci
est particulièrement utile si vous utilisez des requêtes double-menu car ce message est le seul moyen
de savoir si la requête a été ouverte.
Si vous voulez recevoir un message à chaque fois qu'on active une requête, vous devrez mettre à 1 le drapeau
REQSET du champ IDCMPFlags de la structure NewWindow. Mettez à 1 le drapeau REQCLEAR si vous voulez
recevoir un message à chaque fois qu'on désactive une requête. Voir l'exemple 5 pour plus de détails.
Il y a aussi un drapeau IDCMP spécial qui s'appelle REQVERIFY. Si vous mettez à 1 ce drapeau du champ
IDCMPFlags de la structure NewWindow, votre programme recevra un message à chaque fois que l'utilisateur
essaiera d'activer une requête double-menu. Ce qui est
intéressant avec ce drapeau c'est que la requête ne sera pas ouverte tant que votre programme n'aura
pas répondu par ReplyMsg(). Par conséquent, votre programme pourra terminer ce qu'il doit faire (exemple :
terminer de dessiner quelque chose) avant d'afficher la requête et, dès qu'il sera prêt, il pourra
répondre et activer la requête. Voir l'exemple 6 pour plus de renseignements.
5.9 Les fonctions
Voici quelques fonctions couramment employées :
AutoRequest()
Cette fonction ouvre une requête simple. Intuition l'activera automatiquement et fera attention à la
réponse de l'utilisateur. Elle retournera TRUE si l'utilisateur a sélectionné le gadget de
gauche et FALSE s'il a sélectionné celui de droite.
- Synopsis : resultat = AutoRequest( my_window, info_txt, pos_txt, neg_txt, pos_IDCMP, neg_IDCMP, width, height );
- my_window : (struct Window *). Pointeur sur une fenêtre s'il y en a une, autrement NULL.
- info_txt : (struct IntuiText *). Pointeur sur une structure IntuiText contenant le "texte général".
- pos_txt : (struct IntuiText *). Pointeur sur une structure IntuiText contenant le "texte affirmatif".
Par exemple "TRUE", "YES", "RETRY", etc. (optionnel).
- neg_txt : (struct IntuiText *). Pointeur sur une structure IntuiText contenant le "texte négatif". Par
exemple "FALSE", "NO", "CANCEL", etc.
- pos_IDCMP : (long). Drapeaux IDCMP qui satisfont à la condition du gadget "affirmatif" (le drapeau
RELVERIFY est déjà activé).
- neg_IDCMP : (long). Drapeaux IDCMP qui satisfont à la condition du gadget "négatif" (le drapeau RELVERIFY
est déjà activé).
- width : (long). Largeur de la requête en pixels.
- height : (long). Hauteur de la requête en lignes.
- resultat : (long). Valeur booléenne. La fonction retournera TRUE si on a sélectionné le gadget "affirmatif"
et FALSE si on a sélectionné le gadget "négatif".
Request()
Cette fonction active une requête reliée à une fenêtre.
- Synopsis : resultat = Request( my_requester, my_window );
- my_requester : (struct Requester *). Pointeur sur une structure Requester.
- my_window : (struct Window *). Pointeur sur une structure Window à laquelle on devra relier la requête.
- resultat : (long). Valeur booléenne en retour. Si Intuition a pu ouvrir la requête avec succès, la
fonction retournera TRUE, autrement (quelque chose n'a pas fonctionné : mémoire insuffisante, etc.) la
fonction retournera FALSE.
EndRequest()
Cette fonction désactive une requête qui a été activée.
- Synopsis : EndRequest( my_requester, my_window );
- my_requester : (struct Requester *). Pointeur sur la structure Requester qu'on devra supprimer.
- my_window : (struct Window *). Pointeur sur la structure Window à laquelle on avait relié la requête.
SetDMRequest()
Cette fonction permet à l'utilisateur d'activer une requête double-menu,
lorsqu'on clique deux fois sur ce même bouton.
- Synopsis : resultat = SetDMRequest( window, requester );
- window : (struct Window *). Pointeur sur une structure Window à laquelle on devra relier la requête.
- requester : (struct Requester *). Pointeur sur une structure Requester.
- resultat : (long). Valeur booléenne en retour. Si Intuition a pu ouvrir la requête avec succès, la
fonction retournera TRUE, autrement (quelque chose n'a pas fonctionné : mémoire insuffisante ou une requête
doube-menu était déjà reliée à cette fenêtre, etc.) la fonction retournera FALSE.
ClearDMRequest()
Cette fonction désactive une requête double-menu. L'utilisateur
ne pourra plus ouvrir cette requête.
- Synopsis : resultat = ClearDMRequest( my_window );
- my_window : (struct Window *). Pointeur sur une structure Window à laquelle on a relié la requête.
Le pointeur sur DMRequest de la structure Window est mis à NULL.
- resultat : (long). Si la fonction a pu désactiver la requête double-menu,
elle retournera TRUE, autrement (quelque chose n'a pas fonctionné : la requête est en service, etc.)
elle retournera FALSE.
5.10 Descriptif des exemples
Voici des exemples
(dans le répertoire "Amiga_C_Manual/5.Requesters") avec des requêtes :
Exemple 1
Cet exemple ouvre une requête simple en appelant la fonction AutoRequest. Il affiche le message "This is a
very simple request!" ; un seul gadget lui est relié (dans la partie droite de la requête) avec le texte "OK".
Exemple 2
Comme avec l'exemple 1, si l'on excepte que la requête affiche le message "Do you really want to quit?"
et permet à l'utilisateur de choisir entre "Yes" et "No". Le programme continuera à ouvrir la requête
tant que l'utilisateur n'aura pas choisi "Yes".
Exemple 3
Comme avec l'exemple 1, si l'on excepte que la requête affiche le message "Insert a disk in any drive!" et
permet à l'utilisateur de choisir entre "Yes" et "No". Le programme continuera à ouvrir la requête tant que
l'utilisateur n'aura pas choisi "Yes" ou qu'il n'aura pas inséré une disquette dans le lecteur.
Exemple 4
Ce programme ouvrira une fenêtre normale qui sera reliée à l'écran du Workbench. La fenêtre utilisera
tous les gadgets du système et disparaîtra lorsque l'utilisateur aura sélectionné le gadget de
fermeture de fenêtre du système. À l'intérieur de la fenêtre, nous avons activé une requête d'application
et nous lui avons relié un gadget. On satisfera à la demande de la requête dès que l'utilisateur aura
sélectionné ce gadget : à ce moment la requête sera désactivée et on pourra fermer la fenêtre.
Exemple 5
Comme avec l'exemple 4, si l'on excepte que la requête sera activée dès que l'utilisateur cliquera à deux
reprises sur le bouton droit de la souris. Cet exemple vous montre comment créer une requête double-menu
et comment contrôler les drapeaux IDCMP REQSET et REQCLEAR.
Exemple 6
Comme avec l'exemple 5, si l'on excepte que lorsque l'utilisateur cliquera à deux reprises sur le bouton droit
de la souris, nous recevrons un message REQVERIFY et que la requête sera activée seulement quand nous aurons
répondu au message. Cet exemple montre l'utilisation du drapeau REQVERIFY.
Exemple 7
Ce programme ouvrira une fenêtre normale qui sera reliée à l'écran du Workbench. La fenêtre utilisera tous
les gadgets du système et disparaîtra seulement lorsque l'utilisateur aura sélectionné le gadget
de fermeture de fenêtre du système. À l'intérieur de la fenêtre, nous avons activé une requête d'application
et nous lui avons relié trois gadgets. Deux de ceux-ci sont des gadgets booléens ("OK" et "Cancel"),
le troisième est un gadget de chaîne de caractères.
Exemple 8
Comme avec l'exemple 7, mais ici nous avons mis un gadget entier.
Exemple 9
Comme avec l'exemple 8, mais ici nous avons mis un gadget proportionnel.
|