![]() |
Fehler bei abgeschaltener Dateinamenserweiterung
Hallo mit untenstehendem Code lese ich Ordner samt Dateien in ein Treeview ein.
Er funktioniert so lange, wie unter Windows in der Ordneransicht "Datinamenserweiterungen anzeigen" eingeschalten ist. Werden die Dateinamen ausgeblendet werden Sie auch im Treeview nicht angezeigt. Da der Code nicht von mir ist weiss ich auch nicht an welcher Stelle eine Änderung erfolgen sollte. Vielleicht kann mir jemand von Euch helfen. Gruß Drschubi
Delphi-Quellcode:
procedure AddIcon(ANode: TTreeNode; AImageList: TImageList; const AFileName: string);
var FileInfo: SHFILEINFO; Icon: TIcon; begin //Get The DisplayName SHGetFileInfo(PChar(AFileName), 0, FileInfo, SizeOf(FileInfo), SHGFI_DISPLAYNAME); ANode.Text := FileInfo.szDisplayName; //Get The Icon That Represents The File SHGetFileInfo(PChar(AFileName), 0, FileInfo, SizeOf(FileInfo), SHGFI_ICON or SHGFI_SMALLICON); // Create a temporary TIcon Icon := TIcon.Create; icon.Handle := FileInfo.hIcon; ANode.ImageIndex := AImageList.AddIcon(Icon); Icon.Free; // Destroy the Icon DestroyIcon(FileInfo.hIcon); end; procedure GetDirectories(Tree: TTreeView; Directory: string; Item: TTreeNode; IncludeFiles: Boolean); var SearchRec: TSearchRec; ItemTemp: TTreeNode; begin if Directory[Length(Directory)] <> '\' then Directory := Directory + '\'; if FindFirst(Directory + '*.*', faDirectory, SearchRec) = 0 then begin repeat if (SearchRec.Attr and faDirectory = faDirectory) and (SearchRec.Name[1] <> '.') then begin if (SearchRec.Attr and faDirectory > 0) then begin Item := Tree.Items.AddChild(Item, SearchRec.Name); AddIcon(Item, Form1.ImageList1, Directory + SearchRec.Name); end; ItemTemp := Item.Parent; GetDirectories(Tree, Directory + SearchRec.Name, Item, IncludeFiles); Item := ItemTemp; end else if IncludeFiles then if SearchRec.Name[1] <> '.' then begin ItemTemp := Tree.Items.AddChild(Item, SearchRec.Name); AddIcon(ItemTemp, Form1.ImageList1, Directory + SearchRec.Name); end; until FindNext(SearchRec) <> 0; FindClose(SearchRec); end; end; procedure TForm1.Button1Click(Sender: TObject); var Node: TTreeNode; Path: string; Dir: string; begin Dir := 'C:\dokuview\dokumente'; Screen.Cursor := crHourGlass; TreeView1.Images := ImageList1; TreeView1.Items.BeginUpdate; try TreeView1.Items.Clear; GetDirectories(TreeView1, Dir, nil, True); finally Screen.Cursor := crDefault; TreeView1.Items.EndUpdate; end; end; |
Re: Fehler bei abgeschaltener Dateinamenserweiterung
Benutze lieber nicht FileInfo.szDisplayName, da er sonst bei Dir
so angezeigt wird wie im Eplorer. Nimm für die Dateinamen-Anzeige die Variable AFileName und extrahiere dann einfach den Dateinamen der Datei. So ist es dann unabhängig von den Einstellungen im Explorer. |
Re: Fehler bei abgeschaltener Dateinamenserweiterung
Danke,
ich habe es jetzt so gemacht. Die Erweiterung ist jetzt wieder da. Wie bekomme ich den Pfad aus AFileName raus, die Delphi Hilfegibt dazu nix her? Danke DrSchubi
Delphi-Quellcode:
rocedure AddIcon(ANode: TTreeNode; AImageList: TImageList; const AFileName: string);
var FileInfo: SHFILEINFO; Icon: TIcon; begin //Get The DisplayName SHGetFileInfo(PChar(AFileName), 0, FileInfo, SizeOf(FileInfo), SHGFI_DISPLAYNAME); //ANode.Text := FileInfo.szDisplayName; ANode.Text := AFileName; //Get The Icon That Represents The File SHGetFileInfo(PChar(AFileName), 0, FileInfo, SizeOf(FileInfo), SHGFI_ICON or SHGFI_SMALLICON); // Create a temporary TIcon Icon := TIcon.Create; icon.Handle := FileInfo.hIcon; ANode.ImageIndex := AImageList.AddIcon(Icon); Icon.Free; // Destroy the Icon DestroyIcon(FileInfo.hIcon); end; |
Re: Fehler bei abgeschaltener Dateinamenserweiterung
Guck mal nach einer Funktion namens [oh]ExtractFileName();[/oh] :mrgreen:
|
Re: Fehler bei abgeschaltener Dateinamenserweiterung
Danke ,
ExtractFileName, wäre ich nie draufgekommen, hätte mühselig mit Stringbearbeitung angefangen. Funktioniert jetzt bestens. Vielen Dank an alle |
Re: Fehler bei abgeschaltener Dateinamenserweiterung
Moin Drschubi,
Du solltest noch
Delphi-Quellcode:
durch
(SearchRec.Name[1] <> '.')
Delphi-Quellcode:
austauschen, denn ein Datei-/Verzeichnisname kann auch mit . beginnen.
(Search.Name <> '.') and (Search.Name <> '..')
|
Re: Fehler bei abgeschaltener Dateinamenserweiterung
Danke schön, habe ich berücksichtigt. Man lernt nie aus.
Schönen Sonntag noch Drschubi |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:40 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