2011-05-28 10 views
8

'a ait olduğunu nasıl öğrenirsiniz? Yeterli basit olmalı ama göremiyorum.delphi - hangi TPopupMenu TMenuItem'in

PopupMenu1.PopupComponent 

ama nasıl o tıklandığında sırayla oldu TMenuItem içeren açılır menü öğrenebilirim:

Sen Sağ tıkladığınız ile bir pop-up menüsünü görüntülemek için oldu bileşeni öğrenebilirsiniz Menü?

örnek sorunu basitleştirmek için:

Ben etiketlerin bir dizi farklı başlığı ile her var ve etiketlerin her birinin PopupMenu özelliğine atanan bir açılır menü var.

Birisi sağ tıklama etiketlerden biri ve açılan menü taşır ve sonra MenuItem1 tıklar, kod istiyorum:

procedure TForm1.MenuItem1Click(Sender: TObject); 

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

xxxx ne olmalı?

Uygulanan Cevap hem katılımcılara

teşekkürler. Ayrıca TMenuItem çıkmanın hangi sorgulayan ve bu nedenle bana az değişiklik ile diğer OnClick işleyicileri bırakabildiği bir kod parçası veren

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 ; 

: Ne ile sona erdi bu oldu.

cevap

9

Sorunun biraz kafam karışmış olmasına rağmen, başka her şeyi yönettiğinizden beri sadece TMenuItem.GetParentMenu'u aradığınızı hayal edebiliyorum.

+0

Basit olacağını biliyordum ... TMenuItem'in özelliklerini araştırıyordum ve bu metotlara bakmayı hiç düşünmedim. Çok teşekkürler. – rossmcm

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;