2017-01-12 10 views
0

私はIndyを一度も使用しておらず、基本を学ぶのに苦労しています。リストボックスをどのように埋め込むかを理解するために時間をかけました。これで、選択したファイルをリストボックスにどのようにダウンロードできますか? 私が試した:Indyリストから選択されたファイルをダウンロードします

procedure TFTP.Button2Click(Sender: TObject); 
var 
i:integer; 
begin 
for i := 0 to ListBox1.Items.Count - 1 do begin 
if ListBox1.Selected[i] then begin 
IdFTP1.Get(listbox1.Selected[i]); 
end; 
end; 
end; 

をしかし、私は取得しています:

[DCC32エラー] FTP_Form.pas(75):E2250これらを呼び出すことができる「取得]のないオーバーロードされたバージョン はありません引数

また、savedialogも使用する必要がありますか?これで私を助けてください。 :)

答えて

0

一つの方法....

リストボックスが( TIdFTP.List()への呼び出しの後、このような TIdFTP.DirectoryListingプロパティからのように)ダウンロードするリモートのファイル名が含まれていると仮定すると、
procedure TFTP.Button2Click(Sender: TObject); 
Var 
Name{, Line}: String; 
begin 
Name := IdFTP1.DirectoryListing.Items[ListBox1.ItemIndex].FileName; 
SaveDialog1.FileName := Name; 
if SaveDialog1.Execute then begin 
IdFTP1.Get(Name, SaveDialog1.FileName, true); 
end; 
end; 
4

ListBox1.Selected[i]は、Booleanです。前の行では次のように書きました。

if ListBox1.Selected[i] then begin 

ここで、TIdFTP.Get()の方法を見てください。あなたが提供する必要が

procedure Get(const ASourceFile: string; ADest: TStream; 
    AResume: Boolean = false); overload; 
procedure Get(const ASourceFile, ADestFile: string; const ACanOverwrite: boolean = false; 
    AResume: Boolean = false); overload; 

:それは2つのオーバーロードがあり

  • ダウンロードしたいリモートファイルのソースファイル名。
  • リモートファイルの内容を受信する宛先ファイル名またはストリーム。

私はあなたがこれらを得るつもりはわかりません。おそらく、ファイル名はListBoxから来るので、ListBox1.Items[i]になります。

ダウンロードしたコンテンツで何をしたいですか?それを記憶に残す?ファイルに保存しますか?他に何か?あなたが提供する目的地は、それらの質問に対するあなたの答えによって決まります。

あなたの忠告は、ListBoxを一面に置き、より簡単なプログラム(UIなし)を作成して、単にFTPサーバーから単一のファイルをダウンロードすることです。ダウンロードしたコンテンツをローカルディスクに保存するには、ローカルファイル名またはTFileStreamを使用します。内容が期待どおりであることを確認してください。 1つのファイルをダウンロードすると、任意の数のファイルを他の種類の宛先にダウンロードできます。

これをマスターしたら、ユーザーインターフェイスに移動します。 ListBoxコントロールがどのように機能するか、その読み込み方法、その文字列の読み方、選択のテスト方法などを学習してください。

あなたが関係するすべての部品を十分に理解している場合にのみ、それらを一緒に合わせてください。

+0

私はどのように変換しますListBox1.Selected [i]を文字列に変換して使用できますか? – user3351050

+0

これは 'ブール'です。つまり、 'False'または' True'の2つの値のいずれかを持つことができます。あなたは本当にそれを文字列に変換したいですか? –

+0

私はsavedialogを使うことに決めましたので、リストボックス項目の値をsavedialog.filenameとして渡す必要があります。 – user3351050

0

procedure TFTP.Button2Click(Sender: TObject); 
var 
    i:integer; 
begin 
    for i := 0 to ListBox1.Items.Count - 1 do 
    begin 
    if ListBox1.Selected[i] then begin 
     IdFTP1.Get(ListBox1.Items[i], 'C:\Some Local Path\' + ListBox1.Items[i]); 
    end; 
    end; 
end; 
関連する問題