![]() |
Label in einem Form wird nicht aktualisiert (gelöst)
Hallo!
Sitze schon längere Zeit an einem Problem zu dem ich keine Lösung finde. Ich programmiere in Delphi 7 nur gelegentlich, bin also kein Profi! Hier mein Problem: Habe ein Programm, welches nacheinander verschiedene Windows-Consolenbefehle zur Datensicherung im Netzwerk aufruft. Also prinzipiell eine Batch-Datei, aber optisch ansprechender und für "normale" User leichter bedienbar. Die Befehle werden mit einer Funktion für Prozessaufrufe gestartet. Die funktioniert ohne Probleme. Vor dem Prozessaufruf wird ein Label im Formular mit den jeweiligen aktuellen Information aktualisiert. Sehr oft erscheint der Text im Formular aber nicht, er wird nicht aktualisiert und sofort der nächte Befehl abgearbeitet. Das Formular ist FormStyle:=fsStayOnTop gesetzt. Wenn man es zB bei fsNormal während der Laufzeit hervorholt, ist es komplett weiß, arbeitet aber die Befehle korrekt ab. Meine vergeblichen Versuche:
Delphi-Quellcode:
Auch habe ich es mit
procedure DOSBefehl(Befehl:string;MSG:string;Warten:Boolean);
var ProcID: Plongword; begin Form1.Meldung.Caption := MSG; // zB: MSG := 'Netzlaufwerk F: wird verbunden...' Form1.Meldung.Repaint; // Versuch den Text vor dem Prozessaufruf neu zu zeichnen - funktioniert nicht! sleep(1000); // bringt auch nichts ProcID := nil; RunProcess(Befehl, // das ist der Aufruf für externe Programme SW_NORMAL, Warten, // Warten bis ext. Prog. beendet ist oder nicht warten ProcID); end;
Delphi-Quellcode:
probiert - erfolglos.
Form1.Refresh;
Vielleicht könnt Ihr mir einen Tip geben, wie man ganz "normal" sequenziell Befehle abarbeiten kann: 1. Text im Formular schreiben 1. Befehl ausführen 2. Text im Formular schreiben 2. Befehl ausführen usw. Danke für Eure Hilfe! joschidiver [edit=Matze][delphi]-Tags eingefügt. Zukünftig bitte selbst daran denken. MfG, Matze[/edit] |
Re: Label in einem Form wird nicht aktualisiert
Wenn Du nicht gleich mit Threads anfangen willst, kannst Du ein Application.ProcessMessages einschieben.
|
Re: Label in einem Form wird nicht aktualisiert
Danke!
Fuzzt! Danke Matze für den Edit! joschidiver |
Re: Label in einem Form wird nicht aktualisiert (gelöst)
Und noch der Grund für diese Lösung:
.Repaint und .Refresh schicken nur Windowsnachrichten raus, welche sagen "aktualisiere dich mal" aber diese Nachrichten werden (noch) nicht verarbeitet (bei Sleep passiert eh nix, da alles schäft ... schau dir mal ![]() Application.ProcessMessages verarbeitet die Nachrichten (welche sonst erst frühestens nach dem Ende der DOSBefehl-Procedur verarbeitet würde). PS: ein Zuweisen von Text an das .Caption schickt auch schon diese Nachricht raus. |
Re: Label in einem Form wird nicht aktualisiert (gelöst)
Nochmals Danke!
Ja, Sleep ist gänzlich ungeeignet. Aber ich hab eben alles ausprobiert. Mit Delay in der Version mit Application.ProcessMessages schlägt man natürlich 2 Fliegen mit einer Klappe. Aber Dein PS verstehe ich nicht: Zitat:
Objektorientierte Programmierung hat eben nichts mehr zu tun mit der Sequenziellen vor 25 Jahren. |
Re: Label in einem Form wird nicht aktualisiert (gelöst)
Ja, die Nachricht wird verschickt. Dein Problem war einfach, dass das Programm keine "Luft" hatte, die Botschaftswarteschlange abzuarbeiten. Dies wird durch Application.ProcessMessages behoben.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz