Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - TTreeView importieren?


Robii - Di 30.03.10 23:00
Titel: TTreeView importieren?
Guten Abend,

ich erzeuge mit dem ConsolenKommando Tree eine *.TXT-Datei in der ich einen Tree der gewünschten Festplatte habe. Wie kann ich diese jetzt in einen TTreeView importieren? Ich muss den Schritt mit dem zwischenspeichern machen, auch wenn es überflüssig klingt.

Danke für die Hilfe schonmal im Vorraus,
Lieben Gruß,
Robii.


ALF - Di 30.03.10 23:10

Da Du das doch schon in Delph machst siehe Dein "TREE-Befehl CMD.Exe" hast Du doch auch den Pfad oder das Lw. :wink:

Gruss ALf


Delete - Di 30.03.10 23:14

Warum nicht FindFirst und FindNext?


Robii - Di 30.03.10 23:16

user profile iconALF hat folgendes geschrieben Zum zitierten Posting springen:
Da Du das doch schon in Delph machst siehe Dein "TREE-Befehl CMD.Exe" hast Du doch auch den Pfad oder das Lw. :wink:

Gruss ALf


Welchen Pfad meinst du und was soll ich damit machen? Lw?

FindFirst und FindNext? Wie soll ich das damit machen?

Wenn ich mir das *.txt so angucke sind da extrem viele Sonderzeichen drin hier mal ein Ausschnitt:
Zitat:

C:\
ÃÄÄÄ2947156df0de6c3523b9
³ ÃÄÄÄar-sa
³ ÃÄÄÄbg-bg
³ ÃÄÄÄcs-cz
³ ÃÄÄÄda-dk
³ ÃÄÄÄde-de
³ ÃÄÄÄel-gr
³ ÃÄÄÄen-us
³ ÃÄÄÄes-es
³ ÃÄÄÄet-ee
³ ÃÄÄÄeula
³ ³ ÃÄÄÄar-sa
³ ³ ÃÄÄÄbg-bg
³ ³ ÃÄÄÄcs-cz
³ ³ ÃÄÄÄda-dk
³ ³ ÃÄÄÄde-de
³ ³ ÃÄÄÄel-gr
³ ³ ÃÄÄÄen-us
³ ³ ÃÄÄÄes-es
³ ³ ÃÄÄÄet-ee


Irgendwie erscheint mir das ein bisschen seltsam.

Grüße


Narses - Di 30.03.10 23:27

Moin!

user profile iconRobii hat folgendes geschrieben Zum zitierten Posting springen:
FindFirst und FindNext? Wie soll ich das damit machen?
Die Tree.exe-Ausgabe kriegst du damit natürlich nicht geladen, das bezieht sich darauf, warum du mit einem Kommandozeilen-Tool die Daten liest, statt direkt auf das Dateisystem zuzugreifen. ;)

user profile iconRobii hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ich mir das *.txt so angucke sind da extrem viele Sonderzeichen drin
Das liegt daran, dass du die Ausgabe an der Kommandozeile OEM-kodiert bekommst, aber als ANSI-Zeichen interpretierst. Wenn du das von OEM nach ANSI konvertiert hast, sieht das so aus:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
C:\ 
+---2947156df0de6c3523b9 
¦ +---ar-sa 
¦ +---bg-bg 
¦ +---cs-cz 
¦ +---da-dk 
¦ +---de-de 
¦ +---el-gr 
¦ +---en-us 
¦ +---es-es 
¦ +---et-ee 
¦ +---eula 
¦ ¦ +---ar-sa 
¦ ¦ +---bg-bg 
¦ ¦ +---cs-cz 
¦ ¦ +---da-dk 
¦ ¦ +---de-de 
¦ ¦ +---el-gr 
¦ ¦ +---en-us 
¦ ¦ +---es-es 
¦ ¦ +---et-ee
cu
Narses


ALF - Di 30.03.10 23:29

user profile iconRobii hat folgendes geschrieben Zum zitierten Posting springen:

Welchen Pfad meinst du und was soll ich damit machen? Lw?

Wenn es um die VerzeichnisStruktur geht nimmts Du eine Shelltreeview dafür,
und dann Shelltreeview1.root := und das laufwerk oder das Verzeichniss was Du bei Dir

Delphi-Quelltext
1:
wStr := '/C tree  C:\ > '+GetCurrentDir+'\tree.txt';                    
ausgesucht hast.

Wenn es darum geht!?
Gruss ALf


Robii - Di 30.03.10 23:33

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconRobii hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ich mir das *.txt so angucke sind da extrem viele Sonderzeichen drin
Das liegt daran, dass du die Ausgabe an der Kommandozeile OEM-kodiert bekommst, aber als ANSI-Zeichen interpretierst. Wenn du das von OEM nach ANSI konvertiert hast, sieht das so aus:

Irgendwie hilft mir das jetzt auch noch nicht so weiter, wie konvertiere ich das denn im Programm ?
Und hat jemand evtl. einen Link für ein gutes TTreeView-Tutorial? Ich finde einfach keins bei Google.

Lieben Gruß.

Moderiert von user profile iconNarses: Zitat gekürzt.


Narses - Di 30.03.10 23:37

Moin!

user profile iconRobii hat folgendes geschrieben Zum zitierten Posting springen:
Irgendwie hilft mir das jetzt auch noch nicht so weiter, wie konvertiere ich das denn im Programm ?
Ich habe dir bereits einen Link zu einem passenden Beitrag in der Lib gegeben, die Unit hat auch eine OEM-Konvertierung an Bord. Einfach benutzen, fertig. ;)

user profile iconRobii hat folgendes geschrieben Zum zitierten Posting springen:
Und hat jemand evtl. einen Link für ein gutes TTreeView-Tutorial? Ich finde einfach keins bei Google.
Was genau gibt´s denn da nicht zu verstehen? :gruebel: Ausserdem gibt´s hier im Forum Code-Beispiele ohne Ende... :arrow: Suche in: Delphi-Forum, Delphi-Library TTREEVIEW

cu
Narses


jaenicke - Mi 31.03.10 00:32

user profile iconRobii hat folgendes geschrieben Zum zitierten Posting springen:
Und hat jemand evtl. einen Link für ein gutes TTreeView-Tutorial?
Du machst es dir nur so kompliziert, weil du so alles korrekt in die Baumstruktur einklinken musst statt die paar Zeilen zu schreiben es richtig umzusetzen ohne die komische Textdatei.

Grundsätzlich musst du eben immer neue Knoten hinzufügen, wo genau ist denn dabei das Problem?
Und ich habe ja bereits auf die Library hingewiesen, da gibt es auch interessante Beispiele. Und da du offenbar zu faul bist einmal nachzuschauen poste ich den Link doch. Eigentlich dachte ich die paar Klicks würdest du schaffen... :roll:
http://www.delphi-library.de/topic_Ordner+Unterordner+und+Dateien+in+TreeView+anzeigen_2420.html


Robii - Mi 31.03.10 00:37

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconRobii hat folgendes geschrieben Zum zitierten Posting springen:
Und hat jemand evtl. einen Link für ein gutes TTreeView-Tutorial?
Du machst es dir nur so kompliziert, weil du so alles korrekt in die Baumstruktur einklinken musst statt die paar Zeilen zu schreiben es richtig umzusetzen ohne die komische Textdatei.

Grundsätzlich musst du eben immer neue Knoten hinzufügen, wo genau ist denn dabei das Problem?
Und ich habe ja bereits auf die Library hingewiesen, da gibt es auch interessante Beispiele. Und da du offenbar zu faul bist einmal nachzuschauen poste ich den Link doch. Eigentlich dachte ich die paar Klicks würdest du schaffen... :roll:
http://www.delphi-library.de/topic_Ordner+Unterordner+und+Dateien+in+TreeView+anzeigen_2420.html


Den Link hatte ich schon gefunden, allerdings habe ich grade nach alten Code-Schnipseln gesucht in denen ich schoneinmal das gemacht hatte was ich machen möchte. Der Code oben ist natürlich auch treffend, ich denke den werde ich verwenden, allerdings habe ich noch eine Frage (an Narses).

Mit der Procedure fülle ich ja einen TTreeView. Wenn ich diesen TTreeView im Clienten jetzt gefüllt habe, wie kann ich diesen dann zum Server 'transportieren' ? In einen Stream laden (wenn das geht) und dann verschicken?

Danke für die Hilfe [von dir Jaenicke],
Lieben Gruß,
robii.


Narses - Mi 31.03.10 00:39

Moin!

user profile iconRobii hat folgendes geschrieben Zum zitierten Posting springen:
allerdings habe ich noch eine Frage (an Narses).

Mit der Procedure fülle ich ja einen TTreeView. Wenn ich diesen TTreeView im Clienten jetzt gefüllt habe, wie kann ich diesen dann zum Server 'transportieren' ? In einen Stream laden (wenn das geht) und dann verschicken?
Wozu? Schick doch direkt die Textdatei zum Server, fertig. ;)

cu
Narses


Robii - Mi 31.03.10 00:43

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Wozu? Schick doch direkt die Textdatei zum Server, fertig. ;)

Irgendwie habe ich das Gefühle da ist Ironie im Beitrag.

Oder meinst du das ernst und den TreeView in eine txt speichern und dann verschicken?

Lieben Gruß,
robii.

Moderiert von user profile iconNarses: Zitat gekürzt.

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Client:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.tree(Drive: String);
var
  SStream: TStringStream;
begin
SStream := TStringStream.Create;
FindFilesTree (TreeView,Drive,nil,True);
TreeView.SaveToStream(SStream);
Client.Socket.SendText(Syntax[cmdITRE].Text+#13+MaskTermChar(SStream.DataString)+#13);
end;


Server:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.TreeEmpfangen;
var
  sStream: TStringStream;
  i: Integer;
begin
  sStream := TStringStream.Create(UnMaskTermChar(Data.Strings[1]));
  Tree.LoadFromStream(sStream);
  sStream.Free;
  for i := 0 to Syntax[cmdITRE].ArgCount - 1 do
    Data.Delete(0);
end;


So hab ich es jetzt gemacht.

Einziges Problem ist jetzt noch das mit dem Auswählen von Dateien im TreeView, dazu ist ja auch ein Beispiel im Link gegeben :


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
Procedure TForm1.TreeView1Click(Sender: TObject);
Var
  Info: pNodeInfo;
Begin
  If TreeView1.Selected <> nil then
    Begin
      Info := TreeView1.Selected.Data;

      Label1.Caption := Info^.Name
      If Not Info^.Path Then
        Memo1.Lines.LoadFromFile(Info^.Name);
    End
  Else
    Label1.Caption := 'Kein Verzeichnis/Datei gewählt';
End;


Allerdings verursacht mein Code :

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.TreeClick(Sender: TObject);
var
  Info: pNodeInfo;
  Name: String;
begin
  If Tree.Selected <> nil Then
    Begin
      Info := Tree.Selected.Data;
      Name := Info^.Name;
      ShowMessage(Name);
    End;
end;


immer einen Zugriffsfehler. Wieso das? Gucke selbst Morgen nochmal drüber, gehe jetzt aber erstmal schlafen. :p

Guten Nacht,
Lieben Gruß,
robii.


Narses - Mi 31.03.10 01:14

Moin!

user profile iconRobii hat folgendes geschrieben Zum zitierten Posting springen:
Oder meinst du das ernst und den TreeView in eine txt speichern und dann verschicken?
Klar hab ich das ernst gemeint, aber nicht den TreeView-Inhalt, sondern die Textdatei, die du per Tree.exe erzeugt hast (vorher noch durch einen Zlib-Compression-Stream schubsen, dann ist´s auch nicht so groß). ;)

Wenn du schon sinnlose Dinge tust (wie Tree.exe an der Kommandozeile für einen Verzeichnisbaum zu nutzen), dann auch gleich richtig. :nixweiss:

cu
Narses


jaenicke - Mi 31.03.10 08:06

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Wenn du schon sinnlose Dinge tust (wie Tree.exe an der Kommandozeile für einen Verzeichnisbaum zu nutzen), dann auch gleich richtig.
Jetzt nutzt er ja den Code aus der Library, der direkt die Dateien usw. sucht und dabei die TreeView befüllt. ;-)


ALF - Mi 31.03.10 11:40

user profile iconRobii hat folgendes geschrieben Zum zitierten Posting springen:
Allerdings verursacht mein Code :
.......
immer einen Zugriffsfehler.

Beziehst Du das auf dem Server oder Clienten :gruebel:
Gruss ALf


Robii - Mi 31.03.10 14:46

user profile iconALF hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconRobii hat folgendes geschrieben Zum zitierten Posting springen:
Allerdings verursacht mein Code :
.......
immer einen Zugriffsfehler.

Beziehst Du das auf dem Server oder Clienten :gruebel:
Gruss ALf


Ich meinen das OnClick-Event im Server..

Lieben Gruß,
robii.


ALF - Mi 31.03.10 22:29

user profile iconRobii hat folgendes geschrieben Zum zitierten Posting springen:
Einziges Problem ist jetzt noch das mit dem Auswählen von Dateien im TreeView, .....

Ich will ja nicht unken und hoffe ich irre mich
Aber ein Dateiverzeichnis vom Clienten, in ein Treeview auf nem Server zu Kopieren und dann noch die Dateien/Verzeichnisse vom Clienten über dieses Treeview auslesen zu wollen???? mhhh :gruebel: :gruebel:

Gruss ALf