![]() |
Drag & Drop vom Explorer in ListView
N'abend
Ich nutze folgenden Code um ein Drag & Drop vom Explorer in ein ListView zu realisieren. Leider funktioniert es nicht. Ich kann zwar in das ListView reindraggen aber beim loslassen der Maus zeigt er das MessageFenster nicht an. Was ist falsch?
Delphi-Quellcode:
uses shellapi;
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); showmessage(String(PCharFileName)); StrDispose(PCharFileName); end; DragFinish(Msg.WParam); end; procedure TForm1.FormCreate(Sender: TObject); begin DragAcceptFiles(ListView1.Handle, True); end; |
Re: Drag & Drop vom Explorer in ListView
du vermichst da etwas. Du erlaubst das Ablegen von Dateien auf dem Listview, aber behandelst das ablegen von Dateien für das Formular.
|
Re: Drag & Drop vom Explorer in ListView
Hmm... mit ner ListBox funktioniert der Code aber :gruebel:
|
Re: Drag & Drop vom Explorer in ListView
Hi,
mit Subclassing geht es bei mir dann aber doch.
Delphi-Quellcode:
private
OldWindowProc: TWndMethod; procedure LvSubClassWndProc(var Message: TMessage); public { Public declarations } end; var Form1: TForm1; implementation uses shellapi; {$R *.dfm} procedure TForm1.LvSubClassWndProc(var Message: TMessage); var i, Counts, Size: Integer; PCharFileName: PChar; begin if Message.Msg = WM_DROPFILES then begin PCharFileName:=nil; Counts := DragQueryFile(Message.WParam, $FFFFFFFF, PCharFileName, 255); for i := 0 to Counts - 1 do begin Size:=DragQueryFile(Message.WParam, i, nil, 0) + 1; PCharFileName:=StrAlloc(Size); DragQueryFile(Message.WParam, i, PCharFileName, Size); showmessage(String(PCharFileName)); StrDispose(PCharFileName); end; DragFinish(Message.WParam); end; OldWindowProc(Message); end; procedure TForm1.FormCreate(Sender: TObject); begin OldWindowProc:= listview1.WindowProc; listview1.WindowProc:= LvSubClassWndProc; DragAcceptFiles(listview1.Handle, True); end; procedure TForm1.FormDestroy(Sender: TObject); begin listview1.WindowProc:= OldWindowProc; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:06 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