Faire le suivi de l'outil de dessin à utiliser

De RAD Studio
Aller à : navigation, rechercher

Remonter à Gestion de plusieurs objets de dessin dans votre application


Une application graphique doit pouvoir connaître à tout moment le type d'outil de dessin (une ligne, un rectangle, une ellipse ou un rectangle arrondi, par exemple) que l'utilisateur veut utiliser.

Vous pouvez affecter des nombres à chaque type d'outil, mais vous devrez alors vous rappeler de la signification de chaque nombre. Vous pouvez rendre cette technique plus simple en affectant un nom de constante mnémonique à chaque nombre, mais le code sera alors incapable de distinguer les nombres se trouvant dans la bonne plage et ceux du bon type. Par chance, Delphi fournit un moyen de gérer ces deux points faibles. Vous pouvez déclarer un type énuméré.

Un type énuméré est juste un moyen rapide pour affecter des valeurs séquentielles à des constantes. Depuis qu'il s'agit aussi d'une déclaration de type, vous pouvez utiliser la vérification de type de Delphi pour vous assurer que vous n'affectez que ces valeurs spécifiques.

Pour déclarer un type énuméré, utilisez le mot réservé type, suivi par un identificateur de type, du signe égal et des identificateurs pour les valeurs mis entre parenthèses et séparés par des virgules.

Par exemple, le code suivant déclare un type énuméré pour tous les outils de dessin de l'application graphique :

type
  TDrawingTool = (dtLine, dtRectangle, dtEllipse, dtRoundRect);
typedef enum {dtLine, dtRectangle, dtEllipse, dtRoundRect} TDrawingTool;

Par convention, les identificateurs de type commencent par la lettre T, et les constantes similaires (celles constituant le type énuméré) commencent par un même préfixe de deux caractères (comme ici dt pour "drawing tool").

La déclaration du type TDrawingTool est équivalente à la déclaration d'un groupe de constantes :

const
  dtLine = 0;
  dtRectangle = 1;
  dtEllipse = 2;
  dtRoundRect = 3;

La principale différence est qu'en déclarant un type énuméré, vous affectez des constantes et pas seulement des valeurs, mais aussi un type qui permet d'utiliser la vérification de type de Delphi pour vous prémunir de nombreuses erreurs. Une variable de type TDrawingTool peut être affectée seulement par une des constantes dtLine..dtRoundRect. Toute tentative d'affectation d'un autre nombre (même de la portée 0..3) générera une erreur de compilation.

Dans le code suivant, un champ ajouté à une fiche fera le suivi de l'outil de dessin de la fiche :

type
TDrawingTool = (dtLine, dtRectangle, dtEllipse, dtRoundRect);

TForm1 = class(TForm)
 { Method declarations here }
public
  Drawing: Boolean;
  Origin, MovePt: TPoint;
  DrawingTool: TDrawingTool;{ field to hold current tool }
end;
enum TDrawingTool {
	dtLine, dtRectangle, dtEllipse, dtRoundRect
};

class TForm1 : public TForm {
__published: // IDE-managed Components
	void __fastcall FormMouseDown(TObject *Sender, TMouseButton Button,
		TShiftState Shift, int X, int Y);
	void __fastcall FormMouseMove(TObject *Sender, TShiftState Shift,
		int X, int Y);
	void __fastcall FormMouseUp(TObject *Sender, TMouseButton Button,
		TShiftState Shift, int X, int Y);

private: // User declarations

public: // User declarations
	__fastcall TForm1(TComponent* Owner);

	bool Drawing; // field to track whether button was pressed
	TPoint Origin, MovePt; // fields to store points
	TDrawingTool DrawingTool; // field to hold current tool
};

Voir aussi