StringGridのOnSelectCellの後に処理をしたいのですが

解決


mikichan  2005-04-26 05:14:00  No: 14473

OnSelectCell終了時点でWindowsメッセージを取得するようなことは可能でしょうか?


りおりお  2005-04-26 09:30:25  No: 14474

OnSelectCell の最後でフォームに適当なメッセージをポストするといいのでは。
たとえば

PostMessage(Handle,WM_APP+100,0,0);

として、Form1 のメソッド

procedure WMApp100(var Msg:TMessage);message WM_APP+100;

で受け取れます。


mikichan  2005-04-26 21:13:36  No: 14475

(りおりおさん、毎度ありがとうございます)
Windowsメッセージってこういうふうに投げることができるんですね。
知りませんでした。ただ試してみたところ、メッセージを投げた時点で即
受け取る側のプロシージャが走るみたいで。。。
OnSelectCellから完全に抜けた段階でのイベントを拾うみたいなことがしたいのですが、何か方法はあるでしょうか?


りおりお  2005-04-26 22:49:56  No: 14476

> メッセージを投げた時点で即受け取る側のプロシージャが走るみたいで

そんなことはありません。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 にどう表示されるかをみてください。

一連の質問(再入など)を見てみると、ウィンドウズのメッセージ処理機構
を理解されていないようです。すこし研究してみてください。


mikichan  2005-04-27 00:53:29  No: 14477

あ、できました!(Memoを使ったら)
Application.MessageBoxで最初試してたのですが、そのときは
思った順番にならなかったのですが。。。(なぜなんだろう)
おっしゃるとおりもう少し勉強いたします。
ありがとうございました。


りおりお  2005-04-27 00:58:28  No: 14478

> Application.MessageBoxで最初試してたのですが、そのときは思った順番にならなかったのですが。。。(なぜなんだろう)

モーダルダイアログの表示は、それ自体がメッセージ処理を行うからです。
Application.PrecessMessages; を実行したのと同様です。


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

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






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