Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wie kann ich eine Prozedur/Funktion benutzen? (https://www.delphipraxis.net/29006-wie-kann-ich-eine-prozedur-funktion-benutzen.html)

sniffy 2. Sep 2004 14:12


Wie kann ich eine Prozedur/Funktion benutzen?
 
Hi. Bin neu hier und Delphi Neuling. Ich hab direkt mal ne Frage. Zuerst der Code:

Delphi-Quellcode:
procedure GetFiles(const ADirectory: string; Files: TStringList;
                   SubFolders: Boolean);
  // Hilfsfunktion, um Schrägstriche zu entfernen bzw. hinzuzfügen, wenn nötig
  function SlashSep(const Path, S: string): string;
  begin
    if AnsiLastChar(Path)^ <> '\' then
      Result := Path + '\' + S
    else
      Result := Path + S;
  end;
var
  SearchRec: TSearchRec;
  nStatus: Integer;
begin
  //Zuerst alle Dateien im aktuelle Verzeichnis finden
  //Anstatt *.* kann auch etwas anderes wie *.jpg oder *.gif eingegeben werden,
  //um nur Dateien eines bestimmten Typs zu finden.
  nStatus := FindFirst(PChar(SlashSep(ADirectory, '*.*')), 0, SearchRec);
  while nStatus = 0 do
  begin
    Files.Add(SlashSep(ADirectory, SearchRec.Name));
    nStatus := FindNext(SearchRec);
  end;
  FindClose(SearchRec);
  //Als nächstes nach Unterverzeichnissen suchen und wenn benötigt durchsuchen
  if SubFolders then
  begin
    nStatus := FindFirst(PChar(SlashSep(ADirectory, '*.*')), faDirectory,
      SearchRec);
    while nStatus = 0 do
    begin
      //Wenn es ein Verzeichnis ist, Rekursion verwenden
      if ((SearchRec.Attr and faDirectory) <> 0) then
      begin
        if ( (SearchRec.Name <> '.') and (SearchRec.Name <> '..') ) then
          GetFiles(SlashSep(ADirectory, SearchRec.Name), Files, SubFolders);
      end;
      nStatus := FindNext(SearchRec)
    end;
    FindClose(SearchRec);
  end;
end;
Wie benutz ich den Code jetzt? Ich will das ein Verzeichnis in meinen Fall nach HTML-Dateien durchsuch und dann in einer ListBox (kann auch was anderes sein) angezeigt wird.
Für Antworten wäre ich sehr sehr Dankbar!

fkerber 2. Sep 2004 14:25

Re: Wie kann ich ein Code benutzen?
 
Hi!

Herzlich willkommen in der DP.

Hier mal ein Beispielaufruf:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var files: TStringlist;
begin
 files:=TStringlist.Create;
 Getfiles('c:\', files,false);
 Listbox1.Items:=files;
 files.Free;
end;
Es wird in C:\ jetzt nach allen Dateien gesucht, die Ergebnisse in files gespeichert, Unterordner werden nicht durchsucht. Dann werden der Listbox die Ergebnisse zugewiesen.
Willst du nur nach *.htm suchen, musst du deinen geposteten Code verändern, an der entsprechenden Stelle steht ein Kommentar.


Ciao Frederic

Sharky 2. Sep 2004 14:27

Re: Wie kann ich ein Code benutzen?
 
Ansonsten haben wir in unserer Code-Library auch noch diesen Beitrag mit einem Code zu dem Thema.

sniffy 2. Sep 2004 14:31

Re: Wie kann ich ein Code benutzen?
 
@ fkerber
Danke, hat geklappt!

Aber wie mach ich das, das das Programm auch alle Unterverzichnisse durchsucht?

DeCodeGuru 2. Sep 2004 14:33

Re: Wie kann ich ein Code benutzen?
 
Einfach als letzten Parameter der Funktion den Wert TRUE übergeben. :wink: Lies dir am besten mal einige Tutorials zu Delphi durch, dann wirst du solche Probleme sehr schnelle auch selber lösen können. :)

fkerber 2. Sep 2004 14:34

Re: Wie kann ich ein Code benutzen?
 
Hi!
Die Procedure GetFiles erwartet 3 Paramter: Den Ordner, die Ergebnisliste und die Angabe, ob Unterverzeichnisse durchsucht werden sollen, oder nicht.
Änderst du also den 3. Parameter von false auf True, so werden acuh Unterverzeichnisse durchsucht.


Ciao Frederic

sniffy 2. Sep 2004 14:45

Re: Wie kann ich ein Code benutzen?
 
Danke, klappt wurderbar! :-D
Hab mir schon genug Tutorials durchgelesen, aber für so ein Problem hab ich nie ne Lösung gefunden.
Und außerdem ist doch so ein Forum daür da um Anderen wie mir zu helfen. Dafür bin ich dankbar.

Aber weiter zu dem Code.

Mann muss sich ja vorher festlegen welches Laufwerk durcht werden soll. In diesen Fall ist das ja C:\. Wie stell ich das an während das Programm läuft? Quasi zur Laufzeit, um nicht jedesmal den Code zu ändern wenn ich auf ne andere Festplatte zugreifen will.

Golze 2. Sep 2004 15:05

Re: Wie kann ich ein Code benutzen?
 
Hallo Sniffi,
für unterschiedliche Laufwerke kannst du ein Edit-Feld nutzen.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Getfiles(Edit1.Text, Listbox1.Items, false); //Edit1.Text neu eingefügt
end;
Kay

Golze 2. Sep 2004 15:09

Re: Wie kann ich ein Code benutzen?
 
Hallo Sniffi,
noch ein Hinweis auf dein Quellcode. Du solltest noch folgendes ändern:

Dein Code ist
Delphi-Quellcode:
procedure GetFiles(const ADirectory: string; Files: TStringList;
                   SubFolders: Boolean);
änder auf

Delphi-Quellcode:
procedure GetFiles(const ADirectory: string; Files: TStrings; //TStrings ist an dieser Stelle besser
                   SubFolders: Boolean);
Grüße Kay

sniffy 2. Sep 2004 15:53

Re: Wie kann ich ein Code benutzen?
 
Vielen vielen Dank!
Ich werd mich morgen wieder melden! Hab jetzt ein Fussballspiel.

sakura 2. Sep 2004 18:06

Re: Wie kann ich ein Code benutzen?
 
Ändere bitte mal den Titel, da dieser nicht aussagekräftig ist ;)

...:cat:...

sniffy 3. Sep 2004 13:35

Re: Wie kann ich ein Code benutzen?
 
Jo. Hab da mal noch ne Frage. Der Code:

Delphi-Quellcode:
function GetFolder(root: integer; Caption: string): string;
var bi: TBROWSEINFO;
    lpBuffer: PChar;
    pidlPrograms,pidlBrowse: PItemIDList;
begin
     if (not SUCCEEDED(SHGetSpecialFolderLocation(getactivewindow,root,pidlPrograms)))
     then exit;
     lpBuffer := StrAlloc(max_path);
     bi.hwndOwner := getactivewindow;
     bi.pidlRoot := pidlPrograms;
     bi.pszDisplayName := lpBuffer;
     bi.lpszTitle := pChar(caption);
     bi.ulFlags := BIF_RETURNONLYFSDIRS;
     bi.lpfn := nil;
     bi.lParam := 0;

     pidlBrowse := SHBrowseForFolder(bi);
     if (pidlBrowse <> nil) then
     begin
          if (SHGetPathFromIDList(pidlBrowse,lpBuffer)) then result := lpBuffer;
end;
     StrDispose(lpBuffer);
end;

procedure TForm1.Panel3Click(Sender: TObject);
begin
     caption := GetFolder(CSIDL_DESKTOP,'Wählen Sie ein Verzeichnis aus:');
end;
Mit dem Code wird ja ein Verzeichnis ab den Desktop geöffnet. Wie mach ich das wenn ich z.B. auf C:\Programme\Test klicke, das er mir in einem RichEdit Feld alle Dateien die im Test Ordner drin sind anzeigt? :?:

sniffy 6. Sep 2004 10:07

Re: Wie kann ich eine Prozedur/Funktion benutzen?
 
Will mir wirklich keiner helfen??? :pale:

:cry: :cry: :cry:

sniffy 6. Sep 2004 14:12

Re: Wie kann ich eine Prozedur/Funktion benutzen?
 
Ach kommt leute!!! :cry:

Sharky 6. Sep 2004 15:05

Re: Wie kann ich eine Prozedur/Funktion benutzen?
 
Zitat:

Zitat von sniffy
Ach kommt leute!!! :cry:

Das "Puschen" von Beiträgen ist hier erst nach min. 24h erwünscht. :warn:

Zum anderen: Ich habe weiter oben im Thread einen Link zu unsere Code-Library gepostet. Hast Du dir diesen einmal angesehen?

fkerber 6. Sep 2004 15:42

Re: Wie kann ich ein Code benutzen?
 
Zitat:

Zitat von sniffy
Jo. Hab da mal noch ne Frage. Der Code:

Delphi-Quellcode:
function GetFolder(root: integer; Caption: string): string;
var bi: TBROWSEINFO;
    lpBuffer: PChar;
    pidlPrograms,pidlBrowse: PItemIDList;
begin
     if (not SUCCEEDED(SHGetSpecialFolderLocation(getactivewindow,root,pidlPrograms)))
     then exit;
     lpBuffer := StrAlloc(max_path);
     bi.hwndOwner := getactivewindow;
     bi.pidlRoot := pidlPrograms;
     bi.pszDisplayName := lpBuffer;
     bi.lpszTitle := pChar(caption);
     bi.ulFlags := BIF_RETURNONLYFSDIRS;
     bi.lpfn := nil;
     bi.lParam := 0;

     pidlBrowse := SHBrowseForFolder(bi);
     if (pidlBrowse <> nil) then
     begin
          if (SHGetPathFromIDList(pidlBrowse,lpBuffer)) then result := lpBuffer;
end;
     StrDispose(lpBuffer);
end;

procedure TForm1.Panel3Click(Sender: TObject);
begin
     caption := GetFolder(CSIDL_DESKTOP,'Wählen Sie ein Verzeichnis aus:');
end;
Mit dem Code wird ja ein Verzeichnis ab den Desktop geöffnet. Wie mach ich das wenn ich z.B. auf C:\Programme\Test klicke, das er mir in einem RichEdit Feld alle Dateien die im Test Ordner drin sind anzeigt? :?:

Hi!
So wie ich das sehe mit diesem Code gar nicht, da er sich auf SpecialFolders wie Desktop, eigene Dateien etc. bezieht.

Ciao Frederic

ibp 6. Sep 2004 16:16

Re: Wie kann ich ein Code benutzen?
 
Zitat:

Zitat von sniffy
...
Mit dem Code wird ja ein Verzeichnis ab den Desktop geöffnet. Wie mach ich das wenn ich z.B. auf C:\Programme\Test klicke, das er mir in einem RichEdit Feld alle Dateien die im Test Ordner drin sind anzeigt? :?:

schau dir doch mal in der windows-sdk-hilfe die funktion SHBrowseForFolder und darin die option ulFlags an, das könnte weiter helfen (<- doofe neue rechtschreibung :kotz:)


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:34 Uhr.

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