Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Progressbar läuft erst ab dem 2. Durchlauf (https://www.delphipraxis.net/194010-progressbar-laeuft-erst-ab-dem-2-durchlauf.html)

G4schi 5. Okt 2017 15:27


Progressbar läuft erst ab dem 2. Durchlauf
 
Hallo,

ich habe ein Problem mit meiner ProgressBar.
Delphi-Quellcode:
procedure THauptfenster.btn_stringlist_einlesenClick(Sender: TObject);
var StrList1:TStringList;
    i,pb_iZaehler:Integer;
begin
    pb_einlesen.Visible := True;
    pb_einlesen.Max := length(aDaten);
    pb_iZaehler:=0;

    StrList1:=TStringList.Create;
    try
      StrList1.LoadFromFile(Path_to_Messwerte + 'messwerte.csv');
      //Dezimaltrennzeichen wird geändern
      FormatSettings.DecimalSeparator:=',';
      for i:=1 to StrList1.Count -1  do
      begin
          //Delimiter für die StrList1
          StrList1.Delimiter:=#9 ;
          StrList1.StrictDelimiter := True;
          delimited_string(StrList1[i]);

          pb_einlesen.Position := i;
          inc(pb_iZaehler);

          if pb_iZaehler = 15 then
          begin
            pb_iZaehler := 0;
            Application.ProcessMessages;
          end;
        end;
      //Dezimaltrennzeichen wird wieder zurück geändert
      FormatSettings.DecimalSeparator:='.';
    finally
      StrList1.Free;
    end;
    pb_einlesen.Visible := False;
end;
Beim Debuggen bemerke ich, dass pb_einlesen.Position keinen neuen Wert zugewiesen kriegt.
In der Grafik verändert sich auch nichts.
Sollte ich aber stoppen und wieder fortsetzen, verläuft die Wertzuweisung problemlos.
In der Grafik ist die ProgressBar schon durchlaufen, obwohl der Prozess noch andauert.


Woran kann dies liegen?

mensch72 5. Okt 2017 17:48

AW: Progressbar läuft erst ab dem 2. Durchlauf
 
??? warum anfangs:

pb_einlesen.Max := length(aDaten);



=> ??? besser:

pb_einlesen.Max:=StrList1.Count -1;
for i:=1 to StrList1.Count -1 do

Glados 5. Okt 2017 18:31

AW: Progressbar läuft erst ab dem 2. Durchlauf
 
Wenn dann wohl eher
Delphi-Quellcode:
pb_einlesen.Max := StrList1.Count;
Und warum beginnt die for-Schleife bei 1 statt 0?

nahpets 5. Okt 2017 18:49

AW: Progressbar läuft erst ab dem 2. Durchlauf
 
Ist schon ok, wie vorgesehen, CSV-Dateien haben in der Regel in der 1. Teile eine "Überschrift", eine Auflistung der Spalten ...

Von daher ist es ok, wenn man diese Zeile überliest, da sie keine verwertbaren Daten enthält.

Towmuz 5. Okt 2017 19:07

AW: Progressbar läuft erst ab dem 2. Durchlauf
 
Dir wäre wahrscheinlich geholfen, wenn du das in einen Thread packen würdest :)

Glados 5. Okt 2017 19:58

AW: Progressbar läuft erst ab dem 2. Durchlauf
 
Oder das
Delphi-Quellcode:
Application.ProcessMessages;
in jedem Schleifendurchgang aufrufen.

sko1 6. Okt 2017 06:17

AW: Progressbar läuft erst ab dem 2. Durchlauf
 
Da war doch noch so ein "Windows Feature"?

Setz mal erst einen Step weiter und sofort danach zurück

Delphi-Quellcode:
pb_einlesen.Position := i+1;
pb_einlesen.Position := i;
Damit umgehst Du die optische Verzögerung die Windows da reinbringt!

Ciao
Stefan


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