Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TreeView aus Datei einlesen (https://www.delphipraxis.net/109531-treeview-aus-datei-einlesen.html)

tf2006 3. Mär 2008 09:51


TreeView aus Datei einlesen
 
Ich habe ein Problem beim Einlesen eines TreeView Inhaltes aus einer Datei.

Ich habe einen Verzeichnisbaum mit PDF-Dateien, den ich in einen TreeView einlese
um diesen dann mit einer Suchfunktion zu durchsuchen und den Eintrag dann direkt
mit dem Adobe ActiveX anzeigen zu lassen.

Da der Lesevorgang von der Festplatte zu lange dauert und nicht immer notwendig ist,
speichere ich den Inhalt in eine Datei mit SaveToFile.

Wenn ich diese Datei mit LoadFromFile wieder einlese, sieht das TreeView zuerst sehr gut aus.

Wenn ich dann aber eine Datei selektiere erhalte ich eine Exception.

Meine Routine sieht wie folgt aus:

Var
Info : pNodeInfo;
PdfDatei : String;
Begin

if TreeView.selected <> Nil then
begin
Info := TreeView.selected.data;
PdfDatei := Info^.Name <=== hier kommt dann die Exception. :(

Es liegt irgendwie daran, dass beim Einlesen mit LoadFromfile die Node Informationen nicht übernommen werden.

Was muss ich machen, damit diese Infos wieder hergestellt werden?

Wäre super wenn mir da jemand helfen kann. :lol:

Gruß

tf2006

marabu 3. Mär 2008 10:28

Re: TreeView aus Datei einlesen
 
Herzlich willkommen in der Delphi-PRAXiS, tf2006.

Die Methode SaveToFile() speichert die Knotenbeschriftungen in einer strukturierten Textdatei, andere Informationen werden laut Dokumentation nicht gespeichert. Du kannst die Textdatei in einem Editor öffnen und das einfache Format studieren.

Kannst du ein paar nähere Informationen geben, warum du die Baumansicht deiner PDF-Dokumente nicht direkt ans Dateisystem binden willst?

Freundliche Grüße

tf2006 3. Mär 2008 10:45

Re: TreeView aus Datei einlesen
 
Hallo Marabu,

vielen dank für die superschnelle Reaktion

Wenn ich den Tree direkt einlese dauert das ca. 20 sec.
Lese ich die Textdatei ein, geht das super schnell.
Sind halt sau viele Einträge.

Ich habe mir die Textdatei schon angesehen. Ich weis aber nicht
was ich daran erkennen soll. Da steht der Baum drin.

Wenn ich das alles richtig verstehe, dann sind die Node Infos irgendwelche
HEX-Schlüssel und die werden beim LaofFromFile so nicht wieder hergestellt :roll:

Aber was meinst du mit direkt anbinden an das Dateissystem?

Gruß

tf2006

mkinzler 3. Mär 2008 10:47

Re: TreeView aus Datei einlesen
 
Achim meint, diese dynamisch zu erzeugen (aus aktuellem Dateisystem)

tf2006 3. Mär 2008 11:09

Re: TreeView aus Datei einlesen
 
Äh dynamisch :?: wie geht denn das?

mkinzler 3. Mär 2008 11:11

Re: TreeView aus Datei einlesen
 
Nicht aus der Textdatei sondern immer neu erzeugen.
-Ist der Indexdienst aktiv?
-Kannst du den Suchscope einschränken?

marabu 3. Mär 2008 12:43

Re: TreeView aus Datei einlesen
 
Schade, dass D5 die Komponente TShellTreeView noch nicht kennt.

Wozu referenzierst du den Dateinamen der PDF-Datei in Node.Data? Ist er nicht aus den Knotenbezeichnern ableitbar?

Beim Aufbau der TreeView kannst du viel Zeit sparen, wenn du nur wirklich gerade benötigte Einträge erzeugst. Dabei verwendest du sicher auch die TTreeView.Items-Methoden BeginUpdate() und EndUpdate() - oder?

tf2006 3. Mär 2008 15:17

Re: TreeView aus Datei einlesen
 
Ich muss leider immer alle Einträge durchsuchen und die Sache mit der Node Info
funktioniert ja auch sehr gut.

Wenn ich den Verzeichnisbaum neu einlese, also nicht aus der Datei, dann arbeite ich
mit Begin und EndUpdate.

Beim lesen aus der Datei nicht. Geht das überhaupt und wenn wie.

Aber mit Node Info habe ich ja alles was ich brauche, geht nur leider so nicht, wenn
ich mit LoadFromFile arbeite.

Gruß

tf2006

marabu 3. Mär 2008 15:33

Re: TreeView aus Datei einlesen
 
Okay, nochmal anders gefragt:

Welche Bedeutung haben die Knoten in deiner TreeView, wieviele gibt es insgesamt und welchen Grad / welche Höhe hat der Baum?

Funktioniert dein Programm auch auf anderen Rechnern oder nur auf deinem eigenen?

tf2006 4. Mär 2008 09:14

Re: TreeView aus Datei einlesen
 
Also der Baum hat so insgesamt 13000 Einträge und besteht aus einem Artikelmatchcode.
Das Programm funktioniert grundsätzlich mit jedem beliebigen Baum, wobei ich nur die PDF-Datei
des einzelnen Artikels anzeige, wenn dieser Erfolgreich über einen Suchstring gefunden
wurde. Daher benötige ich auch immer den kompletten Baum, da sich in der Artikel Nr ein Teilstring
befinden kann, nach dem ich suche.

Wie z.B.
x-Obst
+-Apfel
------Rot.pdf
------RotKlein.pdf
------RotGross.pdf
------RotGrossAfrika.pdf
------RotGrün.pdf
------RotGrün.pdf
------RotGrünKlein.pdf
+-Birne
------Grün.pdf
------GrünSüdAfrika.pdf

usw.

Ich suche dann z.B. nur nach Afrika.

In meiner Node Info steht dann die Dateiinfo mit der ich dann mit dem AcroPDF ActiveX
die Datei mit AcroPdf.LoadFile(DateiName) die Datei Anzeige.

Das Ganze wird mit diese Prozedur aufgerufen (nur ein Auszug)

Var
Info : pNodeInfo;

begin

.....

Info := TreeView.Selected.Data:
DateiName := Info^.Name;

.....


Gruß

tf2006


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:40 Uhr.
Seite 1 von 2  1 2      

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