2011-05-28 70 views
8

應該很簡單,但我看不到它。delphi - 你如何找出哪個TPopupMenu是一個TMenuItem屬於

你可以找出那是右鍵單擊以顯示與彈出菜單組件:

PopupMenu1.PopupComponent 

但你如何找出包含TMenuItem這是又點擊了彈出菜單菜單?

爲了簡化問題的例子:

我有一系列的標籤,每一個不同的標題,我有一個分配給每一個標籤的的彈出菜單屬性彈出菜單。

當有人右鍵點擊標籤之一,並提出了彈出式菜單,然後點擊MenuItem1,我想代碼:

procedure TForm1.MenuItem1Click(Sender: TObject); 

begin 
MsgBox (Format ('The label right-clicked has the caption %', [xxxx.Caption ])) ; 
end ; 

我應該XXXX是什麼?

實現答案

多虧了這兩個受訪者。我結束了是這樣的:

procedure TForm1.MenuItem1Click(Sender: TObject); 

var 
    AParentMenu : TMenu ; 
    AComponent : TComponent ; 
    ALabel  : TLabel ; 

begin 
AParentMenu := TMenuItem (Sender).GetParentMenu ; 
AComponent := TPopupMenu (AParentMenu).PopupComponent ; 
ALabel  := TLabel (AComponent) ; 
MsgBox (Format ('The label right-clicked has the caption %', [ALabel.Caption ])) ; 
end ; 

也詢問這TMenuItem參與,因此給我的代碼,我可以放到其他onclick處理與改動較小片段。

回答

9

我對你的問題有點困惑,但既然你排除了一切,我只能想象你正在尋找TMenuItem.GetParentMenu

+0

我知道這將是簡單的......我正在尋找TMenuItem的屬性,從來沒有想過要看看這些方法。非常感謝。 – rossmcm 2011-05-28 10:27:39

6
procedure TForm1.MenuItem1Click(Sender: TObject); 
var pop:TPopupMenu; 
    lbl:TLabel; 
begin 
    // Firstly get parent TPopupMenu (needs casting from TMenu) 
    pop:= TPopupMenu(MenuItem1.GetParentMenu()); 
    // pop.PopupComponent is the "source" control, just cast it to Tlabel 
    lbl:= TLabel(pop.PopupComponent);    

    ShowMessage(Format('The label right-clicked has the caption %s',[lbl.Caption])); 
end; 
相關問題