ドラッグ&ドロップの使い方
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.