AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Main Menu

Ein Thema von jonsen2.0.0.9 · begonnen am 5. Dez 2009 · letzter Beitrag vom 6. Dez 2009
Antwort Antwort
jonsen2.0.0.9

Registriert seit: 5. Dez 2009
67 Beiträge
 
Delphi 7 Personal
 
#1

Main Menu

  Alt 5. Dez 2009, 18:14
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:
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;
diese suche ist nicht von mir die hab ich rausgesucht....-.-

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;
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
946 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: Main Menu

  Alt 5. Dez 2009, 20:02
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:
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;
Viele Grüße

PS Der Code ist frei Hand, also ungetestet!
  Mit Zitat antworten Zitat
Micha88
(Gast)

n/a Beiträge
 
#3

Re: Main Menu

  Alt 5. Dez 2009, 22:32
"dokumente und einstellungen"

ist das Programm für dich selber, oder willst du es distributieren, also verteilen?
  Mit Zitat antworten Zitat
Andreas L.
(Gast)

n/a Beiträge
 
#4

Re: Main Menu

  Alt 6. Dez 2009, 09:41
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;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:46 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