谁答上来送200分(200)

  • 主题发起人 主题发起人 fanwendou
  • 开始时间 开始时间
F

fanwendou

Unregistered / Unconfirmed
GUEST, unregistred user!
实现像输入法那样的窗口跟随! 在创建窗体的时候需要获得光标在屏幕中的位置。GetCaretPos 和 ClientToScreen 都用了还是不行呀!
 
有意思,顶一个。
 
GetCaretPos表示光标在Window(Edit/Memo之类)中的相对位置如果知道当前光标所在Window的句柄Handle,则通过windows.GetWindowRect(Handle,Rect:TRect);可以计算出来当前window在桌面上的位置,然后再加上 GetCaretPos的结果,就可以得到光标在桌面上的位置。可惜我不知道如何获得光标所在的window的句柄
 
H:=windows.GetForegroundWindow;可以获得当前活动的Form的句柄,但这个Form中的哪个window是活动的,我还没找到。
 
Windows.ClientToScreen
 
var t:tpoint;
Hnd,ParentHand:THandle;
R:TRect;
begin
ParentHand:=windows.GetForegroundWindow;//当前活动form的句柄 Hnd:= FindWindowExA (ParentHand, 0, nil, nil);//当前活动form中,焦点所在window句柄 windows.GetWindowRect(Hnd,R);
//当前活动form中,焦点所在window,在桌面中的位置
 
procedure TForm1.Timer1Timer(Sender: TObject);var t:tpoint;
hWnd,ParentHand:THandle;
R:TRect;
dThreadID,sThreadID:DWORD;
begin
ParentHand:=windows.GetForegroundWindow;//当前活动form的句柄 sThreadID := GetCurrentThreadId();
dThreadID := GetWindowThreadProcessId(ParentHand, NIL);
AttachThreadInput(dThreadID, sThreadID, true);
hWnd := GetFocus();
GetCaretPos(t);
windows.GetWindowRect(hWnd,R);
//当前活动form中,焦点所在window,在桌面中的位置 caption:=format('光标位置:%d %d',[R.Left+t.x, r.Top+t.y]);
end;
我不补充了,呵呵
 
你们想复杂了,获取鼠标在屏幕上的坐标用 GetCursorPos(p);
就可以了。以下代码调试通过procedure TForm1.Button1Click(Sender: TObject);
begin
timer1.Enabled:= true;
end;
procedure TForm1.Timer1Timer(Sender: TObject);var p: tpoint;
begin
GetCursorPos(p);
button1.Caption:= inttostr(p.x)+ ':'+ inttostr(p.y);
end;
按下按钮后移动鼠标,可以在按钮上看到坐标变化。
 
光标位置和鼠标位置是两回事。
 
znxia 说的有道理 “光标位置和鼠标位置是两回事” !!
 
我最后部分的代码,测试后,符合你的要求,不知道你还有什么疑问?
 
不好意思,没看清题目。http://www.delphibbs.com/delphibbs/dispq.asp?lid=3674294这里有以前的现成代码。
 
to:znxia 在你代码的基础上问题已经,十分感谢 现在开始送分了
 
多人接受答案了。
 
分少了 对不住大家!
 
后退
顶部