Einzelnen Beitrag anzeigen

Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#22

Re: Mehrere Dateien vom Explorer per Drag & Drop in List

  Alt 10. Okt 2004, 19:47
Hi,

ich hab dir mal eben was gebastelt:

Delphi-Quellcode:
  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;
Ist ungetestet, sollte aber, so hoffe ich, funktionieren.

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat