AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Dateien per Drag-and-Drop in ListBox einfügen
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von benst · begonnen am 26. Jun 2006 · letzter Beitrag vom 14. Sep 2006
Thema geschlossen
Seite 1 von 2  1 2      
benst

Registriert seit: 20. Jun 2004
155 Beiträge
 
Delphi 5 Standard
 
#1

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

  Alt 26. Jun 2006, 21:15
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
 
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

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

  Alt 26. Jun 2006, 21:20
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
 
Benutzerbild von Mazel
Mazel

Registriert seit: 11. Nov 2005
Ort: Leipzig
831 Beiträge
 
#3

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

  Alt 26. Jun 2006, 21:29
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

Gruß
Mazel

[edit=Phoenix]Dem Cache auf die Sprünge geholfen (Syntax Highlighting) Mfg, Phoenix[/edit]
Marcel Jänicke
www.mj-software.net
 
benst

Registriert seit: 20. Jun 2004
155 Beiträge
 
Delphi 5 Standard
 
#4

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

  Alt 26. Jun 2006, 21:50
Danke, funst prima.

Wie kann ich verhindern, dass man auch Verzeichnisse eingefügt werden? Es sollen nur Dateien sein!
Gruß
Ben
 
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

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

  Alt 26. Jun 2006, 21:57
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
 
benst

Registriert seit: 20. Jun 2004
155 Beiträge
 
Delphi 5 Standard
 
#6

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

  Alt 26. Jun 2006, 22:04
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

Registriert seit: 20. Jun 2004
155 Beiträge
 
Delphi 5 Standard
 
#7

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

  Alt 27. Jun 2006, 11:50
Wie kann ich prüfen, ob es sich bei einem Pfad um eine Datei oder ein Verzeichnis handelt?
Gruß
Ben
 
Benutzerbild von Mazel
Mazel

Registriert seit: 11. Nov 2005
Ort: Leipzig
831 Beiträge
 
#8

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

  Alt 27. Jun 2006, 12:53
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]
Marcel Jänicke
www.mj-software.net
 
benst

Registriert seit: 20. Jun 2004
155 Beiträge
 
Delphi 5 Standard
 
#9

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

  Alt 27. Jun 2006, 14:12
Danke
Kann man bei einer ListBox irgendwie horizontal scrollen?
Ben
 
Benutzerbild von Mazel
Mazel

Registriert seit: 11. Nov 2005
Ort: Leipzig
831 Beiträge
 
#10

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

  Alt 27. Jun 2006, 15:00
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
Marcel Jänicke
www.mj-software.net
 
Thema geschlossen
Seite 1 von 2  1 2      


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 23:31 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