Delphi动态弹出菜单是如何响应WM_COMMAND消息的?? Delphi动态弹出菜单是如何响应WM_COMMAND消息的?? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 楼主是问的POPUPMUNU实现机制么?要分析也挺容易的..建一个新工程,加点必要东西, 在POPUPMENU事件里设断点.断下来后,看CALLSTACKS,就会看到类似如下内容:-------------------------------------------------TForm1.N11Click($D63A20)TMenuItem.ClickTMenu.DispatchCommand(1)TPopupList.WndProc((273, 1, 0, 0, 1, 0, 0, 0, 0, 0))TPopupList.MainWndProc((273, 1, 0, 0, 1, 0, 0, 0, 0, 0))StdWndProc(199292,273,1,0)TApplication.ProcessMessage((199292, 273, 1, 0, 25296687, (514, 299)))TApplication.HandleMessageTApplication.RunProject1------------------------------------------------------从底向上,就是函数调用的流程..然后在VCL源码MENUS.PAS里看procedure TPopupList.WndProc的定义-----------------------------------------------------..... case Message.Msg of WM_COMMAND: for I := 0 to Count - 1 do if TPopupMenu(Items[I]).DispatchCommand(Message.wParam) then Exit;........-----------------------------------------------------这样就可以清楚整个流程.OK? procedure TForm1.aclick(Sender: TObject);begin showmessage('itema');end;procedure TForm1.Button1Click(Sender: TObject);var itema: TMenuItem;begin itema:=Tmenuitem.Create(self); itema.Caption:='a'; itema.OnClick:=aclick; popupmenu1.Items.Add(itema);end; 如何搜索文件夹及其包含的子文件里的文件 用idhttp下载文件的问题? delphi怎样写日志文件?就是我的串口每收到一次数据就写到文本文件里 老兄,进来看一下吧,自己写的,顺便也散一下分!! copy 文件的问题请高手指点 关于NMSMTP控件问题 请大家帮个忙 数据库更新 五十多个功能模块(表单),是做成dll还是编译进一个exe? 拖动控件后的操作 如何调用一个小表显示主表里某一字段的值 2个查询如何添加到一个临时表
断下来后,看CALLSTACKS,就会看到类似如下内容:
-------------------------------------------------
TForm1.N11Click($D63A20)
TMenuItem.Click
TMenu.DispatchCommand(1)
TPopupList.WndProc((273, 1, 0, 0, 1, 0, 0, 0, 0, 0))
TPopupList.MainWndProc((273, 1, 0, 0, 1, 0, 0, 0, 0, 0))
StdWndProc(199292,273,1,0)
TApplication.ProcessMessage((199292, 273, 1, 0, 25296687, (514, 299)))
TApplication.HandleMessage
TApplication.Run
Project1
------------------------------------------------------
从底向上,就是函数调用的流程..然后在VCL源码MENUS.PAS里看
procedure TPopupList.WndProc的定义
-----------------------------------------------------
.....
case Message.Msg of
WM_COMMAND:
for I := 0 to Count - 1 do
if TPopupMenu(Items[I]).DispatchCommand(Message.wParam) then Exit;
........
-----------------------------------------------------这样就可以清楚整个流程.OK?
begin
showmessage('itema');
end;procedure TForm1.Button1Click(Sender: TObject);
var
itema: TMenuItem;
begin
itema:=Tmenuitem.Create(self);
itema.Caption:='a';
itema.OnClick:=aclick;
popupmenu1.Items.Add(itema);
end;