如何截获窗体上某控件的鼠标事件,使之激发窗体的鼠标事件?(100分)

  • 主题发起人 主题发起人 叮叮当当
  • 开始时间 开始时间

叮叮当当

Unregistered / Unconfirmed
GUEST, unregistred user!
一个窗体上有一个可视化控件,要求截获该控件的鼠标事件,使它去激活……比如说转为激活窗体的鼠标事件(MouseUp、MouseDown),有办法么?
 
你看看SpeedButton的原代码就知道,他是通过捕获鼠标和释放鼠标来达到目的[:)]
 
application.onmessage
 
当然是通过消息了

procedure CM_MouseEnter(var msg: TMessage); message CM_MOUSEENTER;
procedure CM_MouseLeave(var msg: TMessage); message CM_MOUSELEAVE;

实现
procedure TForm1.CM_MouseEnter(var msg: Tmessage);
begin
inherited;
Font.Color:= clBlue; { 改变进入时的字体颜色为蓝色 }
...
end;
procedure TForm1.CM_MouseLeave(var msg: Tmessage);
begin
{ 同理, 可以恢复鼠标进入前的状态... }
...
end;
 
有没有人电脑里装了Macromedia Flash的?在Delphi里导入它的ActiveX控件(Shockwave Flash),在窗体上放置它,运行时对它点右键会弹出含有About Macromedia的弹出菜单,我不想看到那个,比方说能否弹出一个我自己的菜单。
 
To: myname

你的例子对我好像没有什么帮助呢!
 
sorry 我确实不太明白题意

不知你要截获该控件的什么鼠标事件,通过事件或消息
 
能按我在 2002-5-16 22:24:00 说的要求做一个例子么?完成这个功能就行。
 
写application.onmessage事件呀

if (msg.message in [WM_MOUSEFIRST..WM_MOUSELAST]) and (msg.hwnd=你的控件.handle) then
begin
// 随便你做自己的什么事吧
handled := true;
end;
 
To: Pearl.

你的代码原理正确,能解决问题!但是 msg.message in [WM_MOUSEFIRST..WM_MOUSELAST] 这么写好像无法编译通过,报错“[Error] Unit1.pas(29): Constant expression violates subrange bounds”。

另外,
// 随便你做自己的什么事吧
handled := true;
我要把这个捕获的事件转发给窗体该怎么做?就是去激发窗体的相同事件(这样我就可以在窗体事件中按照事件传递来的鼠标位置弹出自己的弹出式菜单)。请再努力一把,谢谢!
 
解决了,谢谢Pearl.!
 
后退
顶部