Popup Menu no Delphi
04/10/2019
0
Olá.
Vejamos o seguinte exemplo:
O usuário cria em runtime 3 TImage num Tform
No propriedade POPUPMENU de cada TImage tem o mesmo menu popup associado.
Quando o usuário clica com o botão direito em um dos TImage abre o menu
Que pode ter os items: 1-Grande | 2-Medio | 3-Pequeno | (por exemplo)
Digamos que ele clique no primeiro item do menu (Grande) que executa uma procedure Generica
(ou seja, a mesma procedure é executada nos 3 itens do menu)
Dentro da procedure
Eu consigo saber qual foi o item do menu clicado. por exemplo:
n := TMenuItem(Sender).Tag
Mas quero saber em qual TImage o usuário clicou com o botão direito.
Já tentei usar assim:
C := TMenuItem(Sender).GetParentComponent
Mas ele retorna o TForm e não o TImage
Existe alguma maneira de eu conseguir o TImage dentro dessa procedure?
Vejamos o seguinte exemplo:
O usuário cria em runtime 3 TImage num Tform
No propriedade POPUPMENU de cada TImage tem o mesmo menu popup associado.
Quando o usuário clica com o botão direito em um dos TImage abre o menu
Que pode ter os items: 1-Grande | 2-Medio | 3-Pequeno | (por exemplo)
Digamos que ele clique no primeiro item do menu (Grande) que executa uma procedure Generica
(ou seja, a mesma procedure é executada nos 3 itens do menu)
Dentro da procedure
Eu consigo saber qual foi o item do menu clicado. por exemplo:
n := TMenuItem(Sender).Tag
Mas quero saber em qual TImage o usuário clicou com o botão direito.
Já tentei usar assim:
C := TMenuItem(Sender).GetParentComponent
Mas ele retorna o TForm e não o TImage
Existe alguma maneira de eu conseguir o TImage dentro dessa procedure?
Alberto
Curtir tópico
+ 0
Responder
Post mais votado
04/10/2019
um exemplo funcional:
o segredo está no conteúdo de FComponenteMenu, que é preenchido ao acionar o menu, antes de acionar o item.
todos os meus objetos apontam para o mesmo popup (PopupMenu1), e todos os itens de menu apontam para o mesmo evento click (Pequeno1Click).
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Menus, Vcl.ExtCtrls; type TForm2 = class(TForm) PopupMenu1: TPopupMenu; Pequeno1: TMenuItem; Mdio1: TMenuItem; Grande1: TMenuItem; Panel1: TPanel; Image1: TImage; Panel2: TPanel; Image2: TImage; Panel3: TPanel; Image3: TImage; procedure PopupMenu1Popup(Sender: TObject); procedure Pequeno1Click(Sender: TObject); private { Private declarations } FComponenteMenu: TComponent; // aqui será informado qual objeto recebeu o clique com o botão direito public { Public declarations } end; var Form2: TForm2; implementation {$R *.dfm} procedure TForm2.Pequeno1Click(Sender: TObject); begin messagebox(0, PWideChar(TMenuItem(Sender).Caption + ' - '+FComponenteMenu.Name), 'mensagem', MB_OK); end; procedure TForm2.PopupMenu1Popup(Sender: TObject); begin FComponenteMenu := TPopupMenu(Sender).PopupComponent; end; end.
o segredo está no conteúdo de FComponenteMenu, que é preenchido ao acionar o menu, antes de acionar o item.
todos os meus objetos apontam para o mesmo popup (PopupMenu1), e todos os itens de menu apontam para o mesmo evento click (Pequeno1Click).
Emerson Nascimento
Responder
Mais Posts
Clique aqui para fazer login e interagir na Comunidade :)