Delphi ドラッグ&ドロップのソースコード


ファイル名 Main.pas

unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, ShellAPI; //ShellAPIを追加

type
  TForm1 = class(TForm)
    StatusBar1: TStatusBar;
    ListBox1: TListBox;
    procedure FormCreate(Sender: TObject);
  private
    { Private 宣言 }
    //Windowsからのメッセージ WM_DROPFILES を ReceiveDropFiles で受け取るようにする
    procedure ReceiveDropFiles(var Msg: TWMDropFiles); message WM_DROPFILES;
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  DragAcceptFiles(Handle, True); //ドラッグ&ドロップを有効にする
end;

procedure TForm1.ReceiveDropFiles(var Msg: TWMDropFiles);
const
  NameMax = 1024; //ファイル名用のバッファーサイズ (多少大きめにしている)
var
  Files, n: Integer;
  FileName: array[0..(NameMax + 10)] of Char; //ファイル名用のバッファー (バグ/ミスの予防に、数バイトの余裕を持たせている)
begin
  with Msg do
  begin
    Files := DragQueryFile(Drop, $FFFFFFFF, nil, 0); //ドロップされたファイル数の取得
    StatusBar1.SimpleText := IntToStr(Files);        //ステータスバーにファイル数を表示
    ListBox1.Clear;                                  //リストボックスをクリア
    for n := 0 to Files - 1 do                   //ファイル数分繰り返す
    begin
      DragQueryFile(Drop, n, FileName, NameMax); //ファイル名を取得
      ListBox1.Items.Add(FileName);              //リストボックスにファイル名を追加
    end;
    DragFinish(Drop); //ハンドルが使用しているメモリーを解放
  end;
end;

end.
 
 
 

更新 2001年10月12日
HOME
Copyright (C) Saito Satoru. All rights reserved.