求一能在鼠标移动时在鼠标指针位置显示当前XY坐标的代码,即字符随鼠标移动。(100分)

  • 主题发起人 主题发起人 wenna
  • 开始时间 开始时间
W

wenna

Unregistered / Unconfirmed
GUEST, unregistred user!
求一能在鼠标移动时在鼠标指针位置显示当前XY坐标的代码,即字符随鼠标移动。
 
1. 在OnMouseMove 事件里自己DrawText
2 用TLabel 在OnMouseMove 事件里设置Label 的Left,Top
 
GetCursorPos获取Mouse位置,设计一个小窗口,不断的GetCursorPos,显示并在Move到这
个位置即可
 
如果你只是希望在自己的表单内实现,你就用zhihuali就应该可行了。如果你是要监控所有
的鼠标移动,那么你就要用到HOOK技术了。我有一个源程序,是HOOK的,正好跟你的要求一
样,要的话,请留下你的EMAIL地址。
 
我是希望在自己的表单内实现,且不用TLabel,最好能用TextOut等输出字符。

另zhihuali是什么。
 
呵呵,用LABEL?开什么玩笑。
HINT!
 
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Label1.Caption:='X='+IntToStr(X)+',Y='+IntToStr(Y);
Label1.Left:=X+15;
Label1.Top:=Y;
end;
 
to wenna:
^_^,
>>另zhihuali是什么。
就是楼上给你写代码的那位老兄!!!

to menxin:
嘿嘿,你更有意思了。
 
其实我的难处在于无法清除上一次输出的字符。
 
為什么要用TextOut呢﹖我以前試過﹐的確不好清除。
 
鼠标移动的事件太频繁了,你一定要这样吗?
因为鼠标移动是不会产生Paint事件的,你可以在移动中Paint的话你会看到屏幕闪个不停。
 
我也正在实现这个想法,有一个办法,但不知道效率如何,应该不算太慢。
1.先将底下的图做一个 copy,copy到 bitmap中;
2.确定输出文字的矩形框(上一次的矩形框及这一次画的矩形框);
3.从备份的位图中将上一次画的矩形恢复,用 CopyRect;
4.在本次的矩形中输出文字 用 TextRect
5.记录下本次的 Rect用作下次擦除的依据

原理和擦直线,画直线类似,不过稍嫌麻烦,不过应该效率是比较高的一种了
 
不要用textout,用TextRect比较好,然后鼠标移动时,刷新一次:)
 
to : menxin

怎么用hint??
想知道,还望详说
 
其实用TextOut很简单的,擦除也不难呀,举个例子吧,就行了。
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Form1.Canvas.TextOut(a,b,' ');//空串长些
Form1.Canvas.TextOut(x+15,y,'X='+IntToStr(X)+' Y='+IntToStr(Y));
a:=x+15;
b:=y; //先在总处定义a,b
end;
 
我现在用的是fanta的方法实现的,除了稍嫌麻烦,别的都好。
而且保存的矩形框不须确定大小,只要足够大就行。
我想问有无更好的方法。
另flyat的方法把背景擦掉了。
 
在OnMouseMove 事件里自己写入application.hint(x+y)即可
 
给你一段我写过的代码,前提是FORM的SHOWHINT为TRUE,不能移出窗口外:
procedure TForm1.MouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
var
Str1: string;
begin
if not ShowHint then
Exit;

Str1 := 'X='+IntToStr(X)+',Y='+IntToStr(Y);

if Hint <> Str1 then
begin
Hint := Str1;
Application.ActivateHint(ClientToScreen(Point(X, Y)));
end;
end;
 
to:HUZZZ
我试过了,程序非常好用!
谢谢这位高手。
 
to zhangkan:我要hook的源代码 可以吗? 谢谢了 :)qingyaoyao@263.net
 
后退
顶部