Verlaufsanzeige in TForm.Caption scheint zu hängen

Rund um die LCL und andere Komponenten
Antworten
Kay
Beiträge: 134
Registriert: So 14. Nov 2010, 15:17

Verlaufsanzeige in TForm.Caption scheint zu hängen

Beitrag von Kay »

Hallo,

ich habe ein Problem bei der Realisierung einer Verlaufsanzeige.
Also ich möchte Webseiten abrufen, deren URLs in einer Liste eingetragen sind. Die Anzahl kann dabei variieren, es können aber durchaus um die 100 Stück sein.
Der Fortschritt soll in einem separaten Formularfenster angezeigt werden. Zum Abruf nutze ich Indy HTTP.

Hier ein Ausschnitt aus dem Programm:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var
  I, Percent: Integer;
  HtmlText: String;
begin
  Form2.Initialize;
  Form2.Show;
 
  for I := 0 to ListBox1.Items.Count - 1 do
  begin
    Application.ProcessMessages;
 
    try
      HtmlText := IdHTTP1.Get(ListBox1.Items[I]);
    except
      HtmlText := '';
    end;
 
    Percent := Round((I + 1) / ListBox1.Items.Count * 100);
    Form2.SetPercent(Percent);
  end;
 
  Form2.Hide;
end;
 
procedure TForm2.Initialize;
begin
  Caption := '0% abgeschlossen';
end;
 
procedure TForm2.SetPercent(Percent: Integer);
begin
  Caption := IntToStr(Percent) + '% abgeschlossen';
end;
Die abgerufenen Seiten werden dann natürlich noch weiterverarbeitet und Form2 enthält noch weitere Anzeigen. Für das Problem ist das aber nicht weiter wichtig, da ich das sowieso alles erstmal auskommentiert habe. Nur der obenstehende Code ist übrig und der verursacht offensichtlich den Fehler.
Mein Problem ist jetzt, dass zwar die Seitenabrufe einwandfrei funktionieren, die Prozentanzeige in Form2.Caption aber irgendwie zu hängen scheint. Bei 100 URLs müsste ja eigentlich nach jeder abgerufenen Seite der Prozentwert um 1 erhöht werden. Intern geschieht das auch, aber angezeigt wird dann nur jeder 10. oder 15. Wert, d.h. das Ganze läuft nicht flüssig durch. Vielleicht kommt er mit der Aktualisierung der Anzeige nicht hinterher oder es blockiert irgendwo was.

Hab ich eventuell was falsch implementiert oder muss ich noch zusätzlich was einbauen?

Vielen Dank schonmal
Zuletzt geändert von Lori am Fr 29. Nov 2013, 20:16, insgesamt 1-mal geändert.
Grund: Bitte nutze den richtigenHighlighter. Danke!

Benutzeravatar
theo
Beiträge: 10907
Registriert: Mo 11. Sep 2006, 19:01

Re: Verlaufsanzeige in TForm.Caption scheint zu hängen

Beitrag von theo »

Application.Processmessages sollte nach jedem Neusetzen der Caption helfen.

Kay
Beiträge: 134
Registriert: So 14. Nov 2010, 15:17

Re: Verlaufsanzeige in TForm.Caption scheint zu hängen

Beitrag von Kay »

Also einfach die Zeile vom Anfang der Schleife ans Ende verschieben? Das reicht schon? Mit Threads oder sowas muss ich nicht hantieren oder?

Benutzeravatar
theo
Beiträge: 10907
Registriert: Mo 11. Sep 2006, 19:01

Re: Verlaufsanzeige in TForm.Caption scheint zu hängen

Beitrag von theo »

Ach so, sorry. Hatte gar nicht gesehen, dass du das schon drin hattest, wohl weil ich es bei SetPercent erwartet hätte.
Das müsste eigentlich gehen. Wobei es bei Form.Caption vllt. ein bisschen anders funktioniert, da es da mind. bei Linux über den Window Manager geht.
Hast du schon mal getestet, ob es auf einem TLabel auch hakt?

Kay
Beiträge: 134
Registriert: So 14. Nov 2010, 15:17

Re: Verlaufsanzeige in TForm.Caption scheint zu hängen

Beitrag von Kay »

Also, ich hab das Ganze gerade mit TLabel getestet. Dort läuft die Anzeige ziemlich gut durch. Gibt zwar hier und da noch ein paar Hänger, aber das kann natürlich auch an der Auslastung von TIdHTTP liegen. Zumindest bleibt die Anzeige jetzt nicht stehen. Scheint also wahrscheinlich ein Problem von Form.Caption zu sein.

Antworten