Wie kann ein TreeView auch auf einen rechten Mausklick reagieren?


Im Windows Explorer ist es z.B. möglich, in der linken Ansicht der Laufwerke und Ordner (ein TreeView) mit der rechten Maustaste Einträge anzuklicken. Auch unter Delphi besitzt die TreeView-Komponente einen entsprechenden Eintrag 'RightClickSelect', nur leider funktioniert der nicht richtig. Der mit rechts angewählte Eintrag bleibt nur wärend des Gedrückthalten des Mausknopfes selektiert, danach springt das TreeView automatisch wieder auf den vorher ausgewählten Eintrag. Besonders ärgerlich ist es, wenn man innerhalb eines PopupMenus auf TreeView.Selected zugreift, weil man nie den mit rechts angewählten Eintrag zu sehen bekommt.

Lösung: Man muß selber dafür sorgen, daß bei einem Rechtsklick die TreeNode unter dem Mauszeiger aktiviert wird. Dazu benutzen wir das OnMouseDown Event, holen uns den Eintrag unter dem Mauszeiger und machen ihn zum angewählten Eintrag:

procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if (Button = mbRight) then begin
    if (htOnItem in TreeView1.GetHitTestInfoAt(x,y)) then begin
      TreeView1.Selected := TreeView1.GetNodeAt(x,y);
    end;
  end;
end;

Ach ja: Bei einem ListView gibt es ebenfalls ein 'RightClickSelect', dort funktioniert es ohne Probleme (zumindest unter Delphi4).

Delphi 1 Delphi 2 Delphi 3 Delphi 4
nicht getestet Version nicht betroffen getestet

siehe auch:


Delphi FAQ