Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - repaint - refresh
ts-d - Di 26.05.09 07:11
Titel: repaint - refresh
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
Narses: 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 - 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 - 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 - Di 26.05.09 10:48
Dann musst du auch die Windows Botschaften mit den Zeichenbefehlen abarbeiten lassen.
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 - Di 26.05.09 11:07
... o. k. ich mache das nach Öffnen des Progress-Formulars:
Delphi-Quelltext
1: 2: 3:
| Dialog_StatusInformation.Show; Application.ProcessMessages; |
Das ändert aber nichts an der Tatsache, dass das vom Hauptformular aufgerufene Progress-Formular nicht aktualisiert wird, selbst mit timergesteuerter Aktualisierung:
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 - Di 26.05.09 11:30
ts-d hat folgendes geschrieben : |
... 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...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!