Projet
III : Utilisation du GDI
Dans ce TD nous allons voir comment dessiner sur une fiche à
laide du GDI de Windows.
Créez une nouvelle application (appelée par exemple " Le
Dessinateur ").
Le programme devra pouvoir dessiner les trois formes de base :
ligne, rectangle, ellipse. Chacune de ces formes comportant un
point dorigine et un point darrivée, le programme
devra donc stocker ces informations dans des structures de type
POINT.
Lutilisateur devra pouvoir choisir, via des menus déroulants,
le style de sa plume (voir dans laide en ligne énumération
TPenStyle), de son pinceau (enum TBrushStyle), ainsi que sa forme
(ligne, rectangle ou ellipse). Ces informations seront stockées
dans des champs privés de la fiche.
Pour dessiner, lutilisateur devra cliquer sur la fiche,
bouger la souris tout en maintenant le bouton appuyé, puis relâcher
le bouton. Il définira alors le point dorigine et le point
darrivée de la forme à dessiner.
- Construisez le menu déroulant permettant de choisir le
pinceau, la plume et la forme retenues. Ecrire les
fonction de réponse aux évènements associés.
- Ecrire les fonctions de réponse aux évènements
OnMouseDown et OnMouseUp permettant de définir les
points origine et arrivée. Dessiner les formes.
- Rajouter un élément de menu permettant deffacer
la fiche (voir méthode Invalidate).
- Que se passe-t-il si on redimensionne la fiche, la réduit,
la cache par une autre fenêtre ? Comment régler ce
problème ?
- En utilisant lévènement OnMouseMove ainsi que la
possibilité du GDI de dessiner avec un masque XOT (voir
fonction SetROP2 de lAPI Windows), montrez comment
on peut dessiner la forme au fur et à mesure sans
laisser de traces et sans effacer le dessin.
- Traiter lévènement OnPaint de la fiche :
utilisez-le pour afficher un titre au dessin via la
fonction TextOut.
- Afin dobtenir des affichages persistants, posez un
composant TImage sur la fiche. Modifiez le source de manière
à dessiner dans le Canvas de limage plutôt que
dans celui de la fiche. Noubliez pas quà présent,
il faut traiter les évènements de limage et non
ceux de la fiche (pour la souris). Est-ce quà présent
nous avons besoin de traiter OnPaint ?