cs_nitrique
Messages postés344Date d'inscriptionjeudi 1 mai 2003StatutMembreDernière intervention 4 avril 2011
-
8 juin 2006 à 17:06
cs_nitrique
Messages postés344Date d'inscriptionjeudi 1 mai 2003StatutMembreDernière intervention 4 avril 2011
-
8 juin 2006 à 17:45
Bonjour,
J'ai attaché un popupMenu sur mon treeview et j'aimerais qu'il ne s'execute que si le clic droit a été fait sur un item (on ne peut pas attacher le popupMenu directement sur un item, c'est dommage...).
J'ai réussi à faire en sorte que le clic droit sélectionne l'item en dessous mais je ne détecte pas SI il y a bien un item dessous:
tvMain = treeview
pmMain = PopupMenu
procedure TfrmMain.tvMainMouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
var
mpos: TPoint;
begin
GetCursorPos(mpos);
mpos := tvMain.ScreenToClient(mpos);
if Button=mbRight then begin
tvMain.Perform(WM_LBUTTONDOWN,1,MakeLParam(mpos.X,mpos.Y));
tvMain.Perform(WM_LBUTTONUP,0,0);
tvMain.PopupMenu := pmMain;
end;
end;
De plus, j'ai peur de m'ettre compliqué la tache (qui me parait simple) en partant dans un truc de fou.
cs_nitrique
Messages postés344Date d'inscriptionjeudi 1 mai 2003StatutMembreDernière intervention 4 avril 20111 8 juin 2006 à 17:45
En fait, j'ai trouvé ça:
procedure TfrmMain.tvMainContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean);
var mpos: TPoint;
begin
if (tvMain.GetNodeAt(MousePos.X,MousePos.Y)<>nil) then begin
tvMain.Selected := tvMain.GetNodeAt(MousePos.X,MousePos.Y);
GetCursorPos(mpos);
pmMain.Popup(mpos.X,mpos.Y);
end;
end;
(Je ne connaissait pas ContextPopup).
Ca marche, mais si quelqu'un a quelque chose de plus optimisé, je suis prenneur.