谁知道菜单的右健消息?(象IE收藏夹一样的在菜单上弹出右健菜单)(100分)

  • 主题发起人 主题发起人 Zed
  • 开始时间 开始时间
Z

Zed

Unregistered / Unconfirmed
GUEST, unregistred user!
谁知道菜单的右健消息?(象IE收藏夹一样的在菜单上弹出右健菜单).
 
不明白,能不能说清楚点?
 
IE收藏夹没什么特别的呀??
 
IE有些菜单项有右键菜单,他可能问这个吧?
DELPHI可能要自己来开发实现
 
众所周知,对于菜单项而言,一般只有Click事件,无法区分是LeftButtonDown还是RightButton,我现在想做一个象IE40一样的收藏夹,将我的Bookmark名字作为菜单项,弹出菜单后,鼠标右健对菜单进行管理.

 
WM_RBUTTONDOWN 鼠标按下右按键
WM_RBUTTONUP 鼠标放开右按键
WM_RBUTTONDBLCLK 鼠标双击右按键

左键换为WM_LBUTTON 中键换为WM_MBUTTON

这些可在WINDOWS的有关编程书中找到,或到Delphi中的Message单元中找到说明。
 
请注意,IE收藏夹不是菜单,是个窗口。
 
IE中的收藏绝不是窗口,是菜单.
我的问题是在菜单弹出后,用右健对
菜单项进行操作而不是对菜单项用Form进行管理.
看一下VCL的有关代码可以知道,菜单项TMenuItem
只有Click事件,没有MouseDown事件.
 
Delphi的Menu也有HWND. 所有的Menu消息都经过这个HWND的, 因此,
只要替换掉这个HWND指向的WndProc就能接受到menu的鼠标操作消息.
这个HWND可以从PopupList.Window得到
PopupList是个全局变量(在Menus.pas的Interface部分定义, 外界可以直接
访问(Delphi 5)), 里面包含所有的PopupMenu.
你可以试试用SetWindowLong替换掉PopupList.Window这个handle关联的
WndProc, 然后在那里处理鼠标右键.

不过我记得delphi 4中这个PopupList是Menus.pas中的一个私有变量.
那你只有修改menus.pas啦(过去讨论过与你一模一样的问题, 所以还有点
印象, 当时的结论是只有修改menus.pas, 刚查看了delphi 5的menus源码,
才发觉PopupList这个变量被公布出来了 :) ).
 
我没有做过这样的程序,但是菜单是非客户区的代表,其显示像素是从屏幕上
得到的,我想它是画在上面的,所以你的问题可以从捕捉WM_NCRButtonDown
入手,我现在就给你实验一下,可以把你的EMAIL地址发到我的邮箱:
xiaodong_guo@sina.com以方便我给你答复,好吗?
 
浪费时间吧?
到哪捕捉WM_NCRBUTTONDOWN?
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
749
import
I
I
回复
0
查看
569
import
I
后退
顶部