Popup menu dynamique

Signaler
Messages postés
10
Date d'inscription
mardi 17 juin 2003
Statut
Membre
Dernière intervention
8 septembre 2005
-
Messages postés
10
Date d'inscription
mardi 17 juin 2003
Statut
Membre
Dernière intervention
8 septembre 2005
-
Bonjour, j ai un soucis pour creer un menu contextuel..
Voici mon code:

procedure TstringGrid.EventOnMousedown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
Arow:integer;
Acol:integer;
i,j:integer;
menucontext:TpopupMenu;
begin
if button= mbRight then
begin
menucontext:= TpopupMenu.Create(nil);
menucontext.AutoPopup := False;
menucontext.Items.Add(TmenuItem.Create(nil));
menucontext.Items[0].Caption:='Copier la sélection';
menucontext.Popup(X,Y);
end;
end;

ce code cree un menu contextuel buggé c est a dire qu il n affiche pas le menu mais on peut l apercevoir en changant de fenetre sous windows ( l espace du menu contextuel ne se rafraichit pas).

J aimerai savoir ou est mon erreur..
Merci

5 réponses

Messages postés
323
Date d'inscription
jeudi 6 juin 2002
Statut
Membre
Dernière intervention
24 septembre 2008
2
Salut,

Je viens de tester ton code et je ne voie pas ou est ton problème.
Si tu désires affichés ton popupmenu la ou tu click, il faut que tu lui donne la position absolu de ta souris (Mouse.CursorPos.X et Mouse.CursorPos.Y).

Mais je ne vois pas vraiment ce que tu cherche à faire. Car tu créent un TPopupMenu lorsque tu click tu le bouton droit de la souris, mais ce popupmenu sera détruit une fois la procedure effectué. Donc tu ne pourras affecter aucune action à ton PopupMenu.

Si tu Cherches à créer un PopupMenu Dynamique déclare ton popupmenu dans la zone private de tes sources.
Et surtout n'oublis pas de le libérer car à chaque click droit de ta souris tu créera un nouveau popup.

en espérant avoir répondu à ta question ;)

Olivier.
Messages postés
323
Date d'inscription
jeudi 6 juin 2002
Statut
Membre
Dernière intervention
24 septembre 2008
2
Salut,

Je viens de tester ton code et je ne voie pas ou est ton problème.
Si tu désires affichés ton popupmenu la ou tu click, il faut que tu lui donne la position absolu de ta souris (Mouse.CursorPos.X et Mouse.CursorPos.Y).

Mais je ne vois pas vraiment ce que tu cherche à faire. Car tu créent un TPopupMenu lorsque tu click tu le bouton droit de la souris, mais ce popupmenu sera détruit une fois la procedure effectué. Donc tu ne pourras affecter aucune action à ton PopupMenu.

Si tu Cherches à créer un PopupMenu Dynamique déclare ton popupmenu dans la zone private de tes sources.
Et surtout n'oublis pas de le libérer car à chaque click droit de ta souris tu créera un nouveau popup.

en espérant avoir répondu à ta question ;)

Olivier.
Messages postés
10
Date d'inscription
mardi 17 juin 2003
Statut
Membre
Dernière intervention
8 septembre 2005

Re
Je vien de mettre la creation dans la constructeur d une stringgrid pour afficher le menu contextuel qd on clique sur le bouton droit de la souris
ca marche toujours pas, j ai toujours le bug d affichage:
ce code cree un menu contextuel buggé c est a dire qu il n affiche pas le menu mais on peut l apercevoir en changant de fenetre sous windows ( l espace du menu contextuel ne se rafraichit pas).

Lorsque j utilise le composant statique a poser sur la form le programme cree un menu contextuel nickel .
mais lorsque j utilise ce code ca fait le bug:

// fonction apellé dans le construsteur de la stringgrid :
procedure TstringGridPlus.CreationMenuContext(AOwner: TComponent);
begin
menucontext:= TpopupMenu.Create(nil);
menucontext.AutoPopup := False;
menucontext.Items.Add(TmenuItem.Create(nil));
menucontext.Items[0].Caption:='Copier la sélection';
menucontext.Items.Add(TmenuItem.Create(nil));
menucontext.Items[1].Caption:='Copier la sélection';
end;

procedure TstringGridPlus.EventOnMousedown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if button= mbRight then
begin
menucontext.Popup (Mouse.CursorPos.X ,Mouse.CursorPos.Y);
end;
end;
Messages postés
323
Date d'inscription
jeudi 6 juin 2002
Statut
Membre
Dernière intervention
24 septembre 2008
2
Delphiprog à parfaitement raison,

Rien ne t'empeche de rajouter ou supprimer les actions que tu veux mettre dans ton popupmenu qui lui est préalablement attacher à ton composant.

bonne prog ;)
Messages postés
10
Date d'inscription
mardi 17 juin 2003
Statut
Membre
Dernière intervention
8 septembre 2005

Bonjour,
J ai reglé mon probleme:

constructor TstringGridPlus.Create(AOwner: TComponent);
begin
inherited Create(Aowner);
menucontext:=TpopupMenu.create(self);
end

je comprend pas pourquoi ca marchait pas avant c est ce que je pensais faire ...
J ai beau chercher, le probleme d affichage ne reapparait pas, tant mieux pour moi, mais c dommage de ne pas savoir d ou venai le probleme.

Merci pour tout,
DelphiProg ta source m'a beaucoup aidée Merci Beaucoup.

Krome