delphi.gif (306 バイト) グラフィックコンポーネント


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