お世話になっております。
XP,Delphi2007です。
フォームにMemo1を配置し、
procedure TForm1.Memo1Change(Sender: TObject);
begin
Application.ProcessMessages;
end;
とします。
Memo1に全角で12345と入力し、その文字列をすべて選択状態にして、もう一度12345と入力して、Enterキーを押すと、Memo1のTextの値が23451となってしまいます。
Application.ProcessMessages;
を書かないと、この現象は起こりません。
Memo1Changeに、
Application.ProcessMessages
を書いても、上のような現象が起きないようにするには、どうしたらよいでしょうか。
よろしくお願いします。
この位置にApplication.ProcessMessagesをはさむ理由は何でしょうか?
IMEがらみのメッセージに関して、TEditor開発者の本田氏が書いています。
http://compodev.at.infoseek.co.jp/ime.html
たぶん参考になるかと。
ありがとうございます。
なぜApplication.ProcessMessagesをはさむのかというと、質問ではわかりやすく
Application.ProcessMessages
1行だけを書いていますが、実際は、Memoにキーが入力されたら、procedure TForm1.Memo1Change内から、Image描画するルーチンに飛ぶようにしてあり、マウスの操作からもImage描画ルーチンにくるので、ルーチンの途中でのキーやマウスの入力に対応するために、
Image描画ルーチン内にApplication.ProcessMessagesを入れています。
http://compodev.at.infoseek.co.jp/ime.html
を見てみました。難しくて、理解に時間がかかりそうですが、調べてみます。
ありがとうございました。
ツイート | ![]() |