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).
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.
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.
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;
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.