StringGridのCellの値を変更した場合、変更があったことを知りたい。

解決


久慈  2004-04-13 21:08:35  No: 8346

StringGridのあるCellに入力されている値を変更した場合、そのCellを出るときに変更前の値と変更後の値をとらえたいのですが、どのようにしたらいいのでしょうか。マウス、↑↓キー、Enterでフォーカスを移動させています。
OnSetEditTextイベントは1字毎に発生してしまうし・・・・悩んでいます。


jok  2004-04-14 08:36:13  No: 8347

StringGrid をサブクラス化して、インプレースエディタのフォーカスの出入り
を監視し、そのときのテキストを変更を検出できます。

新規で StringGrid1 と Memo1 を置いて以下のようにします。

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
  private
    { Private 宣言 }
  public
    revCellStr:string;
    revCol,revRow:integer;
    OldProc:TWndMethod;
    procedure SubClassProc(var Msg: TMessage);
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
  OldProc := StringGrid1.WindowProc;
  StringGrid1.WindowProc := SubClassProc;
end;

procedure TForm1.SubClassProc(var Msg: TMessage);
begin
  OldProc(Msg);
  if Msg.Msg = WM_COMMAND then
    with StringGrid1 do
      case Msg.WParamHi of
        EN_SETFOCUS:begin
          revCol := Col; revRow := Row;
          revCellStr := Cells[revCol,revRow];// 変更前のテキストを保存
        end;
        EN_KILLFOCUS:begin
          Memo1.Lines.Add(Format('before : %s  After : %s',
                                 [revCellStr,Cells[revCol,revRow]]));
        end;
      end;
end;


久慈  2004-04-15 00:16:54  No: 8348

解決できました!
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加