Avatar billede galleon Nybegynder
21. juli 2002 - 19:18 Der er 87 kommentarer og
1 løsning

Download

jeg har prøvet http://udvikleren.dk/vis_tip.php4?id=236 men kan ikke få det til at virke men skal bruge noget ligene
Avatar billede galleon Nybegynder
21. juli 2002 - 19:19 #1
der skal vare ikke være de showmessage
Avatar billede nico26 Nybegynder
21. juli 2002 - 19:48 #2
hvad er det der ikke virker. Får du en fejl, og er det compile - eller runtime?
Avatar billede rrm Nybegynder
21. juli 2002 - 20:36 #3
Der er fejl i disse linier:

if DownloadFile('http://www.server.dk/fil.txt, C:\Fil.txt) then
  ShowMessage('Filen er downloaded.');
else
  ShowMessage('Kunne ikke downloade filen.';

Skal være:

if DownloadFile('http://www.server.dk/fil.txt, C:\Fil.txt) then
  ShowMessage('Filen er downloaded.')
else
  ShowMessage('Kunne ikke downloade filen.)';

Kunne måske være fejlen...
Avatar billede rrm Nybegynder
21. juli 2002 - 20:36 #4
DOO.

Denne linie "ShowMessage('Kunne ikke downloade filen.)';" skal være "ShowMessage('Kunne ikke downloade filen.');"
Avatar billede hlj Nybegynder
21. juli 2002 - 20:43 #5
Man skal huske at afslutte filnavnet med en '

if DownloadFile('http://www.server.dk/fil.txt', C:\Fil.txt) then
  ShowMessage('Filen er downloaded.');
else
  ShowMessage('Kunne ikke downloade filen.';
Avatar billede nico26 Nybegynder
21. juli 2002 - 20:58 #6
der skal vel også pinger omkring c:\fil.txt
Avatar billede galleon Nybegynder
21. juli 2002 - 23:17 #7
har ikke fået hvad jeg vil ha
Avatar billede nico26 Nybegynder
21. juli 2002 - 23:19 #8
Det kan måske hjælpe at præcisere det lidt.
Avatar billede galleon Nybegynder
21. juli 2002 - 23:24 #9
jeg skal kunne hente http://www.worldcraftguide.1go.dk/sprites.zip fra en button men man kna ikke hente fra det link (som er korekt) men skal ind på siden og trykke på linket for at hente det
Avatar billede nico26 Nybegynder
21. juli 2002 - 23:30 #10
Fint nok, men hvilken fejl får du?
Avatar billede galleon Nybegynder
21. juli 2002 - 23:32 #11
prøv at tryk på linket
Avatar billede nico26 Nybegynder
21. juli 2002 - 23:34 #12
Det har jeg prøvet, så får jeg en zip-fil
Avatar billede galleon Nybegynder
21. juli 2002 - 23:38 #13
prøv at hent den
Avatar billede galleon Nybegynder
21. juli 2002 - 23:38 #14
tror det virker nu
Avatar billede nico26 Nybegynder
21. juli 2002 - 23:38 #15
Jeg har hentet den. Den indeholder 8 filer
Avatar billede galleon Nybegynder
21. juli 2002 - 23:39 #16
denher virker ikke
Webbrowser1.Navigate('http://www.worldcraftguide.1go.dk/sprites.zip');
Avatar billede galleon Nybegynder
21. juli 2002 - 23:40 #17
kan du lave en kode der henter den når man trykker på en button (ikke den anden kode der er skrevet 3-4 gange)
Avatar billede galleon Nybegynder
21. juli 2002 - 23:53 #18
nico22> er du smuttet. hvis du ikke svar inden 5 min bliver dette spm lukket
Avatar billede nico26 Nybegynder
21. juli 2002 - 23:53 #19
URLDownloadToFile(nil, 'http://www.worldcraftguide.1go.dk/sprites.zip',
    'c:\windows\skrivebord\Test.zip', 0, nil);
Avatar billede nico26 Nybegynder
21. juli 2002 - 23:54 #20
husk UrlMon i uses
Avatar billede galleon Nybegynder
21. juli 2002 - 23:58 #21
nico22> kan du lave så at når man trykker på knappen kommer der et nyt vindu hvor der er en progressbar der viser hvor meget der er hentet
Avatar billede galleon Nybegynder
21. juli 2002 - 23:58 #22
så får du 15 point mere
Avatar billede galleon Nybegynder
21. juli 2002 - 23:58 #23
og når den har hentet lukket vinduet igen
Avatar billede galleon Nybegynder
21. juli 2002 - 23:59 #24
ej 30 point mere
Avatar billede galleon Nybegynder
22. juli 2002 - 00:01 #25
vil gerne ha at den henter til mappen hvor programmet ligger i mappen downloads
Avatar billede nico26 Nybegynder
22. juli 2002 - 00:03 #26
Jeg kan lave sådan at man kan vælge hvilken mappe det skal kopieres til. Det med progressbaren tror jeg ikke er så nemt :(
Avatar billede galleon Nybegynder
22. juli 2002 - 00:04 #27
man skal ikke kunne selv vælge jeg har skrevet MKDir('Downloads'); hvor tingene der er blevet hentet bliver lagt
Avatar billede nico26 Nybegynder
22. juli 2002 - 00:05 #28
og det er en undermappe til den mappe hvori programmet ligger?
Avatar billede galleon Nybegynder
22. juli 2002 - 00:06 #29
det kan være foreskelligt hvor programmet ligger fx c:\tst eller d:\mkz så hvis vi tager c:\tst og køre programmet laves der en dir Downloads hvor filerne bliver lagt
Avatar billede nico26 Nybegynder
22. juli 2002 - 00:07 #30
dvs. c:\tst\downloads eller hvad?
Avatar billede galleon Nybegynder
22. juli 2002 - 00:07 #31
ja Downloads er en undermap til der hvor programmet er
Avatar billede galleon Nybegynder
22. juli 2002 - 00:08 #32
ja c:\tst\downloads
Avatar billede nico26 Nybegynder
22. juli 2002 - 00:09 #33
okay - jeg tror måske jeg kan lave det med progressbaren, men du må have lidt tålmodighed
Avatar billede galleon Nybegynder
22. juli 2002 - 00:10 #34
ok
Avatar billede nico26 Nybegynder
22. juli 2002 - 00:23 #35
læg en progressbar på formen og test denne kode

uses
  UrlMon, ActiveX;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
const
  BufSize = 1024; //1 KB
var
  Stm            : IStream;
  Buffer        : Pointer;
  BytesRead      : Integer;
  TotalBytesRead : Integer;
  Dest          : TStream;
  Stat          : TStatStg;
begin
  URLOpenBlockingStream(nil, 'http://www.worldcraftguide.1go.dk/sprites.zip',
    Stm, 0, nil);

  if Stm = nil then
    Exit;

  ProgressBar1.Position := 0;
  Stm.Stat(Stat, 0);
  TotalBytesRead := 0;

  Dest := TFileStream.Create('c:\windows\skrivebord\test.zip', fmOpenRead or fmCreate);
  GetMem(Buffer, BufSize);
  try
    repeat
      Stm.Read(Buffer, BufSize, @BytesRead);
      Dest.Write(Buffer^, BytesRead);
      Inc(TotalBytesRead, BytesRead);
      ProgressBar1.Position := Trunc((TotalBytesRead / Stat.cbSize) * ProgressBar1.Max);
      Application.ProcessMessages;
    until BytesRead <> BufSize;
  finally
    FreeMem(Buffer, BufSize);
    Dest.Free;
  end;
end;
Avatar billede galleon Nybegynder
22. juli 2002 - 00:29 #36
const
  BufSize = 1024; //1 KB
var
  Stm            : IStream;
  Buffer        : Pointer;
  BytesRead      : Integer;
  TotalBytesRead : Integer;
  Dest          : TStream;
  Stat          : TStatStg;
begin
  URLOpenBlockingStream(nil, 'http://www.worldcraftguide.1go.dk/sprites.zip',
    Stm, 0, nil);

  if Stm = nil then
    Exit;

  ProgressBar1.Position := 0;
  Stm.Stat(Stat, 0);
  TotalBytesRead := 0;

  Dest := TFileStream.Create('c:\windows\skrivebord\test.zip', fmOpenRead or fmCreate);
  GetMem(Buffer, BufSize);
  try
    repeat
      Stm.Read(Buffer, BufSize, @BytesRead);
      Dest.Write(Buffer^, BytesRead);
      Inc(TotalBytesRead, BytesRead);
      ProgressBar1.Position := Trunc((TotalBytesRead / Stat.cbSize) * ProgressBar1.Max);
      Application.ProcessMessages;
    until BytesRead <> BufSize;
  finally
    FreeMem(Buffer, BufSize);
    Dest.Free;
Avatar billede galleon Nybegynder
22. juli 2002 - 00:31 #37
den gemmer ikke i undermappen Downloads
Avatar billede nico26 Nybegynder
22. juli 2002 - 00:33 #38
var
  AppPath  : string;
  Downloads : string;
begin
  AppPath := ExtractFilePath(ParamStr(0));
  Downloads := ForceDirectories(AppPath + 'Downloads');
Avatar billede nico26 Nybegynder
22. juli 2002 - 00:34 #39
hov - glem det jeg lige postede
Avatar billede galleon Nybegynder
22. juli 2002 - 00:39 #40
kan du ikke lige sette det sammen
Avatar billede nico26 Nybegynder
22. juli 2002 - 00:40 #41
const
  BufSize = 1024; //1 KB
var
  AppPath        : string;
  Downloads      : string;
  Stm            : IStream;
  Buffer        : Pointer;
  BytesRead      : Integer;
  TotalBytesRead : Integer;
  Dest          : TStream;
  Stat          : TStatStg;
begin
  AppPath := ExtractFilePath(ParamStr(0));
  ForceDirectories(AppPath + 'Downloads');
  Downloads := AppPath + 'DownLoads\';

  URLOpenBlockingStream(nil, 'http://www.worldcraftguide.1go.dk/sprites.zip',
    Stm, 0, nil);

  if Stm = nil then
    Exit;

  ProgressBar1.Position := 0;
  Stm.Stat(Stat, 0);
  TotalBytesRead := 0;

  Dest := TFileStream.Create(Downloads + 'Test.zip', fmOpenRead or fmCreate);
  GetMem(Buffer, BufSize);
  try
    repeat
      Stm.Read(Buffer, BufSize, @BytesRead);
      Dest.Write(Buffer^, BytesRead);
      Inc(TotalBytesRead, BytesRead);
      ProgressBar1.Position := Trunc((TotalBytesRead / Stat.cbSize) * ProgressBar1.Max);
      Application.ProcessMessages;
    until BytesRead <> BufSize;
  finally
    FreeMem(Buffer, BufSize);
    Dest.Free;
  end;
Avatar billede galleon Nybegynder
22. juli 2002 - 00:47 #42
tak men har et spm mere hvordan laver man et clean på den progressbar (progressbar.clear noget)
Avatar billede galleon Nybegynder
22. juli 2002 - 00:48 #43
alså når den har hentet går der 2 sec og så fjernes de blå streger
Avatar billede nico26 Nybegynder
22. juli 2002 - 00:49 #44
ProgressBar.Position := 0;
Avatar billede galleon Nybegynder
22. juli 2002 - 00:50 #45
dooh det kunne jeg have sagt mig selv :)
Avatar billede galleon Nybegynder
22. juli 2002 - 00:52 #46
er noob til delphi men er det noget ligene

    if ProgressBar1.Position := 100 then
    ProgressBar.Position := 0
Avatar billede nico26 Nybegynder
22. juli 2002 - 00:55 #47
if ProgressBar1.Position := 100 then
  ProgressBar.Position := 0
Avatar billede nico26 Nybegynder
22. juli 2002 - 00:56 #48
sorry

if ProgressBar1.Position = 100 then
  ProgressBar.Position := 0
Avatar billede galleon Nybegynder
22. juli 2002 - 00:58 #49
if ProgressBar1.Position = 100 then
  ProgressBar1.Position := 0

hvordan jeg jeg gøre så at der går 2 sec før den går til 0 (måske noget med en timer)
Avatar billede galleon Nybegynder
22. juli 2002 - 01:00 #50
tror jeg har fundet ud af det

if ProgressBar1.Position = 100 then
timer1.visible := true else
timer1.visible := false
Avatar billede galleon Nybegynder
22. juli 2002 - 01:01 #51
upz ikke visible men enabled
Avatar billede galleon Nybegynder
22. juli 2002 - 01:02 #52
har du icq
Avatar billede galleon Nybegynder
22. juli 2002 - 01:11 #53
hvis jeg laver den om så den henter en anden fil på lidt over 2 mb går programmet i stå
Avatar billede nico26 Nybegynder
22. juli 2002 - 01:36 #54
prøv at sætte BufSize til noget mere.
Avatar billede galleon Nybegynder
22. juli 2002 - 01:39 #55
har du icq
Avatar billede nico26 Nybegynder
22. juli 2002 - 01:40 #56
Nej
Avatar billede galleon Nybegynder
22. juli 2002 - 01:41 #57
email
Avatar billede galleon Nybegynder
22. juli 2002 - 01:41 #58
hvad sker der hvis man setter bufsite højre\laver (hvad gør det godt for)
Avatar billede galleon Nybegynder
22. juli 2002 - 01:46 #59
hvad skal jeg sette den til
Avatar billede nico26 Nybegynder
22. juli 2002 - 01:46 #60
email nico@pc.dk

Jeg har fundet ud af hvorfor det går i stå. Det er fordi kaldet til URLOpenBlockingStream blokerer indtil hele filen er downloaded. Jeg prøver lige at finde ud af noget andet.
Avatar billede galleon Nybegynder
22. juli 2002 - 02:13 #61
er du død?
Avatar billede nico26 Nybegynder
22. juli 2002 - 02:20 #62
nope - jeg arbejder på sagen. Det kan tage lidt tid da det er lidt tricky
Avatar billede galleon Nybegynder
22. juli 2002 - 02:25 #63
ok
Avatar billede nico26 Nybegynder
22. juli 2002 - 02:30 #64
Jeg har postet hele uniten


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, UrlMon, ActiveX;

type
  TForm1 = class(TForm)
    ProgressBar1: TProgressBar;
    Button4: TButton;
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TStatusCallback = class(TInterfacedObject, IBindStatusCallback)
  private
    FDest    : TStream;
    FProgress : TProgressBar;
  protected
    { IBindStatusCallback methods}
    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;

  public
    constructor Create(const AFileName : string; AProgress: TProgressBar);
    destructor Destroy; override;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TStatusCallback }

constructor TStatusCallback.Create(const AFileName: string;
  AProgress: TProgressBar);
begin
  inherited Create;

  FDest    := TFileStream.Create(AFileName, fmOpenRead or fmCreate);
  FProgress := AProgress;
end;

destructor TStatusCallback.Destroy;
begin
  FDest.Free;
  inherited;
end;

function TStatusCallback.GetBindInfo(out grfBINDF: DWORD;
  var bindinfo: TBindInfo): HResult;
begin
  Result := S_OK;
end;

function TStatusCallback.GetPriority(out nPriority): HResult;
begin
  Result := S_OK;
end;

function TStatusCallback.OnDataAvailable(grfBSCF, dwSize: DWORD;
  formatetc: PFormatEtc; stgmed: PStgMedium): HResult;
var
  Buffer : Pointer;
  BytesRead : Integer;
begin
  if formatetc^.tymed <> TYMED_ISTREAM then
  begin
    Result := E_INVALIDARG;
    Exit;
  end;

  GetMem(Buffer, dwSize);
  try
    IStream(stgmed^.stm).Read(Buffer, dwSize, @BytesRead);
    FDest.Write(Buffer^, BytesRead);
  finally
    FreeMem(Buffer, dwSize);
  end;

  Result := S_OK;
end;

function TStatusCallback.OnLowResource(reserved: DWORD): HResult;
begin
  Result := S_OK;
end;

function TStatusCallback.OnObjectAvailable(const iid: TGUID;
  punk: IInterface): HResult;
begin
  Result := S_OK;
end;

function TStatusCallback.OnProgress(ulProgress, ulProgressMax,
  ulStatusCode: ULONG; szStatusText: LPCWSTR): HResult;
begin
  Result := S_OK;

  with FProgress do
  begin
    if ulProgressMax = 0 then
      Exit;

    Position := Trunc((ulProgress / ulProgressMax) * Max);
  end;
end;

function TStatusCallback.OnStartBinding(dwReserved: DWORD;
  pib: IBinding): HResult;
begin
  Result := S_OK;
end;

function TStatusCallback.OnStopBinding(hresult: HResult;
  szError: LPCWSTR): HResult;
begin
  with FProgress do
    Position := Max;

  Result := S_OK;
end;

procedure TForm1.Button4Click(Sender: TObject);
const
  URL = 'http://www.worldcraftguide.1go.dk/sprites.zip';
var
  AppPath        : string;
  Downloads      : string;
begin
  AppPath := ExtractFilePath(ParamStr(0));
  ForceDirectories(AppPath + 'Downloads');
  Downloads := AppPath + 'DownLoads\';

  URLOpenStream(nil, URL, 0, TStatusCallback.Create(Downloads + 'Test.zip', ProgressBar1));
end;

end.
Avatar billede galleon Nybegynder
22. juli 2002 - 02:47 #65
kommer en fejl ved TForm1 = class(TForm) (linien bliver rød)
Avatar billede nico26 Nybegynder
22. juli 2002 - 02:54 #66
hvad hedder fejlen
Avatar billede galleon Nybegynder
22. juli 2002 - 02:55 #67
duno linien er bare rød
Avatar billede galleon Nybegynder
22. juli 2002 - 02:58 #68
const
  BufSize = 1024; //1 KB
var
  AppPath        : string;
  Downloads      : string;
  Stm            : IStream;
  Buffer        : Pointer;
  BytesRead      : Integer;
  TotalBytesRead : Integer;
  Dest          : TStream;
  Stat          : TStatStg;
begin
  AppPath := ExtractFilePath(ParamStr(0));
  ForceDirectories(AppPath + 'Downloads');
  Downloads := AppPath + 'DownLoads\';

  URLOpenBlockingStream(nil, 'http://www.worldcraftguide.1go.dk/worldcraft3',
    Stm, 0, nil);

  if Stm = nil then
    Exit;

  ProgressBar1.Position := 0;
  Stm.Stat(Stat, 0);
  TotalBytesRead := 0;

  Dest := TFileStream.Create(Downloads + 'WorldCraft3.exe', fmOpenRead or fmCreate);
  GetMem(Buffer, BufSize);
  try
    repeat
      Stm.Read(Buffer, BufSize, @BytesRead);
      Dest.Write(Buffer^, BytesRead);
      Inc(TotalBytesRead, BytesRead);
      ProgressBar1.Position := Trunc((TotalBytesRead / Stat.cbSize) * ProgressBar1.Max);
      Application.ProcessMessages;
if ProgressBar1.Position = 100 then
timer1.enabled := true else
timer1.enabled := false

    until BytesRead <> BufSize;
  finally
    FreeMem(Buffer, BufSize);
    Dest.Free;
Avatar billede galleon Nybegynder
22. juli 2002 - 02:59 #69
hvis jeg fjerner overståne kode er der en linie der bliver rød og jeg kan ikke starte programmet
Avatar billede galleon Nybegynder
22. juli 2002 - 02:59 #70
det er linien end;
Avatar billede nico26 Nybegynder
22. juli 2002 - 03:01 #71
nede i bunden af kode editoren skulle der gerne være en fejl meddelelse
Avatar billede nico26 Nybegynder
22. juli 2002 - 03:02 #72
ahh, det er fordi du har slettet begin
Avatar billede galleon Nybegynder
22. juli 2002 - 03:02 #73
[Error] Unit1.pas(88): Local class, interface or object types not allowed
Avatar billede galleon Nybegynder
22. juli 2002 - 03:03 #74
fandt ud af det men har sat den nye kode ind men i TForm1 = class(TForm)  kommer der en fejl [Error] Unit1.pas(88): Local class, interface or object types not allowed
Avatar billede nico26 Nybegynder
22. juli 2002 - 03:05 #75
prøv i stedet at oprette et nyt projekt, og paste min kode ind i unit1
Avatar billede galleon Nybegynder
22. juli 2002 - 03:08 #76
jeg har lavet et program og vil ikke starte forefra
Avatar billede nico26 Nybegynder
22. juli 2002 - 03:12 #77
så må du tage een bid ad gangen. Start med TStatusCallback
Avatar billede nico26 Nybegynder
22. juli 2002 - 03:15 #78
du kan evt. maile din unit til mig, så kan jeg prøve at klistre det sammen.
Avatar billede galleon Nybegynder
22. juli 2002 - 03:16 #79
hvafor en fisk?
Avatar billede nico26 Nybegynder
22. juli 2002 - 03:17 #80
TStatusCallback er den klasse der er erklæret under TForm1
Avatar billede galleon Nybegynder
22. juli 2002 - 03:17 #81
unit1:

unit Unit1;

interface

uses
  Windows, URLMon, ActiveX, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, OleCtrls, SHDocVw, ComCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    GroupBox3: TGroupBox;
    WebBrowser1: TWebBrowser;
    Button7: TButton;
    Button8: TButton;
    Button9: TButton;
    Button10: TButton;
    Button11: TButton;
    ProgressBar1: TProgressBar;
    Timer1: TTimer;
    procedure Button1Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button10Click(Sender: TObject);
    procedure Button11Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses Unit2, Unit3;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.ShowModal

end;

procedure TForm1.Button8Click(Sender: TObject);
begin
Close;
end;

procedure TForm1.Button9Click(Sender: TObject);
begin
WebBrowser1.Stop;
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
Webbrowser1.Navigate('http://www.eksperten.dk');

end;

procedure TForm1.Button10Click(Sender: TObject);
begin
Form3.ShowModal
end;

procedure TForm1.Button11Click(Sender: TObject);
begin
WebBrowser1.Refresh;
end;

procedure TForm1.Button4Click(Sender: TObject);

type
  TForm1 = class(TForm)
    ProgressBar1: TProgressBar;
    Button4: TButton;
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TStatusCallback = class(TInterfacedObject, IBindStatusCallback)
  private
    FDest    : TStream;
    FProgress : TProgressBar;
  protected
    { IBindStatusCallback methods}
    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;

  public
    constructor Create(const AFileName : string; AProgress: TProgressBar);
    destructor Destroy; override;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TStatusCallback }

constructor TStatusCallback.Create(const AFileName: string;
  AProgress: TProgressBar);
begin
  inherited Create;

  FDest    := TFileStream.Create(AFileName, fmOpenRead or fmCreate);
  FProgress := AProgress;
end;

destructor TStatusCallback.Destroy;
begin
  FDest.Free;
  inherited;
end;

function TStatusCallback.GetBindInfo(out grfBINDF: DWORD;
  var bindinfo: TBindInfo): HResult;
begin
  Result := S_OK;
end;

function TStatusCallback.GetPriority(out nPriority): HResult;
begin
  Result := S_OK;
end;

function TStatusCallback.OnDataAvailable(grfBSCF, dwSize: DWORD;
  formatetc: PFormatEtc; stgmed: PStgMedium): HResult;
var
  Buffer : Pointer;
  BytesRead : Integer;
begin
  if formatetc^.tymed <> TYMED_ISTREAM then
  begin
    Result := E_INVALIDARG;
    Exit;
  end;

  GetMem(Buffer, dwSize);
  try
    IStream(stgmed^.stm).Read(Buffer, dwSize, @BytesRead);
    FDest.Write(Buffer^, BytesRead);
  finally
    FreeMem(Buffer, dwSize);
  end;

  Result := S_OK;
end;

function TStatusCallback.OnLowResource(reserved: DWORD): HResult;
begin
  Result := S_OK;
end;

function TStatusCallback.OnObjectAvailable(const iid: TGUID;
  punk: IInterface): HResult;
begin
  Result := S_OK;
end;

function TStatusCallback.OnProgress(ulProgress, ulProgressMax,
  ulStatusCode: ULONG; szStatusText: LPCWSTR): HResult;
begin
  Result := S_OK;

  with FProgress do
  begin
    if ulProgressMax = 0 then
      Exit;

    Position := Trunc((ulProgress / ulProgressMax) * Max);
  end;
end;

function TStatusCallback.OnStartBinding(dwReserved: DWORD;
  pib: IBinding): HResult;
begin
  Result := S_OK;
end;

function TStatusCallback.OnStopBinding(hresult: HResult;
  szError: LPCWSTR): HResult;
begin
  with FProgress do
    Position := Max;

  Result := S_OK;
end;

procedure TForm1.Button4Click(Sender: TObject);
const
  URL = 'http://www.worldcraftguide.1go.dk/sprites.zip';
var
  AppPath        : string;
  Downloads      : string;
begin
  AppPath := ExtractFilePath(ParamStr(0));
  ForceDirectories(AppPath + 'Downloads');
  Downloads := AppPath + 'DownLoads\';

  URLOpenStream(nil, URL, 0, TStatusCallback.Create(Downloads + 'Test.zip', ProgressBar1));
end;


end;

procedure TForm1.Button6Click(Sender: TObject);
const
  BufSize = 1024; //1 KB
var
  AppPath        : string;
  Downloads      : string;
  Stm            : IStream;
  Buffer        : Pointer;
  BytesRead      : Integer;
  TotalBytesRead : Integer;
  Dest          : TStream;
  Stat          : TStatStg;
begin
  AppPath := ExtractFilePath(ParamStr(0));
  ForceDirectories(AppPath + 'Downloads');
  Downloads := AppPath + 'DownLoads\';

  URLOpenBlockingStream(nil, 'http://www.worldcraftguide.1go.dk/sprites.zip',
    Stm, 0, nil);

  if Stm = nil then
    Exit;

  ProgressBar1.Position := 0;
  Stm.Stat(Stat, 0);
  TotalBytesRead := 0;

  Dest := TFileStream.Create(Downloads + 'Test.zip', fmOpenRead or fmCreate);
  GetMem(Buffer, BufSize);
  try
    repeat
      Stm.Read(Buffer, BufSize, @BytesRead);
      Dest.Write(Buffer^, BytesRead);
      Inc(TotalBytesRead, BytesRead);
      ProgressBar1.Position := Trunc((TotalBytesRead / Stat.cbSize) * ProgressBar1.Max);
      Application.ProcessMessages;
if ProgressBar1.Position = 100 then
ShowMessage('Finen er hentet') else
timer1.enabled := true


    until BytesRead <> BufSize;
  finally
    FreeMem(Buffer, BufSize);
    Dest.Free;
end;
end;
procedure TForm1.Button5Click(Sender: TObject);
const
  BufSize = 10024; //1 KB
var
  AppPath        : string;
  Downloads      : string;
  Stm            : IStream;
  Buffer        : Pointer;
  BytesRead      : Integer;
  TotalBytesRead : Integer;
  Dest          : TStream;
  Stat          : TStatStg;
begin
  AppPath := ExtractFilePath(ParamStr(0));
  ForceDirectories(AppPath + 'Downloads');
  Downloads := AppPath + 'DownLoads\';

  URLOpenBlockingStream(nil, 'http://www.worldcraftguide.1go.dk/worldcraft3.exe',
    Stm, 0, nil);

  if Stm = nil then
    Exit;

  ProgressBar1.Position := 0;
  Stm.Stat(Stat, 0);
  TotalBytesRead := 0;

  Dest := TFileStream.Create(Downloads + 'worldcraft3.exe', fmOpenRead or fmCreate);
  GetMem(Buffer, BufSize);
  try
    repeat
      Stm.Read(Buffer, BufSize, @BytesRead);
      Dest.Write(Buffer^, BytesRead);
      Inc(TotalBytesRead, BytesRead);
      ProgressBar1.Position := Trunc((TotalBytesRead / Stat.cbSize) * ProgressBar1.Max);
      Application.ProcessMessages;
if ProgressBar1.Position = 100 then
timer1.enabled := true else
timer1.enabled := false

    until BytesRead <> BufSize;
  finally
    FreeMem(Buffer, BufSize);
    Dest.Free;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
ProgressBar1.Position :=0
end;

end.
Avatar billede galleon Nybegynder
22. juli 2002 - 03:18 #82
hvor gammel er du?
Avatar billede nico26 Nybegynder
22. juli 2002 - 03:20 #83
du mangler klasseerklæringen af TStatusCallback. Sæt den ind efter TForm1

type
  TForm1 = class(TForm)
    ProgressBar1: TProgressBar;
    Button4: TButton;
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TStatusCallback = class(TInterfacedObject, IBindStatusCallback)
  private
    FDest    : TStream;
    FProgress : TProgressBar;
  protected
    { IBindStatusCallback methods}
    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;

  public
    constructor Create(const AFileName : string; AProgress: TProgressBar);
    destructor Destroy; override;
  end;
Avatar billede nico26 Nybegynder
22. juli 2002 - 03:21 #84
Jeg er 24
Avatar billede galleon Nybegynder
22. juli 2002 - 03:26 #85
kom til at slette filen project1 (over skrive den) brugerfladen hvad gør jeg
Avatar billede galleon Nybegynder
22. juli 2002 - 03:27 #86
skal jeg starte forefra med hele mit program så?
Avatar billede nico26 Nybegynder
22. juli 2002 - 16:04 #87
Har du fået det til at køre?
Avatar billede galleon Nybegynder
22. juli 2002 - 16:57 #88
upz du får lige 30 mere som lovet http://www.eksperten.dk/spm/238278
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester