Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi File aus Internet Downloaden (https://www.delphipraxis.net/2555-file-aus-internet-downloaden.html)

FreeStyler 29. Jan 2003 13:50


File aus Internet Downloaden
 
Wie kann ich eine Datei aus dem Netz downloaden, in dem ich den Link angebe. Ich habe schon einige sachen gefunden aber entweder ist meine Anwendung stehen geblieben oder/und ich bekomme nicht mit wie weit der Download vortgeschritten ist.

Luckie 29. Jan 2003 14:06

Das geht entweder mit den Fastnet-Komonenten oder den Indies. Hilfe solltest du hier im Forum finden. Wenn du dir die Indies runterlädst, dann zieh dir auch die Demos. Demos zu den fastnet-Komponenten sollten bei Delphi dabei sein.

Christian Seehase 29. Jan 2003 15:16

Moin Freestyler,

erst einmal herzlich willkommen in der Delphi-Praxis.

Eine andere Möglichkeit wäre die API Funktion URLDownloadToFile.
Um diese Funktion nutzen zu können, muss die Unit urlmon mit eingebunden werden.

Luckie 29. Jan 2003 15:18

Für eien Fortschrittsanzeige muß man dann aber noch eine eigene Callback implmetiren un das dürfte nicht einfach sein.

d3g 29. Jan 2003 16:34

Ich hab mal ein Beispiel für UrlDownloadToFile() gebastelt ...

Code:
[b]unit[/b] Unit1;

[b]interface[/b]

[b]uses[/b]
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, UrlMon, StdCtrls, ComCtrls, ComObj, ActiveX, ComServ;

[b]type[/b]
  TDownloadCallback = [b]class[/b](TCOMObject, IBindStatusCallback)
    [b]function[/b] OnStartBinding(dwReserved: DWORD; pib: IBinding): HResult; [b]stdcall[/b];
    [b]function[/b] GetPriority([b]out[/b] nPriority): HResult; [b]stdcall[/b];
    [b]function[/b] OnLowResource(reserved: DWORD): HResult; [b]stdcall[/b];
    [b]function[/b] OnProgress(ulProgress, ulProgressMax, ulStatusCode: ULONG;
      szStatusText: LPCWSTR): HResult; [b]stdcall[/b];
    [b]function[/b] OnStopBinding(hresult: HResult; szError: LPCWSTR): HResult; [b]stdcall[/b];
    [b]function[/b] GetBindInfo([b]out[/b] grfBINDF: DWORD; [b]var[/b] bindinfo: TBindInfo): HResult; [b]stdcall[/b];
    [b]function[/b] OnDataAvailable(grfBSCF: DWORD; dwSize: DWORD; formatetc: PFormatEtc;
      stgmed: PStgMedium): HResult; [b]stdcall[/b];
    [b]function[/b] OnObjectAvailable([b]const[/b] iid: TGUID; punk: IUnknown): HResult; [b]stdcall[/b];
  [b]end[/b];


[b]type[/b]
  TForm1 = [b]class[/b](TForm)
    ProgressBar: TProgressBar;
    Button: TButton;
    [b]procedure[/b] ButtonClick(Sender: TObject);
    [b]procedure[/b] FormCreate(Sender: TObject);
  [b]private[/b]
    [color=#000080][i]{ Private declarations }[/i][/color]
    dlc: TDownloadCallback;
  [b]public[/b]
    [color=#000080][i]{ Public declarations }[/i][/color]
  [b]end[/b];

[b]var[/b]
  Form1: TForm1;

[b]implementation[/b]

[color=#008000]{$R *.dfm}[/color]

[b]function[/b] TDownloadCallback.OnStartBinding(dwReserved: DWORD;
  pib: IBinding): HResult; [b]stdcall[/b];
[b]begin[/b]
  Form1.ProgressBar.Position := [color=#000080]0[/color];
  Result := S_OK;
[b]end[/b];

[b]function[/b] TDownloadCallback.GetPriority([b]out[/b] nPriority): HResult; [b]stdcall[/b];
[b]begin[/b]
  Result := E_NOTIMPL;
[b]end[/b];

[b]function[/b] TDownloadCallback.OnLowResource(reserved: DWORD): HResult; [b]stdcall[/b];
[b]begin[/b]
  Result := E_NOTIMPL;
[b]end[/b];

[b]function[/b] TDownloadCallback.OnProgress(ulProgress, ulProgressMax,
  ulStatusCode: ULONG; szStatusText: LPCWSTR): HResult; [b]stdcall[/b];
[b]begin[/b]
  Form1.ProgressBar.Max := ulProgressMax;
  Form1.ProgressBar.Position := ulProgress;
  Application.ProcessMessages();
  Result := S_OK;
  [color=#000080][i]// to cancel, return E_ABORT instead of S_OK[/i][/color]
[b]end[/b];

[b]function[/b] TDownloadCallback.OnStopBinding(hresult: HResult;
  szError: LPCWSTR): HResult; [b]stdcall[/b];
[b]begin[/b]
  Result := E_NOTIMPL;
[b]end[/b];

[b]function[/b] TDownloadCallback.GetBindInfo([b]out[/b] grfBINDF: DWORD;
  [b]var[/b] bindinfo: TBindInfo): HResult; [b]stdcall[/b];
[b]begin[/b]
  Result := E_NOTIMPL;
[b]end[/b];

[b]function[/b] TDownloadCallback.OnDataAvailable(grfBSCF: DWORD; dwSize: DWORD;
  formatetc: PFormatEtc; stgmed: PStgMedium): HResult; [b]stdcall[/b];
[b]begin[/b]
  Result := E_NOTIMPL;
[b]end[/b];

[b]function[/b] TDownloadCallback.OnObjectAvailable([b]const[/b] iid: TGUID;
  punk: IUnknown): HResult; [b]stdcall[/b];
[b]begin[/b]
  Result := E_NOTIMPL;
[b]end[/b];

[b]procedure[/b] TForm1.ButtonClick(Sender: TObject);
[b]begin[/b]
  UrlDownloadToFile([b]nil[/b], [color=#000080]'http://www.delphipraxis.net/viewtopic.php?t=2801'[/color],
                    [color=#000080]'C:\UrlDownloadToFile.html'[/color], [color=#000080]0[/color], dlc);
[b]end[/b];

[b]procedure[/b] TForm1.FormCreate(Sender: TObject);
[b]begin[/b]
  dlc := TDownloadCallback.Create();
[b]end[/b];

[b]initialization[/b]
  TComObjectFactory.Create(ComServer, TDownloadCallback, IBindStatusCallback,
                           [color=#000080]'TDownloadCallback'[/color],
                           [color=#000080]'Callback Interface for UrlDownloadToFile()'[/color],
                           ciMultiInstance, tmApartment);

[b]end[/b].
MfG,
d3g

e-dancer 24. Feb 2003 21:57

nimm doch einfach winsock!!!...die funktion ist navigate2()


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz