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

解決


ばち  2006-05-07 19:17:02  No: 21397

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

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


えーと  2006-05-08 00:43:13  No: 21398

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 15:55:58  No: 21399

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加