如何使用 Delphi 高亮显示鼠标指针位置[已关闭]

ktecyv1j  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(197)

已关闭。此问题需要更多的focused。当前不接受答案。
**想要改进此问题吗?**更新问题,使其仅关注editing this post的一个问题。

5个月前关闭。
Improve this question
我想创建一个简单的鼠标指针荧光笔。一个以鼠标指针为中心的圆圈。它必须是半透明的,并且在任何地方都是可见的(在我的应用程序内外)。
任何想法都是赞赏的。
示例:

tjrkku2a

tjrkku2a1#

虽然我认为这个问题对于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;

然后在主窗体中,添加一个带有Interval = 50TTimer和这个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;

我确信还有一些额外的细节需要考虑,但总的来说,我确实发现这种非常原始的方法工作得相当好。

相关问题