Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Relative Pfade (https://www.delphipraxis.net/101452-relative-pfade.html)

marabu 13. Okt 2007 16:57

Re: Relative Pfade
 
Die Flexibilität lässt sich ein wenig erhöhen:

Delphi-Quellcode:
const
  ENV_DELPHI = 'DELPHI';
var
  basePath: string;
begin
  basePath := IncludeTrailingPathDelimiter(GetEnvironmentVariable(ENV_DELPHI));
  ShowMessage(ExtractRelativePath(basePath, ParamStr(0)));
end;
Grüße vom marabu

himitsu 30. Okt 2007 14:14

Re: Relative Pfade
 
man könnte ja och in AddFilesToList die Übergabe des Folder-Parameters ändern :angel:

Code:
procedure TForm1.AddFilesToList(Filter, Folder: string; Recurse: Boolean[color=#ff0000];
  RelFolder = ''[/color]);
var
  sr: TSearchRec;
  sDirList: TStringList;
  i: Integer;
begin
  if FindFirst (Folder + [color=#ff0000]RelFolder +[/color] Filter, faAnyFile, sr) = 0 then
  repeat
    ListBox1.Items.Add ([color=#ff0000]RelFolder +[/color] sr.Name);
  until FindNext(sr) <> 0;
  FindClose(sr);
  if Recurse then
  begin
    sDirList := TStringList.Create;
    try
      GetSubDirs (Folder [color=#ff0000]+ RelFolder[/color], sDirList);
      for i := 0 to sDirList.Count - 1 do
        if (sDirList[i] <> '.') and (sDirList[i] <> '..') then
        begin
          Update;
          ListBox1.Refresh;
          AddFilesToList (Filter, [color=#ff0000]Folder[/color], Recurse[color=#ff0000],
            IncludeTrailingPathDelimiter (RelFolder + sDirList[i])[/color]);
        end;
    finally
      sDirList.Free;
    end;
  end;
end;
aufgerufen wird es dann ganz genauso wie die originale Funktion.
RelFolder bleibt also beim Aufruf frei und wird nur intern verwendet.


und in Kurz zusammen mit anderen kleinen Änderungen (siehe Kommentare) dann so:
Delphi-Quellcode:
procedure TForm1.AddFilesToList(const Filter, Folder: String; Recurse: Boolean;
  const RelFolder: String = '');
var
  sr: TSearchRec;
begin
  if FindFirst(Folder + RelFolder + Filter, faAnyFile, sr) = 0 then
    repeat
      if (sr.Name = '.') or (sr.Name = '..') // du wills doch eh nur Dateinamen (AddFiles?)
        or (sr.Attr and faDirectory <> 0) then continue;
      ListBox1.Items.Add(RelFolder + sr.Name);
    until FindNext(sr) <> 0;
  FindClose(sr);
  if Recurse and FindFirst(Folder + RelFolder + '*.*', faAnyFile, sr) = 0 then
    repeat
      if (sr.Name = '.') or (sr.Name = '..') // nur Verzeichnisse
        or (sr.Attr and faDirectory = 0) then continue;
      Update;
      ListBox1.Refresh;
      AddFilesToList(Filter, Folder, true, RelFolder + sr.Name + '/');
    until FindNext(sr) <> 0;
  FindClose(sr);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:49 Uhr.
Seite 2 von 2     12   

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 by Thomas Breitkreuz