簡體   English   中英

Delphi中的Windows 7樣式通知彈出窗口

[英]Windows 7 style Notifications Flyouts in Delphi

關於Microsoft的通知區域建議,我正在尋找想法或Delphi組件來實現Notification Area Flyouts

替代文字

第一個“自然”的想法是使用標准的Delphi表單,但我面臨兩個問題:

  1. 我無法使用標准的“BorderStyle”屬性獲取表單邊框行為。 嘗試使用GlassFrame屬性“模仿”邊框,並將BorderStyle設置為bsNone,但是沒有邊框時沒有GlassFrame(至少在Delphi 2007中)。
  2. 當用戶點擊表單本身的任何地方時,我無法弄清楚如何使表單關閉。 昨天我嘗試了不同的消息,但沒有人按預期工作。

我會感謝任何線索或組件來實現它:)

最好的祝福。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM