![]() |
Main Menu
Hallo,
also ich habe folgendes Problem und hoffe ihr könnt mir da helfen: Ich möchte ein Programm schreiben das automatisch alle .jpg und .jpeg sucht (in dokumente und einstellungen). Bis hier hin kein Problem aber(!) ich möchte diese automatisch in einem MainMenu haben: Habe in meinem MainMenu folgenden Bereich: Bilder {Bilder1} wenn man auf den klickt soll eine liste mit den herausgesuchten bildern erscheinen ich weiss aber nicht wie man die da einträgt und wie man ihnen einen anderen namen gibt, hinter welchem sich alerdings immer noch das verzeichnis befindet damit man dieses dann öffnen oder löschen usw. kann. Bis jetzt sieht dat so aus:
Delphi-Quellcode:
diese suche ist nicht von mir die hab ich rausgesucht....-.-
Procedure FindFiles (aPath, aFindMask: String; aWithSub: Boolean; aResult: tStrings);
Var FindRec: tSearchRec; Begin // Wenn die Stringliste nil ist oder aPath oder aFind nicht angegeben ist // dann raus If (aPath = '') or (aFindMask = '') or Not Assigned (aResult) Then Exit; // Wenn am Ende der Pfadangabe noch kein \ steht, dieses hinzufügen // (Oder die Funktion IncludeTrailingPathDelimiter aus der Unit SysUtils.pas verwenden) If aPath[Length (aPath)] <> '\' Then aPath := aPath + '\'; // Im aktuellen Verzeichnis nach der Datei suchen If FindFirst (aPath + aFindMask, faAnyFile, FindRec) = 0 Then Repeat If (FindRec.Name <> '.') and (FindRec.Name <> '..') Then // ...Ergebnis in die Stringlist einfügen aResult.Add (aPath + FindRec.Name); Until FindNext (FindRec) <> 0; FindClose (FindRec); // Wenn nicht in Unterverzeichnissen gesucht werden soll dann raus If Not aWithSub Then Exit; // In Unterverzeichnissen weiter suchen If FindFirst (aPath + '*.*', faAnyFile, FindRec) = 0 Then Repeat If (FindRec.Name <> '.') and (FindRec.Name <> '..') Then // Feststellen, ob es sich um ein Verzeichnis handelt If Boolean (FindRec.Attr and faDirectory) Then // Funktion erneut aufrufen, um Verzeichnis zu durchsuchen (Rekursion) FindFiles (aPath + FindRec.Name, aFindMask, aWithSub, aResult); Until FindNext (FindRec) <> 0; FindClose (FindRec); End;
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin if DirectoryExists('C:\Dokumente und Einstellungen\') then FindFiles ('C:\Dokumente und Einstellungen\', '*.jpg''*.jpeg', True, MainMenu1.items{hier weiss ich nich genau was da hin muss}) end; |
Re: Main Menu
Hi jonsen2.0.0.9
zum Glück ist dein Quellcode besser zu verstehen als das was du schreibst. Auch wenn ein paar Schreibfehler durchgehen, so ein Kauderwelsch bestimmt nicht. Zum Thema; Wenn du ein Verzeichnis nach mehreren Dateiextensionen durchsuchen willst, würde ich diese in einer Stringlist zusammenfassen und auch als solche übergeben:
Delphi-Quellcode:
Viele Grüße
Procedure FindFiles (aPath : String; MaskList: TStrings; aRecursiv: Boolean; aResult: TStrings);
Var FindRec: tSearchRec; Begin If aPath[Length (aPath)] <> '\' Then aPath := aPath + '\'; If FindFirst (aPath + '*.*', faAnyFile, FindRec) = 0 Then Repeat If (FindRec.Name <> '.') and (FindRec.Name <> '..') Then begin if MaskList.IndexOf(ExtractFileExt)aPath + FindRec.Name)) <> -1 then aResult.Add (aPath + FindRec.Name); end else if aRecursive then FindFiles(aPath, MaskList, aRecusive, aResult); Until FindNext (FindRec) <> 0; FindClose (FindRec); End; PS Der Code ist frei Hand, also ungetestet! |
Re: Main Menu
"dokumente und einstellungen"
ist das Programm für dich selber, oder willst du es distributieren, also verteilen? |
Re: Main Menu
Dein FindFiles sucht die Dateien und fügt diese der Liste aResult hinzu. Natürlich musst du dann als Parameter der Funktion auch eine Liste vom Typ TStrings übergeben damit du auf die Ergebnisse zugreifen kannst:
Delphi-Quellcode:
var
Files: TStrings; iFile: Integer; Itm: TMenuItem; begin Files := TStringList.Create; //erstellen der List, TStringList verwenden weil TStrings eine abstrakte Klasse ist try FindFiles(Pfad, True, Files); //Die gefundenen Dateien sind jetzt in Files gespeichert, diese Liste kannst du jetzt in einer For-Schleife durchgehen und für jede Datei ein TMenuItem erstellen for iFile := 0 to Files.Count -1 do begin Itm := TMenuItem.Create; Itm.Caption := Files[iFile]; MainMenu1.Items.Add(Itm); //hier bin ich mir nicht sicher, verwende das normale MainMenu nie, schau mal in die Hilfe... end; finally Files.Free; //Speicher freigeben end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:06 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 by Thomas Breitkreuz