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?
Alberto

Alberto

Responder

Post mais votado

04/10/2019

um exemplo funcional:
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

Emerson Nascimento
Responder

Mais Posts

04/10/2019

Alberto

Era o PopupComponent que eu precisava.
Obrigado.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar