エクスプローラからのファイルのドラッグ&ドロップに対応するには
https://www.petitmonte.com/bbs/answers?question_id=513
の風来坊さんのソースでListBox1にドロップされたファイルのパスが追加されるのですが、それを ListBox限定にしたいので
DragAcceptFiles(Form1.Handle, True);から
DragAcceptFiles(ListBox1.Handle, True);に変えても実行されるのですが
その ListBox1 をpanelの上にのせると、カーソルは変化するのですが、
ListBox1にドロップされたファイルのパスが追加されません。
ドロップ処理されていないようです。
どうすればいいのでしょうか?
TApplicationEvents コンポの OnMessage イベントを使います。
uses
ShellAPI;
procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles(ListBox1.Handle, True);
end;
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
var
I, J: Integer;
Buf: array [0..255] of Char;
begin
if (Msg.hwnd = ListBox1.Handle) and (Msg.message = WM_DROPFILES) then
begin
J := DragQueryFile(Msg.WParam, $FFFFFFFF, Buf, 255);
for I := 0 to J-1 do begin
DragQueryFile(Msg.WParam, I, Buf, 255);
ListBox1.Items.Add(Buf);
end;
DragFinish(Msg.WParam);
end;
end;
できました。
ありがとうございました。
ツイート | ![]() |