AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Label in einem Form wird nicht aktualisiert (gelöst)
Thema durchsuchen
Ansicht
Themen-Optionen

Label in einem Form wird nicht aktualisiert (gelöst)

Ein Thema von joschidiver · begonnen am 13. Apr 2010 · letzter Beitrag vom 13. Apr 2010
Antwort Antwort
joschidiver
(Gast)

n/a Beiträge
 
#1

Label in einem Form wird nicht aktualisiert (gelöst)

  Alt 13. Apr 2010, 10:10
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:
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;
Auch habe ich es mit

  Form1.Refresh; probiert - erfolglos.

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]
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#2

Re: Label in einem Form wird nicht aktualisiert

  Alt 13. Apr 2010, 10:17
Wenn Du nicht gleich mit Threads anfangen willst, kannst Du ein Application.ProcessMessages einschieben.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
joschidiver
(Gast)

n/a Beiträge
 
#3

Re: Label in einem Form wird nicht aktualisiert

  Alt 13. Apr 2010, 11:18
Danke!
Fuzzt!
Danke Matze für den Edit!
joschidiver
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#4

Re: Label in einem Form wird nicht aktualisiert (gelöst)

  Alt 13. Apr 2010, 11:27
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 DelayDelay an).

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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
joschidiver
(Gast)

n/a Beiträge
 
#5

Re: Label in einem Form wird nicht aktualisiert (gelöst)

  Alt 13. Apr 2010, 12:53
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:
"ein Zuweisen von Text an das .Caption schickt auch schon diese Nachricht raus."
Soll das heißen, dass zum Zeitpunkt der Zuweisung die Anzeige auch aktualisiert werden sollte? Gerade das hat in meiner Variante nicht funktioniert.

Objektorientierte Programmierung hat eben nichts mehr zu tun mit der Sequenziellen vor 25 Jahren.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#6

Re: Label in einem Form wird nicht aktualisiert (gelöst)

  Alt 13. Apr 2010, 12:56
Ja, die Nachricht wird verschickt. Dein Problem war einfach, dass das Programm keine "Luft" hatte, die Botschaftswarteschlange abzuarbeiten. Dies wird durch Application.ProcessMessages behoben.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz