超级难题!!!!如何使菜单能够响应鼠标双击?(200分)

  • 主题发起人 主题发起人 biout
  • 开始时间 开始时间
B

biout

Unregistered / Unconfirmed
GUEST, unregistred user!
我看过见一些软件,他们也是用DELPHI写的,他们的弹出菜单跟DELPHI的标准TPopupMenu一模一样,但却能够响应鼠标左键双击、右键双击消息,而我们用标准的TpopupMenu却只有一个OnClick()事件,响应右键单击的消息好像是WM_MENULBUTTONUP,改写PopupList.Window窗口过程可以响应,但鼠标双击呢?查来查去,没发现有WM_LBUTTONDBLCLK,他们是如何做到的?请高手们指点一下呀!非常急。。。。。
 
第三方组件了。

很多第三方组件都是重新写的鼠标响应时间,其实它更像一个TControl.提供了鼠标单机和双击的消息捕获。
而你看TMenuItem什么都没有,就是要自己写,也要从头写起,直接从TComponet继承,而且吧TConctrol的那些抄过来。包括鼠标左键点击了。你参考一下了。。
一点建议了。
 
但是没见到有这样的第三方菜单组件呀,所见到的都是些不支持的。
另外,我见过的那些支持双击的弹出菜单,却是标准的TPopupMenu,所以肯定有办法用Delphi标准的TPopupMenu实现的这样的功能
 
我记得好像ExpressBars这个控件做的菜单会满足你的要求
 
就算标准的我认为也要从头写,DELPHI每个标准的组件都是自己写的,只不过提供了对HWND等的支持,与WINDOWS交互。
我想你的基类TMENUITEM没有提供这方面的服务,就不能从这里继承,我想,
你必须从TCOMONENT继承,仿照DELPHI的写法把这些事件加进去。我看了一下TMENUITEM的实现,好像使用的是TNOTIFY的思想,没有消息的相应。响应其他的消息,DELPHI提供了一个HMENU句柄,但是能发送,还必须重新写这个添加这个鼠标右键,双击的消息捕捉才可以。
第三方的,比如ABC组件,LMD组件都提供了更复杂的菜单,不加包装和普通的一样。但是已经使用了鼠标的消息。
我打算直接继承,总感觉不可行,因为捕捉不到任何鼠标消息,而我们看到可能不是,应该是Command的一个简单事件。。
我的一点见解。。。高手就不要介意,不要见笑了。
 
自己 用窗体做个 应该也可以 或者继承扩展下
 
我给你个做法!不知道你愿不愿接受!绝对可行!
1、做个窗体(如AForm)里面用N个panel做好菜单的样式;
2、在上面做好的窗体(AForm)内写好代码(如双击panel发出的消息或者返回值或是对公共变量赋值);
3、在需要弹出的窗体(mainform)的部置写个调用窗体(AForm)内的执行函数,此时就象弹出的效果一样;
4、取出(AForm)出去的消息或是返回值等,做出相应的处理;
此方法绝对可行!而且此方法单击双击都可以!只是看你Aform内的代码如何写而已;
 
我也想学。把代码贴进来一下。嘿嘿。
 
菜单的双击和右击?用户不会用的。窗口上的右键用户经常不用。别说菜单了
 
自己解决了,看来大富翁真是没有高人了
勉强看了一下那个软件的反汇编代码,没想到效果很好却是这么简单。一条GetAsyncKeyState灵活运用而已,看来还是老毛子学得比较精。。。。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
384
import
I
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部