2010-03-24 11 views
15

Al tener un menú emergente asociado a varios componentes en un formulario (botones, pero también cosas como TCharts), me gustaría saber qué componente se hizo clic derecho para iniciar el menú emergente en El primer lugar.¿Cuál es el componente que hace clic en un menú emergente originado de

El parámetro Sender del método de clic simplemente apunta al TMenuItem, su elemento principal del menú emergente (o el elemento del menú principal).

¿Cómo obtengo el componente de origen?

Respuesta

27

¿Quisces decir PopupMenu1.PopupComponent?

+0

+1. O, para ser más genérico, usaría esto en el evento OnPopup del menú: (Remitente como TPopupMenu). Componente de componente –

+0

@BruceMcGee ¿Por qué/cómo será esto 'más genérico'? – Wolf

+0

@ Wolf: Más genérico porque no necesita saber el nombre del componente. Menos frágil si los nombres de los componentes cambian, y el mismo evento podría ser utilizado por más de un componente. –

0

Como último recurso puede usar Mouse.CursorPos en TPopupMenu.OnPopup para encontrar este componente en un formulario. Pero probablemente haya una forma mejor/más fácil.

+0

Esto ayuda solo cuando el menú emergente se abrió con un clic del mouse, también hay una tecla (o combinación de teclas) para abrir el menú contextual para controles enfocados. – Wolf

9

se puede obtener el componente de llamada dentro del evento click del TMenuItem de un PopupMenu por

Caller := ((Sender as TMenuItem).GetParentMenu as TPopupMenu).PopupComponent; 

Un ejemplo de un PopupMenu que se asigna a varios cuadros de lista y resuelve la exportación de presentar funcionalidad:

procedure TForm1.mniExportFileClick(Sender: TObject); 
var Caller: TObject; 
begin 
    if SaveTextFileDialog1.Execute then 
    begin 
    Caller := ((Sender as TMenuItem).GetParentMenu as TPopupMenu).PopupComponent; 
    (Caller as TListBox).Items. 
     SaveToFile(SaveTextFileDialog1.FileName, 
     StandardEncodingFromName(
      SaveTextFileDialog1.Encodings[SaveTextFileDialog1.EncodingIndex])); 
    end; 
end; 
Cuestiones relacionadas