MemoChangeでApplication.ProcessMessagesするには?


かんとく  2009-10-14 19:11:42  No: 35881

お世話になっております。

XP,Delphi2007です。

フォームにMemo1を配置し、

procedure TForm1.Memo1Change(Sender: TObject);
begin

Application.ProcessMessages;

end;

とします。

Memo1に全角で12345と入力し、その文字列をすべて選択状態にして、もう一度12345と入力して、Enterキーを押すと、Memo1のTextの値が23451となってしまいます。

Application.ProcessMessages;
を書かないと、この現象は起こりません。

Memo1Changeに、
Application.ProcessMessages
を書いても、上のような現象が起きないようにするには、どうしたらよいでしょうか。

よろしくお願いします。


  2009-10-15 15:49:23  No: 35882

この位置にApplication.ProcessMessagesをはさむ理由は何でしょうか?


にしの  2009-10-15 18:26:50  No: 35883

IMEがらみのメッセージに関して、TEditor開発者の本田氏が書いています。
http://compodev.at.infoseek.co.jp/ime.html

たぶん参考になるかと。


かんとく  2009-10-16 06:09:24  No: 35884

ありがとうございます。

なぜApplication.ProcessMessagesをはさむのかというと、質問ではわかりやすく
Application.ProcessMessages
1行だけを書いていますが、実際は、Memoにキーが入力されたら、procedure TForm1.Memo1Change内から、Image描画するルーチンに飛ぶようにしてあり、マウスの操作からもImage描画ルーチンにくるので、ルーチンの途中でのキーやマウスの入力に対応するために、
Image描画ルーチン内にApplication.ProcessMessagesを入れています。

http://compodev.at.infoseek.co.jp/ime.html
を見てみました。難しくて、理解に時間がかかりそうですが、調べてみます。

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


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

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






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