Форум: "Начинающим";
Текущий архив: 2008.03.02;
Скачать: [xml.tar.bz2];
Внизскачивание файлов из интернета Найти похожие ветки
← →
bagos (2008-02-08 23:59) [0]не нашел нормальной информации о скачивании фалов с инета.
если не трудно киньте мыслю или ссылку.спасибо
← →
palva © (2008-02-09 00:53) [1]Не очень понятно, что такое нормальная информация. Если нормальная информация отсутствует, то скорее всего ваши понятия о норме превратны. Для начала объясните, что такое "файлы в инете". С некоторой натяжкой можно говорить о файлах, лежащих на сервере FTP. Но скорее всего вы не это имели ввиду.
← →
Riply © (2008-02-09 01:42) [2]> [1] palva © (09.02.08 00:53)
> Не очень понятно, что такое нормальная информация.
Это код, готовый к копи/пайстному использованию.
С Вашим опытом, пора бы знать такие элементарные вещи :)
← →
Германн © (2008-02-09 01:49) [3]
> Riply © (09.02.08 01:42) [2]
>
> > [1] palva © (09.02.08 00:53)
> > Не очень понятно, что такое нормальная информация.
>
> Это код, готовый к копи/пайстному использованию.
> С Вашим опытом, пора бы знать такие элементарные вещи :)
>
С его опытом - это бред. Да и с моим тоже. Поскольку копипасты в наше время не было в продаже. :)))
← →
Riply © (2008-02-09 01:54) [4]> [3] Германн © (09.02.08 01:49)
> С его опытом - это бред. Да и с моим тоже.
> Поскольку копипасты в наше время не было в продаже. :)))
Тогда вам с palva, ну просто очень срочно, нужно изучать
новейшие и моднейшие технологии программирования :)
← →
guav © (2008-02-09 01:56) [5]http://msdn2.microsoft.com/en-us/library/aa384363.aspx
InternetOpen + InternetConnect + InternetReadFile + InternetCloseHandle. Мне этот вариант нравится тем, что код одинаковый для http и ftp. WinInet это не единствнный вариант, но как по мне самый простой.
← →
guav © (2008-02-09 02:02) [6]Точнее я имел в виду InternetOpenUrl вместо InternetConnect , тогда действительно четырёх функций хватит.
← →
Германн © (2008-02-09 02:04) [7]
> Riply © (09.02.08 01:54) [4]
Пока мне это не нужно - мне это не нужно.
P.S. Не сочти это за тавтологию.
← →
bagos (2008-02-09 02:05) [8]спасибо, уже разобрался как всегда ответ на поверхности был))
скачиваю за раз по 20 и более файлов. сделал ведение лога в листбоксе, но пока файлы скачивыаются нчиего в листбокс не добавляется только при завершении всех закачек! :( пробовал в отдельном потоке тоже ничего не дало. как решать подобную проблему? хотелось бы видеть лог в процессе выполнения
← →
palva © (2008-02-09 08:53) [9]guav © (09.02.08 01:56) [5]
Спасибо за ссылку. Надо посмотреть эти функции. Может быть они решат такие темные для меня вопросы как докачка, автоматическое использование кэширования - это если скачиваешь картинку, которую только что открыл в эксплорере, прогресс бар при скачивании очень большого файла и т. д. Я обычно такими вещами не заморачиваюсь поэтому пользуюсь одним вызовом функции
unit UrlMon
function URLDownloadToFile
> спасибо, уже разобрался как всегда ответ на поверхности был))
Не стоит благодарности. Мы рады за вас. Жаль, что наши скромные попытки поучаствовать в ваших проблемах, не были вознаграждены, и мы не только не получили информации о вашем ноу хау, но даже не удостоились общения.
> как решать подобную проблему? хотелось бы видеть лог в процессе выполнения
Обычно, чтобы при выполнении некоторой работы поток все же отвлекался на работу с пользовательскими контролами периодически выполняютApplication.ProcessMessages;
Может быть, и вам поможет вызов этого метода.
← →
bagos (2008-02-09 13:48) [10]ах да, я не стал заморачиваться и решение нашел в использовании idhttp.(в данном случае меня мне все равно какая реализация, главное чтобы скачивал).
http:=TIdHTTP.Create(nil);
memor:=TMemoryStream.Create;
http.Get(s+listbox2.Items[ListBox2.ItemIndex],memor);
memor.Position:=0;
memor.SaveToFile(GetCurrentDir+"\downloads\"+s+".txt");
palva, Application.ProcessMessages; я так и не понял куда это вставлять.
в цикл или в любое место ппрограммы. а может в поток?или в файл проекта?
Благодарю за ответы!
← →
ketmar © (2008-02-09 13:56) [11]>[10] bagos (2008-02-09 13:48:00)
для индейцев — антифриз нужон. по крайней мере раньше был нужон, сейчас не в курсе.
---
Understanding is not required. Only obedience.
← →
bagos (2008-02-09 14:27) [12]что есть "антифриз"?
← →
ketmar © (2008-02-09 14:34) [13]>[12] bagos (2008-02-09 14:27:00)
пошуруй мышкой по поллитре с индейцами. если найдёшь IdAntiFreeze — это оно. если не найдёшь — значит, упразднили.
---
Understanding is not required. Only obedience.
← →
bagos (2008-02-09 14:55) [14]Антифриз то что надо! спасибо за помощь!
← →
guav © (2008-02-09 15:11) [15]Прогрессбар при скачивании похоже у URLDownloadToFile прикрутить можно
unit DownWithProgress;
interface
uses Windows, ComObj, ActiveX, UrlMon;
function DownloadWithProgress(
szURL: PChar;
szFileName: PChar;
parent: HWND): HRESULT;
implementation
const
CLSID_ProgressDialog: TGUID = "{F8383852-FCD3-11d1-A6B9-006097DF5BD4}";
type
IProgressDialog = interface(IUnknown)
["{EBBC7C04-315E-11d2-B62F-006097DF5BD4}"]
function StartProgressDialog(
hwndParent: HWND;
punkEnableModless: IUnknown;
dwFlags: DWORD;
LpvResevered: Pointer): HRESULT; stdcall;
function StopProgressDialog(): HRESULT; stdcall;
function SetTitle(pwzTitle: PWideChar): HRESULT; stdcall;
function SetAnimation(hInstAnimation: HMODULE; idAnimation: UINT): HRESULT; stdcall;
function HasUserCancelled(): BOOL; stdcall;
function SetProgress(dwCompleted: DWORD; dwTotal: DWORD): HRESULT; stdcall;
function SetProgress64(ullCompleted: UInt64; ullTotal: UInt64): HRESULT; stdcall;
function SetLine(dwLineNum: DWORD; pwzString: PWideChar;
fCompactPath: BOOL; pvResevered: Pointer): HRESULT; stdcall;
function SetCancelMsg(pwzCancelMsg: PWideChar; pvResevered: Pointer): HRESULT; stdcall;
function Timer(dwTimerAction: DWORD; pvResevered: Pointer): HRESULT; stdcall;
end;
const
PROGDLG_NORMAL = $00000000;
PROGDLG_MODAL = $00000001;
PROGDLG_AUTOTIME = $00000002;
PROGDLG_NOTIME = $00000004;
PROGDLG_NOMINIMIZE = $00000008;
PROGDLG_NOPROGRESSBAR = $00000010;
type
TDownloadProgress = class(TInterfacedObject, IBindStatusCallback)
private
FDialog: IProgressDialog;
FBininng: IBinding;
FParent: HWND;
FName: string;
public
constructor Create(Parent: HWND; Name: string);
public
function OnStartBinding(dwReserved: DWORD; pib: IBinding): HResult; stdcall;
function GetPriority(out nPriority): HResult; stdcall;
function OnLowResource(reserved: DWORD): HResult; stdcall;
function OnProgress(ulProgress, ulProgressMax, ulStatusCode: ULONG;
szStatusText: LPCWSTR): HResult; stdcall;
function OnStopBinding(hresult: HResult; szError: LPCWSTR): HResult; stdcall;
function GetBindInfo(out grfBINDF: DWORD; var bindinfo: TBindInfo): HResult; stdcall;
function OnDataAvailable(grfBSCF: DWORD; dwSize: DWORD; formatetc: PFormatEtc;
stgmed: PStgMedium): HResult; stdcall;
function OnObjectAvailable(const iid: TGUID; punk: IUnknown): HResult; stdcall;
end;
{ TDownloadProgress }
constructor TDownloadProgress.Create(Parent: HWND; Name: string);
begin
FParent := Parent;
FName := Name;
FDialog := CreateComObject(CLSID_ProgressDialog) as IProgressDialog;
end;
function TDownloadProgress.GetBindInfo(out grfBINDF: DWORD;
var bindinfo: TBindInfo): HResult;
begin
grfBINDF := 0;
Result := S_OK;
end;
function TDownloadProgress.GetPriority(out nPriority): HResult;
begin
DWORD(nPriority) := THREAD_PRIORITY_NORMAL;
Result := S_OK;
end;
function TDownloadProgress.OnDataAvailable(grfBSCF, dwSize: DWORD;
formatetc: PFormatEtc; stgmed: PStgMedium): HResult;
begin
Result := S_OK;
end;
function TDownloadProgress.OnLowResource(reserved: DWORD): HResult;
begin
Result := S_OK;
end;
function TDownloadProgress.OnObjectAvailable(const iid: TGUID;
punk: IInterface): HResult;
begin
Result := S_OK;
end;
function TDownloadProgress.OnProgress(ulProgress, ulProgressMax,
ulStatusCode: ULONG; szStatusText: LPCWSTR): HResult;
begin
FDialog.SetProgress(ulProgress, ulProgressMax);
if FDialog.HasUserCancelled() then
FBininng.Abort();
Result := S_OK;
end;
function TDownloadProgress.OnStartBinding(dwReserved: DWORD;
pib: IBinding): HResult;
begin
FBininng := pib;
FDialog.StartProgressDialog(0, nil, PROGDLG_MODAL or PROGDLG_AUTOTIME, nil);
FDialog.SetTitle("Downloading");
FDialog.SetLine(1, PWideChar(WideString(FName)), False, nil);
Result := S_OK;
end;
function TDownloadProgress.OnStopBinding(hresult: HResult;
szError: LPCWSTR): HResult;
begin
FDialog.StopProgressDialog();
Result := S_OK;
end;
function DownloadWithProgress(
szURL: PChar;
szFileName: PChar;
parent: HWND): HRESULT;
begin
Result := URLDownloadToFile(
nil, szURL, szFileName, 0,
TDownloadProgress.Create(parent, szURL) as IBindStatusCallback);
end;
end.
← →
palva © (2008-02-09 15:15) [16]
> guav © (09.02.08 15:11) [15]
Вот спасибо, нравятся мне такие технологии.
← →
bagos (2008-02-09 16:13) [17]guav, спасибо за вкуснятину
← →
guav © (2008-02-09 20:38) [18]> [16] palva © (09.02.08 15:15)
> [17] bagos (09.02.08 16:13)
Только там проверить всё надо, это наскоро написаный пример.
И ещё проблема может быть здесь
> if FDialog.HasUserCancelled() then
проверяется только в OnProgress, т.е. если скачка зависнет то отмена может перестать работать.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.03.02;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.049 c