Exercice 2 : CASES A COCHER

BUT : L’exercice 2 vise a montrer l’utilisation de case à cocher (Check Box) et la possibilité de modifier le format de différents objets.

download exercise 1 !

Reprenez le projet Premier_Pas.gpb (du GUI Builder) ainsi que Projet1.prj (d’Object Ada) terminé à l’exercice 1 ou si vous n’avez pas fait l’exercice 1, cliquez ici afin de chargez les fichiers. Attention : N'OUVREZ PAS ces fichiers, mais sauvegardez-les dans votre dossier Exercice_GUI. Vous devrez ajouter les librairies nécessaires, référez-vous à l'exercice 1 pour ce faire. Il est possible que vous ayez à modifier quelques propriétés telles les dimensions de la fenêtre si vous reprenez votre propre projet.

 

Sur votre fenêtre (Principale) rajoutez 3 cases à cocher (dans la ligne de bouton Check Box Control) les unes sous les autres. Tracez un rectangle de la largeur de la case et d’une longueur permettant de lire le texte.

Fig. 2.1 - La fenêtre principale après l'ajout des 3 cases à cocher

La première case à cocher vous servira à changer la couleur de votre titre en rouge.

Changez le nom de la case, écrivez : Titre_Rouge (Name).

Changez le texte de la case, écrivez : Mettre le titre en rouge (Caption).

Positionnez la : Left = 100, Top = 120.

Dans le code pour l’événement Click, écrivez :

-- si la case de l’objet Titre_Rouge de la fenêtre Principale est cochée alors

if Checked (Principale.Titre_Rouge) = 1 then

 

-- change la couleur du texte du titre en rouge

-- attention : on écrit " fonction (Objet , Format); "

ForeColor (Principale.Titre, Red);

 

-- si la case est décochée, revenir à l’état initial 

else

-- exemple couleur du bleu choisi (0,128,255)

-- la fonction Color permet d’écrire en format RGB

ForeColor (Principale.Titre, Color (0,128,255));

end if ;

Conseils :

Prenez l’habitude de notez le chemin des objets que vous utilisez (exemple : Principale.Titre_Rouge). En effet, lorsque deux boutons ont le même nom sur deux fenêtres différentes, des conflits apparaissent. Rappelez vous aussi que les fonctions de la bibliothèque gb qui retournent des booléens, retournent les valeurs 0 et 1 (UNIVERSAL_INTEGER) car gb.Bool est un sous-type des booléens de la bibliothèque Win32 dont 0 et 1 (UNIVERSAL_INTEGER) sont les valeurs.

La deuxième case à cocher vous servira à changer la taille du bouton Quitter. Vous avez pu changer la couleur d’un objet, pourquoi pas sa taille ?

 

Changez le nom de la case, écrivez : Taille_Bouton_Quitter (Name).

Changez le texte de la case, écrivez : Changer la taille du bouton quitter (Caption).

Positionnez la : Left = 100, Top = 180.

Dans le code pour l’événement Click, écrivez :

-- si la case de l’objet Taille_Bouton_Quitter de la fenêtre Principale est cochée alors

if Checked (Principale.Taille_Bouton_Quitter) = 1 then

 

-- modifie la hauteur du bouton

Height (Principale.Bouton_Quitter, 100);

-- modifie la largeur du bouton

Width (Principale.Bouton_Quitter, 150);

 

 -- si la case est décochée, revenir à l’état initial

else

-- exemple de grandeur de départ Height = 50 et Width =100

Height (Principale.Bouton_Quitter, 50);

Width (Principale.Bouton_Quitter, 100);

 

end if ;

Pour la troisième case à cocher vous allez pouvoir mettre ensemble les 2 points vu précédemment en incluant un troisième toujours dans la même idée.

 

Changez le nom de la case, écrivez : Mixer (Name).

Changez le texte de la case, écrivez : Tremblement de terre (Caption).

Positionnez la : Left = 100, Top = 240.

Dans le code pour l’événement Click, écrivez :

-- si la case de l’objet Mixer de la fenêtre Principale est cochée alors

if Checked (Principale.Mixer) = 1 then

 

-- vous allez changer par exemple la position des 3 cases et du titre

 

-- 1ere case changez la position verticale

Top (Principale.Titre_Rouge, 200);

 

-- 2eme case changez la position horizontale

Left (Principale.Taille_Bouton_Quitter, 200);

 

-- 3eme case changez la position verticale

Top (Principale.Mixer, 0);

 

-- titre changez la position verticale et horizontale

Top (Principale.Titre, 100);

Left (Principale.Titre, 0);

 

-- changez la couleur du fond de la fenêtre et sa taille

BackColor (Principale.Form, Black);

Height (Principale.Form, 450);

Width (Principale.Form, 525);

 

else

 

-- si la case est décochée, revenir à l’état initial

 

-- 1ere case changez la position verticale

Top (Principale.Titre_Rouge, 120);

 

-- 2eme case changez la position horizontale

Left (Principale.Taille_Bouton_Quitter, 100);

 

-- 3eme case changez la position verticale

Top (Principale.Mixer, 240);

 

-- titre changez la position verticale et horizontale

-- on utilise cette fois la procedure Move avec comme paramètres

-- les positions Left, Top, Width, Height (dans cet ordre)

Move (Principale.Titre, 60, 50, 350, 30);

 

-- changez la couleur du fond de la fenêtre et sa taille

BackColor (Principale.Form, Color (192,192,192));

Height (Principale.Form, 500);

Width (Principale.Form, 500);

 

end if ;

Fig. 2.2 - Votre fenêtre dans un état "normal"...


Fig. 2.3 - La même fenêtre dans un état "tremblement de terre"...

Voilà, votre second exercice est terminé : sauvez le projet et la fenêtre, retournez sous Object ADA, compilez, construisez l'exécutable, et admirez le résultat !

Commentaire

Utilisez la procédure Checked pour savoir si une case est cochée ou pas. Cette procédure retourne un booléen valant 0 ou 1 (du type Universal_Integer).

Utilisez les procédures du paquetage gb pour transformer des objets. Ces procédures ont les mêmes nom que les propriétés que l’on trouve dans le Project Manager et elles ont presque toujours deux paramètres : l’objet et le format spécifique à la propriété. Ceci est une généralité, référez-vous donc à la spécification du paquetage gb si besoin est.

Exemple :

La procédure Left nous permet de changer la position horizontale d’un objet.

La valeur de la position est du type gb.INT qui est un sous-type du type Win32.INT qui est lui-même un sous-type de Interfaces.C.Int, bref ce sont des entiers.

procedure Left (Obj : in out Object; Val : gb.INT);

 

La fonction Left nous permet de connaître la position horizontale d’un objet.

function Left (Obj : in Object) return gb.INT;