怎么样获得这个消息?请众高手回答! ( 积分: 100 )

  • 主题发起人 主题发起人 hubo927
  • 开始时间 开始时间
H

hubo927

Unregistered / Unconfirmed
GUEST, unregistred user!
我用buttonedit + checklist合成一控件,点击edit上的button时,checklist显示,可在edit和checklist外的地方点击时,怎样让checklist隐藏?控件应该拦截什么消息?
 
我用buttonedit + checklist合成一控件,点击edit上的button时,checklist显示,可在edit和checklist外的地方点击时,怎样让checklist隐藏?控件应该拦截什么消息?
 
可以在Form的OnMouseUp事件里判断Button.Focused,当点击到Button时,其Focused= True,否则必然为False.
if Button.Focused then
checkList.Visible := true
else checkList.Visible := false;
 
因为我这是做成的一个控件,所以不想在form中对控件进行这样的控制,在控件内部应该怎么控制呢?
 
你在组件编写过程中处理。以后直接用该组件就可以了。
 
to 鳄鱼先生:
能说的详细些吗?给点简单的代码。
 
没人知道吗?
 
拦截CM_CANCELMODE消息
 
要代码

procedure CANCELMODE(var Message:TMessage); message CM_CANCELMODE;

procedure form1.CANCELMODE(var Message:TMessage);
begin
checkList.Visible := false;
end;

大概是这样,楼主调试一下
 
还是换个思路吧(让组件本身来处理更好一点!):
你自己继承checklist的类,然后添加一个消息响应过程响应WM_KILLFOCUS,或者使用GetWindowLong/SetWindowLong子类化checklist,在窗口过程里面处理WM_KILLFOCUS!
当前窗口如果失去焦点,系统会发送这个消息给你的,你可以在这里处理,将自己(checklist)隐藏。
 
楼上说的对,也要拦截WM_KILLFOCUS,CANCELMODE,一个是本窗口内焦点转移时发生,另一个是整个程序窗口的焦点转到其他程序去时发生,只要两个都拦截,那么不管是窗口内或者窗口外,只要是在checklist外点击都会隐藏。
 
多人接受答案了。
 
后退
顶部