2017年02月13日

2017-02-13 Delphi ドラッグ&ドロップ

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;





posted by bonworld at 14:52| Comment(0) | TrackBack(0) | Delphi
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス: [必須入力]

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/178756838
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック