Canvasを使う

Canvasとは

Canvasは、Delphiでグラフィクスを描画できるオブジェクトです。
独立したオブジェクトではなく、他のオブジェクトのプロパティとして存在します。

【Canvasプロパティを持つコンポーネント】
次のようなものがあります。

TBitmap,TComboBox,TDBComboBOx,TDBGrid,TDBListBox,TDirectoryListBox,TDrawGrid,TFileListBOx,TForm
TImage,TListBox,TPaintBox,TPrinter,TStringGrid

Canvasの機能

WindowsAPIのGDI関数を使ってグラフィクスを描画するには、次のような手順を踏みます。

  1. デバイスコンテキストの取得
  2. 描画ツールの作成
  3. 描画に使うペンの太さや色などを設定する
  4. グラフィックの描画
  5. デバイスコンテキストの復元
  6. デバイスコンテキストの解放
    ※デバイス コンテキストは表示やプリンターなどのデバイスの描画の属性についての情報を含むウィンドウのデータ構造です。 すべての描画の呼び出しは行、グラフィックスとテキストを描画するための Windows API をカプセル化するデバイスコンテキスト オブジェクトを介して行われます。

Canvasのプロパティ

Canvasには、描画に必要なプロパティがいろいろと用意されています。よく使われるものには次のようなものがあります。

  • 線を引いたり、長方形や円の描画に利用するPenプロパティ
    Color → 描画に使用する色を定数で指定します。
    Mode → キャンバスに描画するときのモード
    Style → 実線、破線、点線など、線の種類を指定
    Width → 線の幅
  • 塗りつぶしに利用するBrushプロパティ
  • 文字の描画に利用するFontプロパティ

Colorプロパティ

描画に使用する色を定数で指定します。(一覧がこちらのページにあります)
例:Canvas.Pen.Color := clRed;

【Modeプロパティ】

キャンバスに描画するときのモードを定数で指定します。
例えば、ModeプロパティがpmCopyのときには、Colorプロパティに指定した色になりますが、pmBlackを指定すると、Colorプロパティの値にかかわらずつねに黒で描画されます。
WindowsAPを使って描画モードを設定する場合は、SetROP2関数を使います。

【サンプル】

procedure TForm1.Button1Click(Sender: TObject);
begin
  Canvas.Pen.Color := clYellow;     //黄色いペンを指定
  Canvas.Pen.Mode := pmBlack;       //常に黒で描画するモード
  Canvas.TextOut(10,10,'pmBlack');  //説明文
  Canvas.MoveTo(100,20);            //開始位置
  Canvas.LineTo(200,20);            //この位置まで線を引く
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Canvas.Pen.Color := clRed;       //ペン色を指定
  Canvas.Pen.Mode := pmCopy;       //プロパティで指定した色で描画する
  Canvas.TextOut(10,30,'pmCopy');  //説明文
  Canvas.MoveTo(100,40);           //開始位置
  Canvas.LineTo(200,40);           //この位置まで線を引く
end;

 【実行結果】

ren26

【Modeプロパティ】

pmBlack 常に黒
pmWhite 常に白
pmNop Canvasには何も描画されない
pmNot 画面色の反転色
pmCopy Colorプロパティで指定したペン色
pmNotCopy ペン色の反転色
pmMergePenNot  ペン色と画面反転色の組み合わせ
pmMaskPenNot  ペン色と画面反転色の組み合わせに共通な色との組み合わせ
pmMerge  ペン色と画面色の組み合わせ
pmNotMerge  pmMergeの反転
pmMask  ペン色と画面色の両方に共通な色との組み合わせ
pmNotMask  pmMaskの反転
pmXor  ペン色と画面色の組み合わせで両方に共通した色を除く
pmNotXor  pmXorの反転

【Styleプロパティ】

描画する線の種類を定数で指定します。

psSolid 実線
psDash 破線
psDot 点線
psDashDot 一点鎖線
psClear 見えない線
psLnsideFrame 閉じた図形の枠内に線を描画

【サンプル】 Styleプロパティのサンプル

procedure TForm1.Button1Click(Sender: TObject);
begin
  Canvas.Pen.Style := psDot;      //点線のスタイル
  Canvas.MoveTo(100,20);          //開始位置
  Canvas.LineTo(200,20);          //この位置まで描画

  Canvas.Pen.Style := psSOLID;    //実線のスタイル
  Canvas.MoveTo(100,40);          //開始位置
  Canvas.LineTo(200,40);          //この位置まで描画

  Canvas.Pen.Style := psDashDot;  //一点鎖線のスタイル
  Canvas.MoveTo(100,60);          //開始位置
  Canvas.LineTo(200,60);          //この位置まで描画
end;

【実行結果】

ren27

【Brushプロパティ】

Color 塗りつぶしの色
Style 塗りつぶし模様の種類
Bitmap 塗りつぶしに利用するビットマップイメージ

 【模様の種類】

bsSolid べた塗り
bsClear  塗りつぶしなし
bsBDiagonal 右上がり45度の斜線
bsFDiagonal 右下がり45度の斜線
bsCross 格子
bsDiagCross 斜線の格子
bsHorizontal 水平線
bsVerical 垂直線

【Brushプロパティのサンプル】

procedure TForm1.Button1Click(Sender: TObject);
begin
  canvas.Brush.Style := bsSolid;            //べた塗り
  Canvas.Brush.Color := clRed;              //色を設定
  Canvas.Rectangle(100,10,100+30,10+30);    //長方形の描画

  Canvas.brush.Style := bsCross;            //格子スタイル
  canvas.Brush.Color := clBlue;
  Canvas.Rectangle(100,50,100+30,50+30);    //長方形の描画
  end;

【実行結果】

ren28

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です