Autor Beitrag
SuperCo
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 21.07.09 15:19 
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
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 21.07.09 15: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 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 21.07.09 15: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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Di 21.07.09 15:38 
Wann wird die Schleife denn ausgeführt? Doch hoffentlich nicht im FormCreate des Modalen Forms, oder?

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 21.07.09 15: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

_________________
There are 10 types of people - those who understand binary and those who don´t.
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 21.07.09 15: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 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 21.07.09 16: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!