OnSelectCell終了時点でWindowsメッセージを取得するようなことは可能でしょうか?
OnSelectCell の最後でフォームに適当なメッセージをポストするといいのでは。
たとえば
PostMessage(Handle,WM_APP+100,0,0);
として、Form1 のメソッド
procedure WMApp100(var Msg:TMessage);message WM_APP+100;
で受け取れます。
(りおりおさん、毎度ありがとうございます)
Windowsメッセージってこういうふうに投げることができるんですね。
知りませんでした。ただ試してみたところ、メッセージを投げた時点で即
受け取る側のプロシージャが走るみたいで。。。
OnSelectCellから完全に抜けた段階でのイベントを拾うみたいなことがしたいのですが、何か方法はあるでしょうか?
> メッセージを投げた時点で即受け取る側のプロシージャが走るみたいで
そんなことはありません。SendMessage() と PostMessage() の違いを
勉強してください。
新規で Form1 に Memo1 と Button1 を配置して
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private 宣言 }
public
procedure WMApp100(var Msg:TMessage);message WM_APP+100;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
PostMessage(Handle,WM_APP+100,1,0);
SendMessage(Handle,WM_APP+100,2,0);
Memo1.Lines.Add('これは直接コードでAdd');
end;
procedure TForm1.WMApp100(var Msg:TMessage);
begin
case Msg.WParam of
1: Memo1.Lines.Add('PostMessage より');
2: Memo1.Lines.Add('SendMessage より');
end;
end;
のようにして、Button1 を押してみて、Memo1 にどう表示されるかをみてください。
一連の質問(再入など)を見てみると、ウィンドウズのメッセージ処理機構
を理解されていないようです。すこし研究してみてください。
あ、できました!(Memoを使ったら)
Application.MessageBoxで最初試してたのですが、そのときは
思った順番にならなかったのですが。。。(なぜなんだろう)
おっしゃるとおりもう少し勉強いたします。
ありがとうございました。
> Application.MessageBoxで最初試してたのですが、そのときは思った順番にならなかったのですが。。。(なぜなんだろう)
モーダルダイアログの表示は、それ自体がメッセージ処理を行うからです。
Application.PrecessMessages; を実行したのと同様です。
ツイート | ![]() |