Créa tion    

ALaMain
( Elaboration d'un programme demandant la construction de triangles particuliers.)

Cahier des charges :

L'ordinateur place trois points au hasard dans l’écran l’exercice consiste à déplacer ces points pour former successivement un triangle rectangle, un triangle isocèle, un triangle équilatéral, l’élève dispose de 25 secondes pour réaliser le test, il peut recommencer autant de fois qu’il le désire.


Le programme utilisera les objets suivants :

TForm Fenêtre de travail Windows classique qui contiendra tous les éléments nécessaires pour faire tourner notre programme.
TPanel Panneau d'affichage.
TPaintBox Objet servant à afficher et à mémoriser une saisie effectuée au clavier (256 ca-ractères maximum).
TMemo Objet éditeur de texte: TMemo sera utilisé par notre programme pour afficher une consigne lisible par l'élève.


Pas à pas ( ou presque )

Etape 1 : Afficher trois points au hasard.

Notre application contiendra une seule fiche (de type TForm) et de style fsNormal (il existe d'autres styles: voir « Propriétés » dans « l’Inspecteur d'objets » rubrique FormStyle de l'objet FormALaMain si FormALaMain est le nom de la fiche principale)
--

Enregistrer immédiatement le projet dans un dossier.
  • Renommer « Unit1.pas » sous «Alamain.pas ».
  • Renommer « project1.dpr » sous «Palamainl.dpr».
En utilisant la palette des composants, annexe 1-figure 1, et la souris, on "collera" dans la fiche principale:
  • 1 composant TMemo, appelé Enonce
  • 1 composant TMemo, appelé Enonce
  • 1 composant TPaintBox, appelé TableauBleu

La taille et la disposition de ces composants devra correspondre à que vous voyez sur ce document à la fin dans la partie annexe.
Dans la section type (Palamain.pas) on rajouté :

TPointLong=record
x,y:longInt;
end;

TGeoPoint= record
coord:TPointLong;
caption:string;
end;

TPointLong est nécessaire pour la compatibilité Delphi1-Delphi3, (en Delphi3 on pourrait utiliser directement TPoint).

Dans les champs de la Class ajouter dans la partie public :triangle:array[1..3]of tgeopoint et couleur:tcolor

Ecrire la procédure InitExo, cette procédure initialise au hasard les coordonnées des 3 points et rempli leur champ caption, la variable couleur est initialisée à clyellow.
On fait appel à cette procédure grâce à l’événement OnCreate de FormALaMain.

Ecrire maintenant le contenu du memo et l’affichage du TableauBleu
Pour afficher le TableauBleu, écrire la procédure nécessaire après avoir cliqué sur l’événement OnPaint. Pour l’affichage des points créer un procédure DrawTriplet cette procédure sera appelé par la procédure précédente.

Quelques remarques.
1/ Pour afficher quelque chose dans un TPaintBox utiliser son canevas.
2/ Pour afficher les points utiliser la couleur : Couleur. (cela permettera d’afficher et d’effacer les points en utilisant la même procédure. Compiler et vérifier que les trois points s’affichent correctement et sont correctement reliés.

Etape 2 : Déplacer les points.

Pour déplacer un point le principe de l’animation repose essentiellement sur les événements OnMouse...

Dans OnMouseDown : on le sélectionne.
Dans OnMouseMove : on le déplace (s’il est sélectionné et si cela reste dans le TableauBleu) .
Dans OnMouseUp : on le déselectionne.
Pour cela créer une variable select (Champ public de FormALaMain) de type integer qui indiquera quel point est sélectionné. (select :=0 indique aucun point sélectionné) .
Créer une fonction locale de type boolean (dans TableauBleuMouseDown) qui indiquera si on est aux environs d’un point.

function AuxEnvirons(x,y:integer;a:TPointLong):boolean;

Créer une fonction locale de type boolean (dans TableauBleuMouseMove) qui indiquera si on est en dehors.

function dehors( x,y:integer):boolean;

dans MouseMove affecter à couleur TableauColor effacer le dessin, changer les coordonnées du point changer la couleur réafficher le dessin.

Etape 3 : Vérifier le résultat.

La vérification du résultat doit se faire automatiquement quand on lâche le bouton de la souris.
Ecrire une procédure vérification qui envoient un message indiquant quel triangle a été créer.
On pourra avec profit utiliser la fonction :

Function Longueur(a,b:TPointLong):Longint;
Var r: Real;
Begin
r:=sqrt(sqr (a.x-b.x)+sqr(a.y-b.y));
result:=round(r);
End;

ne pas oublier une instruction du type :

messagedlg('Les points sont trop près',mtError,[mbok],0); (* si les points sont trop près *)

Etape 4 : Optionnel : une GroupBox pour afficher l’état actuel de l’exercice.

Le programme utilisera les objets suivants :

1. TGroupBox : Le composant TGroupBox représente une boîte groupe Windows standard utilisée pour regrouper des contrôles associés d'une fiche..
2. TCheckBox : Trois cases à cocher : ‘Triangle équilatéral, triangle rectangle, Triangle isocèle.

Mettre tout de suite la propriété enabled du TGroupBox à false cela permettra d’inhiber la souris pour les cases.
Rajouter dans la procédure vérification le cochage de la bonne case.
Faire en sorte que lorsqu’une case a été cochée on ne teste plus pour voir si le triangle est de ce type.
Rajouter que lorsque les trois triangles ont été trouvés on ne peut plus rien déplacer.

Etape 5 : Le Timer !

Le programme utilisera les objets suivants :

1. TTimer : Ce composant non visuel envoie un événement OnTimer à chaque échéance de son Intervalle..
2. TPanel : Pour afficher le temps restant
3. TButton : Le bouton recommencer.

Au départ régler l’intervalle du TTimer à zéro (celui ci est inhibé).
L’affichage du TPanel chronomètre indique 25s
Lorsque la souris envoie pour la première fois un événement OnMouseDown lancer le TTimer en réglant son intervalle pour qu’il égrène les secondes.
Lorsque l’événement OnTimer est envoyé changer l’affichage du TPanel chronomètre.
Lorsque le temps est écoulé envoyer un message du type :

messagedlg('Temps dépassé',mtWarning,[mbOK],0);

et penser à inhiber le triangle.
Lorsque le bouton Recommencer est pressé, réinitialiser le programme. .

Etape 6 : L’Aspect Graphique !

Changer les couleurs de la fiche et des panels pour fignoler le boulot.
Rajouter dans DrawTriplet l’instruction :

setbkmode(tableauBleu.canvas.handle,transparent);

Tenter de changer l’apparence du bouton !
Bon amusement !!!

Annexe :

Malgré toutes ces explications il est possible que vous ne réussissiez pas à faire le programme : vous pouvez télécharger la solution en dernier recours ...

Télécharger l'exécutable (32bits, 117ko)
Télécharger le projet (Delphi 2,3 - 3,65ko)

Accueil Actualités F.A.Q. Exercices Liens Télécharger Création
Vous pouvez nous écrire: lilimath@lille.iufm.fr Box