Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Progress bar anzeige (https://www.delphipraxis.net/77989-progress-bar-anzeige.html)

XXcD 27. Sep 2006 18:08


Progress bar anzeige
 
Hallo,
ich wollte mal fragen wie ich eine Progress bar so hinkriege, dass die die Prozent zahl von einer Datei die gerade geloadet wird anzeigt?

Balu der Bär 27. Sep 2006 18:10

Re: Progress bar anzeige
 
Guck dir mal TGauge an, ist praktisch gesehen ein ProgressBar nur mit Prozentanzeige.

MuTzE 27. Sep 2006 18:11

Re: Progress bar anzeige
 
ProgressBar.Max := 100;

ProgressBar.Position := (Größe der Datei) / (Bereits geladen)
_____________________
EDIT:

Alles Integer, Runden nicht vergessen!!!!

XXcD 27. Sep 2006 18:20

Re: Progress bar anzeige
 
Ich zeig hier mal den Quelltext. Wenn es jemand bereit wäre mir zu sagen wie ich jetzt ne anzeige da rein bekomme wieviel Prozent fertig sind und den Balken auch, dann wäre ich sehr dankbaer. Hier ist der Quelltext:
Delphi-Quellcode:
procedure TForm6.Button1Click(Sender: TObject);
var
  sLauftext, sTmp: string;
  var i: Integer;
  var p:integer;

var
  Datei,Ziel:PChar;
  var
  testo, testen: string;
  begin
  try
     p:=1;
    Datei := 'http://*-free.com/update/K*****at.exe';
    Ziel := 'C:\Dokumente und Einstellungen\All Users\Desktop\K*****t.exe';
 UrlDownloadToFile(nil, Datei, Ziel, 0, nil);
 for p:=1 to 100 do
begin
 progressbar1.StepBy(p);
 delay(40);
end;

Mackhack 27. Sep 2006 18:22

Re: Progress bar anzeige
 
Was soll denn das mit deiner for-Schleife. Das ist ja nicht wirklich Realtime oder? :roll:

Ausserdem hat dir MuTzE schon gesagt wie du es machen musst!

MuTzE 27. Sep 2006 18:23

Re: Progress bar anzeige
 
In dem Abschnitt wird man wohl nix machen können. Womit lädst du runter? idHttp???

Dann findeste was hier im Board!

XXcD 27. Sep 2006 18:24

Re: Progress bar anzeige
 
Ja wie bekomme ich denn raus wie viel geloadet ist und wie groß die datei ist?????

MuTzE 27. Sep 2006 18:27

Re: Progress bar anzeige
 
Probiers mal damit!

idHttp und Fortschrittsanzeige


Wenn de das nich willst, dann musste mal die Funktion "UrlDownloadToFile" posten, nur da könnte man was machen, wenn überhaupt!

XXcD 27. Sep 2006 18:44

Re: Progress bar anzeige
 
Das funktioniert bei mir irgendwie nicht. Gibt es nicht eine funktion die einfach nur feststellt wie groß eine datei ist?
Und man auch feststellen kann wieviel davon geloadet wurde?

MuTzE 27. Sep 2006 19:18

Re: Progress bar anzeige
 
Kann man sich zusammenbasteln, bezweifle aber, das du damit Erfolg hast.

Wenn du die Datei runterlädst, schreibst du sie ja, also solltest du eigentlich keinen du keinen Zugriff bekommen, probieren kannst du es.



Delphi-Quellcode:
var
  FS: TFileStream;
  FSize: Int64;
begin
  FS := TFileStream.Create(Dateiname, fmOpenRead);
  FSize := FS.Size;
  FreeAndNil(FS);

Das müsstest du in einen Timr packen, anders geht es denke ich nicht. Ich empfehle dir Indy zu nehmen!

Mackhack 27. Sep 2006 19:38

Re: Progress bar anzeige
 
Hab ich grad noch auf Platte gefunden:

Delphi-Quellcode:
// -----------------------------------------------------------------------------

function TForm1.OnStartBinding(dwReserved: DWORD; pib: IBinding): HResult; stdcall;
begin
  Result := E_NOTIMPL;
end; {end function}

// -----------------------------------------------------------------------------

function TForm1.GetPriority(out nPriority): HResult; stdcall;
begin
  Result := E_NOTIMPL;
end; {end function}

// -----------------------------------------------------------------------------

function TForm1.OnLowResource(reserved: DWORD): HResult; stdcall;
begin
  Result := E_NOTIMPL;
end; {end function}

// -----------------------------------------------------------------------------

function TForm1.OnStopBinding(hresult: HResult; szError: LPCWSTR)
  : HResult; stdcall;
begin
  Result := E_NOTIMPL;
end; {end function}

// -----------------------------------------------------------------------------

function TForm1.GetBindInfo(out grfBINDF: DWORD; var bindinfo: TBindInfo)
  : HResult; stdcall;
begin
  Result := E_NOTIMPL;
end; {end function}

// -----------------------------------------------------------------------------

function TForm1.OnDataAvailable(grfBSCF: DWORD; dwSize: DWORD;
  formatetc: PFormatEtc; stgmed: PStgMedium): HResult; stdcall;
begin
  Result := E_NOTIMPL;
end; {end function}

// -----------------------------------------------------------------------------

function TForm1.OnObjectAvailable(const iid: TGUID; punk: IUnknown)
  : HResult; stdcall;
begin
  Result := E_NOTIMPL;
end; {end function}

// -----------------------------------------------------------------------------

function TForm1.OnProgress(ulProgress, ulProgressMax, ulStatusCode: ULONG;
      szStatusText: LPCWSTR): HResult; stdcall;
begin
  with ProgressBar1 do
  begin
    Max := ulProgressMax;
    Position := ulProgress;
  end; {end with}
  Result := NOERROR;
end; {end function}

function cDownloadStatusCallback.OnProgress(ulProgress, ulProgressMax, ulStatusCode: ULONG; szStatusText: LPCWSTR): HResult;
var
  szST : String;
begin
  case ulStatusCode of
    BINDSTATUS_BEGINDOWNLOADDATA:
      begin
        // reset progressbar
        SendMessage(GetDlgItem(hDlg, IDC_PROGRESS), PBM_SETPOS, 0, 0);

        // show current action
        szST := szStatusText;
        SendMessage(GetDlgItem(hDlg, IDC_ACTIONTEXT), WM_SETTEXT, 0,Integer(szST));

        // download exit by the user?
        if ( m_fUserCancel ) then
        begin
          Result := E_ABORT;
          Exit;
        end;
      end;
    BINDSTATUS_DOWNLOADINGDATA:
      begin
        // update progress
        SendMessage(GetDlgItem(hDlg, IDC_PROGRESS), PBM_SETPOS, MulDiv(ulProgress, 100, ulProgressMax), 0);

        // download exit by the user?
        if(m_fUserCancel) then
        begin
          Result := E_ABORT;
          Exit;
        end;
      end;
    BINDSTATUS_ENDDOWNLOADDATA:
      SendMessage(hDlg, WM_CLOSE, 0, 0); // close Download dialog
  end;

  // message pump
  if ( PeekMessage(msg, hDlg, 0, 0, PM_REMOVE) ) then
  begin
    IsDialogMessage(hDlg,msg);
  end;
  Result := S_OK; // default result
end;


function DownloadFile(Source, Dest: String): Boolean;
begin
  try
    Result := ( UrlDownloadToFile(Nil, PChar(Source), PChar(Dest), 0, Nil) = 0 );
  except
    Result := False;
  end;
end;

XXcD 5. Okt 2006 15:01

Re: Progress bar anzeige
 
Also ich habs jetzt endlich mal geschafft die Indy Komponenten zu Instalieren. Jetzt wollte ich das ausprobieren, aber jetzt sagt der mir beim Kompilieren IBinding nicht definiert. Welche Komponente muss ich denn da einbinden?

Luckie 5. Okt 2006 15:05

Re: Progress bar anzeige
 
Der Code von Mackhack hat nichts mit den Indys zu tun.

http://www.michael-puff.de/Developer..._progress.html
Geht genauso mit HTTP und Download.

XXcD 5. Okt 2006 16:13

Re: Progress bar anzeige
 
Ich hab das Programm jetzt mal ausprobiert aber das klappt nichts das müsste schon direkt ein Tutorial sein mit http und download.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:57 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