メモ帳のようにエクスプローラ等からファイルがフォームにドラッグ&ドロップされたらそのファイルを開くようにしたいのですが、どのようにしたらいいのですか?
教えてください。
ちょっと面倒ですけど、たいしたことをすることはありません。
他言語ですけど、
http://www.runan.net/
ここのプログラミングTips>C++(SDK)>ファイルドロップを受け取る[簡易編]
を見て取りつけてください。
(どうやら途中にDragAcceptFilesを使うと、うまくいかないことがあるようです、なので、OnCreateでやっておきましょう)
Delphian Worldや、Torry's Delphi Pagesなどに、OLE Drag&Dropコンポーネントがあります。
Delphian World
http://home1.infonia.ne.jp/~delphian/delphi/
Torry's Delphi Pages
http://www.torry.net/
コンポーネントの追加さえできれば、あとは貼り付けてイベントを用意するだけですので簡単です。
コンポーネントをダウンロードして試してみたんですけど、
普通にドロップしたときに開こうとしたら
「プロジェクト TextEditor.exe が EFOpenError クラスの例外を生成しました。
'ファイル C\Program Files\Text.txt
は開けません'
プロセスは...
」
みたいなことが表示されます。
何か開く前にしなければいけないことがあるのですか?
それだけでは、何をどうしたいのかわかりません。
何というコンポーネントを、どういう風に使ってみたんでしょうか。
ヘルプは添付されていませんか?
コンポーネントを使うようなので、余計なお世話かもしれませんが(^^;
知っていて損はないと思うので…。
type
TForm1 = class(TForm)
{ 省略 }
private
procedure DropFiles(var Msg: TMESSAGE); message WM_DROPFILES;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
//ドラッグアンドドロップを許可する
DragAcceptFiles(Form1.Handle, True);
end;
//D&D処理
procedure TForm1.DropFiles(var Msg: TMESSAGE);
var
I, J: Integer;
Buf: array [0..255] of Char;
begin
J := DragQueryFile(Msg.WParam, $FFFFFFFF, Buf, 255);
for I := 0 to J -1 do begin
DragQueryFile(Msg.WParam, I, Buf, 255);
ListBox1.Items.Add(Buf);
end;
DragFinish(Msg.WParam);
end;
これでフォームにドラッグアンドドロップすると
ListBoxにドロップされたファイルのパスが追加されます。
尚、uses節にShellAPIが必要です。
返事が遅くなってすみません。
>それだけでは、何をどうしたいのかわかりません。
>何というコンポーネントを、どういう風に使ってみたんでしょうか。
>ヘルプは添付されていませんか?
OleDnDというコンポーネントを使いました。
readmeファイルはついていますが、具体的な使い方は書いてありませんでした。
あと、風来坊さんの方法を試してみたのですが、
「Shell.dcuがありません」
とエラーになります。
Delphi5で試したところ、エラーなくファイルを読み込んでいます。
使い方は簡単ですよ。
1.TFileDropTargetをフォームに貼り付けます。
2.ドロップしたいコンポーネントを、WinControlプロパティに設定します。
3.OnFileDropイベントに、ファイルがドロップされたときの処理を書きます
これだけです。
たとえば、
try
Memo1.Lines.LoadFromFile(FileDropTarget1.DroppedFiles.Strings[0]);
except
;
end;
と書けば、ドロップされたファイルの1つ目がMemo1に読み込まれます。
同じようにやっているのであれば、エラーの原因は別にあると思います。
にしのさんの方法でやったら成功しました。
DroppedFiles.Strings[0] を DroppedFiles.Text にしていたのがいけなかったみたいです。
皆さん協力してくださり、ありがとうございました。
ツイート | ![]() |