Obligement - L'Amiga au maximum

Mercredi 19 décembre 2018 - 17:32  

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 - Structure Menu
(Article écrit par Max et extrait d'Amiga News Tech - juin 1989)


Initialiser un menu est une chose assez harassante à mettre en oeuvre. Non pas que cela pose des difficultés particulières, mais il faut y passer un certain temps, pour ne pas dire un temps certain. Nous allons voir maintenant qu'une structure Menu complète prend beaucoup de place dans un listing.

Composition de la structure Menu

Une structure Menu est donc composée de 28 octets :

Offset Signification
0 Prochain Menu
4 Position X
6 Position Y
8 Largeur
10 Hauteur
12 MenuFlag
14 Pointeur sur le texte
18 Pointeur sur le 1er pont
20 Quatre mots réservés au système

Le premier mot long est l'adresse de la prochaine structure Menu, dans la barre de menus. Le nombre de structures possibles n'est limité que par la largeur de l'écran. Si aucun autre menu ne suit, ce mot doit être mis à zéro.

Les quatre mots suivants (position et dimension) ne devraient poser aucun problème, si l'on se rappelle que les valeurs sont exprimées en pixels.

Le mot intitulé "MenuFlag" ne peut prendre que deux valeurs. Il indique si le menu en question peut être déroulé (MenuFlag = 1) ou non (MenuFlag = 0). Un menu non sélectionnable se reconnaît au fait que toutes ses entrées apparaissent en grisé. Le mot long suivant est l'adresse du texte-titre de notre menu.

On trouve ensuite un autre mot long, qui est un pointeur sur la structure du premier point de notre menu (un point de menu n'étant rien d'autre que l'une des options sélectionnables dans ledit menu). Quatre mots viennent enfin conclure cette structure, qui sont réservés pour Intuition.

Les entrées

Mais tout cela ne suffit bien entendu pas. En plus des titres de menus eux-mêmes (nous grouperons tous les textes en fin de listing), il faut définir leurs différentes entrées. Là encore, des structures particulières sont à initialiser. Nous appellerons cette structure MenuPoint, qui ne devra bien sûr pas être confondue avec la structure Menu évoquée ci-dessus. Cette structure MenuPoint est définie de la manière suivante :

Offset Signification
0 Prochain point de menu
4 Position X
6 Position Y
8 Largeur
10 Hauteur
12 MenuPointFlag
14 Exclude
18 Pointeur sur le texte
22 Pointeur HighImage
26 ShortCut
28 Pointeur sur le sous-menu
32 Un mot long réservé

Détaillons maintenant cette structure. Le premier mot long est un pointeur sur la structure du prochain point dans le menu. Si le point de menu actuel est le dernier, il doit être mis à 0.

On trouve encore une fois une indication de la position de notre point de menu. Par rapport à la boîte entourant tous les points du menu et exprimée en pixels.

Le mot "MenuPointFlags" permet de définir les particularités de notre point de menu. Chaque bit a une signification particulière :

Bit/Nom Signification
0 - CHECKIT Le point sera crocheté s'il est sélectionné
1 - ITEMTEXT Le point de menu est du texte
2 - COMMSEQ La sélection est également possible avec Amiga+Touche
3 - MENUTOGGLE Crochet activé puis enlevé
4 - ITEMENABLED Point du menu sélectionnable
6 - HIGHCOMP Point inversé si sélectionné
7 - HIGHBOX Point encadré si sélectionné
8 - CHECKED Point déjà crocheté

Intuition offre la possibilité de désélectionner un point de menu particulier, lors de la sélection d'un autre point de menu. Le mot long qui suit est donc un pointeur sur le point de menu à désélectionner dans ce cas, ou bien 0 si aucune exclusion ne doit avoir lieu. On trouve ensuite un pointeur sur le texte, qui composera ce point de menu.

Il est également possible, lors de la sélection du point de menu, de remplacer son texte par un autre texte, ou bien par un dessin. Le mot long suivant est un pointeur sur le texte, ou le dessin de remplacement. L'octet suivant contient le code ASCII de la touche qui, combinée avec la touche Amiga-droite, permettra d'appeler le point de menu, sans dérouler le menu lui-même (on appelle cela un raccourci clavier). Il est suivi d'un octet de remplissage, afin que l'adresse suivante soit paire.

Vient ensuite un mot long pointant sur le sous-menu qui se déroulera par la sélection de ce point. Si aucun sous-menu ne doit apparaître, ce pointeur doit être nul. Et pour terminer, on trouve un mot long qu'Intuition utilisera de manière transparente au programme.

Tous les points de menu sont bâtis d'après cette structure MenuPoint. Les différents points d'un sous-menu sont, eux aussi, bâtis d'après cette structure.

IntuiText

Il nous reste toutefois une dernière structure à étudier, la structure IntuiText. Tous les textes présents dans un menu, à l'exception du titre des menus eux-mêmes, sont bâtis d'après une structure IntuiText. En effet, je vous rappelle qu'un point de menu n'est rien d'autre qu'une "boîte", dans laquelle viendra s'inscrire un texte particulier. La structure IntuiText ne fait que 16 octets et est conçue comme suit :

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

Nous avons déjà vu, à l'occasion des structures NewScreen et NewWindow, la signification de Detail Pen, Block Pen et Fonte. La position est là encore exprimée en pixels et par rapport au coin supérieur gauche de la boîte contenant le texte, autrement dit, le point de menu.

Nous trouvons ensuite un mot long, pointeur sur le texte lui-même. Une structure IntuiText étant également obligatoire pour, par exemple, les requêtes, il est possible qu'il y ait plusieurs lignes de textes à afficher, d'où la présence du dernier mot long. Toutefois, dans le cas de menu, il est évident qu'une seule ligne de texte devra apparaître ; ce pointeur sera donc fixé sur 0.

Ben dis donc !

Voilà qui clôt notre étude des différentes structures associées à un menu. Pour illustrer tout cela, nous allons mettre en place une barre de menus qui comportera deux titres ("Titre1" et "Titre2"). Le premier titre comportera trois points ("Point1_1" à "Point1_3"), tandis que le second en comportera cinq ("Point1_1" à "Point1_5"). Le troisième point de ce second titre provoquera l'apparition d'un sous-menu, comportant lui-même deux points ("Point2_3_1" et "Point2_3_2"). En voici une représentation "graphique" :

Menu1        Menu2
ùPoint 1_1   ùPoint 2_1
ùPoint 1_2   ùPoint 2_2
ùPoint 1_3   ùPoint 2_3--ùPoint 2_3_1
             ùPoint 2_4--ùPoint 2_3_2
             ùPoint 2_5

Étudiez donc ce menu et, en vous aidant des routines de mise en place et de fermeture d'un menu, amusez-vous à le modifier à votre guise pour le mieux comprendre. Je suis conscient que les explications que j'ai pu vous donner ici ne soient pas forcément très claires dès le premier abord. N'oubliez pas que c'est en se mouchant que l'on devient moucheron...

Assembleur
Assembleur
Assembleur


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