グリッドにチェックボックスを表示するにはTCheckColumnを使用します。
TGridにTCheckColumnを追加します。
グリッドのOnGetValueイベントで、引数ValueにTrueを設定するとチェックボックスがチェックされ、Falseを設定するとチェックが外れます。
引数のColは列番号、Rowは行番号です。
procedure TForm1.Grid1GetValue(Sender: TObject; const Col, Row: Integer;
var Value: TValue);
begin
if Col = 0 then
Value := (Row mod 2 = 0);
end;
チェックボックスがチェックされたり、チェックが外れたりすると、OnSetValueイベントが呼ばれます。
引数のColは列番号、Rowは行番号です。
procedure TForm1.Grid1SetValue(Sender: TObject; const Col, Row: Integer;
const Value: TValue);
begin
end;
サンプルプログラム
次のサンプルプログラムでは、起動時には奇数行がチェックされており、チェックボックスをチェックすることでチェックの状態が変更されます。
フォームにTGridを配置し、配置したGrid1にTCheckColumnを追加します。
チェックボックスの状態を保存する変数を作成します。
type
TForm1 = class(TForm)
…
private
{ private 宣言 }
FChecked: array of Boolean;
…
end;
フォームのOnCreateイベントで、チェックボックスの初期状態を設定します。
procedure TForm1.FormCreate(Sender: TObject);
var
I: Integer;
begin
SetLength(FChecked, Grid1.RowCount);
for I := 0 to Grid1.RowCount - 1 do
begin
FChecked[I] := (I mod 2 = 0);
end;
end;
Grid1のOnGetValueイベントでチェックボックスの状態を設定します。
チェックボックスの状態を保存した変数の値を設定します。
procedure TForm1.Grid1GetValue(Sender: TObject; const Col, Row: Integer;
var Value: TValue);
begin
if Col = 0 then
begin
Value := FChecked[Row];
end;
end;
Grid1のOnSetValueイベントで、チェックボックスの状態が変更されたときに変数の値を更新します。
procedure TForm1.Grid1SetValue(Sender: TObject; const Col, Row: Integer;
const Value: TValue);
begin
if Col = 0 then
begin
FChecked[Row] := Value.AsBoolean;
end;
end;
全体のソースコードは次のようになります。
type
TForm1 = class(TForm)
Grid1: TGrid;
CheckColumn1: TCheckColumn;
procedure FormCreate(Sender: TObject);
procedure Grid1GetValue(Sender: TObject; const Col, Row: Integer;
var Value: TValue);
procedure Grid1SetValue(Sender: TObject; const Col, Row: Integer;
const Value: TValue);
private
{ private 宣言 }
FChecked: array of Boolean;
public
{ public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
procedure TForm1.FormCreate(Sender: TObject);
var
I: Integer;
begin
SetLength(FChecked, Grid1.RowCount);
for I := 0 to Grid1.RowCount - 1 do
begin
FChecked[I] := (I mod 2 = 0);
end;
end;
procedure TForm1.Grid1GetValue(Sender: TObject; const Col, Row: Integer;
var Value: TValue);
begin
if Col = 0 then
begin
Value := FChecked[Row];
end;
end;
procedure TForm1.Grid1SetValue(Sender: TObject; const Col, Row: Integer;
const Value: TValue);
begin
if Col = 0 then
begin
FChecked[Row] := Value.AsBoolean;
end;
end;