Delphi Programming / Object Pascal
[掲載 2012年07月26日] [更新 2013年07月11日] Delphi サンプルプログラム集 |
192_線の端点形状の変更と GDI+ |
動作確認等 |
Windows 7 U64(SP1) + Delphi XE(UP1) Pro |
|
192_GDIplusBasic.zip [1,241 KB] 2012年07月26日版 (EXE 同梱) |
GDI+ の機能を利用すると,[190_線の端点形状と接合スタイル] と同じ動作のプログラムが比較的簡単なコードで実現できます.
GDI+ は Windows XP で実装されたグラフィクスサブシステムで,従来の GDI の拡張版です.
Delphi XE 以前で GDI+ の機能をするには,GDI+ を利用するためのライブラリが必要です.以下の [GDI+ 関係サンプル 概要] の記事を参考にしてください.Delphi XE2 には実装されています.
|
実線の両端をフラットにして描画します.従来の GDI ですと,丸になりますが,GDI+ のデフォルトはこのフラットです.
太い点線,一転鎖線等も描画できます.一番下は始点と終点を丸にしています. |
|
図1
実行結果
|
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Image1: TImage;
procedure Button1Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
uses GDIPAPI, GDIPOBJ;
{$R *.dfm}
//=============================================================================
// GDI+ Libraryを使用した描画
// 線の端点形状を変更
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
Graphics : TGPGraphics;
Pen : TGPPen;
begin
Image1.Picture.Assign(nil);
//描画はImage1のCanvasとする.このオブジェクトを取得
Graphics := TGPGraphics.Create (Image1.Canvas.Handle);
//最初の線の色
Pen := TGPPen.Create(MakeColor(255, 0, 0, 255), 14);
try
//1番目の線
Graphics.DrawLine(Pen, 20, 40, Image1.Width - 20, 40);
//2番目の線
//色は前と同じとするので設定なし,線のスタイルをドットに
Pen.SetDashStyle(DashStyleDot);
Graphics.DrawLine(Pen, 20, 70, Image1.Width - 20, 70);
//3番目の線の色とスタイル
Pen.SetColor (aclGreen);
Pen.SetDashStyle(DashStyleSolid);
//3番目の線の描画開始端と終了端の形状を丸に
Pen.SetStartCap (LineCapRound);
Pen.SetEndCap (LineCapRound);
Graphics.DrawLine(Pen, 20, 100, Image1.Width - 20, 100);
finally
Graphics.Free;
Pen.Free;
end;
end;
end.
GDI+ を使用して,ビットマップを TImag eに描画する簡単なサンプルです. |
|
図2
実行画面
|
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Image1: TImage;
procedure Button1Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
uses GDIPAPI, GDIPOBJ;
{$R *.dfm}
//=============================================================================
// GDI+ Libraryを使用した描画
// ビットマップ画像の表示
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
Graphics : TGPGraphics;
Bmp : TGPBitmap;
Rect : TGPRect;
begin
Image1.Picture.Assign(nil);
//描画はImage1のCanvasとする.このオブジェクトを取得
Graphics := TGPGraphics.Create (Image1.Canvas.Handle);
//描画するビットマップ
Bmp := TGPBitmap.Create ('001.bmp');
try
//描画先の矩形領域
Rect := MakeRect(0, 0, Image1.Width, Image1.Height);
//Image1の指定範囲にビットマップを描画
Graphics.DrawImage(Bmp, Rect);
finally
Graphics.Free;
Bmp.Free;
end;
end;
end.
|