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+ API の導入


GDI+ の機能を利用すると,[190_線の端点形状と接合スタイル] と同じ動作のプログラムが比較的簡単なコードで実現できます.
GDI+ は Windows XP で実装されたグラフィクスサブシステムで,従来の GDI の拡張版です.
Delphi XE 以前で GDI+ の機能をするには,GDI+ を利用するためのライブラリが必要です.以下の [GDI+ 関係サンプル 概要] の記事を参考にしてください.Delphi XE2 には実装されています.






01_線の端点形状と太い点線


実線の両端をフラットにして描画します.従来の GDI ですと,丸になりますが,GDI+ のデフォルトはこのフラットです.
太い点線,一転鎖線等も描画できます.一番下は始点と終点を丸にしています.


図1
実行結果

リスト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.




02_ビットマップ を TImage に描画


GDI+ を使用して,ビットマップを TImag eに描画する簡単なサンプルです.


図2
実行画面

リスト2
ビットマップを TImage に描画
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.