怎么截获FORM里的一个Panel的消息?比如双击panel的消息(200分)

S

sjilong

Unregistered / Unconfirmed
GUEST, unregistred user!
在FORM上放一个Panel,我想截获Panel的有关消息,比如双击消息,拖动消息等,应该怎么
才能截获?
我知道截获一个FORM的消息只要重载要截获的消息就可以了,可FORM里的控件的消息怎么截获
呢?例如里面一个Panel的消息。

急用,请大虾指点,有答案后立刻加分
 
什么意思?

SendMessage(Panel.Handle,WM_NCLBUTTONDOWN,HTCaption,GetMessagePos);//拖动消息
 
你那是发送消息,我双击panel就可以发送这个消息了,我现在是想截获这个消息,控制这个消息
 
干脆截获所有的消息再做判断:)
怎么截获,你查查老帖子
 
你所指的无非是鼠标事件!
鼠标点击消息响应在MouseDown事件中,拖动消息响应在Mousemove中。
如果要判断是否进入指定范围,如窗体或者控件,则只要截取CM_MOUSEENTER和CM_MOUSELEAVE消息即可!
 
application.onmessage
你不想用事件?到底想干什么呢
 
是这样的,我这个panel是用来dock窗口的,当双击或拖动那个被dock到panel里的窗口时,
那窗口就会脱离dock,成为正常的窗口,我想屏蔽这样的操作,从而使那个被dock进去的
窗口不能被拖出来。通过实验,发现双击那个被dock的窗口时,消息是由panel来处理的,所以我
想截获panel的消息。
 
请看
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1346084
功能强大的停靠控件,可以满足你的停靠要求
 
不知是否合你要求?
截获FORM里的控件的消息代码片段如下:
private
{ Private declarations }
FClientInstance, FPrevClientProc : TFarProc;
procedure ClientWndProc(var Message: TMessage);
//以上是声明部分

procedure TForm1.FormCreate(Sender: TObject);
begin
////建立回调过程
FClientInstance := MakeObjectInstance(ClientWndProc);
FPrevClientProc := Pointer(GetWindowLong(Panel1.Handle, GWL_WNDPROC));
SetWindowLong(Panel1.Handle, GWL_WNDPROC, LongInt(FClientInstance));
end;

//接管消息的函数
procedure TForm1.ClientWndProc(var Message: TMessage);
begin
case Message.Msg of
//要处理什么消息,加在这里就行了。
WM_LBUTTONDBLCLK:
begin
ShowMessage ('WM_LBUTTONDBLCLK事件');
end;
WM_LBUTTONUP:
begin
ShowMessage ('WM_LBUTTONUP 事件');
end;
end;
Message.Result := CallWindowProc(FPrevClientProc,Panel1.Handle, Message.Msg, Message.wParam, Message.lParam);
end;
 
顶部