ドラッグ&ドロップの使い方
Explorerからファイルをドロップするには
ここをクリックしてください。
エディットボックスからフォームにドロップするには
上の方法では、エディットボックスの内容を編集できないので、マウスボタンを押したときエディットボックスの内容をドラッグできるようにするには5.以下を次のように変更します。
エディットボックスからエディットボックスへドロップするには
サンプル
unit DragDrop1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
procedure FormDragDrop(Sender, Source: TObject; X, Y: Integer);
procedure FormCreate(Sender: TObject);
procedure FormDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure Edit1DragDrop(Sender, Source: TObject; X, Y: Integer);
procedure Edit1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure Edit1EndDrag(Sender, Target: TObject; X, Y: Integer);
procedure Edit2DragDrop(Sender, Source: TObject; X, Y: Integer);
procedure Edit2EndDrag(Sender, Target: TObject; X, Y: Integer);
procedure Edit1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormDragDrop(Sender, Source: TObject; X, Y: Integer);
var
s: string;
begin
s := 'X = ' + IntToStr(X) + ' Y = ' + IntToStr(Y) + ' Sender = ' +
Sender.ClassName + ' Source = ' + Source.ClassName;
MessageDlg(s, mtInformation, [mbOK], 0);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
DropTarget := True;
end;
procedure TForm1.FormDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept := True;
end;
procedure TForm1.Edit1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
if Source is TEdit then
begin
Edit1.Text := (Source as TEdit).Text;
end;
end;
procedure TForm1.Edit1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept := True;
end;
procedure TForm1.Edit1EndDrag(Sender, Target: TObject; X, Y: Integer);
begin
Edit1.Update;
end;
procedure TForm1.Edit2DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
if Source is TEdit then
begin
Edit2.Text := (Source as TEdit).Text;
end;
end;
procedure TForm1.Edit2EndDrag(Sender, Target: TObject; X, Y: Integer);
begin
Edit2.Update;
end;
procedure TForm1.Edit1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Edit1.BeginDrag(True);;
end;
end.
Explorerからファイルをドロップするには
Explorerやファイルマネージャからファイルをドロップするには、Drag&DropのWin32 APIを使ってドロップする必要があります。
例
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ShellApi;
type
TForm1 = class(TForm)
Label1: TLabel;
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
private
{ Private 宣言 }
procedure WMDropFiles(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.WMDropFiles(var Msg: TWMDropFiles);
var
FileName: array[0..260] of Char;
i, n: Integer;
begin
// ドロップされたファイル数を得る
n := DragQueryFile(Msg.Drop, $ffffffff, nil, SizeOf(FileName));
// ファイル名をMemo1に追加
for i := 0 to n do
begin
DragQueryFile(Msg.Drop, i, FileName, SizeOf(FileName));
Memo1.Lines.Add(FileName);
end;
// ドロップの終了
DragFinish(Msg.Drop);
end;
end.