Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TreeView - Archiv erstellen (https://www.delphipraxis.net/98757-treeview-archiv-erstellen.html)

marabu 1. Sep 2007 15:23

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.

atgis 1. Sep 2007 16:18

Re: TreeView - Archiv erstellen
 
Aha...Danke!

Also das umbenennen der Ordner funktioniert:

Delphi-Quellcode:
//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;
Leider lassen sich aber die Txt's nicht umbenennen...An was liegt das?



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:
procedure TForm3.Button1Click(Sender: TObject);
begin
 Form3.close;
end;

procedure TForm3.FormActivate(Sender: TObject);
begin
 edOrdnername.text:=form1.treeview1.selected.text;
end;
Ich weiß jetzt nicht wie ich das mrOk zurückgeben kann... :oops:

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...

marabu 1. Sep 2007 16:53

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:
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;
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.

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 von atgis
... Ich kann auch mal den kompletten Quellcode hochladen ...

Kein Drohungen bitte...

Zitat:

Zitat von atgis
Wie kann ich das TreeView auf einen Inhalt überprüfen?

Wie wäre es mit TreeView.Items.Count?

atgis 1. Sep 2007 20:30

Re: TreeView - Archiv erstellen
 
Danke! Funktioniert!

Delphi-Quellcode:
//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;
Bloß, dass ich die 2 Ebene unterbinde...das versteh ich nicht so richtig wie das gehen soll :wink:

marabu 2. Sep 2007 08:55

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:
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;
Freundliche Grüße

Chemiker 2. Sep 2007 09:38

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

atgis 2. Sep 2007 10:50

Re: TreeView - Archiv erstellen
 
Vielen Dank :)..Also es funktioniert erstmal so, wie ich es mir vorgestellt habe...

atgis 2. Sep 2007 14:45

Re: TreeView - Archiv erstellen
 
Ich möchte jetzt noch gerne per ImageList ein Icon (Ordner-Symbol) vor die Nodes setzen...
Delphi-Quellcode:
TreeView1.Items[0]
Doch beim Subnode klappt es mit

Delphi-Quellcode:
TreeView1.Items[1]
nicht! Was ist da der fehler?

Chemiker 2. Sep 2007 17:22

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.
Seite 2 von 2     12   

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