Windows7でTEditのIME変換後文字のOnChangeイベントでの不具合について

解決


どらごんちゃん  2011-07-09 01:31:39  No: 40769

いつもこちらのHPを参考にさせていただき助けていただいております。
皆様ありがとうございます。

今回は私にお力をお貸しください。
入力フォームにTEditを貼り付け、IME をimSKataに設定し、
TEditのOnChangeイベントにて変換後のカナ文字を用いて、
データの絞込みを行っております。
データはSQL Server 2005 のデータです。

しかし、OnChangeイベントでイベントが発生するタイミングで以下のエラーが発生します。
エラー内容
「モジュール ●●●.EXE のアドレス 004DFF49 でアドレス 00000000 に対する読み込み違反がおきました。」

どうやら、クエリーにSQLを流す際に発生しているようではなく、
TEditのOnChangeイベントを呼び出す際にエラーが発生しているようです。

解決する良い手立てはありますでしょうか?

よろしくお願いいたします。

■環境
Windows 7 Pro
Delphi(R) 2007 for Win32(R) R2 Version 11.0.2902.10471 
SQL Server 2005 Express Edition SP4

SQLはどのバージョンでも同じでした。


どらごんちゃん  2011-07-09 02:24:41  No: 40770

OnKeyPressで処理を行えばエラーは出なくなりました。
ただし、ENTERキーは、IME変換確定、入力文字確定と2回叩かないと駄目なのですが。
できればOnChangeにて処理を行いたいです。
無理であればあきらめますが、
せめて、なぜ無理なのか?  を知りたいです。

よろしくお願いいたします。


DEKO  2011-07-09 05:54:32  No: 40771

OnChange イベントで SQL 処理している最中に、
さらに OnChange イベントが発生しているからだと思います。

恐らく以下が類似例だと思われます。

http://www.freeml.com/delphi-users/2013/latest?sid=b058632def368b9a3a42b42a52119a71


どらごんちゃん  2011-07-11 23:40:20  No: 40772

お世話になっています。ご教授ありがとうございます。

>>テーマが有効の場合、WM_IME_COMPOSITION が WM_IME_CHAR を複数回発>>生させ、その数だけ OnChange イベントが発生する
の部分ですね。

ソースをいじり、入力文字数分のイベントが発生するか調べたところビンゴでした。

EditWndProcで変換文字を取得し処理するようにしたいと思います。

ありがとうございました。


どらごんちゃん  2011-07-12 00:21:51  No: 40773

EditWndProcで変換中文字列を取り出しSQL処理してみましたが、
文字列を消去した際の動作などにも対応させる点に手間がかかるので、
OSの種類を判別して、Windows7とWindows Server 2008 の場合には
KeyPressイベントで処理するようにしました。
最適なコーディングがございましたら、ご教授ください。


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

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






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