グラフィックコンポーネント
グラフィックコンポーネントはTGraphicControlから派生したコンポーネントで、ウィンドウハンドルを持たない(フォーカスを受け取らない)単純なコンポーネントです。
ここでは、Lineコントロールを例に示します。ただし、Delphiのコントロールはフォームに貼り付けるとき、矩形領域内に描画されるので、Visual BasicのLineコントロールのように線を直接、フォームには描画できません。
このLineコントロールはつぎのプロパティを持ちます。
コンポーネントの宣言
TLine = class(TGraphicControl) private { プロパティに対応する内部変数 } FAlign: Integer; // 線の矩形内描画位置 FLineWidth: Integer; // 線の幅 FColor: TColor; // 線の色 FMode: TPenMode; // 描画モード FLineStyle: TPenStyle; // 線の種類 protected { 描画メソッドの宣言 } procedure Paint; override; { プロパティメソッドの宣言 } procedure SetAlign(value: Integer); procedure SetLineWidth(value: Integer); procedure SetColor(value: TColor); procedure SetLineStyle(value: TPenStyle); procedure SetMode(value: TPenMode); public { コンストラクタ } constructor Create(AOwner: TComponent); override; published { プロパティの宣言} property Align : Integer read FAlign write SetAlign; property LineWidth : Integer read FLineWidth write SetLineWidth; property Color : TColor read FColor write SetColor; property LineStyle : TPenStyle read FLineStyle write SetLineStyle; property Mode : TPenMode read FMode write SetMode; end;
描画メソッド(Paint)の例
{ コンポーネントの描画 } procedure TLine.Paint; var x, y: Integer; begin { 線の色 } Canvas.Pen.Color := FColor; { 線の幅 } Canvas.Pen.Width := FLineWidth; { 線の種類 } Canvas.Pen.Style := FLineStyle; { 描画モード } Canvas.Pen.Mode := FMode; { 線の位置を決めて描画する } case FAlign of 0: // 斜め下 begin Canvas.MoveTo(Canvas.ClipRect.Left, Canvas.ClipRect.Top); Canvas.LineTo(Canvas.ClipRect.Right, Canvas.ClipRect.Bottom); end; 1: // 斜め上 begin Canvas.MoveTo(Canvas.ClipRect.Left, Canvas.ClipRect.Bottom); Canvas.LineTo(Canvas.ClipRect.Right, Canvas.ClipRect.Top); end; (中略) end; end;
コンストラクタの例
{ コンストラクタ } constructor TLine.Create(AOwner: TComponent); begin inherited Create(AOwner); FAlign := 0; FColor := clBlack; FLineWidth := 1; FMode := pmCopy; FLineStyle := psSolid; end;
プロパティメソッドの例
{ プロパティColorを設定する } procedure TLine.SetColor(value: TColor); begin FColor := value; Repaint; end;