![]() |
Mehrere Dateien vom Explorer per Drag & Drop in Listbox?
Wie kann ich mehrere Dateien per D&D vom desktop/explorer etc... in die Listbox bzw einen ordner reinziehen so dass nacher alle bmp und jpg dateien in die listbox kommen
vielen dank Nicodius |
Re: Mehrere Dateien vom Explorer per Drag & Drop in List
|
Re: Mehrere Dateien vom Explorer per Drag & Drop in List
den code hab ich für EINZELNE dateien verwendet oder?
|
Re: Mehrere Dateien vom Explorer per Drag & Drop in List
Nein, auch für mehrere Dateien:
Delphi-Quellcode:
iFileCount := DragQueryFile(Msg.wParam, $FFFFFFFF, pcFileName, 255);
for i := 0 to iFileCount - 1 do begin |
Re: Mehrere Dateien vom Explorer per Drag & Drop in List
VIELEN VIELEN VIELEN DANK!!!
und wie mach ich das: Ordner reinziehen - filtern und die dateipfade von allen Jpg, jpeg und Bmp files ins Listbox schreiben? |
Re: Mehrere Dateien vom Explorer per Drag & Drop in List
dann kommt nur x(wiviele markiert worden sind) mal das was als ERSTES markiert worden ist
wenn ich 1.bmp, 2.jpg, 3.bmp markiere kommt 3 x 1.bmp mein quelltext :
Delphi-Quellcode:
procedure TForm1.WMDROPFILE(var msg: TMessage);
var hDrop : Cardinal ; fName : array[0..MAX_PATH] of Char ; iFileCount, i : Integer; begin hDrop := Msg.WParam ; fName := '' ; DragQueryFile(hDrop, 0, fName, MAX_PATH); iFileCount := DragQueryFile(Msg.wParam, $FFFFFFFF, fname, 255); for i := 0 to iFileCount - 1 do begin If (ExtractFileExt(lowercase(String(fname))) = '.bmp') or (ExtractFileExt(lowercase(String(fname))) = '.jpg') or (ExtractFileExt(lowercase(String(fname))) = '.jpeg') then Listbox1.Items.add((String(fName))); end; DragFinish (hDrop); end; |
Re: Mehrere Dateien vom Explorer per Drag & Drop in List
Zieh den Ordner auf dein Listbox und im OnDrop Event rufst du die Funktion aus der Code-Lib zum Finden von Dateien auf und übergibst ihr den Ordner und zwar zweimal, einmal für die Bitmaps und einmal für die JPEGS.
|
Re: Mehrere Dateien vom Explorer per Drag & Drop in List
@Nicodius: Dein Fehler ist das du FName nicht neu setzt in der Schleife sondern nur einmal vor der schleife.
Ich verwende folgenden Source in einer meiner Komponenten
Delphi-Quellcode:
in deinem Fall sollte folgendes reichen (ungetestet)
type
TNotifyDropFiles = procedure(Values: TStringlist) of Object; [...] FDropProc: TNotifyDropFiles; [...] procedure TVisualJBList.FWMDROPFILES (var Msg: TMessage); var LCount, Lanzahl, Lsize: integer; LDateiname: PChar; LFileList: TStringlist; begin If Assigned(FDropProc) then begin LFileList := TStringlist.Create; LDateiname := ''; Lanzahl := DragQueryFile(Msg.WParam, $FFFFFFFF, LDateiname, 255); for LCount := 0 to (Lanzahl - 1) do begin Lsize := DragQueryFile(Msg.WParam, LCount , nil, 0) + 1; LDateiname:= StrAlloc(Lsize); DragQueryFile(Msg.WParam,LCount , LDateiname, Lsize); LFileList.Add(string(LDateiname)); StrDispose(LDateiname); end; LFileList.Free; end; DragFinish(Msg.WParam); end;
Delphi-Quellcode:
procedure TYourType.FWMDROPFILES(var Msg: TMessage);
var LCount, Lanzahl, Lsize: integer; LDateiname: PChar; begin LDateiname := ''; Lanzahl := DragQueryFile(Msg.WParam, $FFFFFFFF, LDateiname, 255); for LCount := 0 to (Lanzahl - 1) do begin Lsize := DragQueryFile(Msg.WParam, LCount , nil, 0) + 1; LDateiname:= StrAlloc(Lsize); DragQueryFile(Msg.WParam,LCount , LDateiname, Lsize); // do Something with "LDateiname" StrDispose(LDateiname); end; FDropProc(LFileList); DragFinish(Msg.WParam); end; |
Re: Mehrere Dateien vom Explorer per Drag & Drop in List
danke ;) ich schau mal ;)
danke luckie! |
Re: Mehrere Dateien vom Explorer per Drag & Drop in List
aber wie filtere ich jetzt daraus alle bmp und jpg/jpeg dateien?
SirThornberry: "[Fehler] Unit1.pas(204): Undefinierter Bezeichner: 'FDropProc'" |
Re: Mehrere Dateien vom Explorer per Drag & Drop in List
Hi Nico,
Delphi-Quellcode:
Ich schätze mal, du könntest fie Dateiendung mit
for LCount := 0 to (Lanzahl - 1) do
begin Lsize := DragQueryFile(Msg.WParam, LCount , nil, 0) + 1; LDateiname:= StrAlloc(Lsize); DragQueryFile(Msg.WParam,LCount , LDateiname, Lsize); // do Something with "LDateiname" StrDispose(LDateiname); end; ![]() Greetz alcaeus |
Re: Mehrere Dateien vom Explorer per Drag & Drop in List
DANKE ES GEHT jetzt
@alcaeus danke, nicht gesehen dass das mit dem LDateiname in der Schleife war ;) danke! aber wie mach ich das noch mit dem ordner reinziehen und filtern.. Kommda nicht mit dem code zusammen @luckie hast du vl den QT parat? mfg Nicodius |
Re: Mehrere Dateien vom Explorer per Drag & Drop in List
Zitat:
|
Re: Mehrere Dateien vom Explorer per Drag & Drop in List
guten morgen luckie,
ok danke werd schauen ob ichs schaffe sonst : :coder: ich wieder hier rein danke ;) |
Re: Mehrere Dateien vom Explorer per Drag & Drop in List
@Luckie --> wie mach ich das jetzt
Delphi-Quellcode:
procedure FindAllFiles(var FileList: TStrings; RootFolder: string; Mask: string =
'*.*'; Recurse: Boolean = True); --> hmm wenn ich jetzt zwei ordner reinziehe? HILFE ;) :spin: |
Re: Mehrere Dateien vom Explorer per Drag & Drop in List
Och manno, denk doch mal selber etwas nach.
|
Re: Mehrere Dateien vom Explorer per Drag & Drop in List
--> ich versteh nicht wie ich das in meinem code umsetze .... übrigens du bist um 15 jahre älter
du hast mehr erfahrung etc du kannst mich nicht mit dir vergleichen ;) hmmm ... schnell mal nen spruch von nem Dp-User Zitat:
ich weiß nicht wie ich das jetz tmachen soll ... mein code:
Delphi-Quellcode:
procedure FindAllFiles(var FileList: TStrings; RootFolder: string; Mask: string =
'*.*'; Recurse: Boolean = True); var SR: TSearchRec; begin if AnsiLastChar(RootFolder)^ <> '\' then RootFolder := RootFolder + '\'; if Recurse then if FindFirst(RootFolder + '*.*', faAnyFile, SR) = 0 then try repeat if SR.Attr and faDirectory = faDirectory then // --> ein Verzeichnis wurde gefunden // der Verzeichnisname steht in SR.Name // der vollständige Verzeichnisname (inkl. darüberliegender Pfade) ist // RootFolder + SR.Name if (SR.Name <> '.') and (SR.Name <> '..') then FindAllFiles(FileList, RootFolder + SR.Name, Mask, Recurse); until FindNext(SR) <> 0; finally FindClose(SR); end; if FindFirst(RootFolder + Mask, faAnyFile, SR) = 0 then try repeat if SR.Attr and faDirectory <> faDirectory then begin // --> eine Datei wurde gefunden // der Dateiname steht in SR.Name // der vollständige Dateiname (inkl. Pfadangabe) ist // RootFolder + SR.Name FileList.Add(RootFolder + SR.Name); end; until FindNext(SR) <> 0; finally FindClose(SR); end; end;
Delphi-Quellcode:
procedure TForm1.WMDROPFILE(var msg: TMessage);
var LCount, Lanzahl, Lsize: integer; LDateiname: PChar; begin LDateiname := ''; Lanzahl := DragQueryFile(Msg.WParam, $FFFFFFFF, LDateiname, 255); for LCount := 0 to (Lanzahl - 1) do begin Lsize := DragQueryFile(Msg.WParam, LCount, nil, 0) + 1; LDateiname := StrAlloc(Lsize); DragQueryFile(Msg.WParam, LCount, LDateiname, Lsize); if (ExtractFileExt(lowercase(string(LDateiname))) = '.ico') or (ExtractFileExt(lowercase(string(LDateiname))) = '.bmp') or (ExtractFileExt(lowercase(string(LDateiname))) = '.jpg') or (ExtractFileExt(lowercase(string(LDateiname))) = '.jpeg') then Listbox1.Items.add((string(LDateiname))); StrDispose(LDateiname); end; // FDropProc(LFileList); DragFinish(Msg.WParam); { If (ExtractFileExt(lowercase(String(fname))) = '.bmp') or (ExtractFileExt(lowercase(String(fname))) = '.jpg') or (ExtractFileExt(lowercase(String(fname))) = '.jpeg') then Listbox1.Items.add((String(fName)));} end; und was dann? |
Re: Mehrere Dateien vom Explorer per Drag & Drop in List
Na da, wo du nach dem Ziehen deine Odner zur Verfügung hast, rufst du FindAllFiles eben auf und zwar so oft, wie du Ordner hast. Das hasst du doch schon alles mit den Dateien gemacht, nur dass du da eben Listbox1.Add() geschrieben hast. Ist es denn jetzt so schwer da FiindAllFiles hinzuschreiben?
|
Re: Mehrere Dateien vom Explorer per Drag & Drop in List
ja aber wie finde ich denn heraus wieviele ordner reingezogen werden?
|
Re: Mehrere Dateien vom Explorer per Drag & Drop in List
mein Quelltext
Delphi-Quellcode:
procedure FindAllFiles(var FileList: TStrings; RootFolder: string; Mask: string =
'*.*'; Recurse: Boolean = True); var SR: TSearchRec; begin if AnsiLastChar(RootFolder)^ <> '\' then RootFolder := RootFolder + '\'; if Recurse then if FindFirst(RootFolder + '*.*', faAnyFile, SR) = 0 then try repeat if SR.Attr and faDirectory = faDirectory then // --> ein Verzeichnis wurde gefunden // der Verzeichnisname steht in SR.Name // der vollständige Verzeichnisname (inkl. darüberliegender Pfade) ist // RootFolder + SR.Name if (SR.Name <> '.') and (SR.Name <> '..') then FindAllFiles(FileList, RootFolder + SR.Name, Mask, Recurse); until FindNext(SR) <> 0; finally FindClose(SR); end; if FindFirst(RootFolder + Mask, faAnyFile, SR) = 0 then try repeat if SR.Attr and faDirectory <> faDirectory then begin // --> eine Datei wurde gefunden // der Dateiname steht in SR.Name // der vollständige Dateiname (inkl. Pfadangabe) ist // RootFolder + SR.Name FileList.Add(RootFolder + SR.Name); end; until FindNext(SR) <> 0; finally FindClose(SR); end; end;
Delphi-Quellcode:
und wo muss jetzt was rein? :cry: ich hasse meinen Stil ;)
procedure TForm1.WMDROPFILE(var msg: TMessage);
var LCount, Lanzahl, Lsize: integer; LDateiname: PChar; begin LDateiname := ''; Lanzahl := DragQueryFile(Msg.WParam, $FFFFFFFF, LDateiname, 255); for LCount := 0 to (Lanzahl - 1) do begin Lsize := DragQueryFile(Msg.WParam, LCount, nil, 0) + 1; LDateiname := StrAlloc(Lsize); DragQueryFile(Msg.WParam, LCount, LDateiname, Lsize); If (ExtractFileExt(lowercase(String(Ldateiname))) = '.ico') or (ExtractFileExt(lowercase(String(Ldateiname))) = '.bmp') or (ExtractFileExt(lowercase(String(Ldateiname))) = '.jpg') or (ExtractFileExt(lowercase(String(Ldateiname))) = '.jpeg') then Listbox1.Items.add(String(Ldateiname)); // do Something with "LDateiname" StrDispose(LDateiname); end; // FDropProc(LFileList); DragFinish(Msg.WParam); end; |
Re: Mehrere Dateien vom Explorer per Drag & Drop in List
*push* nicht sauer sein luckie :P
|
Re: Mehrere Dateien vom Explorer per Drag & Drop in List
Hi,
ich hab dir mal eben was gebastelt:
Delphi-Quellcode:
Ist ungetestet, sollte aber, so hoffe ich, funktionieren.
function IsDirectory(Dir: WideString): Boolean;
var F: TWin32FindDataW; Handle: HWnd; begin Handle := FindFirstFileW(PWideChar(Dir), F); if Handle <> INVALID_HANDLE_VALUE then begin Result := ((f.dwFileAttributes and faDirectory) = faDirectory); Windows.FindClose(Handle); end else Result := False; end; procedure FindAllFiles(var FileList: TStrings; RootFolder: string; Mask: string = '*.*'; Recurse: Boolean = True); var SR: TSearchRec; begin if AnsiLastChar(RootFolder)^ <> '\' then RootFolder := RootFolder + '\'; if Recurse then if FindFirst(RootFolder + '*.*', faAnyFile, SR) = 0 then try repeat if SR.Attr and faDirectory = faDirectory then // --> ein Verzeichnis wurde gefunden // der Verzeichnisname steht in SR.Name // der vollständige Verzeichnisname (inkl. darüberliegender Pfade) ist // RootFolder + SR.Name if (SR.Name <> '.') and (SR.Name <> '..') then FindAllFiles(FileList, RootFolder + SR.Name, Mask, Recurse); until FindNext(SR) <> 0; finally FindClose(SR); end; if FindFirst(RootFolder + Mask, faAnyFile, SR) = 0 then try repeat if SR.Attr and faDirectory <> faDirectory then begin // --> eine Datei wurde gefunden // der Dateiname steht in SR.Name // der vollständige Dateiname (inkl. Pfadangabe) ist // RootFolder + SR.Name FileList.Add(RootFolder + SR.Name); end; until FindNext(SR) <> 0; finally FindClose(SR); end; end; procedure TForm1.WMDROPFILE(var msg: TMessage); var LCount, Lanzahl, Lsize: integer; LDateiname: PChar; List: TStringList; i: Integer; begin LDateiname := ''; Lanzahl := DragQueryFile(Msg.WParam, $FFFFFFFF, LDateiname, 255); for LCount := 0 to (Lanzahl - 1) do begin Lsize := DragQueryFile(Msg.WParam, LCount, nil, 0) + 1; LDateiname := StrAlloc(Lsize); DragQueryFile(Msg.WParam, LCount, LDateiname, Lsize); List := TStringList.Create; try if IsDirectory(String(LDateiName)) then FindAllFiles(List, String(LDateiName)) else List.Add(String(LDateiName)); for i := 0 to List.Count-1 do If (ExtractFileExt(AnsiLowerCase(List[i])) = '.ico') or (ExtractFileExt(AnsiLowerCase(List[i])) = '.bmp') or (ExtractFileExt(AnsiLowerCase(List[i])) = '.jpg') or (ExtractFileExt(AnsiLowerCase(List[i])) = '.jpeg') then Listbox1.Items.add(List[i]); finally List.Free; end; // do Something with "LDateiname" StrDispose(LDateiname); end; // FDropProc(LFileList); DragFinish(Msg.WParam); end; mfG mirage228 |
Re: Mehrere Dateien vom Explorer per Drag & Drop in List
Liste der Anhänge anzeigen (Anzahl: 1)
nee geht nid .... siehe anhang ;) das kommt nacher danke trotzdem
|
Re: Mehrere Dateien vom Explorer per Drag & Drop in List
Hi,
da warn kleiner Fehler:
Delphi-Quellcode:
muss es heissen.
Listbox1.Items.add(List[i]);
mfG mirage228 |
Re: Mehrere Dateien vom Explorer per Drag & Drop in List
wohin damit?
|
Re: Mehrere Dateien vom Explorer per Drag & Drop in List
Zitat:
Delphi-Quellcode:
mfG
for i := 0 to List.Count-1 do
If (ExtractFileExt(AnsiLowerCase(List[i])) = '.ico') or (ExtractFileExt(AnsiLowerCase(List[i])) = '.bmp') or (ExtractFileExt(AnsiLowerCase(List[i])) = '.jpg') or (ExtractFileExt(AnsiLowerCase(List[i])) = '.jpeg') then Listbox1.Items.add(List[i]); mirage228 |
Re: Mehrere Dateien vom Explorer per Drag & Drop in List
DAAAAAAAAAAAAAAAAAAAAAAAAAAAANNNNNNNNNNNKKKKKKKKKK KKKKEEEEEe
so viel geholfen DANKE mirage228!!! das macht ja gleich alle fragen aufeinmal dein CODE DANKEE! *umarm* |
Re: Mehrere Dateien vom Explorer per Drag & Drop in List
Zitat:
mfG mirage228 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:27 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