Canvasとは
Canvasは、Delphiでグラフィクスを描画できるオブジェクトです。
独立したオブジェクトではなく、他のオブジェクトのプロパティとして存在します。
【Canvasプロパティを持つコンポーネント】
次のようなものがあります。
TBitmap,TComboBox,TDBComboBOx,TDBGrid,TDBListBox,TDirectoryListBox,TDrawGrid,TFileListBOx,TForm
TImage,TListBox,TPaintBox,TPrinter,TStringGrid
Canvasの機能
WindowsAPIのGDI関数を使ってグラフィクスを描画するには、次のような手順を踏みます。
- デバイスコンテキストの取得
- 描画ツールの作成
- 描画に使うペンの太さや色などを設定する
- グラフィックの描画
- デバイスコンテキストの復元
- デバイスコンテキストの解放
※デバイス コンテキストは表示やプリンターなどのデバイスの描画の属性についての情報を含むウィンドウのデータ構造です。 すべての描画の呼び出しは行、グラフィックスとテキストを描画するための 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;
【実行結果】
【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;
【実行結果】
【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;
【実行結果】