|
Delphi2010 描画グリッド(DrawGrid) 2010/09/02 |
前回は[Additional]内の「StringGrid」(文字列グリッド)について見ましたので、今回は同じく[Additional]内の「DrawGrid」(描画グリッド)について見てみます。描画グリッドは Delphi6 にもあります。
描画グリッドは、文字列グリッドと見た目も機能もほとんど同じように見えますが、文字列を入力しようとしてもキャンセルされたように入力した文字列は保持されません。描画用ですので、プログラムで各セルに絵を描かせて利用するような感じのように思えます。というのも私自身、描画グリッドは Delphi6にもありますが、これまで一度も使った事がありません。使うような用事もありませんし、文字列グリッドで十分でしたので・・・。
それでは配置してみます。1つ目なので Nameプロパティは「DrawGrid1」となります。各プロパティやイベントは、文字列グリッドと同様のようですので、そちらを参照して下さい。
セル内に図形を描画する際には、OnDrawCellイベント内にそのプログラムコードを入力する必要があります。以下はヘルプより
グリッド内のセルを描画する必要があるときに発生します。
OnDrawCell イベントハンドラを記述すると,グリッド内のすべてのセルの内容を描画できます。Canvas プロパティのメソッドを使ってセルを描画します。Rect パラメータはキャンバス上でのセルの位置を示します。Col および Row パラメータは描画するセルの列および行インデックスを示します。State パラメータはセルに入力フォーカスがあるかどうか,セルが選択されているかどうか,セルが固定セル(スクロールしないセル)であるかどうかを示します。 |
例えば
procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
x,y : integer ;
begin
x := DrawGrid1.Col ;
y := DrawGrid1.Row ;
if (x = ACol)and(y = aRow) then begin
with DrawGrid1.Canvas do begin
Brush.Color := clBlue ;
Brush.Style := bsSolid ;
FillRect(Rect);
end;
end;
end; |
という風にすると、このイベント内は表示されている全てのセルについて対象となりますので、現在のセルだけを青く塗り潰したい場合、現在のセルの列と行を取得し、そのセルの描画の順番になったら、青く塗り潰せ、とプログラミングしています。ここに円とか三角とか好きな絵を描かせるようにすればいいですね。
クリックしたらそのセルに絵を描かせる、と思って、OnClickイベントで絵を描かせようとしても、絵は描画できません。というよりも、背景色ですぐに塗り潰されて無効化されるという感じでしょうか? 絵を描かせる場合は必ず、このOnDrawCell内にコーディングを行って下さい。
なお、これは 描画グリッドだけでなく、文字列グリッドでも同様のことが出来ます。
文字列グリッドも配置して、<オブジェクトインスペクタ>で比較をしながらざっと見ましたが、内容はどうも同じのようでした。別段、特に増えているってところは無さそうです。
|
|
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
>Delphi入門編
>Delphi2010
▲2010/09/01
2010/09/02
▼2010/09/03
シェアウェア
Script!World
データベース
|