动态生成的菜单如何执行任务?比如收藏夹(100分)

  • 主题发起人 heipi2003
  • 开始时间
H

heipi2003

Unregistered / Unconfirmed
GUEST, unregistred user!
我已经动态生成了菜单(可能会很长),但我不知道如何让每个菜单
传递参数出去,不允许我使用有参数的函数!
比如我生成的菜单是:1.网易 2.新浪,在onclick事件里面不允许使用
自定义函数!只能有一个可怜的Tobject参数,我不会用这个阿,
我想获得指针,getModName,都不行阿,帮忙
 
shellexecute(..,(TMenuItem(Sender)).Caption,...)

Sender是可以转化成TMenuItem的,TMenuItem不是有Caption吗?这样就可以用了
 
最好用菜单的hint吧,好看点
在窗体中自己写菜单的click事件
动态创建菜单时
MenuItem.OnClick := MyClick;
 
可以用AddObject,另一个简单点的办法是用tag。
举例:
TpMenuData = ^TMenuData;
TMenuData = record
Name: string;
Category: string;
HomePage: string;
URL: string;
end;
...
begin
pListItem := TpListItem(CategoryList.Items[j]);
if pos(pListItem.Category,pMD.Category)<>0 then // is this category
begin
MI := TMenuItem.Create(self);
//MI.AutoHotkeys := maManual;
MI.Caption := pMD.Name;

new(pMD);
pMD.Name := ini.ReadString(Section,'Name','');
pMD.Category := ini.ReadString(Section,'Category','');
pMD.HomePage := ini.ReadString(Section,'HomePage','');
pMD.URL := ini.ReadString(Section,'URL','');

MI.Tag := integer(pMD);
MI.OnClick := MyMenuHandler;
pListItem.menu.Add(MI);
end;
...
procedure TBandForm.MyMenuHandler(Sender: TObject);
var
pMD: TpMenuData;
begin
With sender as TMenuItem do
begin
pMD := TpMenuData(tag);
//ShowMessage(pMD.HomePage+#13+pMD.URL);
tbSearchType.Caption := pMD.Name;
pCurData := pMD;
if trim(cbAddr.Text) <> '' then tbGoClick(Self);
end;
end;
 
给一段你参考吧
procedure PostVKey(hWindow: HWND; key: Word);
begin
if iswindow(hWindow) then begin
PostMessage(hWindow, WM_KEYDOWN, key, MakeLong(0, MapVirtualKey(key, 0)));
PostMessage(hWindow, WM_KEYUP, key, MakeLong(1, MapVirtualKey(key, 0) or $C000));
end;
end;

procedure TForm1.FakeIt(Sender: TObject);
var
i: Integer;
begin
PostVKey(Handle, VK_F10);
PostMessage(Handle, WM_CHAR, Ord('e'), 0);
for i:= 1 To 3 Do
PostVKey(Handle, VK_DOWN);
end;
 
感谢感谢!又学了一招阿!
其他的控件应该也能通用吧!嘻嘻
 
顶部