使用する描画ツールの追跡

提供: RAD Studio
移動先: 案内検索

アプリケーション内の複数の描画オブジェクトの処理 への移動


グラフィック プログラムでは、ユーザーがある時点でどの種類の描画ツール(線、四角形、楕円、角丸四角形など)を使用したいか、追跡する必要があります。

各ツールに数値を割り当てることもできますが、各数値を何を表すか覚えていなければなりません。ニーモニック定数名を各数値に割り当てることにより、より簡単にこれを行うことができますが、コードで数値が適正範囲にあり適切な型であるか、判断することはできません。幸いなことに、Delphi は、これら両欠点を処理する方法を備えています。列挙型を宣言することができます。

列挙型は、連続した値を定数に割り当てる手っ取り早い方法です。これは型宣言でもあり、Delphi の型チェックを使用して、それら特定の値のみを割り当てているか、確認することができます。

列挙型を宣言するには、type 予約語、そしてそれに続いて型の識別子、等号(=)、括弧内にカンマ区切りで、その型の各値の識別子のリストと指定していきます。

たとえば、次のコードでは、グラフィック アプリケーションで利用可能な各描画ツールのための列挙型を宣言しています:

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

慣例として、型識別子は文字 T から始まり、同じグループの定数群(その列挙型を構成する値)は、2 文字の接頭辞から始まります(描画ツールに対して dt など)。

TDrawingTool 型の宣言は、定数グループの宣言と同一です:

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

主な違いは、列挙型を宣言することにより、定数に値を与えられるだけでなく、型を与えられ、それにより、Delphi 言語の型チェックを使用して、多くのエラーを回避できることです。型 TDrawingTool の変数は、定数 dtLine ~ dtRoundRect のいずれかが割り当てられます。他の数値を割り当てようとすると、(たとえそれが 0 ~ 3 の範囲のものでも)、コンパイル時エラーを生成します。

次のコードでは、フォームに追加されるフィールドが、フォームの描画ツールを追跡します。

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
};

関連項目