虽然我认为这个问题对于 Stack Overflow 来说有点过于宽泛,但我还是忍不住写下这个简短的答案,因为它不仅容易——而且令人惊讶地容易——制作一个原始的实现其中几乎只使用 VCL。
这个想法是有一个跟随鼠标光标的半透明、无边框的窗体(窗口)。一个普通的TTimer 每秒会多次更新表单的位置。
创建一个新的 VCL 应用程序。除了您的主表单之外,还要创建另一个表单 MouseDiscForm,它具有以下属性:
object MouseDiscForm: TMouseDiscForm
AlphaBlend = True
AlphaBlendValue = 127
BorderStyle = bsNone
ClientHeight = 64
ClientWidth = 64
Color = clWhite
TransparentColor = True
TransparentColorValue = clWhite
FormStyle = fsStayOnTop
object Shape1: TShape
Align = alClient
Brush.Color = clYellow
Pen.Style = psClear
Shape = stCircle
end
end
覆盖表单的CreateParams 方法:
procedure TMouseDiskForm.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.ExStyle := Params.ExStyle or WS_EX_LAYERED or WS_EX_TRANSPARENT;
end;
然后在您的主窗体中,只需添加一个 TTimer 和 Interval = 50 和这个 OnTimer 处理程序:
procedure TForm6.Timer1Timer(Sender: TObject);
begin
var CP := Mouse.CursorPos;
SetWindowPos(
MouseDiscForm.Handle,
HWND_TOPMOST,
CP.X - MouseDiscForm.Width div 2,
CP.Y - MouseDiscForm.Height div 2,
0,
0,
SWP_SHOWWINDOW or SWP_NOSIZE or SWP_NOACTIVATE
);
end;
我确信还有一些额外的细节需要考虑,但总的来说,我确实发现这种非常原始的方法效果很好。