<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[BCB 6 - Fortschrittsbalken]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich habe leider bei der Suche nur zwei unzufriedenstellende Ergebnisse bekommen, also habe ich mir gedacht, ich erstelle für mein Problem einen Thread.</p>
<p>Was will ich machen?<br />
Ich habe ein Programm geschrieben, dass nach einem Klick auf einen Button eine Verbindung zu einem FTP-Server (mittels TNFTP - Komponente) aufbaut, die Verzeichnisnamen mit einem Wert aus der Registry abgleich, ein Verzeichnis öffnet, alle Dateien ausliest und dann alle Dateien in diesem Verzeichnis runterläd.<br />
Visualisiert wird das durch zwei Fortschrittsbalken:<br />
barDatei = Fortschritt der momentan übertragenen Datei<br />
barAll = Gesamtfortschritt</p>
<p>Wo ist das Problem?<br />
Das Programm findet zwei Dateien, die eine ein wenig größer als die andere. Der Download beginnt, beide Balken füllen sich, doch nachdem die Datei fertiggeladen ist und die zweite Datei transfreriert wird, bleibt der Fortschrittsbalken des Gesamtdownloads bei etwas mehr als der Hälfte stehen und füllt sich nicht weiter, während der Dateifortschrittsbalken wieder von vorne anfängt und voll läuft.<br />
Ich möchte aber, das der Gesamtdownloadbalken weiterläuft und erst das Ende erreicht, wenn alle Dateien übertragen wurden (und nicht bei 51 % einfach aufhört).</p>
<p>Unterstützend vielleicht ein wenig Code:<br />
(FTPClient = TNFTP - Komponente)</p>
<p>Wird gestartet, nachdem das FTP-Verzeichnis betreten wurde...<br />
(j = Anzahl der Dateien)</p>
<pre><code class="language-cpp">// Gesamtdateigröße auslesen
        int iTempCount = 0;
        int ibarAllGesamt = 0;
        while(iTempCount &lt;= j)
                {
                ibarAllGesamt = ibarAllGesamt + StrToInt(FTPClient-&gt;FTPDirectoryList-&gt;Size-&gt;Strings[iTempCount]);
                iTempCount++;
                }

        // Länge der Gesamtprogressbar anpassen und diese initialisieren
        barAll-&gt;Visible = true;
        barAll-&gt;Max = ibarAllGesamt;
</code></pre>
<p>ibarAllGesamt hat als Wert bei den beiden Dateien 2352319 - das ist korrekt</p>
<p>Wird ausgeführt, während ein Transfer läuft (hier vermute ich einen Fehler...)</p>
<pre><code class="language-cpp">void __fastcall TFormMain::FTPClientPacketRecvd(TObject *Sender)
{
// Fortschrittsanzeige dynamisch anpassen
barDatei-&gt;Position = FTPClient-&gt;BytesRecvd;
barAll-&gt;Position   = FTPClient-&gt;BytesRecvd;

Label1-&gt;Caption = IntToStr(barAll-&gt;Min);
Label2-&gt;Caption = IntToStr(barAll-&gt;Max);

// Anzeigewerte formatieren (Statt Bytes, KiloBytes)
float fBytesRecvd    = FTPClient-&gt;BytesRecvd/1024;
float fBytesTotal    = FTPClient-&gt;BytesTotal/1024;
float fPos           = barAll-&gt;Position;
float fMax           = barAll-&gt;Max;
float fStatusCurrent = (fPos/fMax)*100;

// Fortschritt im Label anzeigen
lblTransfer-&gt;Caption = FloatToStrF(fBytesRecvd,ffFixed,12,0)+&quot; KB von &quot;+FloatToStrF(fBytesTotal,ffFixed,12,0)+&quot; KB empfangen&quot;;
lblAllDownloadStatus-&gt;Caption = &quot;Gesamtfortschritt: &quot;+FloatToStrF(fStatusCurrent,ffFixed,3,0)+&quot; %&quot;;

}
</code></pre>
<p>Ich glaube ich habe einfach einen Denkfehler bei der Behandlung des Gesamtfortschritts. Das Programm an sich läuft wunderbar, ist halt schon sehr scary, dass es dann an einer Progressbar scheitert ...<br />
Über Hilfe und / oder Tipps wäre ich sehr dankbar. Hat schon Mal so gut geklappt hier im Board.</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/119709/bcb-6-fortschrittsbalken</link><generator>RSS for Node</generator><lastBuildDate>Sat, 25 Jul 2026 09:57:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/119709.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 05 Sep 2005 00:29:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to BCB 6 - Fortschrittsbalken on Mon, 05 Sep 2005 00:29:01 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich habe leider bei der Suche nur zwei unzufriedenstellende Ergebnisse bekommen, also habe ich mir gedacht, ich erstelle für mein Problem einen Thread.</p>
<p>Was will ich machen?<br />
Ich habe ein Programm geschrieben, dass nach einem Klick auf einen Button eine Verbindung zu einem FTP-Server (mittels TNFTP - Komponente) aufbaut, die Verzeichnisnamen mit einem Wert aus der Registry abgleich, ein Verzeichnis öffnet, alle Dateien ausliest und dann alle Dateien in diesem Verzeichnis runterläd.<br />
Visualisiert wird das durch zwei Fortschrittsbalken:<br />
barDatei = Fortschritt der momentan übertragenen Datei<br />
barAll = Gesamtfortschritt</p>
<p>Wo ist das Problem?<br />
Das Programm findet zwei Dateien, die eine ein wenig größer als die andere. Der Download beginnt, beide Balken füllen sich, doch nachdem die Datei fertiggeladen ist und die zweite Datei transfreriert wird, bleibt der Fortschrittsbalken des Gesamtdownloads bei etwas mehr als der Hälfte stehen und füllt sich nicht weiter, während der Dateifortschrittsbalken wieder von vorne anfängt und voll läuft.<br />
Ich möchte aber, das der Gesamtdownloadbalken weiterläuft und erst das Ende erreicht, wenn alle Dateien übertragen wurden (und nicht bei 51 % einfach aufhört).</p>
<p>Unterstützend vielleicht ein wenig Code:<br />
(FTPClient = TNFTP - Komponente)</p>
<p>Wird gestartet, nachdem das FTP-Verzeichnis betreten wurde...<br />
(j = Anzahl der Dateien)</p>
<pre><code class="language-cpp">// Gesamtdateigröße auslesen
        int iTempCount = 0;
        int ibarAllGesamt = 0;
        while(iTempCount &lt;= j)
                {
                ibarAllGesamt = ibarAllGesamt + StrToInt(FTPClient-&gt;FTPDirectoryList-&gt;Size-&gt;Strings[iTempCount]);
                iTempCount++;
                }

        // Länge der Gesamtprogressbar anpassen und diese initialisieren
        barAll-&gt;Visible = true;
        barAll-&gt;Max = ibarAllGesamt;
</code></pre>
<p>ibarAllGesamt hat als Wert bei den beiden Dateien 2352319 - das ist korrekt</p>
<p>Wird ausgeführt, während ein Transfer läuft (hier vermute ich einen Fehler...)</p>
<pre><code class="language-cpp">void __fastcall TFormMain::FTPClientPacketRecvd(TObject *Sender)
{
// Fortschrittsanzeige dynamisch anpassen
barDatei-&gt;Position = FTPClient-&gt;BytesRecvd;
barAll-&gt;Position   = FTPClient-&gt;BytesRecvd;

Label1-&gt;Caption = IntToStr(barAll-&gt;Min);
Label2-&gt;Caption = IntToStr(barAll-&gt;Max);

// Anzeigewerte formatieren (Statt Bytes, KiloBytes)
float fBytesRecvd    = FTPClient-&gt;BytesRecvd/1024;
float fBytesTotal    = FTPClient-&gt;BytesTotal/1024;
float fPos           = barAll-&gt;Position;
float fMax           = barAll-&gt;Max;
float fStatusCurrent = (fPos/fMax)*100;

// Fortschritt im Label anzeigen
lblTransfer-&gt;Caption = FloatToStrF(fBytesRecvd,ffFixed,12,0)+&quot; KB von &quot;+FloatToStrF(fBytesTotal,ffFixed,12,0)+&quot; KB empfangen&quot;;
lblAllDownloadStatus-&gt;Caption = &quot;Gesamtfortschritt: &quot;+FloatToStrF(fStatusCurrent,ffFixed,3,0)+&quot; %&quot;;

}
</code></pre>
<p>Ich glaube ich habe einfach einen Denkfehler bei der Behandlung des Gesamtfortschritts. Das Programm an sich läuft wunderbar, ist halt schon sehr scary, dass es dann an einer Progressbar scheitert ...<br />
Über Hilfe und / oder Tipps wäre ich sehr dankbar. Hat schon Mal so gut geklappt hier im Board.</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/865013</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/865013</guid><dc:creator><![CDATA[Luusah]]></dc:creator><pubDate>Mon, 05 Sep 2005 00:29:01 GMT</pubDate></item><item><title><![CDATA[Reply to BCB 6 - Fortschrittsbalken on Mon, 05 Sep 2005 06:54:14 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Ist doch klar, das der Forstschritt der zweiten Datei nicht angezeigt wird. Du must bei barAll nämnlich nicht einfach den neuen Received-Wert übergeben, sondern zusätzlich noch den Received-Wert der vorhergehenden Dateien draufrechnen. Am besten machst du dir eine Integer-Member (bei mir iOldOverallPosititon), in die du nach Download jeder einzelnen Datei erstmal den Wert in barAll-&gt;Position speicherst. Vor dem Start der ganzen Downloads setzt du den Member natürlich auf 0.<br />
Dann kannst du während des Downloads die Position so bestimmen :</p>
<pre><code class="language-cpp">barDatei-&gt;Position = FTPClient-&gt;BytesRecvd;
barAll-&gt;Position   = iOldOverallPosititon + FTPClient-&gt;BytesRecvd;
</code></pre>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/865088</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/865088</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Mon, 05 Sep 2005 06:54:14 GMT</pubDate></item><item><title><![CDATA[Reply to BCB 6 - Fortschrittsbalken on Mon, 05 Sep 2005 09:23:13 GMT]]></title><description><![CDATA[<p>Hallo akari,</p>
<p>ja, sowas ist mir vorm Schlafengehen auch eingefallen. Vielen Dank für deine Antwort! Ich habe eine globale Integervariable erzeugt und in dem Ereignis &quot;onTransactionStop&quot; die Position von barAll in die Integervariable gespeichert.</p>
<p>Vor dem Downloaden einer Datei wird barAll-&gt;Position auf 0 gesetzt und während der Dateiübertragung (onPacketRecvd) auf Integer+FTPClient-&gt;BytesSent (so wie Du es in deinem Beispiel aufgezeigt hast). Funktioniert wunderbar!</p>
<p>Vielen Dank für die Hilfestellung!</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/865215</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/865215</guid><dc:creator><![CDATA[Luusah]]></dc:creator><pubDate>Mon, 05 Sep 2005 09:23:13 GMT</pubDate></item></channel></rss>