2017-02-13 Delphi ドラッグ&ドロップ
Delphi の XE2 を使用して Windows のプログラムを開発しています。久しぶりにプログラミングを行ったのですが、ドラッグ&ドロップ部分を忘れていたので記述しておきます。
1:フォームでドラッグ&ドロップを受け入れるようにします。
2:Windowsからドラッグ&ドロップのメッセージが来るので、その内容を判定します。
3:複数のファイルを含まれる場合があるので、最初にファイル数を判定します。
4:ファイルが一個の場合は、先頭のファイル名を取得します。
5:ドロップされたマウスカーソルの位置を取得します。
6:カーソル位置のコンポーネントの名前を取得します。
7:該当場所を決定して、ドロップされた内容を設定します。
Setting.pas
ソースプログラムです。
==========================================================
procedure TFormSetting.FormShow(Sender: TObject);
==========================================================
begin
..//ドラッグの受入れを許可する
..DragAcceptFiles(FormSetting.Handle, TRUE);
end;
==========================================================
procedure TFormSetting.WMDropFiles(var msg: TWMDROPFILES);
==========================================================
var
..pDropFileName: array [0..255] of Char;
..sStr1: String;
..iCount1: Integer;
..Compo1: TComponent;
..Pt1: TPoint;
begin
..//ドロップの処理
..iCount1 := DragQueryFile(Msg.Drop, Cardinal(-1), nil, 0);
..if iCount1 > 1 then
..begin
....ShowMessage('Error:ドロップするファイルは1個にしてください。');
....Exit;
..end;
..//ファイル名を設定
..DragQueryFile(Msg.Drop, 0, pDropFileName, SizeOf(pDropFileName));
..sStr1 := StrPas(pDropFileName);
..//カーソル位置を取得
..GetCursorPos(Pt1);
..//コンポーネントを取得
..Compo1 := FindDragTarget(Pt1, TRUE);
..//判定
..if Compo1.Name = Edit1.Name then
..begin
....Edit1.Text := sStr1;
..end
..else if Compo1.Name = Edit2.Name then
..begin
....Edit2.Text := sStr1;
..end
..else if Compo1.Name = Edit3.Name then
..begin
....Edit3.Text := sStr1;
..end
..else
..begin
....ShowMessage('Information:ドロップする場所は編集エリアにしてください。');
....Exit;
..end;
end;
2017年02月13日
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/178756838
※言及リンクのないトラックバックは受信されません。
この記事へのトラックバック
http://blog.sakura.ne.jp/tb/178756838
※言及リンクのないトラックバックは受信されません。
この記事へのトラックバック