ファイルのドラッグ&ドロップに対応するには(Panel)

解決


ばち  2006-05-07 10:17:02  No: 21397  IP: 192.*.*.*

エクスプローラからのファイルのドラッグ&ドロップに対応するには
https://www.petitmonte.com/bbs/answers?question_id=513
の風来坊さんのソースでListBox1にドロップされたファイルのパスが追加されるのですが、それを ListBox限定にしたいので
DragAcceptFiles(Form1.Handle, True);から
DragAcceptFiles(ListBox1.Handle, True);に変えても実行されるのですが

その ListBox1 をpanelの上にのせると、カーソルは変化するのですが、
ListBox1にドロップされたファイルのパスが追加されません。
ドロップ処理されていないようです。
どうすればいいのでしょうか?

編集 削除
えーと  2006-05-07 15:43:13  No: 21398  IP: 192.*.*.*

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;

編集 削除
ばち  2006-05-08 06:55:58  No: 21399  IP: 192.*.*.*

できました。
ありがとうございました。

編集 削除