![]() |
Re: TreeView - Archiv erstellen
Du kannst im Ereignis OnClick() der TreeView die Eigenschaft Enabled deines Menüeintrags "Unterpunkt1" in Abhängigkeit von Node.Level steuern. Später lernst du dann irgendwann TActionList und TAction kennen.
|
Re: TreeView - Archiv erstellen
Aha...Danke!
Also das umbenennen der Ordner funktioniert:
Delphi-Quellcode:
Leider lassen sich aber die Txt's nicht umbenennen...An was liegt das?
//Node Umbenennen mit rechtsklick
procedure TForm1.Umbenennen1Click(Sender: TObject); begin Form3.showmodal; RenameFile(TreeView1.Selected.Text,form3.edOrdnername.text); TreeView1.Selected.Text:=Form3.edOrdnername.Text; end; //Node Umbenennen procedure TForm1.TreeView1Edited(Sender: TObject; Node: TTreeNode; var S: String); begin RenameFile(TreeView1.Selected.Text, S); end; Das mit den ShowModale...leuchtet mir ein. Man muss ja die Form auch schließen könn...aber meine Form3 sieht so aus:
Delphi-Quellcode:
Ich weiß jetzt nicht wie ich das mrOk zurückgeben kann... :oops:
procedure TForm3.Button1Click(Sender: TObject);
begin Form3.close; end; procedure TForm3.FormActivate(Sender: TObject); begin edOrdnername.text:=form1.treeview1.selected.text; end; EDIT: Ich kann auch mal den kompletten Quellcode hochladen...wenns was nützt... EDIT2: Wie kann ich das TreeView auf einen Inhalt überprüfen? Also nur ob schon was drin steht oder nicht? Es sollte dann bloß true oder false zurückgeben... |
Re: TreeView - Archiv erstellen
Dass das Umbenennen nicht funktioniert könnte daran liegen, dass du in S nur den Text des Knotens geliefert bekommst, der Dateinamen aber auch den Text des übergeordneten Knotens benötigt. Du solltest anstatt des RenameFile erstmal eine Kontrolle einbauen:
Delphi-Quellcode:
Du kannst mrOk bzw. mrCancel an die Eigenschaft ModalResult der Form zuweisen. Das führt bei modalen Fenstern zum Schließen und der Rückgabe dieses Wertes. Du kannst das aber auch über die Eigenschaft ModalResult des Button erledigen.
resourcestring
S_EXT = '.txt'; function NodeText(node: TTreeNode; startLevel: integer; delimiter: char = PathDelim): string; begin if not Assigned(node) then Result := '' else if node.Level > startLevel then Result := NodeText(node.Parent, startLevel, delimiter) + delimiter + node.Text else if node.Level = startLevel then Result := node.Text else Result := '' end; procedure TDemoForm.TreeViewEdited(Sender: TObject; Node: TTreeNode; var S: String); var exePath, oldName, newName: string; begin exePath := ExtractFilePath(ParamStr(0)); oldName := exePath + NodeText(Node, 0); if Node.Level = 1 then begin oldName := oldName + S_EXT; newName := ExtractFilePath(oldName) + S + S_EXT; end else newName := exePath + S; ShowMessage(Format('RenameFile(%s, %s)', [oldname, newName])); S := Node.Text; // RenameFile(oldName, newName); end;
Delphi-Quellcode:
procedure TForm3.Button1Click(Sender: TObject);
begin // {Form3.}Close; // Wenn du eine Methode der Form3 aufrufen willst, dann // ist dein Aufruf in Ordnung, aber innerhalb von Methoden // selbst vermeidet man nach Möglichkeit jeden Verweis // auf eine Instanz. ModalResult := mrOK ; end; Zitat:
Zitat:
|
Re: TreeView - Archiv erstellen
Danke! Funktioniert!
Delphi-Quellcode:
Bloß, dass ich die 2 Ebene unterbinde...das versteh ich nicht so richtig wie das gehen soll :wink:
//Node Umbenennen
procedure TForm1.TreeView1Edited(Sender: TObject; Node: TTreeNode; var S: String); var exePath, oldName, newName: string; begin exePath := ExtractFilePath(ParamStr(0)); oldName := (exePath + NodeText(TreeView1.Selected, 0, '\')); if Node.Level = 1 then begin oldName := oldName + S_EXT; newName := ExtractFilePath(oldName) + S + S_EXT; end else newName := exePath + S; RenameFile(oldname, newName); end; |
Re: TreeView - Archiv erstellen
Guten Morgen.
Die Beschränkung auf zwei Ebenen - ich zeige dir Code zu dem Ansatz aus Beitrag #11, aber statt des OnClick() verwende ich OnChange(), da du wohl noch kein Kontextmenü verwendest.
Delphi-Quellcode:
Freundliche Grüße
procedure TDemoForm.TreeViewChange(Sender: TObject; Node: TTreeNode);
begin // miAddNode ist bei mir das MenuItem, über das ein // beuer Knoten in den Baum eingefügt werden kann. miAddNode.Enabled := not Assigned(Node) or (Node.Level = 0); end; |
Re: TreeView - Archiv erstellen
Hallo atgis,
währe es nicht einfacher für Dich mit einem Object zu arbeiten und darin der Dateiname mit in den Knoten abzulegen? So ist gewährleistet das der Dateiname mit dem Knoten verbunden ist. Bis bald Chemiker |
Re: TreeView - Archiv erstellen
Vielen Dank :)..Also es funktioniert erstmal so, wie ich es mir vorgestellt habe...
|
Re: TreeView - Archiv erstellen
Ich möchte jetzt noch gerne per ImageList ein Icon (Ordner-Symbol) vor die Nodes setzen...
Delphi-Quellcode:
Doch beim Subnode klappt es mit
TreeView1.Items[0]
Delphi-Quellcode:
nicht! Was ist da der fehler?
TreeView1.Items[1]
|
Re: TreeView - Archiv erstellen
Hallo atgis,
beim Anlegen des Kind-Knotens:
Delphi-Quellcode:
Knoten:=TreeView1.Items.AddChild(TreeView1.Selected,Form3.edOrdnername.text);
Knoten.ImageIndex:= 0; // Das erste Image aus der Liste Knoten.SelectedIndex:=1; // Das Image beim Markieren des Knotens // das zweite Image aus der ImageList Bis bald Chemiker |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz