喫茶XRAYトップページ

[スレッド全体
]

[1201] Re:他のプログラムからアクティブにされた場合のイベント取得は?返信 削除
2007/4/13 (金) 22:03:10 Mr.XRAY
▼ Syakeさん

> 何故、消す必要があるの?ってのは無しにして下さい。

知りたい〜!! (ウソ、ウソ)

> ほんで、課題は再表示された時のイベントを捕まえるのはどうするんじゃろ?

単に、アクティブにされるウィンドウにメッセージを送るってのはどうで
しょうか。
ただし、アクティブにされる方もDelphi製で、自分でメッセージを受取る
コードを書くことが条件です。

====== 送る側 =========

procedure TSenderForm.Button1Click(Sender: TObject);
var
     hWindow   : HWND;
begin
     //受取る側のウィンドウハンドル
     hWindow := FindWindow('TReceivForm',nil);
     if hWindow<>0 then begin
       //アクティブにする等の処理
       SendMessage(hWindow,WM_USER+100,0,0);
       //またはここにアクティブにする等の処理
     end;
end;

====== アクティブにされる側 =========

procedure WMUser100(var Message: TMessage); message WM_USER+100;

を定義しておいて、このメッセージハンドラを

procedure TReceivForm.WMUser100(var Message: TMessage);
begin
     Panel1.Caption:='起こされてしまった!!';
end;

注意:
このメッセージのWParam,Lparam等に値を設定しても、異なるプロセスでは
受取れません。これができれば、先のTSさんのような悩みは簡単解決です。

追記:
HWNDという変数はやめた方がいいかと。予約語ですので... (^_^;)
特に理由があれば別ですが。余計なお世話だったらゴメンなさいませ。
後、あるサンプルコードからコピペしてオンライン修正ですので、よろしく。
(つまり、動作確認してございません)




[1206] Re2:他のプログラムからアクティブにされた場合のイベント取得は?返信 削除
2007/4/16 (月) 09:30:21 Syake
▼ Mr.XRAYさん
マスターありがとうございます。

そういえば、何かで使った事ある「SendMessage」

起動処理に追加
> SendMessage(hWindow,WM_USER+100,0,0);
フォームに追加
> procedure WMUser100(var Message: TMessage); message WM_USER+100;
上記で上手くいってございます。
アクティブにする側もアクティブにされる側もDelphi製同一のアプリですので
お蔭様で今回は無事に・・・・
 
> HWNDという変数はやめた方がいいかと。予約語ですので... (^_^;)
気をつけますです。 ありがとうございます。
> 余計なお世話だったらゴメンなさいませ。
とんでもございません。m(__)m

 

[▼次のスレッド]
INCM/CMT
Cyclamen v3.82