Delphi实现多个浮动透明窗口

Delphi 的浮动透明窗口玩法,算是蛮老派但依然实用的技巧,适合做一些悬浮提示、小工具窗口或者模仿迅雷那种浮动控件。你如果用 Delphi 开发过 UI,应该知道它对窗口的控制能力还挺强,只要配合一点 Windows API,搞出效果来不算太难。

透明效果主要靠 SetLayeredWindowAttributes 这个 API,加上给窗口加上 WS_EX_LAYERED 风格。Delphi 里写法也不复杂,用 CreateParams 来改窗口参数就行,几行代码就能搞定。

多个窗口怎么搞?动态创建就好了,在主窗体的 OnCreate 里循环跑几次,每次 new 一个窗口实例,设置好 TopLeft,想随机分布也可以,Screen.WorkAreaRect 能拿到工作区大小,随便你摆。

拖动功能建议用 OnMouseDownOnMouseMove 搭配一下,鼠标按下记住位置,移动的时候更新窗体位置,体验还挺顺的。别忘了 OnMouseUp,不然拖着拖着就甩飞了。

每个窗口都有自己的消息循环,所以消息也得分开来写。像 WM_PAINTWM_SIZE 这些都得照顾到,不然窗口表现怪怪的。可以重写 WndProc,自己拦一下感兴趣的消息。

模拟迅雷那种浮动窗?你可以加点动画,比如透明度变化,或者窗口淡入淡出啥的。图标和外观方面,可以用 GDI+ 或 VCL 图形控件搞定,视觉效果就更上一层楼。

下面是关键代码段,展示怎么加上透明风格:

procedure TMyFloatingForm.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.ExStyle := Params.ExStyle or WS_EX_LAYERED;
end;

如果你想深入了解具体代码结构,可以参考 这个示例,蛮贴近实战的。

,Delphi 的窗口控制还是蛮灵活的,只要你搞懂了消息机制和 API 组合,想做出炫一点的 UI 效果还是挺有空间的。如果你平时爱折腾界面设计,强烈建议你试试这一套。

rar 文件大小:194.7KB