Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Borland C++ Builder » Verknüpfungen in TreeView

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
27.04.2005, 12:06 Uhr
Veasel



Hi,
ich möchte ein kleines Inhaltsverzechnis für ein Handbuch schreiben. Nun überlege ich wie ich die Punkte, die in TreeView einfüge mit Verknüpfungen zu den Datein versehe. Diese sollen dann in ihrer Standardapplikation starten. Ist das überhaupt möglich oder TreeView nicht so gut dafür - gibts was besseres? -

Danke...

ps: die Punkte füge ich mit

C++:
TreeView1->Items->AddChildObject(position, word, File);


ein wobei position der Knotenindex, word der Knotenname ist
File soll dann die Datei sein.
--
MFG Veasel
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
27.04.2005, 21:28 Uhr
Reyx
IT-fetischistischer Wurstsalat mit rostigem Berghorn
(Operator)


Hallo,
TreeView ist vielleicht nicht die eleganteste Lösung, sollte aber soweit klappen...
Du prüfst einfach, wenn der Benutzer darauf "klickt", welcher Knoten nun aktiv ist und startest einfach die entsprechende Datei per ShellExecute().
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
28.04.2005, 08:22 Uhr
Veasel



Danke Dir!!!
Was wäre denn besser als TreeView?
Zumal das Teil auch pflegbar sein soll, also der Nutzer soll neue Punkte hinzufügen können und die Punkte mit Datein verknüpfen können.
Bei TreeView hab ich immer das Problem, dass man Knoten am Anfang, Ende und öberhalb der aktuellen Knoten einfügen kann. Um das benutzerfreundlich zu machen, ist auch nicht einfach.
Achja, und wozu ist der Pointer vom Ty void (bei mir die Variable File) eigentlich gut? Was kann man da für Daten an den Knoten hängen?
Danke...
--
MFG Veasel

Dieser Post wurde am 28.04.2005 um 08:40 Uhr von Veasel editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
28.04.2005, 10:22 Uhr
Reyx
IT-fetischistischer Wurstsalat mit rostigem Berghorn
(Operator)


Naja, TreeView ist halt an sich nicht besonders flexibel für so etwas; Ich würde mir daher einfach eine eigene Engine schreiben (die dann auch ruhig TreeView benutzen kann). Dass dauert zwar länger, ist aber auf Dauer auf jeden Fall besser zu handhaben als wenn du das alles z.B. hardcodierst!

Du könntest z.B. in Form eine INI-Datei (TIniFile) den Index deines Handbuches festlegen und diesen dann dynamisch/rekursiv auslesen; Dann währe es auch einfach einen Editor zu schreiben, der neue Punkte hinzufügt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
28.04.2005, 10:44 Uhr
Veasel



hmm, das ist auch eine Idee, wollte aber mit dem Teil nicht soviel Schaum schlagen,das ist es gar nicht wert.
Hab vorher noch nie was mit TreeView zutun gehabt und nun dachte ich, da ja da ein Zeiger auf "Daten" (Typ void) ist, kann man den dafür nutzen. Weiß nur nicht was für Daten man da ranhängen kann. Ich muss dem Knoten ja irgendeine Eigenschaft mitgeben beim erstellen, damit ich dann ne Möglichkeit hab die Datei zu starten. Dateinamen (via OpenDialog->FileName) funzen nicht.
Und wie krieg ich den Dateinamen bei ShellExecute(... 'lpFile'...) darein. Hab den Dateinamen mittels Opendialog ausgelesen. Ist aber ein String und const char.
Irgendwie steh ich aufm schlauch.
Kannst mir da auch weiterhelfen?
--
MFG Veasel

Dieser Post wurde am 28.04.2005 um 10:47 Uhr von Veasel editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
28.04.2005, 11:11 Uhr
Reyx
IT-fetischistischer Wurstsalat mit rostigem Berghorn
(Operator)


ShellExecute ist WinAPI, also kein C++ sondern reines C, der kennt natürlich den Borland-Typ AnsiString nicht.

Probier mal:
ShellExecute(...,OpenDialog->FileName.c_str(),...);

Oder, ganz explizit:
ShellExecute(...,AnsiString(OpenDialog->FileName).c_str(),...);

Ach ja, soweit ich weiß hat jeder "Knoten" eine Data-Propertie; Versuch mal, da den Dateinamen reinzuschreiben (und falls es die nicht setz einfach schnell 'ne kleine Komponente um, die das hat :-))

Dieser Post wurde am 28.04.2005 um 11:12 Uhr von Reyx editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
28.04.2005, 14:46 Uhr
Veasel



Danke, das funktioniert schon mal mit dem ShellExecute.
Ich hab den Dateinamen in Die Eigenschaft Data des gewählten Knotens geschrieben.

C++:
TreeView->Selected->Data = OpenDialag->FileName.c_str();


Aber was jetzt nicht funzt ist, die Eigenschaft jetzt beim DdlKlick auf den Knoten mit ShellExecute zu starten.
Habs mit

C++:
ShellExecute(...,TreeView->Selected->Data,...);


versucht aber die Typen stimmen nicht. Keine Ahnung wie ich die gleich krieg.
--
MFG Veasel

Dieser Post wurde am 28.04.2005 um 14:46 Uhr von Veasel editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
28.04.2005, 17:10 Uhr
Reyx
IT-fetischistischer Wurstsalat mit rostigem Berghorn
(Operator)


Also, die Data-Property gibt es? (Ich war mir da halt nicht mehr so sicher)...

Schau dir mal den Typ von data an, wenn es sich um einen AnsiString handelt musst du ebenfalls .c_str() verwenden!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
29.04.2005, 11:13 Uhr
Th



TTreeNode::Data ist als void* definiert, d.h. man kann jeden beliebigen Wert dort abspeichern (mittels Konvertierung).

Jedoch muß der Wert auch im Speicher bleiben, also am besten mit new allozieren.

In deinem Fall also:

C++:
TreeView->Selected->Data = new AnsiString(OpenDialag->FileName);

// bei Doppelklick
AnsiString *pFilename = (AnsiString*)TreeView->Selected->Data;
ShellExecute(..., pFilename->c.str(),...);

// löschen aller Datas (beim Beenden des Treeviews)
// iteriere über alle TreeNodes
AnsiString *pFilename = (AnsiString*)pTreeNode->Data;
delete pFilename;

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
29.04.2005, 15:37 Uhr
Veasel



Super DANKE!!!!
Jetzt haut das alles hin. Ist es denn auch möglich die Verknüpfungen der Knoten zu speichern, evtl. in einer ini-datei. Hatte es in einer txt-datei gespeichert aber da ist dann nur die struktur der baumes drin. muss ich dann wohl den knoten auslesen und dann den dateinamen dazu speichern und andersrum wieder auslesen?!?
Vielleicht hat ja einer dazu noch ne idee...?!?

und nochmal danke für die SUPER_HILFE!!!! @Reyx and Th
--
MFG Veasel
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ Borland C++ Builder ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: