Exercice 6 : OBJETS DYNAMIQUES BUT : Dans cet exercice, vous allez apprendre à utiliser les barres de défilement, l’insertion d’images dynamique, un bouton deux états et le compteur (timer). Pour ce faire vous allez construire une application utilisant les propriétés des objets vus précédemment pour créer une animation. Bien que cet exercice soit long, autant dans sa création que dans son code, il reste relativement simple dans sa conception. De plus il met en évidence certains problèmes que l’on peut rencontrer lors de l’élaboration d’un projet.1/ Préparation et ajout des objets Créez un nouveau projet : - un répertoire Exercice_6 - un projet GUI Builder – nommez le Animation.gbp (Save Project As…) - un projet Object Ada contenant le fichier Exercice_6.prj et les librairies comme montre dans l’exercice 1 (n’oubliez pas de changer sous l’onglet Link, Console en Window). Une seule fenêtre sera nécessaire pour ce projet. Nommez-la Principale. Dimensionnez-la au 2/3 de votre écran. Insérez un bouton deux états à l’aide du bouton correspondant dans la barre d’outils (2-State-pictured Button Control). Placez-le en haut à droite de la fenêtre. Nommez le Sens. Insérez ensuite une barre de défilement horizontale. Placez-la au haut de la fenêtre. Nommez-la Vitesse. Insérez un Label si vous voulez nommez cette barre sur votre fenêtre. Insérez au centre de la fenêtre une image dans une boîte d’image (Picture Box Control). Nommez-la Image. 2/ Insertion d’un Timer et de son code correspondant Vous allez maintenant insérer un compteur (Timer) afin d’animer cette image. Nommez le Compteur1. Le compteur effectue une opération à intervalle constant (valeur du compteur). Afin de faire tourner l’image dans la fenêtre écrivez le code suivant dans l’événement du compteur. Pour pouvoir choisir le sens de rotation, la valeur du bouton deux états Sens est prise en considération. procedure Compteur_TimeEvent is begin -- Si le sens horaire est choisi via le bouton deux états if Value (Principale.Sens) = gb.True then -- Si la boîte d'image n'a pas atteint le bord droite de la -- fenêtre moins une marge de 50 et qu'elle ne se trouve pas en bas de la fenêtre if Left(Principale.Image) < (Width(Principale.Form) - Width(Principale.Image)-50)and Top (Principale.Image) = 100 then -- Déplacer la fenêtre de 1 vers la droite Left(Principale.Image, Left(Principale.Image)+1); -- Si la boîte d'image n'a pas atteint le bas de la fenêtre moins une marge de 50 et qu'elle se trouve à droite de la fenêtre elsif Top(Principale.Image) < (Height(Principale.Form)- Height(Principale.Image)-50) and Left(Principale.Image) = (Width(Principale.Form)-Width(Principale.Image)-50) then -- Déplacer la fenêtre de 1 vers le bas Top(Principale.Image, Top(Principale.Image)+1); -- Si la boîte d'image n'a pas atteint le bord gauche de la fenêtre moins une marge de 50 elsif Left(Principale.Image) > 50 then
-- Déplacer la fenêtre de 1 vers la droite Left(Principale.Image, Left(Principale.Image)-1); -- Si la boîte d'image n'a pas atteint le haut de la fenêtre moins une marge de 100 (pour le bouton et les barres de défilement) elsif Top(Principale.Image) > 100 then Top(Principale.Image, Top(Principale.Image)-1);
end if; -- Si le sens horaire est choisi via le bouton deux états else -- Si la boîte d'image n'a pas atteint le bord gauche de la fenêtre moins une marge de 50 et qu'elle ne se trouve pas en bas de la fenêtre if Left(Principale.Image) > 50 and Top(Principale.Image)= 100 then -- Déplacer la fenêtre de 1 vers la gauche Left(Principale.Image, Left(Principale.Image)-1); -- Si la boîte d'image n'a pas atteint le bas de la fenêtre moins une marge de 50 et qu'elle se trouve à gauche de la fenêtre elsif Top(Principale.Image) < (Height(Principale.Form) - Height(Principale.Image)-50) and Left(Principale.Image) = 50 then -- Déplacer la fenêtre de 1 vers la gauche Top(Principale.Image, Top(Principale.Image)+1); -- Si la boîte d'image n'a pas atteint le bord droite de la fenêtre moins une marge de 50 elsif Left(Principale.Image) < (Width(Principale.Form) - Width(Principale.Image)-50) then -- Déplacer la fenêtre de 1 vers la droite Left (Principale.Image, Left(Principale.Image)+1); -- Si la boîte d'image n'a pas atteint le haut de la fenêtre moins une marge de 100 elsif Top(Principale.Image) > 100 then -- Déplacer la fenêtre de 1 vers le haut Top(Principale.Image, Top(Principale.Image)-1);
end if; end if; end Compteur_TimeEvent; 3/ Code de la barre de défilement Afin de pouvoir modifier la vitesse de déplacement de l’image via la barre de défilement, il faut agir sur la valeur du compteur en fonction de la position de la barre. Donc sous l'événement Scrolled de la barre de défilement inscrivez le code suivant : procedure Vitesse_Scrolled is begin -- Valeur 0 if Value(Principale. Vitesse) = 0 then --Vitesse 1 (le plus rapide) Interval (Principale.Compteur1,1); -- Valeur 1 elsif Value(Principale. Vitesse) = 1 then Interval (Principale.Compteur1,5); -- Valeur 2 elsif Value(Principale.Vitesse) = 2 then Interval (Principale.Compteur1,10); -- Valeur 3 elsif Value(Principale.Vitesse) = 3 then Interval (Principale.Compteur1,50); -- Valeur 4 elsif Value(Principale.Vitesse) = 4 then Interval (Principale. Compteur1,100); -- Valeur 5 elsif Value(Principale.Vitesse) = 5 then Interval (Principale. Compteur1,200); -- Valeur 6 elsif Value(Principale.Vitesse) = 6 then Interval (Principale. Compteur1,300); -- Valeur 7 elsif Value(Principale. Vitesse) = 7 then Interval (Principale. Compteur1,500); -- Valeur 8 elsif Value(Principale. Vitesse) = 8 then Interval (Principale. Compteur1,1000); -- Valeur 9 elsif Value(Principale. Vitesse) = 9 then Interval (Principale. Compteur1,1500); end if; end Vitesse_Scrolled; Vous pouvez maintenant compiler sous Object Ada sans oublier pas les manipulations " spéciales " relatives à la gestion des images (voir exercice 5).
A bon entendeur ! |