[D7] Treeview: Popup uniquement sur items

Résolu
cs_nitrique Messages postés 344 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 4 avril 2011 - 8 juin 2006 à 17:06
cs_nitrique Messages postés 344 Date d'inscription jeudi 1 mai 2003 Statut Membre Derniè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.

David, à VERSAILLES
http://www.gentag.fr

1 réponse

cs_nitrique Messages postés 344 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 4 avril 2011 1
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.

[;)] David, à VERSAILLES
http://www.gentag.fr
3
Rejoignez-nous