Delphi Programming / Object Pascal
[掲載 2011年06月11日] [更新 2013年10月24日] Delphi サンプルプログラム集 |
051_セルの結合と TZColorStringGrid コンポ |
動作確認等 |
Windows 7 U64(SP1) + Delphi XE Pro
ZColorStringGrid Ver: 0.4 |
|
051_ZColorStringGridCompo.zip [5,601 KB] 2013年10月24日版 (EXE 同梱) |
- 2013年10月24日
- ZColorStringGrid コンポのバージョンが Ver 0.4 になっていたので,ダウンロードしてテスト
|
TZColorStringGrid コンポーネント |
Torry's Delphi Pages の ZColorStringGrid にも登録されている,Avemey というサイトが提供している StrigGrid コンポーネント,TZColorStringGrid の簡単な紹介記事です.
[050_TStringGrid とカスタム描画]で 固定セルの結合をテストをしました.固定セルの結合は比較的簡単ですが,データセルはかなり面倒です.
データセルは,選択状態の変化,スクロールした時の描画処理の制御,データ入力時にインプレースエディタも制御しなければなりません.これは,Paint メソッドを override (オーバーライド) して処理しないと無理があると思われます.つまり,コンポーネント化しないと無理があります.
この TZColorStringGrid コンポーネントは,このセルの結合の他にもセルのプロパティ設定の便利な機能があります.ただし,Windows XP 以降のテーマやエアロには対応ししていません.そのようなデザインが必要であればイベント内で描画することになります.
このコンポーネントはフリーウェアです.今回は zcolorstringgrid_bin_0_4.zip をダウンロードしてテストしています.
このコンポーネントでは,結合セル専用のクラスでその情報を管理制御し,Paint メソッドで全ての描画処理を行っています.このコンポーネントは,以下のような特徴があります.
- セルの文字列のアライメントが横,縦方向共に設計時に設定可能
- セルの背景色,フォント,枠線の設定が設計時に可能
- セルの結合と解除がコード上で可能
- セル幅と行の高さの自動調整が可能
- 表計算機能がある
- インプレースエディタの背景色,フォントの色の設定が設計時に可能
- コンポーネントのソースコードが添付されている(学習やカスタマイズが可能)
Google で検索したところ,ロシア語での紹介記事はありましたが,日本語のサイトは検索リストには出てきませんでした.おそらくこのコンポーネントの紹介記事は,2011年06月09日現在,国内ではこれが初めてかも知れません.
本ページの記事掲載時の,このコンポーネントのバージョンは Ver 0.2 でした.今回は Ver 0.4 となっています.表計算等の機能が追加されたり,セル関係のプロパティも追加されていますが,それらについての説明やサンプルはありません. |
TStringGrid にはない機能を補うものとして,上記リンクの Project.JEDI の TJvStringGrid も検討する価値があるのではないかと思います. |
|
図1
コンポーネントのファイル構成
- [src] にパスを通し,該当するパッケージをインストール
|
|
図2
添付のデモプログラムを実行
- SAMPLES の [Calc] を少し改変
- 表計算機能がある (100 + 300 = 400)
|
実際の動作テスト用のサンプルです.フォームの OnCreate イベント内で設定を行っていますが,その多くは設計時にオブジェクト・インスペクタで設定可能です.他のサンプルプログラム同様,コードのコピペでもテスト可能なように,OnCreate イベント内で設定しています.
読み込むデータが多い時は,OnShow イベント内で実行する方が,体感的な速度は速くなります. |
|
図3
設計時画面 |
|
図4
実行開始画面
|
|
図5
指定セルを結合
- フォーカスの枠線が多少乱れることがあるが Ver 0.2 の時よりも改善されているようである
|
|
図6
セルの結合を解除 |
リスト1
TZColorStringGrid コンポーネントの簡単な使用例 |
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ZColorStringGrid, StdCtrls, ExtCtrls, Grids;
type
TForm1 = class(TForm)
ZColorStringGrid1: TZColorStringGrid;
Panel1: TPanel;
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure ZColorStringGrid1BeforeTextDrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState);
procedure ZColorStringGrid1BeforeTextDrawMergeCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState;
var CellCanvas: TCanvas);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
uses GraphUtil;
{$R *.dfm}
//=============================================================================
// 各種設定
// 多くは設計時に,オブジェクト・インスペクタで設定できるが,コードをコピペし
// 利用可能とするため,ここに記述
//=============================================================================
procedure TForm1.FormCreate(Sender: TObject);
var
AStyle : TCellStyle;
AFileName : String;
SL : TStringList;
i : Integer;
iRow : Integer;
begin
//グラデーションの色設定
ZColorStringGrid1.GradientStartColor := clWhite;
ZColorStringGrid1.GradientEndColor := $00E8E8E8;
//選択セルの背景色とセル枠線
ZColorStringGrid1.SelectedColors.BGColor := $00E9E9DA;
ZColorStringGrid1.LineDesign.LineColor := clSilver;
//固定列と固定行数を設定して,その文字列のアライメントを設定
ZColorStringGrid1.FixedCols := 1;
ZColorStringGrid1.FixedRows := 2;
ZColorStringGrid1.DefaultFixedCellStyle.VerticalAlignment := vaCenter;
ZColorStringGrid1.DefaultFixedCellStyle.HorizontalAlignment := taCenter;
ZColorStringGrid1.Options := ZColorStringGrid1.Options + [goEditing];
ZColorStringGrid1.Options := ZColorStringGrid1.Options + [goThumbTracking];
//固定行と固定列のセル結合
ZColorStringGrid1.MergeCells.AddRectXY(0,0,0,1);
ZColorStringGrid1.MergeCells.AddRectXY(1,0,1,1);
ZColorStringGrid1.MergeCells.AddRectXY(2,0,3,0);
ZColorStringGrid1.MergeCells.AddRectXY(4,0,4,1);
//第1列名(列番号は0)はデータを表示しないので狭い幅に
ZColorStringGrid1.ColWidths[0] := 20;
//表示データをファイルから読み込む
AFileName := ExtractFilePath(Application.ExeName) + 'ATest.txt';
SL := TStringList.Create;
try
SL.LoadFromFile(AFileName);
//列数と行数設定
ZColorStringGrid1.ColCount := 5;
ZColorStringGrid1.RowCount := SL.Count + ZColorStringGrid1.FixedRows;
for i := 0 to SL.Count - 1 do begin
iRow := i + ZColorStringGrid1.FixedRows;
ZColorStringGrid1.Rows[iRow].CommaText := ',' + SL[i];
end;
finally
FreeAndNil(SL);
end;
//固定行のテキスト
ZColorStringGrid1.Cells[1, 0] := '番号';
ZColorStringGrid1.Cells[2, 0] := '食品';
ZColorStringGrid1.Cells[2, 1] := '分類';
ZColorStringGrid1.Cells[3, 1] := '食品名';
ZColorStringGrid1.Cells[4, 0] := 'キロカロリー';
//セルのスタイル各種設定
AStyle := ZColorStringGrid1.DefaultCellStyle;
AStyle.VerticalAlignment := vaCenter;
AStyle.HorizontalAlignment := taLeftJustify;
AStyle.Font.Color := clBlack;
AStyle.Font.Size := 9;
ZColorStringGrid1.CellStyleCol[1, False] := AStyle;
ZColorStringGrid1.CellStyleCol[2, False] := AStyle;
ZColorStringGrid1.CellStyleCol[3, False] := AStyle;
AStyle.HorizontalAlignment := taRightJustify;
ZColorStringGrid1.CellStyleCol[4, False] := AStyle;
ZColorStringGrid1.SelectedColors.FontColor := clBlack;
end;
//=============================================================================
// 指定セルを結合する
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
begin
ZColorStringGrid1.MergeCells.AddRectXY(2,5,3,8);
ZColorStringGrid1.Invalidate;
end;
//=============================================================================
// 結合したセルの結合を解除する
//=============================================================================
procedure TForm1.Button2Click(Sender: TObject);
var
MergCellNo : Integer;
begin
//結合セルのインデックスを取得
MergCellNo := ZColorStringGrid1.MergeCells.InMergeRange(2, 5);
//そのインデックスのセル結合を解除
ZColorStringGrid1.MergeCells.DeleteItem(MergCellNo);
ZColorStringGrid1.Invalidate;
end;
//=============================================================================
// セルの文字列描画前に発生するイベント
// TZColorStringGridコンポはDrawingStyleはgdsClassicしか有効でないので
// 固定行と列は体裁のため,グラデーションで塗りつぶす
//
// usesにGraphUtilが必要
//=============================================================================
procedure TForm1.ZColorStringGrid1BeforeTextDrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
if gdFixed in State then begin
//Rectの矩形領域内をグラデーションで塗り潰す
GradientFillCanvas(ZColorStringGrid1.Canvas,
ZColorStringGrid1.GradientStartColor,
ZColorStringGrid1.GradientEndColor,
Rect,
gdVertical);
end;
end;
//=============================================================================
// 結合セルの文字列描画前に発生するイベント
// TZColorStringGridコンポはDrawingStyleはgdsClassicしか有効でないので
// 結合した固定行と列も体裁のため,グラデーションで塗りつぶす
// このイベント内で描画するCanvasは,結合セル専用のCellCanvas
//
// usesにGraphUtilが必要
//=============================================================================
procedure TForm1.ZColorStringGrid1BeforeTextDrawMergeCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState; var CellCanvas: TCanvas);
begin
if gdFixed in State then begin
//Rectの矩形領域内をグラデーションで塗り潰す
GradientFillCanvas(CellCanvas,
ZColorStringGrid1.GradientStartColor,
ZColorStringGrid1.GradientEndColor,
Rect,
gdVertical);
end;
end;
end.
以下は,標準の TStringGrid に追加された,このコンポーネント独自のプロパティの内,コンポーネント全体に関係するプロパティです. |
表1
コンポーネント全体に影響するプロパティ
オブジェクト・インスペクタで設定できる |
プロパティ |
型 |
説明 |
InplaceEditorOptions |
- |
インプレースエディタのプロパティ
背景色やフォントの色設定が可能 |
DefaultCellStyle |
TCellStyle |
セルのデフォルトのスタイル設定 |
DefaultFixedCellStyle |
TCellStyle |
固定セルのデフォルトのスタイル設定 |
LineDesign |
TLineDesign |
グリッド線の設定
[06_グリッド線のプロパティ] 参照 |
SelectedColors |
TSelectColor |
選択セルの背景色やフォントの設定
[05_選択セルのプロパティ] 参照 |
SizingHeight |
Boolean |
セル高さが文字列高さより低い場合,セル高を自動調整
UseCellSizingHeight が True だと設定は無効 |
SizingWidth |
Boolean |
セル幅が文字列長さより短い場合,セル幅を自動調整
UseCellSizingWidth が True だと設定は無効 |
UseCellSizingHeight |
Boolean |
セルのプロパティの SizingHigth を有効にするか無効にするかの設定
True にすると SizingHeight の設定は無効 |
UseCellSizingWidth |
Boolean |
セルのプロパティの SizingWidth を有効にするか無効にするかの設定
True にすると SizingWidth の設定は無効 |
UseCellWordWrap |
Boolean |
セルのプロパティの CellWordWrap を有効にするか無効にするかの設定
True にすると WordWra pの設定は無効 |
WordWrap |
Boolean |
全セル内での折り返し表示の設定
UseCellWordWrap が False の場合のみ有効 |
上の表の SizingHeight プロパティのテスト用コードです.
以下のテストでは,設計時にはコンポーネントのデフォルト設定を用いています.関係するプロパティ等は全てコード内で設定しています.ただし,第 1 列目だけは列幅を変更しています. |
|
図7
セル高さの自動調整
|
procedure TForm1.FormShow(Sender: TObject);
begin
//デフォルトのフォントサイズを大きくしてみる
ZCGrid1.DefaultCellStyle.Font.Size := 25;
//セルの高さをフォントサイズに合わせて自動調整
ZCGrid1.SizingHeight := True;
//これ以降は各セルへのデータのセット
上の表の SizingWidth プロパティのテスト用コードです. |
|
図8
列幅の自動調整
- SizingWidth を True にする
- UseCellWordWrap を False にする
- 備考:千代田区に秋葉原という町名はない
|
procedure TForm1.FormShow(Sender: TObject);
begin
ZCGrid1.UseCellSizingWidth := False;
ZCGrid1.SizingWidth := True;
//これ以降は各セルへのデータのセット
05_セル幅に合わせて文字列を自動改行 ( 折り返し表示 ) |
上の表の WordWrap プロパティのテスト用コードです. |
|
図9
文字列の自動折り返し表示
- WordWrap を True にする
- UseCellWordWrap を Falseにする
|
procedure TForm1.FormShow(Sender: TObject);
begin
ZCGrid1.UseCellWordWrap := False;
ZCGrid1.WordWrap := True;
//これ以降は各セルへのデータのセット
end;
セルの背景色やフォントのプロパティは,次の表のように,セル単位,列単位あるいは行単位で設定できます. |
表2
セルのスタイル設定用プロパティ
セル単位,列単位,行単位で設定できる |
プロパティ |
型 |
説明 |
CellStyle[ACol, ARow] |
TCellStyle |
セルごとに設定する場合
ACol は列番号で Integer 型 (0 が 1 列目)
ARow は行番号で Integer 型 (0 が 1 行目) |
CellStyleCol[ACol, FixedRow] |
TCellStyle |
列単位の設定
ACol は列番号で Integer 型 (0 が 1 列目)
FixesRow は Boolea n型
FixedRow を False にすると固定行は対象外 |
CellStyleRow[ARow, FixedCol] |
TCellStyle |
行単位の設定
ARow は行番号で Integer 型(0 が 1 行目)
FixedCol は Boolean 型
FixedCol を False にすると固定列は対象外 |
上表のプロパティを設定する際に使用する,各スタイルの値です.これらの値は,セルに文字列を代入する前に設定しないと機能しないものがあります. |
プロパティ |
型 |
説明 |
BGColor |
TColor |
セルの背景色 |
BorderCellStyle |
TBorderCellStyle |
セルのボーダー線の設定で,以下のいずれかの値
sgLowered
sgRaised
sgNone |
Font |
Tfont |
文字(テキスト)のフォントプロパティ |
HorizontalAlignment |
TAlignment |
文字列 (テキスト) の横方向アライメント
Delphi の TAligment と同じ |
SizingHeight |
Boolean |
セルの高さが文字の高さより低い場合に自動調整
UseCellSizingHeight が True の場合のみ有効 |
SizingWidth |
Boolean |
セル幅が文字列の長さより短い場合に幅を自動調整
UseCellSizingWidth が True の場合のみ有効 |
VerticalAlignment |
TVerticalAlignment |
文字列(テキスト)の縦方向のアライメント
以下のいずれかの値
vaTop
vaCenter
vaBottom |
WordWrap |
Boolean |
文字列の折り返し表示
UseCellWordWrap が True の場合のみ有効 |
結合セル (TMergeCells クラス) のプロパティです.
このコンポーネントでは,結合セルは TMergeCells というクラスで管理しています.セルの結合と結合の解除はメソッドで行います. |
プロパティ |
型 |
説明 |
Count |
Integer |
読み出し専用
現在グリッドに設定されている結合セルの数を取得する |
Items[Num] |
TRect |
読み出し専用
NumはInteger 型で,結合セルのインデックス
TRect.Left には左端のセルの列番号が格納される
TRect.Top には上端のセルの行場号が格納される
結合セルのインデックスの最小値は 0 |
|
図10
列単位でセルの背景色などを変更
|
//=============================================================================
// セルのプロパティを変更してみる
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
AStyle : TCellStyle;
begin
//デフォルトのセルスタイルを取得して,一部変更
AStyle := ZCGrid1.DefaultCellStyle;
AStyle.BGColor := $00DDEDDA;
AStyle.Font.Color := clPurple;
AStyle.HorizontalAlignment := taCenter;
AStyle.Font.Style := AStyle.Font.Style + [fsBold];
//設定したスタイルを列1に適用.固定セルには適用しない
ZCGrid1.CellStyleCol[1, False] := AStyle;
//セル単位の設定
//MergeCellsメソッドでセルを結合
//結合セルの場合は,左上のセルで指定する
ZCGrid1.MergeCells.AddRectXY(3, 3, 4, 4);
ZCGrid1.CellStyle[3, 3].BGColor := clSilver;
end;
上の表にはありませんが,Ver 0.4 では文字列の回転のプロパティが実装されています.
その動作確認のテストコードです.縦書きフォントで描画するのもいいですが,回転した文字列の描画というのもデザイン的に意味があるかも知れません. |
//=============================================================================
// セルのプロパティを変更してみる セル内の文字列の回転の例
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
AStyle : TCellStyle;
begin
//デフォルトのセルスタイルを取得して,一部変更
AStyle := ZCGrid1.DefaultCellStyle;
AStyle.Font.Name := 'Tahoma';
AStyle.Font.Size := 12;
AStyle.Rotate := 90;
AStyle.Rotate := 90;
AStyle.HorizontalAlignment := taCenter;
//設定したスタイルを列2に適用.固定セルにも適用する
ZCGrid1.CellStyleCol[2, True] := AStyle;
//第2列名の幅を変更してみる
ZCGrid1.ColWidths[2] := 40;
end;
選択中のセル (TSelectColor クラス)のプロパティです.選択セルの背景色等を設定できます.
これらの値は,オブジェクト・インスペクタの SelectCololrs プロパティで設定できます. |
プロパティ |
型 |
説明 |
BGColor |
TColor |
選択セルの背景色 |
ColoredSelect |
Boolean |
選択セルの背景色を塗り潰す場合は True に,
コンポの Color プロパティにする場合は False にする |
FontColor |
TColor |
選択セルの文字フォントの色 |
UseFocusRect |
Boolean |
選択セルのフォーカス線の表示 |
選択中のセル (TSelectColor クラス) のプロパティのテスト用コードです. |
|
図11
選択セルの背景色を変更 |
procedure TForm1.FormShow(Sender: TObject);
begin
ZCGrid1.SelectedColors.BGColor := $00D9FFD9;
ZCGrid1.SelectedColors.ColoredSelect := True;
ZCGrid1.SelectedColors.FontColor := clBlack;
ZCGrid1.SelectedColors.UseFocusRect := True;
//これ以降はセルへのデータのセット
end;
グリッド線 (TLineDesign クラス) のプロパティです.オブジェクト・インスペクタの LineDesign プロパティで設定できます. |
プロパティ |
型 |
説明 |
LineColor |
TColor |
グリッド線の色 |
LineDownColor |
TColor |
BorderCellStyle の値が sgLowered か sgRaised の時に有効
枠の暗い方の設定値 |
LineUpColor |
TColor |
BorderCellStyle の値が sgLowered か sgRaised の時に有効
枠の明るい方の設定値 |
グリッド線 (TLineDesign クラス) のプロパティのテスト用コードです. |
|
図12
グリッド線の色を変更
|
procedure TForm1.FormShow(Sender: TObject);
begin
ZCGrid1.LineDesign.LineColor := $00AED7D7;
//これ以降は各セルへのデータのセット
end;
次の表は,結合セル (TMergeCells クラス) のメソッドです.セルの結合や結合の解除など,結合セルの制御はこれらのメソッド類を使用します.ここで言う結合セルとは,1 つ以上のセルを結合したセルのことを意味しています.結合セルは一意の整数値 (インデックス) で識別します.
結合セルの位置は,エクセルと同じように,結合前の左上のセルの列と行で指定し,そのセルに対してスタイルの設定,文字列の代入などを行います.
このコンポーネントのセルの編集時に使用するエディタは,TInplaceEditor の直接の継承クラスではありません.TMemo が使用されています.つまり,セルに TMemo コンポーネントのインプレースエディタを表示していることになります.したがって,かなりのカスタマイズが可能です. |
表7
表中の num は結合セルのインデックスで Integer 型
ACol,ARow は Integer 型で,ACol は列番号,ARow は行番号 |
結合セルのメソッド |
戻り値 |
説明 |
AddRect(Rct) |
Byte |
Rct は TRect 構造体
Rct.Left に左端の列番号
Rct.Top に上端の行番号
Rct.Right に右端の列番号
Rct.Bottom に下端の行番号を各々指定
戻り値の意味
0. セルの結合に成功
1. 指定セルが範囲外の値
2. 既存の結合セルと範囲がオーバーラップ
3. 追加できなかったセルがある
4. 固定セルとデータセルを結合しようとした |
AddRectXY(x1, y1, x2, y2) |
Byte |
x1,y1,x2,y2 で指定する列と行範囲のセルを結合
戻り値の意味は AddRec tメソッドと同じ |
Clear() |
- |
グリッド内の結合セルの結合を全て解除 |
DeleteItem(num) |
Boolean |
num で指定する結合セルの結合を解除 |
GetHeightArea(num) |
Integer |
num で指定する結合セルの高さ (ドット数) を取得 |
GetWidthArea(num) |
Integer |
num で指定する結合セルの幅 (ドット数) を取得 |
GetSelectedArea(SetSelected) |
TGridRect |
SetSelected は Boolean 型
[Shift] + [矢印キー] などで複数のセルを選択した際に,選択セルの範囲を,元の列番号と行番号の値でTGridRect 構造体に返す
SetSelected を True にすると,Selection プロパティにその値をセットする |
InLeftTopCorner(ACol, ARow) |
Integer |
セル (ACol,ARow) が結合セルエリアの左上のセルであれば,その結合セルのインデックスを返す
そうでない場合は負の値を返す |
InMergeRange(ACol, ARow) |
Integer |
結合する前のセル (ACol, ARow) が,結合セルのエリア内にあれば,結合セルのインデックスを返す
結合セルエリアにない場合は負の値を返す |
Options プロパティで goRowSelect を追加し,行選択を有効にした場合の,結合セルの動作を確認するための参考コードです. |
|
図13
結合セルの行選択
|
リスト8
結合セルがある場合の goRowSelect プロパティ動作テスト |
procedure TForm1.FormShow(Sender: TObject);
begin
//セルを結合して,OptionsプロパティのメンバにgoRowSelectを追加
ZCGrid1.MergeCells.AddRectXY(3, 2, 4, 3);
ZCGrid1.Options := ZCGrid1.Options + [goRowSelect];
//これ以降は他のセルへのデータのセット
このコンポーネントで追加されているイベントです.結合セルと通常のセルとでは別のイベントとなっています. |
イベント |
説明 |
OnBeforeTextDrawCell |
セルに文字列を描画する前に発生 |
OnBeforeTextDrawMergeCell |
結合セルに文字列を描画する前に発生 |
OnDrawMergeCell |
結合セルの描画の際に発生
標準の TStringGrid の OnDrawCell の結合セル用版 |
イベントのテスト用コードです.固定セルグラデーションにしてみました.また,グリッド線も淡い灰色にしています.結構体裁がよくなっているのではないかと思われます. |
|
図14
イベントの使用例
|
リスト9
OnBeforeTextDrawCell イベントの使用例
標準の TStringGrid の OnDrawCell イベントと違い,この後に文字列の描画コードは必要ない |
procedure TForm1.ZCGrid1BeforeTextDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
if gdFixed in State then begin
//Rectの矩形領域内をグラデーションで塗り潰す
//usesにGraphUtilが必要
GradientFillCanvas(ZCGrid1.Canvas,
ZCGrid1.GradientStartColor,
ZCGrid1.GradientEndColor,
Rect,
gdVertical);
end;
end;
[派生元のコンポーネントと交換する方法] で説明しているユニットを使用すると,このコンポーネントをインストールしないでテストできます.
当然ですが,このコンポーネントで追加されたプロパティやイベントは,オブジェクト・インスペクタでは設定できません. |
|
図15
設計時画面
- Delphi 標準の TStringGrid を配置
|
|
図16
実行結果 |
リスト10
コンポーネントをインストールしないでテストするためのコード |
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, Grids, ZColorStringGrid, StdCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
Button1: TButton;
StringGrid1: TStringGrid;
procedure FormShow(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private 宣言 }
ZCGrid1 : TZColorStringGrid;
procedure ZColorStringGrid1BeforeTextDrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState);
procedure ZColorStringGrid1BeforeTextDrawMergeCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState;
var CellCanvas: TCanvas);
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
uses plChgCompo, GraphUtil;
{$R *.dfm}
//=============================================================================
// フォーム作成時にコンポーネントの入れ換え
//=============================================================================
procedure TForm1.FormCreate(Sender: TObject);
begin
//フォーム作成時にコンポーネントの機能を入れ替え
ZCGrid1 := TZColorStringGrid(ChangeComponent(StringGrid1, TZColorStringGrid));
//標準のStringGridにないイベントは再定義が必要
ZCGrid1.OnBeforeTextDrawCell := ZColorStringGrid1BeforeTextDrawCell;
ZCGrid1.OnBeforeTextDrawMergeCell := ZColorStringGrid1BeforeTextDrawMergeCell;
end;
//=============================================================================
// ZColorStringGridのテスト用初期設定とデータのセット
//=============================================================================
procedure TForm1.FormShow(Sender: TObject);
begin
ZCGrid1.UseCellSizingWidth := False;
ZCGrid1.SizingWidth := True;
//テスト用の値をセット(タイトル行)
ZCGrid1.Cells[1,0] := '調査番号';
ZCGrid1.Cells[2,0] := '都道府県';
ZCGrid1.Cells[3,0] := '予想値';
ZCGrid1.Cells[4,0] := '結果値';
//テスト用の値をセット
ZCGrid1.Cells[1,1] := 'A-100';
ZCGrid1.Cells[1,2] := 'A-200';
ZCGrid1.Cells[1,3] := 'A-300';
ZCGrid1.Cells[1,4] := 'A-400';
ZCGrid1.Cells[2,1] := '東京都' + sLineBreak + '千代田区秋葉原5丁目';
ZCGrid1.Cells[2,2] := '大阪府';
ZCGrid1.Cells[2,3] := '京都府';
ZCGrid1.Cells[2,4] := '長野県';
ZCGrid1.Cells[3,1] := '5000';
ZCGrid1.Cells[3,2] := '8000';
ZCGrid1.Cells[3,3] := '3000';
ZCGrid1.Cells[3,4] := '2000';
ZCGrid1.Cells[4,1] := '5500';
ZCGrid1.Cells[4,2] := '8300';
ZCGrid1.Cells[4,3] := '3100';
ZCGrid1.Cells[4,4] := '3000';
ZCGrid1.ColWidths[0] := 20;
end;
//=============================================================================
// セルの文字列描画前に発生するイベント
//=============================================================================
procedure TForm1.ZColorStringGrid1BeforeTextDrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
//
end;
//=============================================================================
// 結合セルの文字列描画前に発生するイベント
//=============================================================================
procedure TForm1.ZColorStringGrid1BeforeTextDrawMergeCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState; var CellCanvas: TCanvas);
begin
//
end;
end.
|