Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2004年12月31日] [更新 2013年11月05日] Delphi サンプルプログラム集
拙作のコンポーネント類を使用したサンプル
T190_TChart を印刷プレビュー
動作確認等 Windows 7 U64(SP1) + Delphi XE Pro
以下の拙作のコンポーネント類が必要
TplSetPrinter, TplPrev
T190_TChartPrev.zip [1,048 KB] 2013年11月05日版 (EXE 同梱)



  • 2013年11月05日
  • Windows 7 U64(SP1) + Delphi XE Proで動作確認




TChart を印刷プレビュー


円グラフや棒グラフは,自力で Canvas に描画するよりも,Delphi に附属の TChart というクラス名のコンポーネントを使用すると便利です.TChart の製品名は TeeChart です.

このサンプルプログラムでは,この TChart を利用して円グラフを描画します.TChart の体裁は全て TChart 本体のプロパティ,あるいはプロパティダイアログで設定し,プレビューの時はデータを設定するだけにしています.
テストして気づいたのですが,プロパティエディタの [系列] [形式] の正円をチェックしても微妙に楕円になってしまうようです.正円のチェックを外して,CustomXRadius と CustomYRadius の値を同じにすると正円になるようです.

Delphi 付属の TChart はサブセット版です.ソースコードは付いていません.製品版は,発売元の steema(support またはニュートンで購入できます.


図1
メインフォーム (設計時)
  • 印刷プレビューコンポとボタンを配置
図2
TChart を配置したフォーム
  • これは設計時の画面
  • フォームを新規作成して TChart を配置
  • プロパティエディタ等で編集
図3
実行画面
  • Button1 をクリックするとプレビュー

リスト1
TChart のグラフを印刷プレビュー
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, plPrev, ExtCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    plPrev1: TplPrev;
    procedure Button1Click(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

uses ChartUnit;

{$R *.DFM}

//=============================================================================
//  プレビュー開始
//  TChartのメタファイルを作成しそのメタファイルをTplPrevのCanvaにStretchDraw
//  する.縦横比は作成したTChartのメタファイルのものと同じとする.
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
  AMeta   : TMetafile;
  R       : TRect;
  ALeft   : Integer;
  ATop    : Integer;
  AWidth  : Integer;
  AHeight : Integer;
begin
  //データをクリアしてからセット
  ChartForm.PieSeries1.Clear;
  ChartForm.PieSeries1.Add(1231, '東京都',   clRed);
  ChartForm.PieSeries1.Add( 881, '大阪府',   clAqua);
  ChartForm.PieSeries1.Add( 869, '神奈川県', $00FFC184);
  ChartForm.PieSeries1.Add( 716, '愛知県',   clYellow);
  ChartForm.PieSeries1.Add( 703, '埼玉県',   clLime);
  ChartForm.PieSeries1.Add(8362, 'その他',   clWhite);

  //Pie(円)のサイズを調整
  ChartForm.PieSeries1.CustomXRadius := 150;
  ChartForm.PieSeries1.CustomYRadius := 130;

  plPrev1.BeginDoc;
  try
     AMeta:= ChartForm.Chart1.TeeCreateMetafile(True, ChartForm.Chart1.ClientRect);
     try
       ALeft   := 200;
       ATop    := 300;
       AWidth  := 1700;
       AHeight := Trunc(AMeta.Height / AMeta.Width*AWidth);

       R := Rect(ALeft, ATop, ALeft + AWidth, ATop + AHeight);
       plPrev1.StretchDrawMetaFile(R, AMeta);

       //枠線
       plPrev1.Canvas.Rectangle(R);
     finally
       FreeAndNil(AMeta);
     end;
  finally
    plPrev1.EndDoc;
  end;
  plPrev1.ShowModal;
end;

end.


リスト2
TChart を配置したフォームのコード
全てプロパティまたはプロパティダイアログで設定しているので追加コードはない
unit ChartUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, TeEngine, Series, ExtCtrls, TeeProcs, Chart;

type
  TChartForm = class(TForm)
    Chart1: TChart;
    PieSeries1: TPieSeries;
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  ChartForm: TChartForm;

implementation

{$R *.DFM}

end.