Delphi 7悬浮窗体功能实现
Delphi7 的悬浮窗体功能,用得好真的挺香的。没有边框、透明背景,还能一直飘在其他窗口上方,做个小工具提示或者实时监控面板再合适不过。核心点就几个:设置窗体属性、改下 WndProc
,加上鼠标拖动逻辑,差不多就能跑起来。
窗体的 BorderStyle 设成 bsNone
,标题栏隐藏,视觉上就干净多。再配合 AlphaBlend 和 AlphaBlendValue,透明度可以随便调,做成玻璃效果也不是问题。
让窗体一直顶在最上面,要在 WndProc
里 WM_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;
想拖动窗体也不难,鼠标按下记录一下位置,移动时计算偏移量再更新 Top 和 Left。用的是 MouseDown
和 MouseMove
搭配 SetCapture
。
背景透明方面,Delphi7 虽然老,但还是能搞定。用 FormPaint
事件配合 Canvas.FillRect 来画背景,再挑一个当“透明色”的颜色(比如 clFuchsia
),后续你可以用 Region 或 SetLayeredWindowAttributes 来进一步提升效果。
你也可以参考下Delphi7 实现窗体前置功能这篇文章,讲得蛮细的,跟悬浮窗体这个需求挺搭的。
如果你想做个总是飘在屏幕边缘的小工具,比如像 QQ 悬浮球、快速启动栏啥的,这套方案就比较合适。想玩出花来,后面你还能加吸附效果、图形蒙版、交互按钮之类的,Delphi 都能搞定。
悬浮窗体.rar
预估大小:9个文件
悬浮窗体
文件夹
Unit1.dfm
497B
Project1.exe
10.58MB
Unit1.pas
486B
DropBin.dfm
409KB
Project1.res
876B
DropBin.pas
5KB
Project1.dof
2KB
Project1.dpr
230B
Project1.cfg
446B
5.19MB
文件大小:
评论区