Fórum Popup Menu no Delphi #605804
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
Gostei + 1
Mais Posts
04/10/2019
Alberto
Era o PopupComponent que eu precisava.
Obrigado.
Obrigado.
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)