Retrouver qui déclenche le PopupMenu avec bouton créées dynamiquement.

Résolu
moldov Messages postés 165 Date d'inscription mercredi 8 octobre 2003 Statut Membre Dernière intervention 10 novembre 2008 - 13 nov. 2006 à 22:55
moldov Messages postés 165 Date d'inscription mercredi 8 octobre 2003 Statut Membre Dernière intervention 10 novembre 2008 - 14 nov. 2006 à 12:44
Bonjour,

Je vous expose mon problème ainsi que les pistes que j'ai explorées.
Alors voila, je crée dans un ScrollBox des boutons dynamiquement suivant un fichier de configuration.
Ensuite je déclare la propriété btn.PopupMenu := mon popummenu.
Ce que je veux faire c'est que lorsque que je clique sur mon Popupmenu, j'affiche le Caption du bouton qui est appuyer.

Le problème c'est que j'arrive pas a remonter au bouton car le Sender de la fonction du clique du Popup est lui même.

Alors j'ai regardé du coté de la propriété PopupComponent.
Mais ce code me genère une violation d'accès :
    ShowMessage( TBitBtn( TPopupMenu(Sender).PopupComponent ).Caption );
Celui ci me donne une string vide
    ShowMessage( TBitBtn( TPopupMenu(Sender).PopupComponent ).Name);

Si vus avez une piste, je suis preneur
Merci et bonne Prog

2 réponses

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
14 nov. 2006 à 08:31
evenement OnContextPopup du composant (commun a tout les composant possedant le ppm) :

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    PopupMenu1: TPopupMenu;
    N1: TMenuItem;
    procedure FormCreate(Sender: TObject);
  private
    procedure DoButtonContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean);
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.DoButtonContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean);
begin
  with (Sender as TComponent) do
       PopupMenu1.Items[0].Caption := ClassName+'.'+Name;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Form1.OnContextPopup   := DoButtonContextPopup;
  Button1.OnContextPopup := DoButtonContextPopup;
  Button2.OnContextPopup := DoButtonContextPopup;
  Form1.PopupMenu        := PopupMenu1;
  Button1.PopupMenu      := PopupMenu1;
  Button2.PopupMenu      := PopupMenu1;
end;

ce qui afficheras par exemple :

TForm1.Form1
TButton.Button1
TButton.Button2

3
moldov Messages postés 165 Date d'inscription mercredi 8 octobre 2003 Statut Membre Dernière intervention 10 novembre 2008
14 nov. 2006 à 12:44
Meci F0xi, impeccable cela resoud mon problème.

Bonne Prog
0
Rejoignez-nous