繁体   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