Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Drag & Drop vom Explorer in ListView (https://www.delphipraxis.net/92530-drag-drop-vom-explorer-listview.html)

EDatabaseError 21. Mai 2007 20:57


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;

SirThornberry 21. Mai 2007 21:08

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.

EDatabaseError 21. Mai 2007 21:40

Re: Drag & Drop vom Explorer in ListView
 
Hmm... mit ner ListBox funktioniert der Code aber :gruebel:

bitsetter 21. Mai 2007 22:06

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 05:40 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