Autor Beitrag
ts-d
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25



BeitragVerfasst: Di 26.05.09 07:11 
Ein Statusfenster soll dem User Infos über den aktuellen Stand des Programmfortschritts anzeigen.

Nach Neubelegung von Textelementen und der Progressbar wird das Bild aber nicht aufgefrischt.
Auch wenn ich die Befehle refresh oder repaint ein füge, ändert sich daran nichts - wieso?

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Ergänzung:

Die jeweils neuen Meldungen werden unter Windows im Info-Formular nur dann angezeigt, wenn man alles von Anfang in Ruhe lässt. Wenn das Fenster mal in den Hintergrund gerät, werden die Steuerelemente auf dem Bildschrim nicht mehr aktualisiert!

Kann man das irgendwie vermeinden?
ffgorcky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: Di 26.05.09 08:35 
Du könntest doch zum Beispiel einen Timer nutzen, der einfach immer mal wieder Form1.refresh(); aufruft.
Damit müsste das klappen.
ts-d Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25



BeitragVerfasst: Di 26.05.09 09:28 
Hallo ffgorcky,

danke für den Tipp - weiß nur nicht wie das geht. Ich schau mal, ob ich's hin kriege ...
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 26.05.09 10:48 
Dann musst du auch die Windows Botschaften mit den Zeichenbefehlen abarbeiten lassen.
ausblenden Delphi-Quelltext
1:
Application.ProcessMessages;					
Dadurch veranlasst du die Abarbeitung der Botschaften in der Warteschlange. Das darf natürlich wie die Ausgabe des aktuellen Status nicht zu oft passieren, sonst verlangsamt das die Operation enorm.
ts-d Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25



BeitragVerfasst: Di 26.05.09 11:07 
... o. k. ich mache das nach Öffnen des Progress-Formulars:

ausblenden Delphi-Quelltext
1:
2:
3:
  Dialog_StatusInformation.Show;
  //Delphi-Forum: nötig zur Anzeige Änderungen im Status-Formular
  Application.ProcessMessages;


Das ändert aber nichts an der Tatsache, dass das vom Hauptformular aufgerufene Progress-Formular nicht aktualisiert wird, selbst mit timergesteuerter Aktualisierung:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TMainForm.Timer1Timer(Sender: TObject);
begin

Dialog_StatusInformation.Refresh;
Dialog_StatusInformation.Label_Information.Caption := '..........';
Dialog_StatusInformation.Label_Information.Refresh;
Dialog_StatusInformation.ProgressBar.Refresh;

end;
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 26.05.09 11:30 
user profile iconts-d hat folgendes geschrieben Zum zitierten Posting springen:
... o. k. ich mache das nach Öffnen des Progress-Formulars:
Die Aktualisierung soll ja wohl nicht nur direkt nach der Anzeige passieren, oder?

Und ein Timer wird natürlich nicht aufgerufen, während eine Schleife von dir läuft. Genau durch Application.ProcessMessages löst du ja die Verarbeitung der Botschaften aus. Das sind nicht nur die Zeichenbotschaften sondern auch die Timernachrichten...