掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
StringGridのInplaceEditorでIME状態取得について (ID:47735)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
InplaceEditorで日本語を入力する時に今文字の変換中かどうかを知りたいのですが 下記の様なソースでやりますと ImeWindowProc_1 はスタックオーバーフローになってしまいます。 スタックオーバーフローにならないようにしたいのですが良い方法が思いつきません。 InplaceEditor を SGrid1GetEditText の外に出すことなども考えましたが無理のようで 何かいい方法がありましたらご教授お願いいたします。 (因みに環境は Windows8.1+Delphi6です) type TForm1 = class(TForm) 〜略〜 StringGrid1: TStringGrid; 〜略〜 private { Private 宣言 } ImeConvStat:boolean; ImeWndMethod_1:TWndMethod; procedure ImeWindowProc_1(var Msg:TMessage); public { Public 宣言 } end; 〜略〜 //----------------------------------------- // IME日本語変換状態取得 / TInplaceEdit用 procedure TForm1.ImeWindowProc_1(var Msg: TMessage); begin case Msg.Msg of WM_IME_ENDCOMPOSITION:begin ImeConvStat := False; // 変換終了 end; WM_IME_COMPOSITION:begin ImeConvStat := True; // 変換中 end; end; ImeWndMethod_1(Msg); end; //----------------------------------------- // セル編集 procedure TForm1.SGrid1GetEditText(Sender: TObject; ACol, ARow: Integer; var Value: String); var InpEdit:TInplaceEdit; begin InpEdit := TMyGrid(StringGrid1).InplaceEditor; if (InpEdit <> nil) then begin ImeWndMethod_1 := InpEdit.WindowProc; InpEdit.WindowProc := ImeWindowProc_1; end; end;
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.