Document fait avec Nvu Document made with Nvu




Interface de programmation graphique

Version 1.7 du 25 Avril 2010
Ecrit par jpb.forth

Instructions du serveur de fenêtres
Instructions des boîtes de dialogue
Utilisation
Exemple


Principe

Le but de cette page est de décrire les instructions permettant de créer une application graphique comme la fenêtre suivante:


Cette description est réparties dans plusieurs chapitres:


Instructions du serveur de fenêtres

Dans les instructions suivantes:

  • "fen" est un nomber entier qui, si il es positif et non nul, correspond au descripteur d'une fenêtre,
  • "adr_prgm" est le pointeur d'un programme appelé par le serveur de fenêtres. Ce programme peut ou non avoir des paramètres spécifiques mais le dernier es le descripteur de la fenêtre, aucun paramètres ne doi être renvoyé, exemple:
    ...,fen FEN_PRGM -
    L'instruction "FEN:" doit être utilisée pour créer ce programme qui es terminé par ";" comme une autre instruction FORTH. Lors de l'exécution, l'adresse de la zone d'exécution "adr_prgm" est déposée sur la pile des données.

- FEN: "nom" -

Création d'un programme qui peut être appelé par le serveur de fenêtres.
Ce programme est appelé de la manière suivante:  data1,...datan,fen --> -.
Le nombre de données, qui peut être 0, dépend du type de programme.
Quand cette instruction est utilisée, elle retourne un pointeur "adr_prgm"
.

- FEN_CREE fen

Creation de la zone de paramètres d'une nouvelle fenêtre.
Cette action est annulée si "fen"=0.

fen1,fen2 FEN_FILLE -

La fenêtre "fen1" est déclarée comme fille de la fenêtre "fen2".

fen FEN_DETRUIT -

Destruction de la fenêtre "fen".
Cette action est annulée si "fen" possède une fenêtre fille.

adr_chaîne,fen FEN_NOM -

Initialisation du nom (chaîne de caractères pointée par "adr_chaîne") de la fenêtre "fen".
Le nom apparaît dans la bordure de la fenêtre.

x,y,fen FEN_POSITION -

Initialisation de la position absolue (coordonnées "x,y" à gauche et en haut) de la fenêtre "fen".

dx,dy,fen FEN_TAILLE -

Initialisation de la taille utilisateur (valeurs "dx,dy" sans la bordure) de la fenêtre "fen".

adr,fen FEN_PARAMETRES -

Initialisation de l'adresse de la zone de parametres utilisateur de la fenêtre "fen".
Ceci est une option.

dxmin,dymin,dxmax,dymax,fen FEN_DIMENSIONS -
Initialisation de la taille utilisateur minimum/maximum (valeurs "dxmin,dymin,dxmax,dymax") de la fenêtre "fen".
Le symbole apparaît dans la bordure de la fenêtre.
Ceci est une option.

fen FEN_ACTIVE -

Premier affichage de la fenêtre "fen" quand toutes les initialisations sont faites.

fen FEN_SELECTIONNE -

Sélection logicielle de la fenêtre "fen" qui est affichée comme la première fenêtre.

adr_prgm,fen FEN_FERME -

Initialisation de l'adresse du programme "adr_prgm" pour fermer la fenêtre "fen".
Le symbole apparaît dans la bordure de la fenêtre.
Le programme est appelé par le serveur de fenêtres de la manière suivante: fen --> -
Ceci est une option.

adr_prgm,fen FEN_MENU -

Initialisation de l'adresse du programme "adr_prgm" pour afficher un menuà la fenêtre "fen".
Le symbole apparaît dans la bordure de la fenêtre.
Le programme est appelé par le serveur de fenêtres de la manière suivante: fen --> -
Ceci est une option.

adr_prgm,fen FEN_A_PROPOS -

Initialisation de l'adresse du programme "adr_prgm" pour afficher une aide à la fenêtre "fen".
Le symbole apparaît dans la bordure de la fenêtre.
Le programme est appelé par le serveur de fenêtres de la manière suivante: fen --> -
Ceci est une option.

adr_prgm,fen FEN_AFFICHE -

Initialisation de l'adresse du programme "adr_prgm" pour afficher le contenu de la fenêtre "fen".
Le programme est appelé par le serveur de fenêtres de la manière suivante: fen --> -

dx,dy,fen FEN_MOSAIQUE -

Initialisation du mode d'affichage en mosaïque de la fenêtre"fen".
Dans ce mode, le contenu de la fenêtre est affiché séquentiellement par petites zones "dx,dy".
Si  "dx" ("dy") est positif, l'affichage de la mosaïque débute du côté gauche (haut).
Si "dx" ("dy") es négatif, l'affichage de la mosaïque débute du côté droi (bas).
Cette instruction permet d'optimiser le temps de raffraichissement dans la cas d'une fenêtre complexeT.
Ceci est une option.

adr_prgm,fen FEN_SORT -

Initialisation de l'adresse du programme "adr_prgm" pour quitter la fenêtre "fen".
Ce programme peut être un affichage spécifique de la fenêtre "fen" quand une autre fenêtre es sélectionnée.

Le programme est appelé par le serveur de fenêtres de la manière suivante: fen --> -
Ceci est une option.

t,adr_prgm1,adr_prgm2,fen FEN_CHRONO -

Initialisation d'un affichage temporisé afin de faire une animation du contenu de la fenêtre "fen".
"t" est la durée en milliseconde avan l'exécution du programme d'affichage pointé par "adr_prgm1".
"adr_prgm2" est le pointeur du programme de la tâche appelée par le serveur de fenêtre à la fin de l'affichage.
Le programme est appelé par le serveur de fenêtres de la manière suivante: fen --> -
Ceci est une option.

adr_prgm,fen FEN_ICONE -

Initialisation de l'adresse du programme d'affichage "adr_prgm" en cas de réduction de la fenêtre "fen" en icône.
Le programme est appelé par le serveur de fenêtres de la manière suivante: fen --> -
Ceci est une option.

adr_prgm,fen FEN_CLAVIER -

Initialisation de l'adresse du programme "adr_prgm" pour gérer les caractères du clavier de la fenêtre "fen".
Le programme est appelé par le serveur de fenêtres de la manière suivante: car, fen --> -
"car" est le code du caractère du clavier.

Ceci est une option.

adr_prgm,fen FEN_SOURIS -

Initialisation de l'adresse du programme "adr_prgm" pour gérer la souris de la fenêtre "fen".
Le programme est appelé par le serveur de fenêtres de la manière suivante: x,y,bg,bd, fen --> -
"x,y" sont les coordonnées du pointeur de la souris,
"bg,bd" sont les états des boutons gauche et droit de la souris.

Ceci est une option.

adr_motif,fen FEN_MOTIF_SOURIS -

Initialisation de la forme du pointer de la souris "adr_motif" (matrice de symbole 2x16x16) dans la fenêtre "fen".
Ceci est une option.

fen FEN_DEVANT_? b

"b" n'es pas nul si la fenêtre "fen" es sélectionnée.

teinte,x1,y1,x2,y2,fen FEN_TRACE_REC -

Tracé d'un rectangle:
teinte: teinte du pixel ou inversion video si > 255 ,
x1,y1,x2,y2: coordonnees des coins relatives à la fenêtre "fen".

dx,dy,teinte,x,y,adr_motif,fen FEN_TRACE_MOTIF dx,dy,teinte,x,y

Tracé d'un motif défini par une matrice:
dx,dy: largeur et hauteur de la matrice en nombre de points (dx <= 16),
teinte: teinte du pixel,
x,y: coordonnees du coin superieur gauche du motif relatives à la fenêtre "fen",
adr_motif : adresse de la matrice du motif.

teinte,gen_car,x0,y0,adr,nbc,fen FEN_TRACE_CHAINE teinte,gen_car,x0,y0,adr

Tracé d'une chaine de caractères:
teinte: teinte du pixel,
gen_car: adresse du générateur de caractères,
x0,y0: coordonnees absolues du coin superieur gauche du premier caractère dans la fenêtre "fen",
adr: adresse de la chaîne de caractères,
nbc: nombre de caractères.

image,x0,y0,fen FEN_ECRIT_REC -

Ecriture d'une image rectangulaire:
image: pointeur sur le contenu de l'image
dx sur 2 octets
dy sur 2 octets
teinte1 sur 1 octet
...
teinteN sur 1 octet avec N = dx*dy,
x0,y0: coordonnées du coin en haut et a gauche relatives à la fenêtre "fen".

teinte,x1,y1,x2,y2,fen FEN_TRACE_LIGNE -

Tracé d'un ligne:
teinte: teinte du pixel,
x1,y1,x2,y2: coordonnees des points d'extrémité relatives à la fenêtre "fen".

dx,dy,teinte,x,y,adr_motif,fen FEN_TRACE_MOTIF_RELIEF dx,dy,teinte,x,y

Tracé d'un motif défini par une matrice avec effet 3D (mêmes paramètres que "FEN_TRACE_MOTIF").

teinte,gen_car,x0,y0,adr,nbc,fen FEN_TRACE_CHAINE_RELIEF teinte,gen_car,x0,y0,adr

Tracé d'une chaine de caractères avec effet 3D (mêmes paramètres que "FEN_TRACE_CHAINE").

teinte,actif,x0,y0,dx,dy,position,taille,total,fen FEN_TRACE_POTAR -

Affichage d'un potentiomètre rectiligne horizontal (dx>=dy) ou vertical (dx<dy):
teinte: teinte du potentiomètre,
actif: indique si non nul que la fenêtre "fen" es sélectionnée,
x0,y0: coordonnees des coins relatives à la fenêtre "fen",
dx,dy: largeur et hauteur du potentiomètre,
position: position du curseur (0 à total),
taille: taille du curseur (0 à total),
total: hauteur du potentiomètre.

- FEN_STRING" S_NOM chaîne en français" chaîne en anglais" -

Création d'une double chaîne de caractères "S_NOM".
Quand le serveur de fenêtres est configuré en français, la chaîne "chaîne en français" est affichée.
Sinon, la chaîne "chaîne en anglais" es affichée.

- FEN_TEINTES_? c_fond,c_fond_2,c_select,c_select_2,c_car,mode

Couleurs (8 bits) des fenêtres:
 c_fond,c_fond2: couleurs du fond,
c_select,c_select_2: couleurs de sélection,
c_car: couleur des caractères,
mode: type de dégradé.

- FEN_LANGUE_? b

Language des fenêtres, b est différent de 0 si anglais.

fen FEN_POSITION_? x,y

"x,y" son les coordonnées absolues (à gauche en haut) de la fenêtre "fen".

fen FEN_TAILLE_? dx,dy

"dx,dy" son la largeur et la hauteur de la fenêtre "fen".

fen FEN_PARAMETRES_? adr

"adr" est l'adresse de la zone de parametres utilisateur de la fenêtre "fen" initialisée avec "FEN_PARAMETRES".

fen FEN_NOM_? adr_chaîne

Nom (chaîne de caractères pointée par "adr_chaîne") de la fenêtre "fen".

adr_chaîne FEN_NUMERO_? fen

Fenêtre "fen" correspondant au nom (chaîne de caractères pointée par "adr_chaîne").

image,x1,y1,x2,y2,fen FEN_TAPISSE_REC -

Remplissage avec une image rectangulaire:
image: pointeur sur le contenu de l'image
dx sur 2 octets
dy sur 2 octets
teinte1 sur 1 octet
...
teinteN sur 1 octet avec N = dx*dy,
x1,y1,x2,y2: coordonnees des coins relatives à la fenêtre "fen".

figure,x0,y0,fen FEN_ECRIT_FIG -

Ecriture d'une figure irrégulière:
figure: pointeur sur le contenu de la figure
adresse image ou couleur si inférieur à 256 
sur 4 octets
dx sur 2 octets
dy sur 2 octets
x1(y0),x2(y0) sur 4 octets
...
x1(yN),x2(yN) sur 4 octets avec N = dy,
x0,y0: coordonnées du coin en haut et a gauche relatives à la fenêtre "fen".


Instructions des boîtes de dialogue

Dans les instructions suivantes:

  • si adr_s est égal à 0, aucun text n'est affiché en haut de la fenêtre,
  • si fen est égal à 0, la boîte de dialogue est gérée comme une fenêtre principale.

adr_s,fen FEN_DIALOGUE_MESSAGE -


Boîte de dialogue d'affichage d'un message:
adr_s: adresse de la chaîne de caractères du message,
fen: descripteur de la fenêtre parent.

adr_%,adr_prgm,adr_s,fen FEN_DIALOGUE_PROGRESSE -


Boîte de dialogue d'exécution d'une application avec affichage du pourcentage effectué:
adr_%: adresse d'un entier 0 à 100 mis à jour par l'application,
adr_prgm: adresse de l'application,
adr_s: adresse de la chaîne de caractères du commentaire,
fen: descripteur de la fenêtre parent.

adr_prgm,adr_s,fen FEN_DIALOGUE_EXECUTE -


Boîte de dialogue d'exécution d'une application:
adr_prgm: adresse de l'application,
adr_s: adresse de la chaîne de caractères du commentaire,
fen: descripteur de la fenêtre parent.

b,adr_s,fen FEN_DIALOGUE_OUI/NON b'


Boîte de dialogue d'une question simple:
b: réponse initiale (0 pour non, <>0 pour oui),
adr_s: adresse de la chaîne de caractères de la question,
fen: descripteur de la fenêtre parent,
b': réponse finale.

n,adr_s_choix,adr_s,fen FEN_DIALOGUE_CHOIX n'


Boîte de dialogue d'un menu:
n: choix initial (1 pour le haut),
adr_s_choix:
adresse de la chaîne de caractères du menu,
adr_s: adresse de la chaîne de caractères du commentaire,
fen: descripteur de la fenêtre parent,
n': choix final (0 si annulé).

n,base,adr_s,fen FEN_DIALOGUE_NOMBRE n'


Boîte de dialogue de saisie d'un nombre entier:
n: nombre initial,
base: base de codage,
adr_s: adresse de la chaîne de caractères du commentaire,
fen: descripteur de la fenêtre parent,
n': nombre final.

adr_s_texte,nbc_max,adr_s,fen FEN_DIALOGUE_TEXTE nbc


Boîte de dialogue de saisie d'un texte:
adr_s_text: 
adresse de la chaîne de caractères du texte initial,
nbc_max: nombre maximum de caractères du texte,
adr_s: adresse de la chaîne de caractères du commentaire,
fen: descripteur de la fenêtre parent,
nbc: nombre de caractère final du texte (-1 si l'action es annulée).

f,adr_s,fen FEN_DIALOGUE_FLOTTANT f'


Boîte de dialogue de saisie d'un nombre à virgule flottante:
f: nombre initial (64 bits),
adr_s: adresse de la chaîne de caractères du commentaire,
fen: descripteur de la fenêtre parent,
f': nombre final.

adr_chemin/nom,lec/ecr,adr_s,fen FEN_DIALOGUE_FICHIER adr_chemin/nom'


Boîte de dialogue de sélection d'un fichier:
adr_chemin/nom: 
adresse de la chaîne de caractères du fichier initial,
lec/ecr: accès au fichier en lecture ou écriture (0 pour écriture),
adr_s: adresse de la chaîne de caractères du commentaire,
fen: descripteur de la fenêtre parent,
adr_chemin/nom': adresse de la chaîne de caractères du fichier final (-1 si l'action es annulée).

c,adr_s,fen FEN_DIALOGUE_PALETTE c'


Boîte de dialogue de sélection d'une couleur de la palette:
c: couleur initiale (8 bits),
adr_s: adresse de la chaîne de caractères du commentaire,
fen: descripteur de la fenêtre parent,
c': couleur finale
 (-1 si l'action est annulée).

r,v,b,adr_s,fen FEN_DIALOGUE_RVB r',v',b',n


Boîte de dialogue de sélection d'une couleur rouge vert bleu:
r,v,b: couleur initiale (3x8 bits),
adr_s: adresse de la chaîne de caractères du commentaire,
fen: descripteur de la fenêtre parent,
r',v',b': couleur finale,
n: <>0 si l'action est annulée.


Utilisation

Le tableau suivant contient 9 exemples de programmes de fenêtres classés du plus simple au plus complexe:
(cliquer sur la fenêtre choisie pour en avoir le code source)


Simple fenêtre 1

Fenêtre 1 + à propos

Fenêtre 2 + dimensions

Fenêtre 3 + affichage

Fenêtre 4 + menu

Fenêtre 5 + clavier

Fenêtre 6 + icône

Fenêtre 7 + souris

Fenêtre 8 + animation

Le code ajouté et/ou modifié dans le programme de la fenêtre suivante est précédé de ( ++++ ) e suivi de ( ---- ).

Exemple