Delphi动态弹出菜单是如何响应WM_COMMAND消息的??
解决方案 »
- 文本去掉空行------------的问题
- Delphi 数据库系统开发的问题(数据库控件使用和MySQL相关)
- richEdit可以设置某一行某几个字的字体颜色,请问能设置某一行的某几个字的背景颜色吗?
- Delphi2006 与 Delphi2005 有什么区别?
- Delphi 有像VB的Inet控件带OpenURL(URL)的吗?
- 如何确定一个弹出窗口关闭后再执行其他操作?
- Sql的执行效率,哪种写法更高?
- 报表的问题。
- 请大家推荐一些打印控件,要有下载地址
- 大家来帮帮忙,问题出在哪儿?错误信息:找不到 MSVCRTD.DLL
- 如何调用一个小表显示主表里某一字段的值
- 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;