[英]How to make a window like Windows 7 Notifications Flyouts, (WS_THICKFRAME but NOT-RESIZABLE)
[英]Windows 7 style Notifications Flyouts in Delphi
關於Microsoft的通知區域建議,我正在尋找想法或Delphi組件來實現Notification Area Flyouts 。
第一個“自然”的想法是使用標准的Delphi表單,但我面臨兩個問題:
我會感謝任何線索或組件來實現它:)
最好的祝福。
jachguate。
PS。 在Win7(Delphi)中將通知區域圖標轉換為程序圖標時存在相關問題。
更新[0]我還在尋找建議。 @skamradt答案看起來非常好,但遺憾的是在實踐中效果不佳。
更新[1]最后,在調用SetForegroundWindog強制彈出“激活”后,自動關閉行為正在使用WM_ACTIVATE消息
begin
FlyoutForm.Show;
SetForegroundWindow(FlyoutForm.Handle);
end;
現在,我正在尋找建議來達到邊界行為和視覺風格,因為最接近的行為是使用樣式實現的WS_POPUP或WS_DLGFRAME,而最接近的視覺目標是將WSFOPUP或WS_THICKFRAME設置為樣式。
我相信你的后續是以下幾點:
TForm1 = class(TForm)
:
protected
procedure CreateParams(var Params: TCreateParams); override;
procedure WMActivate(Var msg:tMessage); message WM_ACTIVATE;
end;
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.Style := WS_POPUP or WS_THICKFRAME;
end;
procedure TForm4.WMActivate(var msg: tMessage);
begin
if Msg.WParam = WA_INACTIVE then
Hide; // or close
end;
這將為您提供一個帶有玻璃框架的相當大的彈出窗口。 由於缺少標准的Windows標題,因此無法在不進行其他編程的情況下移動窗口。 當另一個窗口獲得焦點時,FormDeactivate事件將被觸發...但僅當您切換到同一應用程序中的另一個窗體時。 無論切換應用程序如何處理它,請使用消息捕獲方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.