Delphi 7悬浮窗体功能实现

Delphi7 的悬浮窗体功能,用得好真的挺香的。没有边框、透明背景,还能一直飘在其他窗口上方,做个小工具提示或者实时监控面板再合适不过。核心点就几个:设置窗体属性、改下 WndProc,加上鼠标拖动逻辑,差不多就能跑起来。

窗体的 BorderStyle 设成 bsNone,标题栏隐藏,视觉上就干净多。再配合 AlphaBlendAlphaBlendValue,透明度可以随便调,做成玻璃效果也不是问题。

让窗体一直顶在最上面,要在 WndProcWM_WINDOWPOSCHANGING。这一段代码挺关键,没它的话你窗体一切换窗口就被压底下去了:

procedure TForm1.WndProc(var Message: TMessage);
begin
  if Message.Msg = WM_WINDOWPOSCHANGING then
    with PWINDOWPOS(Message.LParam)^ do
      Flags := Flags and not SWP_NOZORDER;
  inherited WndProc(Message);
end;

想拖动窗体也不难,鼠标按下记录一下位置,移动时计算偏移量再更新 TopLeft。用的是 MouseDownMouseMove 搭配 SetCapture

背景透明方面,Delphi7 虽然老,但还是能搞定。用 FormPaint 事件配合 Canvas.FillRect 来画背景,再挑一个当“透明色”的颜色(比如 clFuchsia),后续你可以用 RegionSetLayeredWindowAttributes 来进一步提升效果。

你也可以参考下Delphi7 实现窗体前置功能这篇文章,讲得蛮细的,跟悬浮窗体这个需求挺搭的。

如果你想做个总是飘在屏幕边缘的小工具,比如像 QQ 悬浮球、快速启动栏啥的,这套方案就比较合适。想玩出花来,后面你还能加吸附效果、图形蒙版、交互按钮之类的,Delphi 都能搞定。

rar
悬浮窗体.rar 预估大小:9个文件
folder
悬浮窗体 文件夹
file
Unit1.dfm 497B
file
Project1.exe 10.58MB
file
Unit1.pas 486B
file
DropBin.dfm 409KB
file
Project1.res 876B
file
DropBin.pas 5KB
file
Project1.dof 2KB
file
Project1.dpr 230B
file
Project1.cfg 446B
rar 文件大小:5.19MB