FTP Download in TCGauge



  • Hi Proggis 🙂

    ich nutze die Indy FTP Komponente um Downloads zu machen. Nun möchte ich den Download Status in einer TGCauge darstellen.

    Habe dafür die OnWork Beginn und OnWork Ereignisse der Indy Komponente wie folgt angepasst.

    void __fastcall TForm1::FTPWork(TObject *Sender, TWorkMode AWorkMode,
          const int AWorkCount)
    {
     PBImages->Progress = AWorkCount;
    
     Memo1->Lines->Add(AWorkCount);
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::FTPWorkBegin(TObject *Sender, TWorkMode AWorkMode,
          const int AWorkCountMax)
    {
     PBImages->MaxValue = AWorkCountMax;
    
     Memo1->Lines->Add(AWorkCountMax);
    }
    //---------------------------------------------------------------------------
    

    Leider landet die CGauge sofort bei 100%, so dass ich keinen Status mehr sehen kann. Deswegen lasse ich mir in Memo1 einige Daten ausgeben und sehe das die zahlen immer größer werden:

    0
    32768
    65536
    98304
    131072
    163840
    196608
    229376
    262144
    294912
    327680
    360448
    393216
    425984
    458752
    ...

    Wer kann mir sagen wo mein Fehler liegt?

    Kalle



  • Hmm, du speicherst eine Zahl in einer Variable. Was erwartest du denn, was da großartig geschehen soll?

    Bye, TGGC \-/



  • Hallo

    hey TGGC, du hast wohl noch nie mit dem BCB gearbeitet, was?
    MaxValue und Position sind wohl Properties, derren Änderung eine Funktion auslöst. In diesem Fall eben das Neuzeichnen.

    Probier mal nach der Positionszuweisung

    Update();
    

    oder einem

    Application->ProcessMessages();
    

    Dadurch wird das Form neu gezeichnet.

    bis bald
    akari



  • hi,

    mit nem neuzeichnen hat es nicht zu tun. hatte vorher mit nmftp gearbeitet und diesen code genutzt:

    void __fastcall TForm1::FTPoldPacketRecvd(TObject *Sender)
    {
    PBImages->MaxValue = FTP->BytesTotal;
    PBImages->Progress = FTP->BytesRecvd;
    }
    

    damit hatte es wunderbar funktioniert. nur onwork und onwork beginn scheint nicht die richtigen werte bei einem download zu liefern. ich verstehe es einfach nicht.

    kalle



  • Hallo

    mir fällt auf, das in deiner Werteliste zuerst eine 0 auftaucht. Dabei wird deine erste Zeile aber von

    Memo1->Lines->Add(AWorkCountMax);
    

    erstellt. Kann es sein, das der scheinbare Maximalwert 0 ist, und deshalb die Anzeige versagt?

    bis bald
    akari



  • akari schrieb:

    hey TGGC, du hast wohl noch nie mit dem BCB gearbeitet, was?
    MaxValue und Position sind wohl Properties, derren Änderung eine Funktion auslöst. In diesem Fall eben das Neuzeichnen

    Richtig, nur mit Delphi. Bei den Beispielen (Doku hab ich nicht) im Netz wird aber immer manuell neu gezeichnet. Warum?

    Bye, TGGC \-/



  • hi,

    problem ist:

    AWorkCountMax indicates the maximum number of bytes expected for the operation sent to OnWorkBegin, or 0 when the number of bytes not known.

    nur wie kann ich im voraus die größe der datei ermitteln. ftp programme können sowas ja auch.

    kalle



  • Verzeichnis auflisten und Attribute des gewünschten Eintrages auslesen.


Anmelden zum Antworten