Le GEM - Partie 1 : l'AES

Les bases du gfa

Le GEM - Partie 1 : l'AES

Messagede lafleche » Jeu 28 Jan 2010 10:41

Voyons tout d'abord pour créer une fenêtre simple avec un titre.
La première chose à déterminer est l'espace de travail dont nous disposons avant de pouvoir déterminer les dimensions de notre fenêtre.
La première fonction AES étudiée s'appelle wind_get, qui permet d'obtenir tout un tas d'information sur une fenêtre donnée.
sa syntaxe est :

WORD wind_get(handle, mode, parm1, parm2, parm3, parm4)

"handle" désigne le descripteur de la fenêtre dont nous souhaitons obtenir des informations (nous
y reviendrons), "mode" désigne le type d'infos qui nous intéresse, et "parm1" à 4 les paramètres
à passer en fonction du "mode" choisi.
Ici nous allons utiliser le descripteur (handle) 0 qui correspond au bureau, autrement dit pour AES
à la fenêtre "racine".
Nous allons demander le mode 4 (WF_WORKXYWH) qui va initialiser les paramètres passés aux valeurs : position en X, position en Y, largeur, et hauteur de la fenêtre demandée.
Bref, nous allons surtout nous intéresser aux deux dernières valeurs qui vont tout simplement nous
indiquer la taille du bureau !
Ainsi, les tailles des objets graphiques de nos programmes seront adaptés à l'exécution sous Aranym, certes, mais également sur un humble ST, et ce quelle que soit la résolution de l'écran ...
Précision qui s'appliquera à chacune des fonctions étudiées : bien entendu il se peut que pour diverses raisons quelque chose se passe mal (loi de Murphy), il faut donc bien entendu tester le retour de cette fonction, une valeur de retour de 0 indiquant une erreur.

ret%= WIND_GET(0,4,rootx%,rooty%,rootw%,rooth%)
IF ret%=0
ALERT 3,"Erreur AES",0,"oops",but%
STOP
ENDIF

Je partirai du principe que vous êtes des programmeurs sérieux et que vous contrôlerez vos
valeurs de retour, n'est ce pas ?

C'est bien joli tout ça, mais je ne sais pas si vous avez vu, mais votre bureau ne se limite pas
à un bête fond coloré, vous avez notamment un menu en haut, et il prend quelques pixels à
l'espace théoriquement disponible.
Aussi nous avons un autre appel AES qui va permettre de calculer la VRAIE surface disponible,
il s'agit de la fonction bien nommée wind_calc :
ret%=WIND_CALC(1,&H2F,rootx%,rooty%,rootw%,rooth%,workx%,worky%,workw%,workh%)

En gros on dit : Pour la fenêtre se situant aux coordonnées (rootx%,rooty%) et de taille
rootw% x rooth%, je voudrais que tu me calcules la vraie partie exploitable (sans ascenseurs,
sans barre de menu, etc ...) qui se trouvera à (workx%,worky%) de taille workw% x workh%.
Le premier paramètre indique ce que l'on souhaite calculer, à 0 on passe la surface de travail
et l'on récupère la taille totale, à 1 on passe la taille totale de la fenêtre et on récupère
la surface de travail effectivement exploitable.
Pour la seconde valeur, on spécifie par un jeu de masques quels attributs aura cette valeur,
vous pouvez vous référer au compendium atari (dispo sur ce site sur la page Atari) , ou au tableau traduit suivant :

Nom Masque Signification
NAME 0x01 A une barre de titre
CLOSER 0x02 A une case de fermeture de fenêtre
FULLER 0x04 A une cas d'agrandissement de fenêtre
MOVER 0x08 Fenêtre déplaçable par l'utilisateur
INFO 0x10 A une barre d'information
SIZER 0x20 A une case de redimenssionement
UPARROW 0x40 A une flèche "haut"
DNARROW 0x80 A une flèche "bas"
VSLIDE 0x100 A un ascenseur vertical
LFARROW 0x200 A une flèche "gauche"
RTARROW 0x400 A une flèche "droite"
HSLIDE 0x800 A un ascenseur horizontal
SMALLER 0x4000 A une case d'iconification

Ainsi notre valeur &H2F signifie : une fenêtre avec une case de redimensionnement, deplaçable,
avec des cases d'agrandissement et de fermeture , et une barre de titre.

En passant la taille du bureau a cette fonction, on calcule donc la taille maximale de notre
fenêtre pour le type défini ci-dessus.

Maintenant que nous avons ces informations, nous pouvons créer la fenêtre, sans l'afficher,
de la façon suivante :
handle%=WIND_CREATE(&H2F,workx%,worky%,workw%,workh%)

Vous aurez remarqué ici que la valeur retournée est différente, nous récupérons le descripteur
de la fenêtre.
Comme son nom l'indique, la variable 'handle' désigne l'identifiant unique de notre fenêtre, et qui
nous servira à la référencer pour toutes les futures opérations la concernant.

Ensuite nous définissons le titre de la fenêtre, notez que cela doit être fait avant de tenter d'afficher la fenêtre :
titre$="Le GEM en GFA"
ret%=WIND_SET(handle%,2,CARD(SWAP(VARPTR(titre$))),CARD(VARPTR(titre$)),0,0)

La fonction wind_set prend, outre le descripteur renvoyé par wind_create, plusieurs arguments
moins compliqués qu'il n'y parait a première lecture :
Le "2" indique que nous souhaitons modifier la caractéristique WF_NAME, autrement dit le
titre de la fenêtre.
Les deux arguments suivants doivent correspondre aux mots (16 bits), respectivement de poids
fort et de poids faible, de l'adresse (32 bits donc) de la chaîne de caractères à utiliser.
On utilise le mot clef VARPTR pour récupérer l'adresse de notre chaîne, puis CARD permet
de ne récupérer que le mot (16 bit) de poids faible de cette adresse.
La fonction SWAP permet quant à elle d'intervertir poids fort et poids faible d'une valeur.
Ainsi CARD(VARPTR(..)) récupère le poids faible de l'adresse, et CARD(SWAP(VARPTR(..))) le
poids fort ...
Cette fonction de wind_set ne réclamant pas plus de 2 paramètres, les paramètres 3 et 4 sont
initialisés à 0.

La récompense :
Maintenant que tout cela est vu, ne reste qu'à afficher enfin notre fenêtre :
ret%=WIND_OPEN(handle%,workx%,worky%,workw%,workh%)

Et enfin à ajouter une boucle attendant que nous la fermions pour libérer le “handle”. Pour cela nous utilisons la fonction EVNT_MESAG() pour intercépter les événements, et nous sortons de la boucle quand l’événement 22 (WND_CLOSE) est détecté :
DO
a%=EVNT_MESAG(0)
LOOP UNTIL MENU(1)=22

a%=WIND_CLOSE(handle%)
a%=WIND_DELETE(handle%)


Le résultat devrait être une fenêtre, avec une barre de titre, mais sans contenu...
C'est tout à fait normal, ne soyez pas déçu, ce sera le thème du prochain tutorial où nous verrons comment dessiner avec le VDI.
Avatar de l’utilisateur
lafleche
 
Messages: 136
Inscription: Lun 25 Jan 2010 14:41
Localisation: Lille

Re: Le GEM - Partie 1 : l'AES

Messagede shadow272 » Ven 29 Jan 2010 14:09

Bien fait ce tuto ;)
Un ATARI, le GFA c'est le bonheur
Avatar de l’utilisateur
shadow272
Administrateur du site
 
Messages: 211
Inscription: Mer 15 Oct 2008 21:40
Localisation: Hainaut, Belgique

Re: Le GEM - Partie 1 : l'AES

Messagede jbfou » Dim 7 Fév 2010 14:37

tres bien merci pour ce tuto cela poura etre util a mon ami manu et pour ma pomme aussi ;)
jbfou
 
Messages: 80
Inscription: Lun 23 Fév 2009 20:47

Re: Le GEM - Partie 1 : l'AES

Messagede lafleche » Lun 8 Fév 2010 10:32

Content que cela puisse aider ;)
Avatar de l’utilisateur
lafleche
 
Messages: 136
Inscription: Lun 25 Jan 2010 14:41
Localisation: Lille

Re: Le GEM - Partie 1 : l'AES

Messagede rockyone » Jeu 12 Aoû 2010 22:59

Bonjour

Dans le dossier ZIP, un éditeur / constructeur de trame et son souce.
Pas de chance, c'est pas en GFA mais dans un basic très proche, le Basic OMIKRON.

il existait un prg capable de transporter ces deux basic l'un vers l'autre...
Trame.zip
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
rockyone
 
Messages: 52
Inscription: Dim 1 Aoû 2010 18:38

Re: Le GEM - Partie 1 : l'AES

Messagede lafleche » Sam 14 Aoû 2010 09:40

sympa ! je remets la main sur un omikron et je zieute tout ça ...
Avatar de l’utilisateur
lafleche
 
Messages: 136
Inscription: Lun 25 Jan 2010 14:41
Localisation: Lille

Re: Le GEM - Partie 1 : l'AES

Messagede lafleche » Dim 15 Aoû 2010 14:31

Voila ! je viens de retrouver ma disquette système de mon vieux STE d'origine, et le Omikron Basic qui va avec.
Vraiment TRES sympa cet éditeur, bien écrit et tout et tout, je dis bravo :!:
Avatar de l’utilisateur
lafleche
 
Messages: 136
Inscription: Lun 25 Jan 2010 14:41
Localisation: Lille

Re: Le GEM - Partie 1 : l'AES

Messagede rockyone » Dim 15 Aoû 2010 18:57

Merci

En fait, c’est un morceau d’un créateur de tableaux pour un jeu de serpent
La version intégré dans ce créateur - qui n’est toujours pas fini par manque de temps -, et plus complète
Undo, save, restore sont actif pour les palettes de couleurs.
Le curseur carré reste visible quand on appuis sur les bouton de la souris.
Redimentionnement de la grille pour création de bloc image a la taille des sprites

Actuellement, je fait un wiever pour les images compacter au format MI1, format utilisé dans
L’éditeur de trame…
rockyone
 
Messages: 52
Inscription: Dim 1 Aoû 2010 18:38


Retourner vers Tutos

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités

cron