Downloadfortschritt!



  • Hallo, habe folgendes Problem: Ich möchte so wie im Internet-Explorer ein Downloadfenster anzeigen lassen, wenn ich etwas herunterlade. Das Problem ist nur die Datei erscheint schon auf meinem Rechenr sobald ich auf die Verknüpfung klicke.

    Ich glaube es ist wahrscheinlich nur ein kleiner Fehler finde ihn aber nicht!

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    #include "update.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm2 *Form2;
    //---------------------------------------------------------------------------
    __fastcall TForm2::TForm2(TComponent* Owner)
            : TForm(Owner)
    {
             ListBox1->Items->LoadFromFile("update\\update.txt");
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm2::IdHTTP1WorkBegin(TObject *Sender,
          TWorkMode AWorkMode, const int AWorkCountMax)
    {
      ProgressBar1->Max = AWorkCountMax;
      WideString url="http://mein.server.de/absetup.exe";
      AnsiString savepath="c:\\absetup.exe";
    
      TMemoryStream *mem = new TMemoryStream();
      IdHTTP1->Get(url,mem);
      mem->SaveToFile(savepath);
      delete mem;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm2::IdHTTP1Work(TObject *Sender,
          TWorkMode AWorkMode, const int AWorkCount)
    {
      ProgressBar1->Position = AWorkCount;
    }
    //---------------------------------------------------------------------------
    


  • BorlandNewbie schrieb:

    Das Problem ist nur die Datei erscheint schon auf meinem Rechenr sobald ich auf die Verknüpfung klicke.

    Das ist keine besonders aufschlussreiche Fehlerbeschreibung.

    Auf jeden Fall musst du das Get() ausserhalb der OnWork-Events aufrufen.



  • Also folgendes passiert:

    Wenn ich in meinem Formular auf Update herunterladen gehe, öffnet sich ein Fenster in dem steht welche Datei heruntergeladen.

    In diesem Formular soll der Fortschritt des doenloadprozesses in einer Progressbar angeziegt werden. Dies geschieht aber nicht!
    Die Datei wird nämlich schon beim öffnen des Formular´s auf die HD geladen, ohne das sich die Fortschrittsanzeige nur einmal bewegt!

    Wie bekomme ich es nun hin das sich der Fortschrittsbalken beim Start des downloads bewegt? 😕



  • Keine Vorschläge vorhanden? 🙂



  • Jansen schrieb:

    Auf jeden Fall musst du das Get() ausserhalb der OnWork-Events aufrufen.

    Also das find ich schonmal nen Super vorschlag...

    -junix



  • Ja habe ich auch schon realisiert, aber gehen tut es immernoch nicht!
    Man kann echt verzweifeln.... 😞



  • BorlandNewbie schrieb:

    Ja habe ich auch schon realisiert, aber gehen tut es immernoch nicht!

    [error Q1] Beschreibung: Keine Gültige Fehlerbeschreibung oder fehler Meldung.

    Was passiert denn mit all den Events? Werden die aufgerufen? Welche Werte werden in die Progressbar geschrieben? Wird das File korrekt runtergeladen? Viele Fragen die dir vielleicht mal stellen und - wenn du sie beantwortet hast - als Information in deine Postings packen solltest. Da gäbs bestimmt noch mehr, aber ich bin ehrlich gesagt zu müde um da jetzt mir den Kopf zu zerbrechen, welche Infos du noch geben könntest. Das wäre wohl eher deine Aufgabe.

    -junix



  • 1. In der Progressbar wird nichts dargestellt!
    2. Das File wir korekkt runtergeladen, aber ohne jede Anziege der Progressbar!

    Frage:
    Wie muss der Quelltext oben angepasst werden damit es funktioniert? Habe schon viel probiert, aber nix geht!

    Bitte um Hilfe!

    Vielen Dank!



  • WAS hast du denn probiert?



  • Das Get() habe ich ausserhalb der OnWork gesetzt! Funktioniert nicht! Alles neu programmiert! Funktioniert nciht!



  • Wie groß ist denn deine Datei? Und zeige vielleicht mal etwas mehr Quelltext.



  • Dasd schrieb:

    Wie groß ist denn deine Datei? Und zeige vielleicht mal etwas mehr Quelltext.

    Die Datei ist 3MB groß!
    Mehr quelltext als ob gezeigt ist, ist es ncith bei mir! 😞
    Hab ich sicher was falsch gemacht, ne?



  • BorlandNewbie schrieb:

    Dasd schrieb:

    [...]Und zeige vielleicht mal etwas mehr Quelltext.

    Mehr quelltext als ob gezeigt ist, ist es ncith bei mir! 😞

    Du hast den doch mutiert oder? Woher sollen wir denn wissen was du geändert hast?

    -junix



  • junix schrieb:

    <fullquote gelöscht>

    Sorry, aber ich habe den Quelltext wieder so gemacht! Da ja bis jetzt eh nix geht 😮

    Edit:
    Zitate bitte auf das Notwendigste beschränken. Danke!



  • BorlandNewbie schrieb:

    junix schrieb:

    <fullquote gelöscht>

    Sorry, aber ich habe den Quelltext wieder so gemacht! Da ja bis jetzt eh nix geht 😮

    ?
    Das heisst die Get-Funktion wieder mitten in die Work-Events gesetzt?

    -junix



  • junix schrieb:

    BorlandNewbie schrieb:

    junix schrieb:

    <fullquote gelöscht>

    Sorry, aber ich habe den Quelltext wieder so gemacht! Da ja bis jetzt eh nix geht 😮

    ?
    Das heisst die Get-Funktion wieder mitten in die Work-Events gesetzt?

    -junix

    YES



  • Ich hoffe, das hilft dir weiter:
    http://www.c-plusplus.net/forum/viewtopic.php?t=72486

    Und nochmal:
    Zitate bitte auf das Notwendigste beschränken. Danke!



  • Habe mich also jetzt an den Thread gehalten, genauso gehandelt wie es darin steht!

    Das Problem ist, man braucht ja einen Timer damit sich die Progressbar bewegt. Das Problem ist wie rufe ich den Timer in diesem Quelltext auf?

    Hoffe auf Hilfe!

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    #include "update.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm2 *Form2;
    String URL = "http://xxx.homelinux.com/cpp.exe";
    String filename = "c:\\cpp.exe";
    //---------------------------------------------------------------------------
    __fastcall TForm2::TForm2(TComponent* Owner)
            : TForm(Owner)
    {
             ListBox1->Items->LoadFromFile("update\\update.txt");
             Button1->Caption = "Datei öffnen";
             Button1->Enabled = false;
    
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm2::AfterShow()
    {
      Show();
      Application->ProcessMessages();
    
      TFileStream *mem = new TFileStream(filename, fmCreate);
      IdHTTP1->Get(URL,mem);
      delete mem;
    
      Button1->Enabled = true;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm2::IdHTTP1WorkBegin(TObject *Sender,
          TWorkMode AWorkMode, const int AWorkCountMax)
    {
      ProgressBar1->Max = AWorkCountMax;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm2::IdHTTP1Work(TObject *Sender,
          TWorkMode AWorkMode, const int AWorkCount)
    {
      ProgressBar1->Position = AWorkCount;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm2::Button1Click(TObject *Sender)
    {
    ShellExecute(0, "open", filename.c_str(), 0, 0, SW_SHOW);
    }
    //---------------------------------------------------------------------------
    


  • BorlandNewbie schrieb:

    [...] man braucht ja einen Timer damit sich die Progressbar bewegt.

    Eben nicht.
    Über das OnWork-Event wirst du automatisch informiert, dass sich in Sachen Download etwas getan hat und wie der aktuelle Stand der Dinge ist, so dass du die ProgressBar-Position entprechend anpassen kannst.



  • Na dem obigen Quelltext tut sich in meiner Progreesbar aber nix, leider! Woran kann es vielleicht liegen? 😕



  • Wahrscheinlich hat dein Projekt irgendwo 'ne Macke. 🙂
    Mail mich mal an (siehe Profil), dann schick ich dir das Beispielprojekt, wahlweise für BCB5 oder BCB6.


Anmelden zum Antworten