拖动无标题栏窗体时的出现问题?在线等待

bigoal 2002-06-01 02:32:34
在处理消息wm_hittest时,如果使用
if msg.result=htclient then
msg.result:=htcaption;
会出现不能弹出窗体的popupmenu,请问如何解决???
...全文
82 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
墨梅无痕 2002-06-01
  • 打赏
  • 举报
回复
不处理WM_HitTest,而是处理WM_LBUTTONDOWN;
示例代码:

const
SC_DRAGMOVE = $F012; // 未归档消息。

procedure WMLButtonDown(var Msg: TWMLButtonDown); message WM_LBUTTONDOWN;

procedure TForm1.WMLButtonDown(var Msg: TWMLButtonDown);
begin
if (MK_CONTROL + MK_LBUTTON) = Msg.Keys then
begin
SendMessage(Handle, WM_SYSCOMMAND, $F012, 0)
end
else
begin
inherited;
end;//if
end;

这个过程是当你按下CTRL键,再按下鼠标左键并拖动,就可以拖动窗体了。
taxi 2002-06-01
  • 打赏
  • 举报
回复
就这样。
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
Perform(WM_SYSCOMMAND, $F012, 0);
end;
bigoal 2002-06-01
  • 打赏
  • 举报
回复
好的!!
taxi 2002-06-01
  • 打赏
  • 举报
回复
在窗体的OnMouseDown事件中
Perform(WM_SysCommand, $F012, 0);
yansea 2002-06-01
  • 打赏
  • 举报
回复
用这个方法是欺骗系统,让系统认为点击区域是标题栏,但是这样做会使form上不能接受焦点的控件也变的麻烦。如果有speedbutton之类的,那么不仅骗了系统也骗了自己,单击无效的。
而至于popupmenu就更容易解释了,系统认为你点击的是标题栏,当然不会弹出菜单了~~至于解决办法,我没有试过,不过你可以直接发送弹出菜单的消息给窗体。
最好先拦截一下这个消息,不然也很难处理的。
祝好运,另解决了的话也要写出来啊~~~~~
bigoal 2002-06-01
  • 打赏
  • 举报
回复
谢谢楼上!
周一我试试,如对比给分!!
iriscat 2002-06-01
  • 打赏
  • 举报
回复
当然无法出现了,你已经接管了鼠标事件

要是用 sendmessage(handle, wm_command, $f012);

或许会好些

5,939

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧