DelphiでFireMonkeyのTGridにチェックボックスを表示する

グリッドにチェックボックスを表示するにはTCheckColumnを使用します。

TGridにTCheckColumnを追加します。

001

002

グリッドの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;

サンプルプログラム

次のサンプルプログラムでは、起動時には奇数行がチェックされており、チェックボックスをチェックすることでチェックの状態が変更されます。

003

フォームに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;

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください