![]() |
Drag & Drop auf Programm-Icon
Moin,
ich habe mal ein bisschen mit Drag&Drop herumgespielt und bekomme mit folgendem Code auch einen Verzeichnispfad aus dem Explorer in eine Listbox:
Delphi-Quellcode:
Allerdings klappt das nur wenn das Programm läuft - wenn ich eine Datei auf das Desktop-Icon ziehe wird zwar das Programm gestartet, aber eben nicht der Verzeichnispfad an die Listbox übergeben. Was muss ich denn machen damit das funktioniert ?
unit Unit1;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, ShellAPI; type TForm1 = class(TForm) ListBox1: TListBox; procedure FormCreate(Sender: TObject); protected procedure WMDROPFILES(var Msg: TMessage); message WM_DROPFILES; private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} const DF_NUMBEROFFILES = $FFFFFFFF; procedure TForm1.WMDROPFILES(var Msg: TMessage); var i, anzahl, size: Integer; Dateiname: PChar; begin inherited; anzahl := DragQueryFile(Msg.WParam, DF_NUMBEROFFILES, Dateiname, 255); for i := 0 to (anzahl - 1) do begin size := DragQueryFile(Msg.WParam, i, nil, 0) + 1; Dateiname := StrAlloc(size); DragQueryFile(Msg.WParam, i, Dateiname, size); Listbox1.Items.Add(StrPas(Dateiname)); StrDispose(Dateiname); end; DragFinish(Msg.WParam); end; procedure TForm1.FormCreate(Sender: TObject); begin DragAcceptFiles(Form1.Handle, true); end; end. Gruß Hans |
AW: Drag & Drop auf Programm-Icon
Zitat:
Delphi-Quellcode:
Wenn bereits eine Instanz deines Programms läuft wird eine neue Instanz gestartet. Wenn du die Dateien aber in der bereits gestrateten Instanz erlangen möchtest, musst du z. B. einen Mutex definieren der die Parameter der neuen Instanz an die laufende übergibt und danach die neue Instanz schließt. Siehe
ParamStr(0) --> ergibt immer Pfad + Name der EXE
ParamStr(1) --> ergibt den ersten Parameter ParamStr(2) --> usw. ![]() ![]() |
AW: Drag & Drop auf Programm-Icon
[QUOTE=Andreas L.;1429178]
Zitat:
Schönen Sonntag ! Hans |
AW: Drag & Drop auf Programm-Icon
Nur so am Rande bemerkt:
Es ist nicht notwendig, hier mit einem PChar und StrAlloc zu arbeiten. Es geht auch so:
Delphi-Quellcode:
(Code ungetestet runtergetippt)
const
DF_NUMBEROFFILES = $FFFFFFFF; procedure TForm1.WMDROPFILES(var Msg: TMessage); var i, anzahl, size: Integer; Dateiname: string; begin inherited; anzahl := DragQueryFile(Msg.WParam, DF_NUMBEROFFILES, nil, 0); for i := 0 to (anzahl - 1) do begin size := DragQueryFile(Msg.WParam, i, nil, 0); SetLength(Dateiname, size); DragQueryFile(Msg.WParam, i, PChar(Dateiname), size); Listbox1.Items.Add(Dateiname); end; DragFinish(Msg.WParam); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:35 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 by Thomas Breitkreuz