![]() |
TreeView auf mehrere Unterverzeichnisse zugreifen lassen?
Hallo,
also ich hab eine TreeView und ein TImage und wenn man jetzt im TreeView ein Item auswählt dann zeigt er das Bild im TImage an... so ist mein code gerade:
Delphi-Quellcode:
so
procedure TForm2.ListChange(Sender: TObject; Node: TTreeNode);
var LoadFile: String; begin if List.Selected.Parent <> nil then begin {Try loading the picture from the subdirectory Maps} LoadFile := IncludeTrailingBackslash(extractfilepath(paramstr(0))) + 'Maps\Dungeon\' + List.Selected.Text + '.png'; Current.Picture.LoadFromFile(LoadFile); Current.SetBounds((Holder.ClientWidth - Current.Width) div 2, (Holder.ClientHeight - Current.Height) div 2, Current.Width, Current.Height); end end; Allerdings hab ich mehrere Verzeichnisse in \Maps , nicht nur Dungeon. wie lass ich die auch auslesen ? ich komm einfach nicht drauf ^^ |
Re: TreeView auf mehrere Unterverzeichnisse zugreifen lassen
entweder zu speicherst zu jedem Item das Verzeichnis in .Data
oder du gehst die EternItems bis zum Rootverzeichnis zurück und setzt Name+Verzeichnis zusammen [add] PS: in Node steht der selektierte Node drin :zwinker:
Delphi-Quellcode:
procedure TForm2.ListChange(Sender: TObject; Node: TTreeNode);
var LoadFile: String; begin if Node = nil then Exit; LoadFile := ''; while Node <> nil do begin if LoadFile = '' then LoadFile := Node.Text else LoadFile := Node.Text + '\' + LoadFile; Node := Node.Parent; end; Current.Picture.LoadFromFile(IncludeTrailingBackslash(extractfilepath(paramstr(0))) + 'Maps\' + LoadFile); Current.SetBounds((Holder.ClientWidth - Current.Width) div 2, (Holder.ClientHeight - Current.Height) div 2, Current.Width, Current.Height); end; |
Re: TreeView auf mehrere Unterverzeichnisse zugreifen lassen
Hi
Danke für die schnelle Hilfe aber irgendwie funzt das nicht :o Er lädt die Bilder irgendwie nicht..... Wie speicher ich den die ganzen Items in .data? |
Re: TreeView auf mehrere Unterverzeichnisse zugreifen lassen
Moin,
die dynamische Ermittlung des Pfades halte ich hier für die bessere Lösung. Den RootPath würde ich nur einmal ermitteln wollen.
Delphi-Quellcode:
Grüße vom marabu
private
ImageRootPath: TFileName; end; var DemoForm: TDemoForm; implementation {$R *.dfm} resourcestring SSUBDIR = 'Maps'; function NodePath(node: TTReeNode; const sDelimiter: string = PathDelim): string; begin Result := node.Text; if Assigned(node.Parent) then Result := NodePath(node.Parent) + sDelimiter + Result; end; procedure TDemoForm.FormCreate(Sender: TObject); begin ImageRootPath := IncludeTrailingPathDelimiter( ExtractFilePath(ParamStr(0)) + SSUBDIR); end; procedure TDemoForm.ListChange(Sender: TObject; Node: TTreeNode); var fn: TFileName; begin with Sender as TTreeView do if node.Level > 0 then begin fn := ImageRootPath + NodePath(node) + '.png'; Current.Picture.LoadFromFile(fn); Current.SetBounds((Holder.ClientWidth - Current.Width) div 2, (Holder.ClientHeight - Current.Height) div 2, Current.Width, Current.Height); end end; |
Re: TreeView auf mehrere Unterverzeichnisse zugreifen lassen
Danke marabu ! Funzt prima !
jetzt muss ich nurnoch rausfinden wie ich verhinder das er die dateiendung .png mit im treeview anzeigt und alles ist wunderbar :) ! |
Re: TreeView auf mehrere Unterverzeichnisse zugreifen lassen
Verwendest du wirklich die Komponente TTreeView?
Dann kannst du die Dateinamen mit fn := ChangeFileExt(fn, '') vorbehandeln, bevor du sie in den Baum einbaust. Wenn du nur mit einer Erweiterung arbeitest reicht das schon. |
Re: TreeView auf mehrere Unterverzeichnisse zugreifen lassen
Zitat:
Also entweder bin ich zu doof oder das mit der ChangeFileExt geht nicht :| Er zeigt die Bilder weiterhin mit .png an im TreeView...... Hat ja aber denk ich mal nichts damit zu tun das erst ein Root dann ein Child und dann wieder ein Child kommt was das Bild darstellt , oder? :stupid: Ich habs jetzt schon fastÜberall das eingebaut und immer das selbe Ergebnis. Geht das ganze nicht auch mit ExtraceFileName ? |
Re: TreeView auf mehrere Unterverzeichnisse zugreifen lassen
ExtractFileName() liefert dir den Namen inklusive Erweiterung. Zeige doch mal die Zeile, mit der du einen Dateinamen in den Baum einfügst.
|
Re: TreeView auf mehrere Unterverzeichnisse zugreifen lassen
Liste der Anhänge anzeigen (Anzahl: 1)
Hier ich hab dir mal das ganze als Projekt mit beispiel Maps mit rangehängt.
|
Re: TreeView auf mehrere Unterverzeichnisse zugreifen lassen
Hier meine Änderungen:
Delphi-Quellcode:
{ ... }
implementation uses StrUtils; const SEXT = '.png'; { ... } Else // Eintrag ist eine Datei If aWithFiles and (AnsiIndexStr(SearchRec.Name, ['.', '..']) < 0) and SameText(ExtractFileExt(SearchRec.Name), SEXT) Then Begin New (Info); Info^.Path := False; Info^.Name := aPath + SearchRec.Name; aTree.Items.AddChildObject (aNode, ChangeFileExt(SearchRec.Name, ''), Info); End; { ... } procedure TForm1.ListChange(Sender: TObject; Node: TTreeNode); { ... } fn := ImageRootPath + NodePath(node) + SEXT; { ... } |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:28 Uhr. |
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