Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Fehler bei abgeschaltener Dateinamenserweiterung (https://www.delphipraxis.net/53501-fehler-bei-abgeschaltener-dateinamenserweiterung.html)

drschubi 17. Sep 2005 20:56


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;

Nighthawk1310 17. Sep 2005 21:09

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.

drschubi 17. Sep 2005 21:26

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;

Phistev 17. Sep 2005 21:58

Re: Fehler bei abgeschaltener Dateinamenserweiterung
 
Guck mal nach einer Funktion namens [oh]ExtractFileName();[/oh] :mrgreen:

drschubi 18. Sep 2005 09:13

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

Christian Seehase 18. Sep 2005 12:07

Re: Fehler bei abgeschaltener Dateinamenserweiterung
 
Moin Drschubi,

Du solltest noch

Delphi-Quellcode:
(SearchRec.Name[1] <> '.')
durch

Delphi-Quellcode:
(Search.Name <> '.') and (Search.Name <> '..')
austauschen, denn ein Datei-/Verzeichnisname kann auch mit . beginnen.

drschubi 18. Sep 2005 14:21

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