2011-05-28 8 views
8

Debe ser lo suficientemente simple pero no puedo verlo.delphi - cómo se puede saber a qué TPopupMenu pertenece un TMenuItem

Usted puede encontrar el componente que se hace clic derecho en para mostrar un menú emergente con:

PopupMenu1.PopupComponent 

pero ¿cómo encontrar el menú emergente que contiene el TMenuItem que era a su vez se hace clic en ese ¿menú?

Para simplificar el problema a un ejemplo:

tengo una serie de etiquetas, cada una con un título diferente, y tengo un menú emergente que se asigna a la propiedad PopupMenu de cada una de las etiquetas.

Cuando alguien hace clic con uno de los sellos y se abre el menú emergente, y luego hace clic en MenuItem1, quiero código:

procedure TForm1.MenuItem1Click(Sender: TObject); 

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

¿Cuál debe ser xxxx?

respuesta Implementado

Gracias a ambos encuestados. Lo que terminó con la era esto:

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 ; 

que también interroga a la que estaba involucrado TMenuItem y por lo tanto me da un fragmento de código que pueda caer en otros manipuladores OnClick con menos modificaciones.

Respuesta

9

Estoy un poco confundido por su pregunta, pero como ha descartado todo lo demás, solo puedo imaginar que está buscando TMenuItem.GetParentMenu.

+0

sabía que iba a ser sencillo ... que estaba buscando en las propiedades de TMenuItem y nunca pensé que mirar los métodos. Muchas gracias. – 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; 
Cuestiones relacionadas