Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - ShowModal wird erst nach Schleifendurchlauf angezeigt


SuperCo - Di 21.07.09 14:19
Titel: ShowModal wird erst nach Schleifendurchlauf angezeigt
Hallo zusammen!

Ich habe eine Anwendung die verschieden Geräte ansteuert. Vor dem Programmstart soll geprüft werden ob das System dicht ist. Dazu wird ein Druck angelegt, eine Zeit gewartet, dann wird der Druck ausgelesen und die Differenz berechnet.

Dies Überprüfung möchte ich in einem eigenständigen Fenster laufen lassen, das mit ShowModal aufgerufen wird, da man während der Dichtheitsprüfung keine weiteren Aktionen machen darf.

Eigentlich habe ich das auch soweit hinbekommen, allerdings funktioniert die Anzeige nicht richtig. Während ich auf das erreichen des Soll-Drucks warte, möchte ich den aktuellen Druck in einem Label ausgeben. Dafür habe ich eine Schleife in der Form
repeat
holeDruck
aktualisiereLabel
until DruckOk

Das seltsame: Das Form wird erst angezeigt, wenn die Schleife erfüllt ist.

Ich wäre für jede Hilfe bzw. Idee dankbar.


tia
André


Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Di 21.07.2009 um 15:33


Delete - Di 21.07.09 14:23

Die Quick and Dirty-Lösung: innerhalb der Schleife Application.ProcessMessages aufrufen.
Die saubere Lösung: einen Thread verwenden und mit Synchronize das Neuzeichnen veranlassen.


SuperCo - Di 21.07.09 14:30

user profile iconDeddyH hat folgendes geschrieben Zum zitierten Posting springen:
Die Quick and Dirty-Lösung: innerhalb der Schleife Application.ProcessMessages aufrufen.
Das ist ja das was mich verwundert, Application.ProcessMassages wird in der Schleife aufgerufen.
Muss ich bei evtl. Aufrufen weiterer Schleifen in der Schleife das auch jeweils machen?

user profile iconDeddyH hat folgendes geschrieben Zum zitierten Posting springen:
Die saubere Lösung: einen Thread verwenden und mit Synchronize das Neuzeichnen veranlassen.
Hmm, mit Threads kenne ich mich leider nicht aus und ich bräuchte eine schnelle Lösung.

Danke auf alle Fälle schon mal für die Antwort!

Moderiert von user profile iconNarses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.


Nersgatt - Di 21.07.09 14:38

Wann wird die Schleife denn ausgeführt? Doch hoffentlich nicht im FormCreate des Modalen Forms, oder?


Narses - Di 21.07.09 14:39

Moin und :welcome: im Forum!

Kannst du mal den tatsächlichen Quelltext zeigen, mit dem zu das modale Formular öffnest und den Code, der im modalen Formular ausgeführt wird?

cu
Narses


jaenicke - Di 21.07.09 14:47

Du hast das vermutlich in OnShow geschrieben, da ist das Formular noch nicht angezeigt. Schreibe das einfach in OnActivate und deaktiviere danach OnActivate (z.B. indem du an OnActivate nil zuweist), damit es nicht erneut ausgeführt wird. Oder du schickst dir in OnShow eine Message, und machst das dann in der Botschaftsbehandlung.


SuperCo - Di 21.07.09 15:03

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Du hast das vermutlich in OnShow geschrieben, da ist das Formular noch nicht angezeigt. Schreibe das einfach in OnActivate und deaktiviere danach OnActivate (z.B. indem du an OnActivate nil zuweist), damit es nicht erneut ausgeführt wird. Oder du schickst dir in OnShow eine Message, und machst das dann in der Botschaftsbehandlung.



D A N K E !!!!!!!!

Genau das war's!