TWebBrowserを使用して自分のプログラム用のアップデータを構築しています。 OnCreate TWebBrowserは指定されたURLにナビゲートします。アップデートをダウンロードするには、ユーザーがリンクをクリックする必要があります。リンクをクリックすると、このポップアップが表示されます:ファイルのダウンロードを制御する
それがすることが可能であったのであれば、私は思っていた:ポップアップと自動的にダウンロードが可能に
- バイパス。
- ファイルをダウンロードする固定パスを設定します。
TWebBrowserを使用して自分のプログラム用のアップデータを構築しています。 OnCreate TWebBrowserは指定されたURLにナビゲートします。アップデートをダウンロードするには、ユーザーがリンクをクリックする必要があります。リンクをクリックすると、このポップアップが表示されます:ファイルのダウンロードを制御する
それがすることが可能であったのであれば、私は思っていた:ポップアップと自動的にダウンロードが可能に
私はそのためにインディのTIdHTTP
コンポーネントを使用することになり、例えば:
uses
..., IdHTTP;
var
Url, LocalFile: String;
Strm: TFileStream;
begin
Url := ...;
LocalFile := ...;
Strm := TFileStream.Create(LocalFile, fmCreate);
try
try
IdHTTP.Get(Url, Strm);
finally
Strm.Free;
end;
except
DeleteFile(LocalFile);
raise;
end;
end;
あなたはどうやって手に入りますか?仕事にインディー?どのようにユニットに追加しますか? – Craig
'uses ...、IdHTTP;' –
アクティブなHTMLコンテンツを表示していないため、TWebBrowserは必要ではありません。これまでにも述べたように、他にも数多くの選択肢があります。基本的にHTTPリクエストが必要です。
ここではWinInetを使用した非常に簡単な例を示します。これはニーズ(スレッド、ステータスメッセージなど)に合わせて調整する必要があります。
function DownloadURL(inURL, destfile: string): boolean;
var
hOpen: HINTERNET;
hFile: HINTERNET;
myAgent: string;
savefile: file;
amount_read: integer;
// the buffer size here generally reflects maximum MTU size.
// for efficiency sake, you don't want to use much more than this.
mybuffer: array[1..1460] of byte;
begin
Result := true;
myAgent := 'Test downloader app';
// other stuff in this call has to do with proxies, no way for me to test
hOpen := InternetOpen(PChar(myAgent), 0, nil, nil, 0);
if hOpen = nil then
begin
Result := false;
exit;
end;
try
hFile := InternetOpenURL(hOpen, PChar(inURL), nil, 0,
INTERNET_FLAG_RELOAD or INTERNET_FLAG_DONT_CACHE, 0);
if hFile = nil then
begin
Result := false;
exit;
end;
try
AssignFile(savefile, destfile);
Rewrite(savefile, 1);
InternetReadFile(hFile, @myBuffer, sizeof(mybuffer), amount_read);
repeat
Blockwrite(savefile, mybuffer, amount_read);
InternetReadFile(hFile, @myBuffer, sizeof(mybuffer), amount_read);
until amount_read = 0;
CloseFile(savefile);
finally
InternetCloseHandle(hFile);
end;
finally
InternetCloseHandle(hOpen);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
// example usage.
begin
if SaveDialog1.Execute then
begin
if DownloadURL(Edit1.Text, SaveDialog1.FileName) then
ShowMessage('file downloaded.')
else
ShowMessage('Error downloading file.');
end;
end;
WinHTTP/Indy/WinInetよりも優れたオプションがあれば、もっと具体的に何をしたいのかが分かります。それは単に依存しています。 – Glenn1234
インディーのようなもっと良いソリューションがある場合、Delphiで未加工の「WinInet」を使用することはちょっとしたアイデアです。 ICS](http://www.overbyte.be/frame_index.html?redirTo=/products/ics.html)、[Synapse](http://www.ararat.cz/synapse/doku.php/start)、その他。あなたのコードとRemy'sを比較して、なぜそうであるのかを簡単に説明してください。 :) –
@KenWhiteはい、ファイルをダウンロードするときにスティックを振ることができるより多くのオプションがあります。本当に、私はちょうどOPを始めるために何かを見せようとしていた。 (記録的には、私がしたいことに応じてWinInet以外のものを使用しています) – Glenn1234
あなたは 'TWebBrowser'更新のためのあなたのプログラムを使用しているのはなぜ? Indy、WinINet、WinHTTPなどの多くのより良いオプションが存在します... – RRUZ
同意して、あなたはこれに対してWebブラウザコントロールを使用すべきではありません! –