FTPサーバーからのロードについて


クラウディ  2005-05-10 06:30:19  No: 14696

FTPサーバーからのファイルのロードについて教えてください。

≡目的≡
  IdFTPClient を使ってファイルのリストを取得し、FileView にファイル名リストを
  表示します。
  ファイル名をクリックしてWindows上の任意のフォルダにドラッグ&ドロップを
  行いたい

≡環境≡
クライアント:
   WindowsXP で、Delphi7 です。
サーバー:
  FTPサーバアドレス:192.168.1.1
  ユーザー名:server
  パスワード:system

≡Windows上≡
  IE のアドレスバーに『ftp://server:system@192.168.1.1/filedata』と
  設定すると、FTPサーバーのフォルダ(filedata)上の内容が表示
  されます。この状態で、
  Windows上に適当なフォルダを作成し、作成したディレクトリの
  ウィンドウを開いて、ドラッグ&ドロップを行うと可能です。

≡プログラム≡
  IdFTPClient を使ってファイルのリストを取得し、FileView にファイル名リストを
  表示します。
  ファイル名をクリックしてWindows上の任意のフォルダにドラッグ&ドロップを
  行いたいのですが

≡試み≡
  DelphiQ&A 150選 の FileDrop や APIShell を使用してみましたが
  カーソルアイコンが禁止マークでドロップできませんでした。

どなたかわかる方お願いします。


win32  2005-05-10 08:40:30  No: 14697

調べてみたら意外と難しそうですね。
CFSTR_FILEDESCRIPTOR や CFSTR_FILECONTENTS を使えば出来そうですがそれから先が不明。
誰かやり方ご存知の方いらっしゃませんか


クラウディ  2005-05-18 19:50:34  No: 14698

引き続きですが、

他のアプリケーションにドロップしたときに
ドロップ処理が始まる前に自アプリケーションで
ドロップのイベント等を発生させて
その後で他アプリケーションのドロップ処理が始まる
ってできないのでしょうか?

そうすれば
ドロップする前にFTPサーバーからファイルを読み込んで
テンポラリフォルダに一度保存しておいてから
そのリストをドロップリストに渡してやれば
時間はかかるけど処理できそうな気が・・・

無理なんでしょうかね。

ちなみにこの逆
ドラッグ(マウスダウン)のイベントで
先にFTPサーバーからファイルを取得してテンポラリに
ゲットしてからってのはやったのですが
小さいファイル1つだとできるのですが、
複数やサイズの大きいものだとちょっと無理でした。


りおりお  2005-05-18 20:32:41  No: 14699

FTP うんぬんは質問の意味がよくわかりませんが、そのまえに OLE DragDrop が
できればいいのではないかと思います。

エクスプローラ等から作成したアプリケーションにファイルをコピーするには?
https://www.petitmonte.com/bbs/answers?question_id=637

(質問のタイトルの意味が逆ですが)


kkk  2005-05-18 21:46:06  No: 14700

http://www.users.on.net/johnson/delphi/
に Drag & Drop Component Suiteがあります。
Version 3.7と 4.0がありますが、4.0のサンプルに参考になりそうなものがありそうです。(そのものずばりはありませんが)


クラウディ  2005-05-20 22:40:44  No: 14701

みなさんお世話になります。

TWebBrowser をフォームにはりつけ
Navigate('ftp://server:system@192.168.1.1);
を呼び出すと、表示され、
この場合だとファイルは自由にドラッグ&ドロップできました。

でも、仕様が変わってしまう・・・
このばあいってどうやってるんでしょうか?


kkk  2005-05-20 22:59:49  No: 14702

>TWebBrowser をフォームにはりつけ
>Navigate('ftp://server:system@192.168.1.1);
>を呼び出すと、表示され、
>この場合だとファイルは自由にドラッグ&ドロップできました

TWebBrowserはIEのコンポーネントですのでそのままドラッグできても不思議ではありませんよね?


クラウディ  2005-07-05 04:39:54  No: 14703

皆さんご無沙汰しております。
あれから、試行錯誤して現在このような状態になっています。

フォーム上に
Memo1,Memo2,Memo3 をはりつけます。
使えるコンポーネント100選から  TDropSourceEx を2つ使用し、
Memo1、Memo2 で使うようにします。
Delphi3 Q&A の TFileDrop を3つ使用し、
Memo1、Memo2、Memo3 で使うようにします。

Memo1でドラッグした場合は、
Memo2、Memo3、デスクトップ等コピーができます。

Memo2でドラッグした場合は、
Memo1、Memo3にはコピーできません(ドロップできない)が
デスクトップにはFTPサーバーからコピーができました。

Memo1,Memo3 でドロップできて、
そのファイルリスト(ftp://〜のままでもよい)を取得できれば
TIdFTP を使ってファイルのダウンロードができるのですが、
何か方法はありませんでしょうか?

procedure TForm1.Memo1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  DropSourceEx1.DSFileName.Add('D:\Debug\Test1.txt');
  DropSourceEx1.DSFileName.Add('D:\Debug\Test2.txt');
end;

procedure TForm1.Memo2MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  DropSourceEx2.DSFileName.Add('ftp://User:Pass:192.168.1.1/Test1.txt');
  DropSourceEx2.DSFileName.Add('ftp://User:Pass:192.168.1.1/Test2.txt');
end;

procedure TForm1.FileDrop1FileDrop(Sender: TObject; Num: Integer; Files: TStrings; X, Y: Integer);
begin
  Memo1.Lines.Add(Files.Text);
end;

procedure TForm1.FileDrop2FileDrop(Sender: TObject; Num: Integer; Files: TStrings; X, Y: Integer);
begin
  Memo2.Lines.Add(Files.Text);
end;

procedure TForm1.FileDrop3FileDrop(Sender: TObject; Num: Integer; Files: TStrings; X, Y: Integer);
begin
  Memo3.Lines.Add(Files.Text);
end;


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加