掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
StringGridのInplaceEditorでIME状態取得について (ID:47736)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
現状だと、OnGetEditTextが発生するたびにそのイベントハンドラ全体が実行されます。 すると、2回目に問題が発生します。 1回目: Self.ImeWndMethod_1 ← InpEdit.WindowProc // これは意図どおり 2回目: Self.ImeWndMethod_1 ← TForm1.ImeWindowProc_1 // これはマズイ この結果、TForm1.ImeWindowProc_1 の最後、 ImeWndMethod_1(Msg); で無限に自分自身を呼び出してしまいます。 なので、何らかの方法でサブクラス化を1回限りにする必要があります。 以下はその一例です。 private FCapturedEdit: TInplaceEdit; // 追加 type TMyGrid = class(TStringGrid); procedure TForm1.StringGrid1GetEditText(Sender: TObject; ACol, ARow: Integer; var Value: String); var InpEdit: TInplaceEdit; begin InpEdit:=TMyGrid(StringGrid1).InplaceEditor; if (InpEdit<>FCapturedEdit) and (Assigned(InpEdit)) then begin Self.ImeWndMethod_1:=InpEdit.WindowProc; InpEdit.WindowProc:=Self.ImeWindowProc_1; FCapturedEdit:=InpEdit; end; end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.