API创建菜单后如何关联事件问题(在线着急等待!)(200分)

  • 主题发起人 主题发起人 yourwcd
  • 开始时间 开始时间
Y

yourwcd

Unregistered / Unconfirmed
GUEST, unregistred user!
哪位高手有以下方法:<br> &nbsp;用API函数创建菜单,然后响应自定义事件。<br>我现在创建、弹出都没有问题,但和时间关联不起来,拦截WNDPROC也不起作用。我使用CreatePopMenu创建菜单,用TrackPopupMenu弹出,用Application.Onmessage:=Myapp;然后在Myapp中拦截消息的.能给出代码就更感激呀.大家顶一下呀!
 
AppendMenu(uSubMenu, MF_ENABLED or MF_UNCHECKED or MF_STRING,2000,'菜单1');<br><br>处理菜单点击事件<br>procedure TForm1.WMCOMMAND(var MSG:TWMCOMMAND);<br>begin<br> &nbsp;if (MSG.ItemID=2000) then<br> &nbsp;begin<br> &nbsp; &nbsp; //你的操作<br> &nbsp;end<br> &nbsp;else<br> &nbsp; &nbsp;inherited;<br>end;
 
1.创建菜单(部分)<br> &nbsp;uSubMenu := CreatePopupMenu;<br> &nbsp;AppendMenu(uSubMenu, MF_ENABLED or MF_UNCHECKED or MF_STRING,Ord('A'), '菜单A');<br> &nbsp;AppendMenu(uSubMenu, MF_ENABLED or MF_UNCHECKED or MF_STRING,Ord('B'), '菜单B');<br>2.截获菜单点击消息<br>窗体 OnCreate<br> &nbsp;Application.OnMessage := AppOnMsg;<br>3.处理消息<br>AppOnMsg 过程<br>procedure TForm1.AppOnMsg(var Msg: TMsg; var Handled: Boolean);<br>begin<br> &nbsp;MenuCommand(Msg.hwnd,Msg.wParam);<br> &nbsp;inherited;<br>end;<br>4. 处理点击事件<br>MnuCommand 过程<br>procedure TForm1.MenuCommand(AWnd: hWnd; ACmd: Word);<br>begin<br> &nbsp;case ACmd of<br> &nbsp; &nbsp;Ord('A'):<br> &nbsp; &nbsp; &nbsp;ShowMessage('单击了[菜单A]');<br> &nbsp; &nbsp;Ord('B'):<br> &nbsp; &nbsp; &nbsp;ShowMessage('单击了[菜单B]');<br> &nbsp;end;<br>end;
 
弹出菜单呢?怎么将创建的菜单弹出来呢?
 
晕!<br>“我现在创建、弹出都没有问题”这不是你说的吗?
 
我是在公司做的,现在在家里,所以没有,但我在公司的方法和你是一样的.都是通过拦截消息的,但奇怪的是通过这种方式创建的菜单根本就不是WM_COMMAND,但如果在窗体上增加一个PopMenu就可以响应.现在几乎就是弹出菜单不一样了.我用的是API函数TrackPopupMenu?您也是吗?如果也是的话估计这个方法是有问题的,不信您调试一下看看
 
生成一个弹出菜单,并弹出<br>procedure TForm1.Button2Click(Sender: TObject);<br>Var<br>pt:tPoint;<br>pm,dc:dword;<br>begin<br>GetCursorPos (pt);<br>pm := CreatePopupMenu;<br>AppendMenu (pm, 0, Ord ('A'), 'About DeskTop Hide...');<br>AppendMenu (pm, mf_Separator, 0, Nil);<br>AppendMenu (pm, 0, Ord ('E'), 'Exit DeskTop Hide');<br>//SetForegroundWindow (handle);<br>//dc := GetDC (0);<br>TrackPopupMenu (pm, tpm_BottomAlign or tpm_RightAlign,<br>pt.x,pt.y, 0, handle, Nil);//菜单弹出函数<br>//then SetForegroundWindow (handle);<br>DestroyMenu(pm);<br>end;
 
OK,测试通过,谢了!liyinwei可以给我QQ吗?交个老师呀,我用DELPHI都3.4年了,以前做数据库项目,有些地层的东西都没有用到.现在在抓这些东西.有问题向您请教呀.
 
多人接受答案了。
 
后退
顶部