Obligement - L'Amiga au maximum

Mardi 14 août 2018 - 21:56  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · Liens
 · Liste jeux Amiga
 · Quizz
 · Téléchargements
 · Trucs et astuces


Articles

 · Actualité (récente)
 · Actualité (archive)
 · Comparatifs
 · Dossiers
 · Entrevues
 · Matériel (tests)
 · Matériel (bidouilles)
 · Points de vue
 · En pratique
 · Programmation
 · Reportages
 · Tests de jeux
 · Tests de logiciels
 · Tests de compilations
 · Articles divers

 · Articles in english
 · Articles en d'autres langues


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Logiciels
 · Jeux
 · Scène démo
 · Divers


Jeux Amiga

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


Trucs et astuces

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


Glossaire

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


Partenaires

Annuaire Amiga

Amedia Computer

Relec

Hit Parade


Contact

David Brunet

Courriel

 


Programmation : Assembleur - Requêtes
(Article écrit par Max et extrait d'Amiga News Tech - juillet 1989)


Pour autant que je me rappelle, nous avons vu jusqu'ici comment mettre en place et gérer les écrans, les fenêtres et les menus. Ce qui n'est déjà pas mal du tout et devrait permettre la réalisation de petits programmes, aussi sympathiques que conviviaux. Il nous reste pourtant encore quelques petites choses à voir pour compléter notre étude de l'environnement Intuition, je pense plus particulièrement aux requêtes.

Requêtes

Vous connaissez tous les "requesters" (fenêtres de requête) : sur d'autres machines, que je ne nommerai pas pour ne pas leur faire de tort, on les nomme Dialog Box, soit dans la langue de Molière, boîte de dialogue. Il s'agit de fenêtres particulières, dans lesquelles le programme attend une entrée de la part de l'utilisateur, entrée qui peut aussi bien être textuelle que proportionnelle. Le programme "Préférences" par exemple, n'est qu'une immense fenêtre de requête à lui tout seul.

Comment pouvons-nous programmer nous-même de telles requêtes ? Encore une fois, Intuition est la réponse à notre problème, puisqu'il nous offre la fonction AutoRequest (offset -348), qui permet l'affichage et la gestion automatique des requêtes. Il existe d'autres fonctions telles InitRequester, Request ou encore EndRequest dont on pourrait également se servir, mais - pour une fois en informatique, c'est un exploit ! - pourquoi faire compliqué quand on peut faire simple ?

Cette fonction, AutoRequest, attend en paramètre dans a0, le pointeur sur la structure Window de la fenêtre de notre requête (celui que nous avions sauvegardé juste après l'ouverture de la fenêtre dans WinHandle), dans a1, un pointeur sur la structure IntuiText du message qui doit figurer dans la requête, dans a2 et a3 les deux pointeurs sur les structures IntuiText des deux boutons possibles, dans d0 et d1 les drapeaux IDCMP de ces deux boutons, et pour terminer, dans d2 et d3 les largeur et hauteur totales de la requête.

La structure IntuiText, nous l'avons déjà rencontrée le mois dernier lors de l'étude d'une structure Menu. La voici tout de même encore détaillée, par mesure de sécurité :

Offset Signification
0 Detail Pen
1 Block Pen
2 Write Mode
4 Position X
6 Position Y
10 Police à utiliser
14 Pointeur sur le texte
18 Pointeur sur le prochain texte

Les Detail et Block Pen, vous les connaissez, on les a déjà rencontrés assez souvent ; notez simplement que dans le cas d'un IntuiText, le Block n'est pas pris en compte. WriteMode ne peut, à ma connaissance, prendre qu'une seule valeur intéressante (en dehors de la valeur nulle, bien sûr) : 4, qui indique que le texte devra être écrit en vidéo inverse. Suit donc un octet de remplissage, afin de garantir la parité de ce qui suit. Position X et Position Y portent bien leur nom, sont exprimées en pixels et par rapport au coin supérieur gauche de la boîte contenant le texte. Le pointeur sur la police à utiliser est du même type que ceux rencontrés dans les structures NewScreen et NewWindow et doit donc être nul, si l'on désire la police standard. Finalement, on trouve un pointeur sur la chaîne à afficher (au format C, c'est-à-dire terminée par un octet nul), ainsi qu'un pointeur sur le prochain texte (doit être nul si c'est le dernier).

Cela suffit amplement pour demander à Intuition de bâtir notre requête. Ce que nous allons bien entendu nous empresser de faire :

assembleur

Et que se passera-t-il donc lorsque Intuition nous rendra la main ? Eh bien tout simplement, le registre d0 contiendra le numéro du bouton qui a été choisi (0 pour le droit et 1 pour le gauche). C'est tout.

Peut mieux faire

Certes, c'était bien beau, mais je parlais tout à l'heure de Préférences et, si ma mémoire est bonne, on y trouve beaucoup plus qu'un message et deux boutons : entrées de textes, réglage des couleurs par déplacement de potentiomètres, etc. il serait intéressant que nous puissions, nous aussi, utiliser de tels gadgets... Pas de panique, réponds-je, on y arrive.

Nous avons déjà vu la notion de gadgets lors des descriptions des structures NewScreen et NewWindow. Mais il ne s'agissait jusqu'à présent que de gadgets propres au système, comme la barre de déplacement d'une fenêtre, les boutons de fermeture ou d'empilement. Il nous est heureusement tout à fait possible, moyennant quelques petits efforts il est vrai, de créer nos propres gadgets. Intuition, qui décidément n'est pas avare pour deux sous, offre à ce sujet toute une foule de possibilités.

Il convient toutefois de distinguer quatre types de gadgets :
  • Les booléens, qui ne peuvent prendre que deux valeurs (Oui et Non, plus généralement Allumé et Éteint).
  • Les chaînes, qui servent à entrer... des chaînes de caractères, oui.
  • Les numériques, qui servent à entrer... des nombres.
  • Et finalement les "proportionnels", c'est-à-dire ceux que l'on déplace à la souris pour fixer une valeur (taux de RVB dans une couleur, ascenseur des fenêtres, etc.).
Comme chaque élément d'Intuition, un gadget est décrit par une structure. Dans le cas présent, cette structure comporte 15 entrées et son pointeur est placé dans la structure de fenêtre, dans laquelle le gadget devra apparaître. Voici donc le détail d'une structure Gadget :

Offset Signification
0 Prochain Gadget
4 Position X
6 Position Y
8 Largeur de la HitBox
10 Hauteur de la HitBox
12 Gadget Flags
14 Activation Drapeaux
16 Gadget Type
18 Gadget Image
22 Gadget Select
26 Gadget Text
30 Exclude
34 Special Info
38 ID
40 UserData

Le premier mot long de cette structure pointe sur le prochain gadget à afficher dans la même fenêtre. S'il n'y en a pas d'autre, il faut le mettre à 0. On trouve ensuite, comme c'est devenu une habitude, les coordonnées en X et en Y du gadget, sachant qu'elles peuvent être exprimées de plusieurs manières différentes (absolues ou relatives). Viennent ensuite la largeur et la hauteur de ce que l'on appelle la "HitBox", c'est-à-dire le rectangle de validité du gadget. Il n'en est effet pas obligatoire du tout que notre gadget entier soit sélectionnable, seule sera prise en compte la partie du gadget incluse dans la "HitBox".

Le prochain mot mérite un paragraphe à lui tout seul ; il définit certains paramètres de notre gadget. Les différents bits fixent ses propriétés. Les deux premiers bits (0 et 1) forment une valeur comprise entre 0 et 3, qui décide de ce qui doit advenir du gadget lorsqu'il est sélectionné :

Valeur Action
0 Gadget inversé
1 Gadget encadré
2 Changement d'image
3 Rien ne se passe

Le bit 2, s'il est mis, indique que le gadget est composé d'une image. Le bit 3 détermine si la position du gadget, celle donnée dans sa structure, se réfère au bord supérieur ou au bord inférieur de la fenêtre. "0" indique le bord supérieur, "1" le bord inférieur. Le bit 4 joue le même rôle que le précédent, mais en ce qui concerne les bords droite et gauche de la fenêtre. Le bit 5 joue, lui aussi, le même rôle, mais concernant cette fois-ci la largeur de la "HitBox". Idem le bit 6, mais pour la hauteur de la "HitBox". Le bit 7, s'il est mis, a pour effet d'activer le gadget dès l'ouverture de la fenêtre, dans laquelle il se trouve. Le bit 8 détermine enfin, si le gadget peut ou non être sélectionné.

Continuons notre étude la structure Gadget. Nous trouvons encore un mot de drapeaux, méritant lui aussi un paragraphe particulier. Il s'agit de l'Activation Flags, dont, encore une fois, chaque bit a une signification particulière.

Bit n° Valeur Nom
0 1 RELVERIFY
1 2 GADGIMMEDIATE
2 4 ENDGADGET
3 8 FOLLOWMOUSE
4 $10 RIGHTBORDER
5 $20 LEFTBORDER
6 $40 TOPBORDER
7 $80 BOTTOMBORDER
8 $100 TOGGLESELECT
9 $200 STRINGCENTER
10 $400 STRINGRIGHT
11 $800 LONGINT
12 $1000 ALTKEYMAP

RELVERIFY et GADGETIMMEDIATE ont une signification opposée : si RELVERIFY est mis, le gadget ne sera réellement sélectionné que lorsque le bouton gauche de la souris aura été relâché ; si, au contraire, GADGETIMMEDIATE est mis, le gadget sera activé dès le clic de la souris, sans attendre le relâchement du bouton. ENDGADGET permet s'il est mis, que la sélection du gadget provoque la fermeture automatique de la requête dans laquelle il se trouve. Ceci est très pratique pour les boutons du style "Confirmer" ou "Annuler".

FOLLOWMOUSE fait en sorte qu'Intuition communiquera en permanence au programme les coordonnées de la souris, à partir du moment où le gadget sera activé, et ce, jusqu'à ce qu'il soit désactivé. Cela permet, en corrigeant au fur et à mesure la position du gadget, de le déplacer avec la souris. Les BORDER ont pour effet d'adapter la taille du gadget au Border en cours. Nous y reviendrons lors de l'étude des Borders. TOGGLESELECT inverse l'état de gadget lors de chaque clic ; de ON, il devient OFF et vice-versa.

STRINGCENTER et STRINGRIGHT indiquent, dans le cas d'un gadget de chaîne, si celle-ci doit être centrée ou justifiée à droite. Par défaut (STRINGCENTER et STRINGRIGHT sont à 0), la chaîne est alignée à gauche. LONGINT transforme l'entrée réalisée dans un gadget de chaîne, en un nombre entier. Et finalement ALTKEYMAP indique si une définition de clavier particulière (SetMap) doit être utilisée pour les gadgets de chaîne.

Suite au prochain numéro

Bon, c'est pas que je m'ennuie, mais il se fait tard et la place devient de plus en plus rare. Désolé de vous quitter comme ça, en si bon chemin, mais je me vois obligé de remettre au mois prochain la suite de cette fastidieuse étude de la structure Gadget.


[Retour en haut] / [Retour aux articles] [Article précédent] / [Article suivant]