Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Dateien per Drag-and-Drop in ListBox einfügen (https://www.delphipraxis.net/72189-dateien-per-drag-drop-listbox-einfuegen.html)

benst 26. Jun 2006 21:15


Dateien per Drag-and-Drop in ListBox einfügen
 
Hi,

ich benötige folgende Funktion:
Ich habe eine ListBox und möchte, dass man per Drag-and-Drop Dateien aus dem Explorer darauf ziehen kann. Dann sollen die Dateien in die ListBox eingetragen werden.
Ich habe schon nach Drag-and-Drop gesucht, die gefundenen Beiträge haben mir jedoch nicht so recht weitergeholfen.

Gruß
Ben

SirThornberry 26. Jun 2006 21:20

Re: Dateien per Drag-and-Drop in ListBox einfügen
 
du musst mit der Api-Funktion DragAcceptFiles (Shellapi) das droppen von Dateien erlauben. Anschließénd musst du die Message wm_dropfiles auswerten. Der Funktionsname als auch die Message sollten dir bei der Suche helfen.

Mazel 26. Jun 2006 21:29

Re: Dateien per Drag-and-Drop in ListBox einfügen
 
Hi,

ich denke dieser Code sollte dir weiterhelfen:

Delphi-Quellcode:
private
  procedure WMDROPFILES(var Msg: TMessage); Message WM_DROPFILES;


procedure TForm1.WMDROPFILES(var Msg: TMessage);
var
 i, Counts, Size: Integer;
 PCharFileName: PChar;

begin
 inherited;
 PCharFileName:=nil;
 Counts:=DragQueryFile(Msg.WParam, $FFFFFFFF, PCharFileName, 255);
 for i:=0 to Counts - 1 do
  begin
   Size:=DragQueryFile(Msg.WParam, i, nil, 0) + 1;
   PCharFileName:=StrAlloc(Size);
   DragQueryFile(Msg.WParam, i, PCharFileName, Size);
   ListBox1.Items.Add(String(PCharFileName));
   StrDispose(PCharFileName);
  end;
 DragFinish(Msg.WParam);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 DragAcceptFiles(ListBox1.Handle, True);
end;
Du benötigst außerdem noch die ShellAPI in der Uses Klausel und eine ListBox auf deinem Formular :wink:

Gruß
Mazel

[edit=Phoenix]Dem Cache auf die Sprünge geholfen (Syntax Highlighting) Mfg, Phoenix[/edit]

benst 26. Jun 2006 21:50

Re: Dateien per Drag-and-Drop in ListBox einfügen
 
Danke, funst prima.
:cheers:
Wie kann ich verhindern, dass man auch Verzeichnisse eingefügt werden? Es sollen nur Dateien sein!
Gruß
Ben

SirThornberry 26. Jun 2006 21:57

Re: Dateien per Drag-and-Drop in ListBox einfügen
 
das geht gar nicht zu verhindern. Du musst in der Messageroutine einfach prüfen ob es sich um ein Verzeichnis handelt.
Könnte eventuell jemand erklären warum das funktioniert? ich hätte gedacht das die Message gar nicht beim Form ankommt sondern direkt bei der Listbox. Ich bin also verwundert das die WM_DROPFILES message vom Form verarbeitet wird obwohl die Listbox ja das Droppen von Files erlaubt und auch die Messageroutine der Listbox doch eigentlich diese Message bekommt.

benst 26. Jun 2006 22:04

Re: Dateien per Drag-and-Drop in ListBox einfügen
 
Danke.
Das ist mir schon klar, aber wie prüfe ich, ob es sich dabei um einen Ordner oder um eine Datei handelt?
Ben

benst 27. Jun 2006 11:50

Re: Dateien per Drag-and-Drop in ListBox einfügen
 
Wie kann ich prüfen, ob es sich bei einem Pfad um eine Datei oder ein Verzeichnis handelt?
Gruß
Ben

Mazel 27. Jun 2006 12:53

Re: Dateien per Drag-and-Drop in ListBox einfügen
 
Um zu überprüfen ob es sich um ein Verzeichnis handelt kannst du folgenden Code in der WMDROPFILES verwenden:

Delphi-Quellcode:
procedure TForm1.WMDROPFILES(var Msg: TMessage);
var
i, Counts, Size: Integer;
PCharFileName: PChar;

begin
inherited;
PCharFileName:=nil;
Counts:=DragQueryFile(Msg.WParam, $FFFFFFFF, PCharFileName, 255);
for i:=0 to Counts - 1 do
  begin
   Size:=DragQueryFile(Msg.WParam, i, nil, 0) + 1;
   PCharFileName:=StrAlloc(Size);
   DragQueryFile(Msg.WParam, i, PCharFileName, Size);
   { Funktion die prüft, ob es sich um ein Verzeichnis handelt}
   If FileGetAttr(String(PCharFileName)) <> faDirectory then ListBox1.Items.Add(String(PCharFileName));
   StrDispose(PCharFileName);
  end;
DragFinish(Msg.WParam);
end;
Gruß
Mazel

[edit=sakura] Cache-Refresh. Mfg, sakura[/edit]

benst 27. Jun 2006 14:12

Re: Dateien per Drag-and-Drop in ListBox einfügen
 
Danke
Kann man bei einer ListBox irgendwie horizontal scrollen?
Ben

Mazel 27. Jun 2006 15:00

Re: Dateien per Drag-and-Drop in ListBox einfügen
 
Hi,

ja man kan sich eine horizonalte ScrollBar einbauen. Füge den Code in Form-Create ein und dann sollte es gehen:

Delphi-Quellcode:
 SendMessage(Listbox1.Handle, LB_SETHORIZONTALEXTENT, 140, 0);
 { 140 steht für den Wert wie weit gescrollt werden soll }
Gruß
Mazel


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:10 Uhr.
Seite 1 von 2  1 2      

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