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 auf mehrere Unterverzeichnisse zugreifen lassen? (https://www.delphipraxis.net/107046-treeview-auf-mehrere-unterverzeichnisse-zugreifen-lassen.html)

iPlayboy 21. Jan 2008 12:54


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:
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;
so

Allerdings hab ich mehrere Verzeichnisse in \Maps , nicht nur Dungeon. wie lass ich die auch auslesen ? ich komm einfach nicht drauf ^^

himitsu 21. Jan 2008 13:58

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;

iPlayboy 22. Jan 2008 00:24

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?

marabu 22. Jan 2008 06:04

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:
  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;
Grüße vom marabu

iPlayboy 22. Jan 2008 11:03

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 :) !

marabu 22. Jan 2008 11:13

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.

iPlayboy 22. Jan 2008 22:04

Re: TreeView auf mehrere Unterverzeichnisse zugreifen lassen
 
Zitat:

Zitat von marabu
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.

Ja ich verwende wirklich die Komponente TTreeView , hab sie nur in 'List' umbenannt.

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 ?

marabu 23. Jan 2008 08:15

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.

iPlayboy 23. Jan 2008 10:32

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.

marabu 23. Jan 2008 11:40

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 20:30 Uhr.
Seite 1 von 2  1 2      

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