Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。
想改善这个问题吗?更新问题,以使溢出。
6年前关闭。
on-topic
是否在寻找有关使用鼠标定位信标的信息,该信标会向用户发送信号,表明鼠标当前在表单上的位置?
一个示例是Toad的“选项”屏幕中的“搜索”功能。如果从列表中选择搜索结果项,则显示正确的面板,将鼠标移至控件的中间,并显示3个环的定位信标。
另一个示例是Mark Miller的CodeRush的旧Delphi版本。当您将标记放在代码中并按ESC键时,编辑器会将您带回到标记处,并使用定位信标指示编辑器的光标位置。
单击 Improve this question 以获取来自CodeRush的直观示例,该示例位于Collect Marker标题下。这大约是信标缩小的2/3。
想改善这个问题吗?更新问题,以使溢出。
6年前关闭。
on-topic
是否在寻找有关使用鼠标定位信标的信息,该信标会向用户发送信号,表明鼠标当前在表单上的位置?
一个示例是Toad的“选项”屏幕中的“搜索”功能。如果从列表中选择搜索结果项,则显示正确的面板,将鼠标移至控件的中间,并显示3个环的定位信标。
另一个示例是Mark Miller的CodeRush的旧Delphi版本。当您将标记放在代码中并按ESC键时,编辑器会将您带回到标记处,并使用定位信标指示编辑器的光标位置。
单击 Improve this question 以获取来自CodeRush的直观示例,该示例位于Collect Marker标题下。这大约是信标缩小的2/3。
最佳答案
我还没有看到Toad所做的事情,而且我敢肯定,您会发现以下内容在视觉上并不令人满意。无论如何,它可能会给您一些想法。需要一个面板和一个计时器。
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;
关于delphi - 鼠标定位信标,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21766490/
10-12 15:33