句柄转为窗体?(100)

  • 主题发起人 主题发起人 terry_zhou82
  • 开始时间 开始时间
T

terry_zhou82

Unregistered / Unconfirmed
GUEST, unregistred user!
我是想先得到鼠标所在的当前窗体的句柄后,震动当前窗体,得到句柄和振动窗体代码都写好了 ,就不知道改怎么把句柄转窗体var AWnd: hWnd;i:Integer;begin AWnd := GetForegroundWindow;//得到当前鼠标所在窗体//震动窗体for I := 0 to 4 do begin Self.Top := Self.Top - 3; Sleep(40); Self.Left := Self.Left - 3; Sleep(40); Self.Top := Self.Top + 3; Sleep(40); Self.Left := Self.Left + 3; Sleep(40); end;
 
请查看windows单元的GetWindowRect()和MoveWindow()2个函数的帮助。另外,你的AWnd变量好像没有使用,且震动的是当前窗口,而不是鼠标所在的窗口。
 
不是啊,其实我当前句柄已经是知道了。想要做的,就是怎么样把这个句柄转为当前的FORM,movewindow函数并不能满足我的需要啊
 
TForm1(FindControl(Handle))
 
老大,可否给个例子,看不大懂啊
 
procedure TForm1.Button1Click(Sender: TObject);var t: TWinControl; AWnd:THandle;begin AWnd:=Findwindow(nil,'Form2'); if AWnd=0 then Exit; t:=FindControl(AWnd); if t<>nil then t.Visible := not t.Visible;end;
 
但是我是得到的随机的窗口啊,不一定都是TFORM2的啊,
 
我无语了, AWnd:=Findwindow(nil,'Form2'); 这一行只是说明是查找一个窗体的句柄,方便我测试的,你改回GetForegroundWindow就可以了啊。
 
znxia 不好意思,能帮我看看,这么写到底问题出在那里?procedure TForm1.Timer1Timer(Sender: TObject);var t: TWinControl;i:Integer; AWnd,BWnd:THandle;begin BWnd:=GetForegroundWindow; AWnd:=Findwindow(nil,'bwnd'); if AWnd=0 then Exit; t:=FindControl(AWnd); if t<>nil then for i := 0 to 20 do begin t.top :=t.top-3;Sleep(30); t.left :=t.left-3;Sleep(30); t.top :=t.top+3;Sleep(30); t.Left :=t.Left+3;Sleep(30); end;end;end.
 
BWnd没用到啊,且你也没说明错误现象。此外,FindControl很可能返回nil(如果AWnd查找到的窗体不是当前程序创建的,那肯定返回nil)你想抖动AWnd,还是建议使用 MoveWindow() 函数来实现,以前我就是用这个函数来移动其它程序窗口的。
 
他没有显示任何错误啊。znxia,可否用MOVEWINDOW帮我写个例子啊?
 
根据你思路写的,震动效果不错!新建一个文件,叫 检查.txt ,用记事本打开它,然后运行下面程序。给分吧。procedure TForm1.Button1Click(Sender: TObject);var AWnd: THandle; Rect: TRect; I: Integer;begin AWnd := Findwindow(nil, '检查.txt - 记事本'); if AWnd = 0 then Exit; Windows.GetWindowRect(AWnd, Rect); for i := 0 to 20 do begin Windows.MoveWindow(AWnd, Rect.Left, Rect.Top - 3, Rect.Right - Rect.Left, Rect.Bottom - Rect.Top, true); Sleep(30); Windows.MoveWindow(AWnd, Rect.Left - 3, Rect.Top, Rect.Right - Rect.Left, Rect.Bottom - Rect.Top, true); Sleep(30); Windows.MoveWindow(AWnd, Rect.Left, Rect.Top + 3, Rect.Right - Rect.Left, Rect.Bottom - Rect.Top, true); Sleep(30); Windows.MoveWindow(AWnd, Rect.Left + 3, Rect.Top, Rect.Right - Rect.Left, Rect.Bottom - Rect.Top, true); Sleep(30); end;end;
 
呵呵,谢谢ZNXIA,但是你这个是预先制定窗体的,我想要鼠标移动就得到焦点,有办法吗?
 
鼠标移动就得到焦点? 听不懂,不明白你什么意思!如果你想要windows当前活动窗口,那就 AWnd := GetForegroundWindow;
 
真有你的,znxia.接分。
 
貌似要用到鼠标移动的消息来处理吧,接个小分
 

Similar threads

后退
顶部