如何捕获窗口中的鼠标点击消息?包括在窗口中的其它控件上点击(100分)

  • 主题发起人 主题发起人 xychun
  • 开始时间 开始时间
X

xychun

Unregistered / Unconfirmed
GUEST, unregistred user!
我想让我某一控件实现Combobox下拉框的效果,当鼠标不在自己区域内点击时隐藏,如果实现?
 
用 CMCancelMode 消息句柄:
procedure CMCancelMode(var Message: TCMCancelMode); message CM_CANCELMODE;
 
procedure WMSYSCOMMAND(var Msg:TMessage);message WM_SYSCOMMAND;
begin
case msg.lParam of
WM_LBUTTONDOWN: //实现单击在最小化和还原之间转化
begin
//鼠标左键被按下
if tags=true then //如果现在的窗体是还原的话
begin
application.Minimize;
Fep_DummyFep_Frm.Hide;
end
else
begin
application.Restore;
Fep_DummyFep_Frm.SetFocus;
end;
end;

WM_LBUTTONUP:
begin
//释放鼠标左键
end;
wm_rbuttondown:
begin
//鼠标右键被按下
SetForegroundWindow(Fep_DummyFep_Frm.Handle);
Fep_DummyFep_Frm.Pop_Menu.Popup(pt.x,pt.y); //使弹出窗体在这出现
end
else//调用父类的WndProc方法处理其它消息
inherited;
end;
一个消息拦截的声是有及一个简单的处理
 
to DouZheng:
在我的类中写
procedure CMCancelMode(var Message: TCMCancelMode); message CM_CANCELMODE;
为什么不响应啊?我的类是从TListBox继承来的
 
procedure CMCancelMode(var Message: TCMCancelMode); message CM_CANCELMODE;
的代码我看看
 
用Application.OnMessage可以吧,
不过好象很浪费就是了
 
to DouZheng:
procedure TMyListBox.CMCancelMode(var Message: TCMCancelMode); message CM_CANCELMODE;
begin
visible := False;
inherited;
end;
 
if GetCapture <> 0 then SendMessage(GetCapture, WM_CANCELMODE, 0, 0);

SetWindowPos(PopupListbox.Handle, 0, 0, 0, 0, 0, SWP_NOZORDER or
SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE or SWP_HIDEWINDOW);

其中 PopupListbox.Handle 换成你的控件的 Handle
 
多人接受答案了。
 
后退
顶部