首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >鼠标定位信标

鼠标定位信标
EN

Stack Overflow用户
提问于 2014-02-13 22:03:01
回答 1查看 174关注 0票数 1

查找有关使用鼠标定位信标的信息,该信标将向当前鼠标位于窗体上的用户发送信号?

这方面的一个例子是蟾蜍的选项屏幕中的搜索功能。如果我从列表中选择一个搜索结果项,将显示正确的面板,鼠标移到控件的中间,并显示一个由3个环组成的定位器信标。

另一个例子是Miller的旧的Delphi版本的CodeRush。当您在代码中删除一个标记并按下ESC键时,编辑器将带您返回标记,并使用定位信标指示编辑器的光标位置。

在“收集标记”标题下单击“这里”以获取来自CodeRush的可视化示例。这是大约2/3的方式通过信标缩小。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-13 23:06:15

我没有看到蟾蜍做什么,我相信你会发现下面的视觉效果不讨人喜欢。不管怎样,它可能会给你一些想法。需要一个面板和一个计时器。

代码语言:javascript
复制
type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Panel1: TPanel;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    FRingCount: Integer;
    FRingRect: TRect;
  end;

...

procedure TForm1.FormCreate(Sender: TObject);
var
  Pt: TPoint;
begin
  Pt := Point(Panel1.Width div 2, Panel1.Height div 2);
  MapWindowPoints(Panel1.Handle, HWND_DESKTOP, Pt, 1);
  SetCursorPos(Pt.X, Pt.Y);

  Timer1.Interval := 100;
  Timer1.Enabled := True;
  FRingCount := 0;
  FRingRect := Rect(Pt.X - 20, Pt.Y - 20, Pt.X + 20, Pt.Y + 20);
  OffsetRect(FRingRect, -Left, -Top);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  DC: HDC;
begin
  DC := GetWindowDC(Handle);
  try
    Canvas.Handle := DC;
    Canvas.Brush.Style := bsClear;
    Canvas.Pen.Mode := pmNotXor;
    Canvas.Pen.Width := 2;

    if FRingCount > 0 then begin
      Canvas.Ellipse(FRingRect);     // remove previous ellipse
      InflateRect(FRingRect, -3, -3);
    end;

    if FRingCount > 5 then
      Timer1.Enabled := False
    else
      Canvas.Ellipse(FRingRect);

    Canvas.Handle := 0;
  finally
    ReleaseDC(Handle, DC);
  end;
  Inc(FRingCount);
end;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21766490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档