![]() |
Inhalt eines Ordners auslesen
Hi,
z.B in einem Ordner sind Bilder gespeichert und der Ordner heißt "Test" in meiner DB gibt es eine Person namens Test und zu der gehört der Ordner, der Pfad zu dem Ordner ist auch in der DB gespeichert. Ich möchte jetzt also, dass die Bilder(in dem Ordner "Test") in einer Combobox oder etwas anderem aufzurufen sind und wenn man das BIld auswählt und auf Öffnen drückt öffnet sich dies. Wie bekomme ich hin, dass der Inhalt und ausschließlich, .jpg oder .gif datein angezeigt werden. Zudem müssen sie ja noch geöffnet werden. Ich suche schon ne weile mir fällt nur keine Methode ein wie ich das hinbekommen soll. Also der Pfad zu dem Ordner ist vorhanden in der DB und wenn der User angewählt wird, und in den Bereich kommt wo man alles überihn noch ma genau sieht und ändern kann, sollen Bilder über ihn auch anwählbar sein. Ich hoffe ihr könnt mir helfen. Danke. |
Re: Inhalt eines Ordners auslesen
Delphi-Quellcode:
dabei werden auch unterordner durchsucht.
procedure GetFileList(Path: String; ZielListe: TStringList);
var SR: TSearchRec; begin if Path[length(Path)] <> '\' then Path := Path + '\'; if FindFirst(Path + '*.*', faAnyFile, SR) = 0 then repeat if (Lowercase(ExtractFileExt(Path + sr.Name)) = '.jpg') then ZielListe.Add(Path + sr.Name); until FindNext(SR) <> 0; FindClose(SR); if FindFirst(Path + '*.*', faAnyFile, SR) = 0 then repeat if (SR.Attr = faDirectory) and (SR.Name <> '.') and (SR.Name <> '..') then GetFileList(Path + SR.Name + '\', ZielListe); until FindNext(SR) <> 0; FindClose(SR); end; kannst du so aufrufen:
Delphi-Quellcode:
procedure TForm1.Button1Click;
var List: TStringList; I: Integer; begin List := TStringList.create; try GetFileList('<MeinPfad>', List); for I := 0 to List.Count do LoadMyImage(List[I]); // image laden finally FreeAndNil(List); end; end; |
Re: Inhalt eines Ordners auslesen
Kannst du mir das ein bisschen erläutern, ich würd auch gerne etwas lernen und wo muss ich was ändern.
|
Re: Inhalt eines Ordners auslesen
ok :stupid:
und ich hab beim durchgehen gesehen das man da noch was vereinfachen kann :cyclops:
Delphi-Quellcode:
das laden vom bild musst du übernehmen^^
procedure GetFileList(Path: String; ZielListe: TStringList);
var SR: TSearchRec; begin if Path[length(Path)] <> '\' then // erstmal schauen wir ob der übergebene pfad Path := Path + '\'; // mit einem \ aufhört, zB C:\Test\ if FindFirst(Path + '*.jpg', faAnyFile, SR) = 0 then // nach der ersten datei suchen die mit .jpg endet // * wird dabei als platzhalter verwendet // in SR wird der fund gespeichert repeat ZielListe.Add(Path + sr.Name); // pfad zum bild merken until FindNext(SR) <> 0; // mit FindNext wird die suche wiederholt FindClose(SR); // suche abschließen if FindFirst(Path + '*.*', faAnyFile, SR) = 0 then // das ganze noch mal von vorne mit ordnern repeat if (SR.Attr = faDirectory) and // schauen ob fund ein ordner ist (SR.Name <> '.') and (SR.Name <> '..') then // " GetFileList(Path + SR.Name + '\', ZielListe); // rekursiver aufruf unserer procedure mit unterordner until FindNext(SR) <> 0; // suche widerholen FindClose(SR); // suche abschließen end; procedure TForm1.Button1Click; var List: TStringList; I: Integer; begin List := TStringList.create; // unsere StringList erzeugen try // speicherschutzblock GetFileList('<MeinPfad>', List); // unsere prozedure, deinen pfad hier eintragen! for I := 0 to List.Count do // alle elemente der liste durchgehen... LoadMyImage(List[I]); // ... und laden (ist jetzt nur nen beispiel) finally FreeAndNil(List); // speicher freigeben end; end; setz dir am anfang der prozedure nen breakpoint, dann siehst du mit jedem knopfdruck auf F8 wo er gerade hinspringt. Bei weiteren Fragen fragen. |
Re: Inhalt eines Ordners auslesen
ok thx, morgen werd ich probieren.
|
Re: Inhalt eines Ordners auslesen
Was muss ich bei LoadMyImage einsetzen??
|
Re: Inhalt eines Ordners auslesen
Zitat:
|
Re: Inhalt eines Ordners auslesen
ok.
Sagen wir ich möchte, die Datein(also alle Bilder) in dem Ordner in einer Combobox angezeigt bekommen, wie stelle ich das dann an. |
Re: Inhalt eines Ordners auslesen
Meine Version ohne Unterordner:
Delphi-Quellcode:
procedure ListAllPics(sPath: string; List: TStrings);
var Rec: TSearchRec; begin List.BeginUpdate; List.Clear; if sPath[Length(sPath)] <> '\' then sPath := sPath + '\'; if FindFirst(sPath + '*.*',faAnyfile,Rec) = 0 then begin repeat if (AnsiLowerCase(ExtractFileExt(Rec.Name)) = '.jpg') or (AnsiLowerCase(ExtractFileExt(Rec.Name)) = '.gif') then List.Add(Rec.Name); until FindNext(Rec) <> 0; FindClose(Rec); end; List.EndUpdate; end; procedure TForm1.FormCreate(Sender: TObject); begin ListAllPics('F:',ComboBox1.Items); end; |
Re: Inhalt eines Ordners auslesen
Zitat:
Um aber beim Code von dominikkv zu bleiben:
Delphi-Quellcode:
Und dies anstelle von:
ComboBox1.Items.Assign(List);
Delphi-Quellcode:
Die Liste, die erstellt wird ist vom Typ TStringList und die Eigenschaft Items der Combobox ebenfalls. Mit Assign werden die Inhalte der einen Liste in die andere Liste kopiert.
for I := 0 to List.Count do // alle elemente der liste durchgehen...
LoadMyImage(List[I]); Natürlich wäre es auch richtig:
Delphi-Quellcode:
zu schreiben. Dann kannst du dir die Instanz "List" sparen und die File Liste wird direkt in die Stringliste Items der Combobox geschrieben.
GetFileList('<MeinPfad>', ComboBox1.Items);
|
Re: Inhalt eines Ordners auslesen
Ok es funzt.
Wie kriege ich Datei jetzt geöffnet, da muss ich bestimmt die Dialoge benutzen... Und wenn ich z.B jemand neues der Db hinzufüge, dann muss für ihn auch ein Ordner erstellt werden, sagen wir ma es ist so: F:/Adressdb/User (User ist dann halt der Name)^^ So wenn ich den User anwähle und in den Editbereich lade, dann kann ich mir dort Bilder über ihn an sehen.(Das Laden hab ich ja jetzt^^) Jetzt fehlt also nur noch ein Bild hinzufügen und wenn jemand ganz neues erstellt wird einen Ordner zu erstellen. Also mit Dilagen habe ich noch net so richtig gearbeitet, werd mich ma ein bisschen damit beschäftigen, dann müsste ich das auch blad hinkriegen. Denn wenn der Pfad auser user angegeben ist ist es ja net so schwer ('F:/Adressdb/'+ edit1.Text; so ungefähr öffnet man dann und erstellt man den User.) |
Re: Inhalt eines Ordners auslesen
Also, Ordner erstellen kannst Du mit ForceDirectories. Das Bild holst Du Dir mit einem TOpenPictureDialog und speicherst es mit der Methode SaveToFile von TJPEGImage bzw. TGIFImage wieder ab.
|
Re: Inhalt eines Ordners auslesen
Hier nochmal eine Version der Vollständigkeit halber
Delphi-Quellcode:
AlleDateienImVerz(pfad:string; gefunden:TStrings; HS:String ;MitUnterVerz:Boolean);
procedure AlleDateienImVerz(pfad:string; gefunden:TStrings; HS:String ;MitUnterVerz:Boolean);
//gibt liste aller dateien im verz zurück, wahlweise mit allen in allen unterverz. var sr: TWin32FindData; h: THandle; begin if ansilastchar(pfad)<>'\' then pfad:=pfad+'\'; h:=FindFirstFile(PChar(pfad + HS + '*.*'),sr); if not (h=INVALID_HANDLE_VALUE) then repeat if DirectoryExists(pfad+sr.cFileName) then begin if not (sr.cFileName[0]='.') then if MitUnterVerz then AlleDateienImVerz(pfad+sr.cFileName,gefunden,HS ,True); end else begin gefunden.add(pfad+sr.cFileName); end; until Findnextfile(h,sr)=false; windows.FindClose(h); end; pfad : der Pfad der durchsucht werden soll gefunden: tStringlist in die alle Dateinamen gespeichert werden HS: war ne kleine abwandlung dient um zu filtern wenn man z.b. nur Dateinen haben möchte die mit XX beginnen. Kann ansonsten einfach mit nem leeren String aufgerufen werden. MitUnterVerz True oder false halt wie du es brauchst |
Re: Inhalt eines Ordners auslesen
Ich will jetzt eine Datei öffnen^^
Was mache ich falsch:
Delphi-Quellcode:
Also mir ist eben die idee gekommen, dass man das Bild was drinne ist nur anzeigen lassen soll in einer image komponente, und das neu erstellen mache ich später, erst ma dieses Problem.
if openpicturedialog1.Execute then
openpicturedialog1.FileName := Combobox1.ImeName image1.Picture.LoadFromFile(openpicturedialog1.FileName); Was mache ich falsch? |
Re: Inhalt eines Ordners auslesen
Was soll denn die Zuweisung des Filenames? Außerdem fehlt da ein begin - end.
|
Re: Inhalt eines Ordners auslesen
ok^^
das begin und end is in meinem Prog da... Ich will also, dass das was in der Combobox ausgewählt wird auch geöffnet wird und dann in einer image (z.B.) angezeigt wird, wie stelle ich das jetzt an? |
Re: Inhalt eines Ordners auslesen
Wenn Du den Dateinamen aus einer ComboBox liest, kannst Du Dir den Dialog aber sparen.
|
Re: Inhalt eines Ordners auslesen
Delphi-Quellcode:
Also dann müsste das ja richtig sein oder???
procedure TForm1.Button2Click(Sender: TObject);
begin image1.Picture.LoadFromFile(Combobox1.Text); // oda? hier is auch das edit^^ end; Jedenfalls, das wollte ich ja auch so machen^^ Aber es gibt ne Fehlermeldung aus, falsche Dateiendung. edit: hab was im code geändert. |
Re: Inhalt eines Ordners auslesen
Was steht denn in der ComboBox? Meine Glaskugel ist leider gerade zur Politur.
|
Re: Inhalt eines Ordners auslesen
Ja in der Combobox is ja die Datein, die vorher in einem Ordner durchsucht werden und dann darein geladen werden.
Es ist aufjedenfall ne Bilddatei, soviel kann ich sagen. übrigens bei bmp dateien gibt es keine Fehlermeldung, dafür aber auch kein Bild^^ |
Re: Inhalt eines Ordners auslesen
Hast Du denn auch die Units jpeg und GifImage eingebunden? Und dass kein Bild angezeigt wird, könnte am fehlenden Pfad liegen, wenn ich das richtig verstanden habe.
|
Re: Inhalt eines Ordners auslesen
Liste der Anhänge anzeigen (Anzahl: 1)
Also:
Der Code ist momentan so:
Delphi-Quellcode:
Das müsste ja richtig sein, also die Unit Jpeg is eingebunden, gif war ich zu faul^^.
image1.Picture.LoadFromFile('C:\Dokumente und Einstellungen\Sebastian\Eigene Dateien\Eigene Bilder\'+ Combobox1.Text);
Aber es wird eine fehlermeldung ausgegeben(siehe anhang.) |
Re: Inhalt eines Ordners auslesen
Der Befehl sieht erstmal richtig aus. Der Fehler muss woanders herkommen. Setz doch mal einen Breakpoint auf die Zeile und steppe mal durch.
|
Re: Inhalt eines Ordners auslesen
Danke für den Tipp mim Breakpoint, hab da ma was nebenbei probiert, das war der Fehler.
Danke. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22: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