AGB  ·  Datenschutz  ·  Impressum  







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

TreeView - Archiv erstellen

Ein Thema von atgis · begonnen am 31. Aug 2007 · letzter Beitrag vom 2. Sep 2007
Antwort Antwort
Seite 1 von 2  1 2      
atgis
(Gast)

n/a Beiträge
 
#1

TreeView - Archiv erstellen

  Alt 31. Aug 2007, 19:44
Hi,

Ich möchte gerne ein kleines Archiv anlegen. Dazu habe ich ein kleines Programm angefangen, was ein TreeView und eine Memo-Feld enthält.

Ich möchte nun, wenn ich im TreeView einen neuen Hauptpunkt (Node) erstelle - automatisch einen neuen Ordner mit den Namen des Nodes (im Stammordner des Progs) haben...
http://img251.imageshack.us/img251/5...tmapzs6.th.jpg

Delphi-Quellcode:
//Hauptpunkt erstellen
procedure TForm1.NeuerNode1Click(Sender: TObject);
begin
 TreeView1.Items.Add(NIL,('Neuer Hauptpunk'));

 //Ordner erstellen
 MkDir(ExtractFilePath(ParamStr(0))+'name');
end;
Bloß wie lese ich aus, damit der Node-Name als Ordnername gespeichert wird? Im Bsp würden alle Ordner "name" heißen! Wie auf dem Bild soll es mir einen Ordner Vergaser und Zylinder anlegen...

Jetzt möchte ich eine Unterpunkt erstellen. Ein paar Eintragungen im Memo-Feld machen...und es soll nun eine TXT-Datei angelegt werden! Die soll den Namen des Unterpunktes haben und im jeweiligen Ordner gespeichert werden...

Delphi-Quellcode:
//Unterpunkt erstellen
procedure TForm1.Unterpunkt1Click(Sender: TObject);
begin
 TreeView1.Items.AddChild(TreeView1.Selected,('Neuer Unterpunkt'));
end;
Delphi-Quellcode:
//Neuen Inhalt Speichern
procedure TForm1.Speichern1Click(Sender: TObject);
begin
   Memo.Lines.SaveToFile(ExtractFilePath(ParamStr(0))+'name');
end;
EDIT:
Memo.Lines.SaveToFile(ExtractFilePath(ParamStr(0))+'name'); Stimmt natürlich nicht! Ich will ja den Pfad von den erstellten Ordner haben...

Also z.B. Ich lege "Vergaser" an...automatisch wir im Stammordner ein Ordner namens "Vergaser" angelegt...
Nun lege ich einen Unterpunkt "Einstellungen" an...mache meine Eintragung im Memo-Feld...dies soll nun als Einstellung.txt im Ordner Vergaser abgelegt werden!

EDIT2:
Beim navigieren durch das TreeView soll bei einen Klick auf einen Unterpunkt - der jeweilige Inhalt der TXT-Datei im Memo Feld geladen werden...da fehlt mir auch wieder der Pfad zur Datei

Delphi-Quellcode:
//Klicken auf Unterpunkt:
Memo.Lines.LoadFromFile(*****)
Kann mir Bitte jemand helfen?
  Mit Zitat antworten Zitat
IceTube
(Gast)

n/a Beiträge
 
#2

Re: TreeView - Archiv erstellen

  Alt 31. Aug 2007, 20:21
Hallo,

falls ich dich richtig verstanden habe müsste es so gehen:

Delphi-Quellcode:

//Hauptpunkt erstellen
procedure TForm1.NeuerNode1Click(Sender: TObject);
begin
TreeView1.Items.Add(NIL,('Neuer Hauptpunkt')); //Das "T" vergessen ;)

//Ordner erstellen
MkDir(ExtractFilePath(ParamStr(0))+'name');
end;


// So wird der Ordner erstellt!

//Procedur vom Treeview --> NodeEdited
var S:Text
Node : TTreeNode;
begin
//Erstelle Ordner
try
if DirectoryExists(S) = false then MkDir(ExtractFilePath(ParamStr(0))+'\'+S);
except
Node.Delete;
exit;
end;
end;

//Unterpunkt erstellen
procedure TForm1.Unterpunkt1Click(Sender: TObject);
begin
TreeView1.Items.AddChild(TreeView1.Selected,('Neuer Unterpunkt'));
end;


//Willst du die Memo mit einem Button speichern....
procedure Button1.onClick....(etc..)
begin
//Irgend ein Name vom Memo1 tXt
try Memo1.Lines.SaveToFile(ExtractFilePath(ParamStr(0)) +'\'+ TreeView1.Seleted.Tex +'\'+'Memo1.TxT');
except
//Existiert nicht
exit;

//Vom Unterpunkt - ich glaub das heißt TreeView.Selected.Item[0]....vielleicht aber auch
//...Selected.Value[0]....musst probieren....
try Memo1.Lines.SaveToFile(ExtractFilePath(ParamStr(0)) +'\'+ TreeView1.Seleted.Text +'\'+TreeView1.Selected.Item[0].Text);
except
//Existiert nicht
exit;

end;
end;

//laden wenn man auf eine Node klickt
procedure TreeView.onClick //etc
begin
try Memo1.Lines.LoadFromFile(ExtractFilePath(ParamStr(0)) + TreeView1.Seleted.Text+'Memo1.TxT');
except
//Nicht gefunden
exit;
end;
end;

So...ich hoffe ich hab dir geholfen!

lg
  Mit Zitat antworten Zitat
atgis
(Gast)

n/a Beiträge
 
#3

Re: TreeView - Archiv erstellen

  Alt 31. Aug 2007, 22:26
Hi,

Ja Danke! Hat schon geholfen...Ich habs allerdings etwas anders gemacht.

Das Hauptpunkt (und automatisch Ordner im Stamm) erstellen, hab ich mit einer neuen Form und einen Edit-Feld gelöst. Da gibt man dann einfach den Ordnernamen ein:
Delphi-Quellcode:
//Hauptpunkt erstellen
procedure TForm1.NeuerNode1Click(Sender: TObject);
begin
 //Maske für Ordnernamen
 Form3.showmodal;

 //Hauptpunkt erstellen
 TreeView1.Items.Add(NIL,Form3.edOrdnername.text);

 //Ordner erstellen
 MkDir(ExtractFilePath(ParamStr(0))+Form3.edOrdnername.text);
end;
Unterpunkte machen funktioniert auch so. Allerdings sollen hier keine Ordner, sondern eine TXT-Datei mit den Unterordnernamen erstellt werden...Das funktioniert noch nicht...

Delphi-Quellcode:
//Unterpunkt erstellen
procedure TForm1.Unterpunkt1Click(Sender: TObject);
begin
 //Maske für Unterpunktnamen
 Form3.ShowModal;

 //Unterpunkt erstellen
 TreeView1.Items.AddChild(TreeView1.Selected,Form3.edOrdnername.text);

 //--->HIER *Form3.edOrdnername.text*+'.txt' im Hauptordner erstellen :stupid:
end;
Bsp:
Vergaser (Hauptpunkt und gleichzeitig Ordner)
Einstellungen1 (soll automatisch als Einstellungen1.TXT im Ordner Vergaser angelegt werden)
Einstellungen2 ( - || - )
Einstellungen3 ( - || - )
Zylinder
Kolben
...

Wenn ich jetzt auf Vergaser Klick soll sich am besten im Memo-Feld nichts tun. Erst wenn ich auf einen Sub-Node klicke soll sich das Memo-Feld mit ../Stamm/Vergaser/Einstellung1.txt u.s.w füllen.
Bei Klick auf Kolben soll sich ../Stamm/Zylinder/Kolben.txt öffnen...

Delphi-Quellcode:
//Inhalt von TXT's in Memo Laden
procedure TForm1.TreeView1Click(Sender: TObject);
begin
 Memo.Lines.LoadFromFile(ExtractFilePath(ParamStr(0)) + TreeView1.Selected.Text+'\'+TreeView1.Selected.Text+'.txt');
end;
So öffnet sich aber immer logischerweise ../Stamm/Vergaser/Vergaser.txt oder ../Stamm/Einstellungen1/Einstellungen1.txt oder ../Stamm/Zylinder/Zylinder.txt

Speichern des z.b. frisch bearbeiteten Memo-Feldes:

Delphi-Quellcode:
//Neuen Inhalt Speichern
procedure TForm1.Speichern1Click(Sender: TObject);
begin
   Memo.Lines.SaveToFile(ExtractFilePath(ParamStr(0)) + TreeView1.Selected.Text+'\'+TreeView1.Selected.Text+'.txt');
end;
Funktioniert bei den Hauptpunkten...da der Pfad vorhanden ist ../Stamm/Vergaser/Vergaser.txt
bei den Unterpunkt Einstellungen ->Eception^^<- da es den Pfad ../Stamm/Einstellungen1/Einstellungen1.txt benutzt, der aber nicht vorhanden ist...

Er sollte eben ../Stamm/Vergaser/Einstellungen1.txt heißen...dann würde alles funzen




EDIT: Wie lösche ich ein Einzelnen Node? Ich kann nur mit TreeView.Items.Clear; alle löschen!
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: TreeView - Archiv erstellen

  Alt 31. Aug 2007, 23:27
Zitat von atgis:

EDIT: Wie lösche ich ein Einzelnen Node? Ich kann nur mit TreeView.Items.Clear; alle löschen!
Hi,
TreeView.Selected.Delete wäre eine andere Möglichkeit.
Oder anders gesagt, ein TTreeNode eines TTreeView besitzt die Eigenschaft Delete.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
atgis
(Gast)

n/a Beiträge
 
#5

Re: TreeView - Archiv erstellen

  Alt 1. Sep 2007, 12:21
Ok Danke! Kann man den die Klicks auf Node und SubNode nicht irgendwie unterscheiden?
  Mit Zitat antworten Zitat
marabu

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

Re: TreeView - Archiv erstellen

  Alt 1. Sep 2007, 12:43
Hallo,

wenn du dir in der Delphi Online Hilfe die Klasse TTreeNode anschaust, dann findest du die Eigenschaft "Level". Die solltest du für
deine Zwecke nutzen können.

Delphi-Quellcode:
procedure TDemoForm.TreeViewClick(Sender: TObject);
begin
  with Sender as TTreeView do
    case Selected.Level of
      0: ChangeFolder(Selected.Text);
      1: ChangeDocument(Selected.Text);
    end;
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
atgis
(Gast)

n/a Beiträge
 
#7

Re: TreeView - Archiv erstellen

  Alt 1. Sep 2007, 13:20
Mh Ok Danke...hat mich auch scon weitergebracht...

Delphi-Quellcode:
//Inhalt von TXT's in Memo Laden
procedure TForm1.TreeView1Click(Sender: TObject);
begin
 with Sender as TTreeView do
  case Selected.Level of
   0: ShowMessage('Pfad nicht gefunden');
   1: Memo.Lines.LoadFromFile(ExtractFilePath(ParamStr(0)) + TreeView1.Selected.Level[0]+'\'+TreeView1.Selected.Text+'.txt');
  end;
end;
Doch hier "TreeView1.Selected.Level[0]" ... das funktioniert so nicht...ich brauch aber genau an der Stelle im Pfad den Namen vom Übergeordneten Node...also quasie Level 0...

Wie geht das?
  Mit Zitat antworten Zitat
atgis
(Gast)

n/a Beiträge
 
#8

Re: TreeView - Archiv erstellen

  Alt 1. Sep 2007, 14:14
Ok Danke Leute ich habs ....Hab eine Funktion hier im Board gefunden...die den Namen des Nodes aussließt:

Delphi-Quellcode:
//Funktion gibt bei Klick auf einen SubNode,
//den Namen des darüberliegenden Hauptpunktes aus
function NodeText(node: TTreeNode; startLevel: integer; delimiter: char): 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;
So nun kann ich den SubNode im jeweiligen Ordner als TXT anlegen:

Delphi-Quellcode:
//Unterpunkt erstellen
procedure TForm1.Unterpunkt1Click(Sender: TObject);
begin
 //Maske für SubNodeNamen
 Form3.ShowModal;

 //SubNode erstellen
 TreeView1.Items.AddChild(TreeView1.Selected,Form3.edOrdnername.text);

 try Memo.Lines.SaveToFile(ExtractFilePath(ParamStr(0))+NodeText(TreeView1.Selected, 0, '\')+'\'+Form3.edOrdnername.text+'.txt');
 except
  ShowMessage('Weitere Verzweigung nicht möglich!');
 end;
end;
Änderungen des Memo speichern funktioniert auch so:

Delphi-Quellcode:
//Neuen Inhalt Speichern
procedure TForm1.Speichern1Click(Sender: TObject);
begin
try Memo.Lines.SaveToFile(ExtractFilePath(ParamStr(0)) +NodeText(TreeView1.Selected, 0, '\')+'.txt');
 except
  ShowMessage('Pfad nicht gefunden');
 end;
end;
Und das Laden der TXT beim Klick auf den jeweiligen SubNode:

Delphi-Quellcode:
//Inhalt von TXT's in Memo Laden
procedure TForm1.TreeView1Click(Sender: TObject);
begin
 with Sender as TTreeView do
  case Selected.Level of
   0: ShowMessage(NodeText(TreeView1.Selected, 0, '\')+': Einstellung, Bedüsung,... etc');
   1: Memo.Lines.LoadFromFile(ExtractFilePath(ParamStr(0)) +NodeText(TreeView1.Selected, 0, '\')+'.txt');
  end;
end;

Ist es möglich beim umbenennen eines Nodes/SubNodes den Ordner/TXT-Datei auch gleichzeitig mit umzubenennen?
  Mit Zitat antworten Zitat
marabu

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

Re: TreeView - Archiv erstellen

  Alt 1. Sep 2007, 15:00
Hallo,

im Prinzip ja, das Ereignis OnEdited() von TTreeView gibt dir die nötigen Informationen. Der Knoten Node hat beim Eintritt in deine Eregnisbehandlung noch den alten Wert und in S wird dir der neue Text angeboten. Die Prozedur zum Umbenennen von Dateien und Verzeichnissen heißt RenameFile().

Übrigens solltest du bei ShowModal immer auch eine Abbruchmöglichkeit vorsehen:

Delphi-Quellcode:
//Unterpunkt erstellen
procedure TForm1.Unterpunkt1Click(Sender: TObject);
begin
  //Maske für SubNodeNamen
  if Form3.ShowModal = mrOK then
  begin
    { ... }
  end;
end;
Für deine Zwecke würde vielleicht auch InputQuery() oder InputBox() ausreichen. Und denke daran, dass du das Einfügen von Knoten auf Level 2ff unterbinden musst.

Freundliche Grüße
  Mit Zitat antworten Zitat
atgis
(Gast)

n/a Beiträge
 
#10

Re: TreeView - Archiv erstellen

  Alt 1. Sep 2007, 15:08
Zitat von marabu:
Und denke daran, dass du das Einfügen von Knoten auf Level 2ff unterbinden musst.
Ja genau richtig! Ich dachte es langt wenn ich es so mache:

Delphi-Quellcode:
//Unterpunkt erstellen
procedure TForm1.Unterpunkt1Click(Sender: TObject);
begin
 //Maske für SubNodeNamen
 Form3.ShowModal;

 //SubNode erstellen
 TreeView1.Items.AddChild(TreeView1.Selected,Form3.edOrdnername.text);

 try Memo.Lines.SaveToFile(ExtractFilePath(ParamStr(0))+NodeText(TreeView1.Selected, 0, '\')+'\'+Form3.edOrdnername.text+'.txt');
 except
  ShowMessage('Weitere Verzweigung nicht möglich!');
 end;
end;
Aber der Punkt wird ja trotzdem erstellt...dann kommt erst die Meldung...Wie unterbinde ich das am besten? Man müsste quasi, wenn man in einem Unterpunkt ist das Level[1] nicht zulassen...Oder?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 10:21 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