Inhalt eines Treeviews als Kontextmenü anzeigen(Tipp drucken)
Ein Knoten in einem Treeview ist Teil des ganzen Baumes und hat einen Index, der sich auf seine Position
im Baum bezieht. In einem Menü werden nur die Kinder der ersten Ebene als Teil betrachtet. Der Index beginnt dabei
wieder von neuem mit 0.
- Fügen Sie einen Treeview in ein Formular ein und fügen Sie ihm über die Eigenschaft Items einige Knoten (auch
verschachtelt hinzu.
- Fügen Sie eine PopupMenu-Komponente ein.
- Setzen Sie die Eigenschaft PopupMenu des Formulars auf die PopupMenu-Komponente.
- In die Klasse des Formular fügen Sie eine Methode ein, die beim Klick auf einen Kontextmenüpunkt ausgeführt werden soll.
- Fügen Sie eine Button-Komponente ein, und fügen Sie in dessen Ereignis OnClick den folgenden Code ein.
TForm1 = class(TForm)
//...
private
procedure OnPopupClick(Sender: TObject);
// ...
end;
implementation
procedure TForm1.OnPopupClick(Sender: TObject);
begin
if (Sender is TMenuItem) then
Treeview1.Selected := Treeview1.Items[(Sender as TMenuItem).Tag];
end;
procedure TForm1.FormCreate(Sender: TObject);
var
MI, MI1, MI2: TMenuItem;
i, j: integer;
vPos: integer;
ActLevel: integer;
begin
TreeView1.FullExpand;
MI1 := nil;
PopupMenu1.Items.Clear;
ActLevel := 0;
for i := 0 to TreeView1.Items.Count - 1 do
begin
MI := TMenuItem.Create(PopupMenu1);
MI.Caption := TreeView1.Items[i].Text;
MI.Tag := i;
MI.OnClick := OnPopupClick;
if TreeView1.Items[i].Level = 0 then
begin
PopupMenu1.Items.Add(MI);
MI2 := MI;
end
else
begin
if TreeView1.Items[i].Level = ActLevel then
begin
MI1 := MI2.Parent;
MI1.OnClick := nil;
MI1.Add(MI);
end;
if TreeView1.Items[i].Level > ActLevel then
begin
MI1 := MI2;
MI1.Add(MI);
MI1.OnClick := nil;
MI2 := MI;
end;
if TreeView1.Items[i].Level < ActLevel then
begin
MI1 := MI2.Parent;
for j := 0 to (ActLevel - TreeView1.Items[i].Level - 1) do
MI1 := MI1.Parent;
MI1.Add(MI);
MI1.OnClick := nil;
MI2 := MI;
end;
end;
ActLevel := TreeView1.Items[i].Level;
end;
end;