4
我有一個彈出菜單,其中包含幾個菜單項,其中一個可以有子項目。此條目右側有一個小箭頭,當您將鼠標懸停在其上時,子菜單將打開(無需點擊)懸停。現在,我想在運行時填充此子菜單,但僅限於用戶實際打開它時。如果用戶從不打開子菜單,則它將爲空(可能包含佔位符)。我怎麼能做到這一點?當它已經可見時,甚至可以修改彈出式菜單嗎?如何檢測彈出菜單的子菜單彈出(以及如何動態填充它)?
感謝您的幫助!
我有一個彈出菜單,其中包含幾個菜單項,其中一個可以有子項目。此條目右側有一個小箭頭,當您將鼠標懸停在其上時,子菜單將打開(無需點擊)懸停。現在,我想在運行時填充此子菜單,但僅限於用戶實際打開它時。如果用戶從不打開子菜單,則它將爲空(可能包含佔位符)。我怎麼能做到這一點?當它已經可見時,甚至可以修改彈出式菜單嗎?如何檢測彈出菜單的子菜單彈出(以及如何動態填充它)?
感謝您的幫助!
標準菜單或上下文(彈出)菜單中的子菜單沒有區別:如果菜單項具有附加的子菜單,那麼其OnClick
事件將在顯示子菜單之前觸發(請注意,您不需要點擊它顯示出來),並在該事件處理程序中,您可以修改子菜單(設置現有項目的屬性,或添加新項目/刪除現有項目)。
一些演示代碼有關動態添加和刪除項目:
procedure TForm1.FormCreate(Sender: TObject);
var
Popup: TPopupMenu;
Item, SubItem: TMenuItem;
begin
Popup := TPopupMenu.Create(Self);
PopupMenu := Popup;
Item := TMenuItem.Create(Popup);
Item.Caption := 'Test submenu';
Item.OnClick := PopupClick;
Popup.Items.Add(Item);
SubItem := TMenuItem.Create(Item);
SubItem.Caption := 'dummy';
Item.Add(SubItem);
end;
procedure TForm1.PopupClick(Sender: TObject);
var
SubmenuItem, Item: TMenuItem;
begin
SubmenuItem := Sender as TMenuItem;
// delete old items (leave at least one to keep the submenu)
while SubmenuItem.Count > 1 do
SubmenuItem.Items[SubmenuItem.Count - 1].Free;
// create new items
while SubmenuItem.Count < 3 do begin
Item := TMenuItem.Create(SubmenuItem);
Item.Caption := Format('new item created %d', [GetTickCount]);
SubmenuItem.Add(Item);
end;
end;
但我不點擊...我將鼠標懸停和它打開。沒有點擊。 (我編輯了這個問題,以更好地反映這一點) – 2010-05-11 11:09:01
我沒說你需要點擊。你會試試嗎? – mghie 2010-05-11 11:17:56
哇,這個作品!對不起先不試,我認爲這是對點擊項目的誤解。但徘徊實際上會引發OnClick!謝謝! – 2010-05-11 11:21:11