AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TreeView Items in Popupmenu übertragen

Ein Thema von API · begonnen am 16. Aug 2005 · letzter Beitrag vom 18. Aug 2005
Antwort Antwort
API

Registriert seit: 18. Apr 2004
637 Beiträge
 
#1

TreeView Items in Popupmenu übertragen

  Alt 16. Aug 2005, 15:33
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?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: TreeView Items in Popupmenu übertragen

  Alt 16. Aug 2005, 20:38
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
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: TreeView Items in Popupmenu übertragen

  Alt 16. Aug 2005, 21:22
Zitat von marabu:
dein Code war doch schon fast fertig - warum hast du aufgehört?
...
Freundliche Grüße vom marabu
Der war gut!
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#4

Re: TreeView Items in Popupmenu übertragen

  Alt 18. Aug 2005, 14:23
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;
Thomas
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:53 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