Bloquer le menu contextuel dans un TTreeView
Par Delphi Source - March 25, 2026 · Vues: 14 · Catégories: Snippets · Tags: #TreeView

Bloquer le menu contextuel dans un TTreeView

Une astuce permettant de désactiver le menu contextuel lors de l’édition d’un nœud dans un TTreeView.

L’idée consiste à intercepter la procédure fenêtre du contrôle d’édition interne et à filtrer le message WM_CONTEXTMENU.


Résultat : plus de clic droit pendant l’édition, tout en conservant le comportement normal du contrôle.

Une solution simple, efficace et 100 % API Windows.


var 
  Form1: TForm1; 
  OriginalWndProc: Pointer; 
  
implementation 
  
uses 
  CommCtrl; 
  
{$R *.dfm} 
  
function EditWndProc(Wnd: HWND; Msg: UINT; wParam: wParam; lParam: lParam): LRESULT; stdcall; 
begin 
  if Msg = WM_CONTEXTMENU then 
    Exit(0); // Bloque le menu contextuel 
  Result := CallWindowProc(OriginalWndProc, Wnd, Msg, wParam, lParam); 
end; 
  
procedure TForm1.TreeView1Editing(Sender: TObject; Node: TTreeNode; var AllowEdit: Boolean); 
var 
  EditHandle: HWND; 
begin 
  AllowEdit := True; 
  EditHandle := TreeView_GetEditControl(TreeView1.Handle); 
  if EditHandle <> 0 then 
  begin 
    OriginalWndProc := Pointer(GetWindowLongPtr(EditHandle, GWLP_WNDPROC)); 
    SetWindowLongPtr(EditHandle, GWLP_WNDPROC, LONG_PTR(@EditWndProc)); 
  end; 
end;


Un petit clic (J'aime) qui fait plaisir !