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 : GFA Basic - Intuition
(Article écrit par Denis Obriot et extrait d'Amiga News Tech - décembre 1989)
|
|
Le GFA Basic possède une liste impressionnante d'instructions permettant une utilisation aisée des
possibilités d'Intuition (la partie du système d'exploitation chargée de gérer écrans, fenêtres,
requêtes, menus et gadgets). Seule l'utilisation des gadgets n'est pas directement permise par ce langage.
Pourtant, tous les programmes du commerce utilisent abondamment ce moyen simple et pratique de communiquer avec
l'ordinateur. Il serait de fait très intéressant de posséder des routines qui permettraient d'utiliser facilement
les gadgets sous GFA Basic.
Gadget ?
Pour donner une définition simple du gadget, nous pouvons dire qu'il s'agit d'une zone d'écran particulière pouvant
être actionnée par la souris et envoyant dans ce cas un message au programme, par l'intermédiaire d'Intuition.
Comme presque tous les éléments du système d'exploitation de l'Amiga, un gadget se définit dans une structure
directement issue du langage C :
Quelques explications pour ceux qui ne sont pas familiarisés avec le langage C :
- STRUCT : zone de mémoire organisée qui permet, par référence a son seul nom,
de manipuler un ensemble de variables de types très différents.
- APTR : adresse mémoire de l'Amiga (c'est ce qu'on appelle un "pointeur" en C et en Pascal).
- LONG : variable de type "entier" stockée sur 4 octets.
- SHORT : variable de type "entier" stockée sur 2 octets.
- USHORT : variable de type "entier non signé" stockée sur 2 octets.
Voilà pour les définitions préliminaires. Et maintenant, au travail !
La procédure
Nous trouvons ci-après le listing de la procédure qui nous servira à construire
aisément une structure Gadget en GFA Basic. Après avoir tapé cette procédure dans
l'éditeur du GFA, sauvez-la sous forme de bloc, ce qui vous permettra par la
suite de l'incorporer facilement dans vos programmes, sans avoir besoin de la retaper à chaque fois.
Les commentaires correspondent aux membres de la structure C.
La première ligne de la procédure réserve la mémoire nécessaire à la définition de la
structure. La fonction GFA "MALLOC()" alloue une zone de mémoire de la longueur et du
type spécifiés (voir le manuel du GFA, page 46). Ici, nous demandons 44 octets de
mémoire Fast (&H4 réserve la mémoire en dehors de la mémoire Chip : à noter pour les
Amiga avec moins d'un méga de mémoire, qu'il est nécessaire d'indiquer &H1 (NDLR : ou mieux,
&H5 qui demande en priorité de la mémoire Fast et au cas où il n'y en a pas suffisamment,
de la mémoire Chip)).
Nous récupérons l'adresse du début de cette zone dans la variable "gadget%".
Si celle-ci vaut zéro, c'est qu'il n'y a pas assez de mémoire disponible dans l'Amiga.
Sinon, grâce aux fonctions de manipulation de la mémoire qu'offre le GFA,
nous remplissons la structure avec les valeurs passées en arguments à la procédure.
Pour finir, la fonction "AddGadget()" de la bibliothèque Intuition ajoute le gadget dans
la liste des gadgets de la fenêtre voulue (celle-ci est indiquée par son adresse récupérée
dans la ligne précédente).
Rien de tel qu'un bon exemple pour bien comprendre. Pour commencer, nous allons définir
un gadget du type le plus simple : un gadget booléen (c'est-à-dire ne pouvant avoir que
deux états, ON ou OFF). L'instruction GFA se présente ainsi :
gadget (100,100,50,50,0,2,1,0,0,1,0,gadget1%)
|
- Les quatre premières valeurs (100,100,50,50) représentent les coordonnées du
coin supérieur gauche ainsi que la largeur et la hauteur de la zone de sélection du gadget.
- Les trois valeurs suivantes (0,2,1) définissent les caractéristiques du gadget (voir plus bas).
- Les deux zéros suivants sont en fait des pointeurs de type NULL, car ce type de gadget ne
se sert pas des informations qu'ils représentent.
- Le "1" représente le numéro d'identification du gadget (utilisé par Intuition uniquement
pour communiquer quel gadget a été sélectionné). Vous pouvez en fait lui donner la valeur
que vous voulez.
- "gadget1%" est la variable dans laquelle nous récupérons l'adresse de la structure Gadget ainsi définie.
Les trois valeurs définissant les caractéristiques du gadget méritent quelques explications.
En les prenant dans l'ordre :
Flags (drapeaux) détermine la façon de rendre compte à l'écran de la sélection du gadget :
- 0 : inversion vidéo de la zone de sélection.
- 1 : tracé d'un rectangle autour de la zone de sélection.
- 2 : affichage d'une image de sélection.
- 3 : pas d'action à l'écran.
Ce drapeau peut prendre d'autres valeurs que nous verrons plus tard.
Activation définit la méthode de sélection autorisée pour ce gadget.
- 1 : la souris doit encore pointer la zone de sélection quand le bouton est relâché.
- 2 : Intuition prévient immédiatement, sans attendre que le bouton soit relâché.
- 4 : indique que ce gadget, une fois sélectionné, termine la requête à laquelle il est rattaché.
- 8 : Intuition communiquera tous les déplacements de la souris tant que le gadget sera sélectionné.
- 256 : le gadget sera alternativement activé puis désactivé.
On peut combiner plusieurs caractéristiques par un "OR" entre les valeurs, par exemple : "8 OR 256".
Type définit le type du gadget :
- 1 : gadget booléen.
- 2 : gadget proportionnel (on dit aussi "ascenseur de réglage", comme dans Deluxe Paint pour changer
une couleur).
- 4 : gadget de chaîne (permet la saisie et la modification de texte par frappe au clavier).
Voilà, nous avons défini notre gadget. Reste maintenant à savoir comment le mettre en
oeuvre et récupérer l'information de sélection dans notre programme. C'est ce que montrent les
lignes de GFA suivantes :
La fin
Voilà, c'est tout pour aujourd'hui. La prochaine fois, nous verrons comment
définir une image au format Intuition, ce qui nous permettra d'ajouter l'image
à notre gadget. En attendant, amusez-vous bien...
|