掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
「デスクトップの表示」でも消えないウィンドウを作るには? (ID:21036)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
実験してみたけど、 メインフォームに WM_SHOWWINDOW がきた時、かつ Message.lParamがSW_PARENTCLOSINGの時に 何かすれば、なんとかなるかもしれない。 PostMessageで表示できるかと思ったけど うまくいきませんでした。 別に適当でいいなら Timerかなにかで 後で Showさせるとかいう方法も・・・。 privates FAppWndProc:pointer; FOriginalProc:pointer; implements procedure TForm1.AppWndProc(var Message: TMessage); begin { Application WM_WINDOWPOSCHANGING WM_NCCALCSIZE WM_WINDOWPOSCHANGED WM_MOVE WM_SIZE MainForm Unknown($88) WM_NCPAINT WM_GETTEXT WM_ERASEBKGND WM_NOTIFY WM_NOTIFY WM_NOTIFY WM_NOTIFY WM_SHOWWINDOW WM_SHOWWINDOW } // DebugLog(Self,IntToStr(Message.Msg)); if Message.Msg = WM_SHOWWINDOW then begin DebugLog(Self,'WM_SHOWWINDOW'); DebugLog(Self,'Closing'); if Message.lParam=SW_PARENTCLOSING then begin DebugLog(Self,'Parent Closing'); end; Message.Result:=1; Exit; end; with Message do Result := CallWindowProc( FOriginalProc, Handle, Msg, WParam, LParam); end; constructor TForm1.Create(AOwner: TComponent); begin inherited; FAppWndProc:=MakeObjectInstance(AppWndProc); if FAppWndPRoc<>nil then begin FOriginalProc:= pointer(SetWindowLong( Handle,GWL_WNDPROC,longint(FAppWndProc))); end; end; destructor TForm1.Destroy; begin if (FOriginalProc<>nil) then begin SetWindowLong( Handle, GWL_WNDPROC, LongInt(FOriginalProc)); FreeObjectInstance(FAppWndProc); end; inherited; end; 最初は TApplicationのメッセージを調べたんだけど、 もしかしたら、Applicationの WM_WINDOWPOSCHANGEDのほうが、よかったかもしれない。 とりあえず、ここまで分かればあとは時間をかければ 何とかなると思います。 以上。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.