StringGrid でセル編集終了のイベントを得たい
|
StringGrid で表計算のような動作をさせようとすると、セル編集終了のイベントで、関係し合うセルの再計算を行いたくなります。OnSetEditText というイベントが利用できそうなのですが、このイベントはユーザのキー入力の一文字ごとに発生するため使えません。
で、少なくとも Delphi3 では、以下のようにすると、セル編集終了時を検出することができます。
これは、セル編集終了時に、OnSetEditText が2度続けて同じ Value 値で呼び出されるという現象を利用しています。Delphi の今後のバージョンで動作が保証されるわけではありませんので、注意が必要です。また、Options に goAlwaysShowEditor が含まれている場合には、Enter キーで値を確定することができないという不具合(?)が生じます。
procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer;
const Value: String);
const
MagicValue = 'd0308|ybh<_lfds$t083q()'#1#5; // 入力値としてありえない値
PreviousEditorValue: string = MagicValue; // C でいう static 変数の代り
begin
if Value<>PreviousEditorValue then begin // まだ編集中
PreviousEditorValue:= Value;
Exit;
end;
// 編集終了時には、同じ値が二度続けて送られてくる
case ACol of
0: ;
1: ; // ここで入力後の処理
2: ;
end;
// 次回のために絶対にありえない文字列を代入
PreviousEditorValue:= MagicValue;
end; |
|