いつもこちらの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はどのバージョンでも同じでした。
OnKeyPressで処理を行えばエラーは出なくなりました。
ただし、ENTERキーは、IME変換確定、入力文字確定と2回叩かないと駄目なのですが。
できればOnChangeにて処理を行いたいです。
無理であればあきらめますが、
せめて、なぜ無理なのか? を知りたいです。
よろしくお願いいたします。
OnChange イベントで SQL 処理している最中に、
さらに OnChange イベントが発生しているからだと思います。
恐らく以下が類似例だと思われます。
http://www.freeml.com/delphi-users/2013/latest?sid=b058632def368b9a3a42b42a52119a71
お世話になっています。ご教授ありがとうございます。
>>テーマが有効の場合、WM_IME_COMPOSITION が WM_IME_CHAR を複数回発>>生させ、その数だけ OnChange イベントが発生する
の部分ですね。
ソースをいじり、入力文字数分のイベントが発生するか調べたところビンゴでした。
EditWndProcで変換文字を取得し処理するようにしたいと思います。
ありがとうございました。
EditWndProcで変換中文字列を取り出しSQL処理してみましたが、
文字列を消去した際の動作などにも対応させる点に手間がかかるので、
OSの種類を判別して、Windows7とWindows Server 2008 の場合には
KeyPressイベントで処理するようにしました。
最適なコーディングがございましたら、ご教授ください。
ツイート | ![]() |