读书人

如何实现这个控件?提供一下思路.200分

发布时间: 2012-03-14 12:01:12 作者: rapoo

怎么实现这个控件??提供一下思路.200分
我需要做一个控件 暂时称为 TA 吧.
当一个TForm上放有一个 TA 控件 并且 TA.Active := True 的时候,只要单击窗口上的任何区域(包括标题栏和窗口上的控件)都会 先运行该控件的 TA.OnClick 过程, 后面再接着运行相关的过程.
比如单击的是窗口上的一个 Button 则运行 TA.OnClick, Button.OnClick..

加分贴 http://community.csdn.net/Expert/topic/5577/5577567.xml?temp=.8509638

[解决办法]
这个不用做成组件.


procedure TForm1.Test(var msg: tagMsg; var H: boolean);
begin
//if (Msg.hwnd = Handle) or (FindControl(Msg.hwnd) <> nil) then
if (Msg.message = WM_LButtonDown) or (Msg.message = WM_NCLBUTTONDOWN) then
Caption := Format( '%d,%d ',[mouse.CursorPos.X, mouse.CursorPos.Y]);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
application.OnMessage := Test;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(self.Caption);//测试:先响应OnMessage后,消息才分派到BtnOnclick
end;
[解决办法]
1.尝试Additional页里ApplicationEvents控件的OnMessage
2.尝试Application.HookMainWindow(WindowProc);
3.GetWindowLong/SetWindowLong with GWL_WNDPROC

读书人网 >.NET

热点推荐