あるカラムを入力不可にしようと思ったのですが・・・。
マウスで対象のところに移動した場合は、入力不可となりますが、
キーボードで移動した場合は、なぜか入力可能となります。
どうすれば、良いのでしょうか?
下記、現時点のソースです。
procedure TForm1.FormCreate(Sender: TObject);
var
I: Integer;
J: Integer;
begin
StringGrid1.AddObject(TStringColumn.Create(StringGrid1));
StringGrid1.AddObject(TStringColumn.Create(StringGrid1));
StringGrid1.AddObject(TStringColumn.Create(StringGrid1));
StringGrid1.Columns[0].Header := 'H1';
StringGrid1.Columns[1].Header := 'H2';
StringGrid1.Columns[2].Header := 'H3';
for I:=1 to StringGrid1.ColumnCount do begin
for J:=1 to StringGrid1.RowCount do begin
StringGrid1.Cells[I - 1, J - 1] := 'データ' + IntToStr(I * J);
end;
end;
end;
procedure TForm1.StringGrid1SelChanged(Sender: TObject);
begin
if (StringGrid1.ColumnIndex = 1) then begin
StringGrid1.ReadOnly := True;
end else begin
StringGrid1.ReadOnly := False;
end;
end;
ReadOnlyで制御できませんか?
こんにちは。
セルコントロールを独自に定義して、それをカラムに割り当ててやればいいです。
uses
..., FMX.Edit;
{ TStringColumn_ReadOnly }
TStringColumn_ReadOnly = class(FMX.Grid.TStringColumn)
protected
function CreateCellControl: TStyledControl; override;
end;
...
function TStringColumn_ReadOnly.CreateCellControl: TStyledControl;
begin
result := inherited;
TEdit(result).ReadOnly := True;
end;
としておいて、
procedure TForm1.FormCreate(Sender: TObject);
var
I: Integer;
J: Integer;
begin
StringGrid1.AddObject(TStringColumn.Create(StringGrid1));
StringGrid1.AddObject(TStringColumn_ReadOnly.Create(StringGrid1)); // <- ReadOnly セルコントロールを割り当て
StringGrid1.AddObject(TStringColumn.Create(StringGrid1));
...
こんな感じで使います。
[TStringGrid の使い方 (Delphi FireMonkey Tips)]
http://ht-deko.minim.ne.jp/techf011.html
おっと。この用途であれば、
procedure TForm1.FormCreate(Sender: TObject);
var
I: Integer;
J: Integer;
begin
StringGrid1.AddObject(TStringColumn.Create(StringGrid1));
StringGrid1.AddObject(TStringColumn.Create(StringGrid1));
StringGrid1.AddObject(TStringColumn.Create(StringGrid1));
StringGrid1.Columns[0].Header := 'H1';
StringGrid1.Columns[1].Header := 'H2';
StringGrid1.Columns[1].ReadOnly := True; // <- カラムコントロールを ReadOnly に
StringGrid1.Columns[2].Header := 'H3';
...
これだけでよさそうです。
ありがとうございました。
たしかに、"ReadOnly := True"で
OKでした。
当初、ある行のあるセルの値により、
同行のあるセルを入力可・不可にと
考えていました。
しかし、その必要がなくなっため、
シンプルな入力可・不可にと、
ソースを削除していったところ
上記のコーディングとなり、ハマっておりました。
ある値により入力可・不可になる件は
自分で確認してみようと思います。
ツイート | ![]() |