Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TreeView Items in Popupmenu übertragen (https://www.delphipraxis.net/51652-treeview-items-popupmenu-uebertragen.html)

API 16. Aug 2005 14:33


TreeView Items in Popupmenu übertragen
 
Hallo

Habe eine TreeView1 und ein Popupmenu1.
Wie übertrage ich nun die TreeView items ins Popupmenu.

Habe mal soviel zustande gebracht.

Delphi-Quellcode:
var Item:TMenuItem;
begin
  Item:= TMenuItem.Create;
  Item.Caption:= TreeView1.Items[0].Text;
  Item.OnClick:= MyEventHandler; // onclick zuweisen
  PopupMenu.Items.Add(Item);
end;
Kann mir jemand helfen, eine kleine Rekursive Funktion zu schreiben, um eine
beliebige TreeView Sturktur (Ordner + Unterordner) in ein Popupmenu zu populieren?

marabu 16. Aug 2005 19:38

Re: TreeView Items in Popupmenu übertragen
 
Hi API,

dein Code war doch schon fast fertig - warum hast du aufgehört?

Delphi-Quellcode:
function TDemoForm.NodePath(node: TTreeNode): string;
begin
  Result := node.Text;
  if Assigned(node.Parent) then
    Result := NodePath(node.Parent) + ' \ ' + Result;
end;

procedure TDemoForm.ProcessItems(item: TMenuItem; node: TTreeNode);
var
  i: integer;
  subItem: TMenuItem;
  subNode: TTreeNode;
begin
  for i := 0 to node.Count - 1 do begin
    subNode := node.Item[i];
    subItem := NewItem(subNode.Text, TextToShortCut(''), false, true, nil, 0, '');
    subItem.Tag := Integer(subNode);
    if not subNode.HasChildren then
      subItem.OnClick := MenuItemClick;
    item.Add(subItem);
    ProcessItems(subItem, subNode);
  end;
end;

procedure TDemoForm.PopulateMenuFromTreeNodes(menu: TMenu; nodes: TTreeNodes);
var
  item: TMenuItem;
  node: TTreeNode;
begin
  menu.Items.Clear;
  node := nodes.GetFirstNode;
  while Assigned(node) do begin
    item := NewItem(node.Text, TextToShortCut(''), false, true, nil, 0, '');
    item.Tag := Integer(node);
    menu.Items.Add(item);
    if node.HasChildren
      then ProcessItems(item, node)
      else item.OnClick := MenuItemClick;
    node := node.getNextSibling;
  end;
end;

procedure TDemoForm.MenuButtonClick(Sender: TObject);
begin
  PopulateMenuFromTreeNodes(PopupMenu, MenuTree.Items);
end;

procedure TDemoForm.MenuItemClick(Sender: TObject);
begin
  with Sender as TMenuItem do
    ShowMessage(Format('%s', [NodePath(TTreeNode(Tag))]));
end;
Freundliche Grüße vom marabu

alzaimar 16. Aug 2005 20:22

Re: TreeView Items in Popupmenu übertragen
 
Zitat:

Zitat von marabu
dein Code war doch schon fast fertig - warum hast du aufgehört?
...
Freundliche Grüße vom marabu

Der war gut!

toms 18. Aug 2005 13:23

Re: TreeView Items in Popupmenu übertragen
 
oder so:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  AddMenu(nil, nil);
end;

procedure TForm1.AddMenu(Node: TTreeNode; Menu: TMenuItem);
var
  Temp: TTreeNode;
  Item: TMenuItem;
begin
  if not Assigned(Node) then begin
    Temp := TreeView1.Items[0];
    while Assigned(Temp) do begin
      Item := TMenuItem.Create(Self);
      Item.Caption := Temp.Text;
      PopupMenu1.Items.Add(Item);
      if Temp.Count > 0 then AddMenu(Temp, Item);
      Temp := Temp.GetNextSibling;
    end;
  end else begin
    Temp := Node.GetFirstChild;
    while Assigned(Temp) do begin
      Item := TMenuItem.Create(Self);
      Item.Caption := Temp.Text;
      Menu.Add(Item);
      if Temp.Count > 0 then AddMenu(Temp, Item);
      Temp := Temp.GetNextSibling;
    end;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz