グラフィックコンポーネント
グラフィックコンポーネントは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;