Delphi Tips 
-----------------------------

0263  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 1999/09/16 osamu rev 1.1
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 1999/09/16 osamu 編集
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;
参照: [Delphi-ML:42663] <Additional> <コンポーネント >

[新規作成] [最新の情報に更新]

How To
Lounge
KeyWords


Tips
Delphi
Home
Osamu Takeuchi osamu@big.or.jp