![]() |
Label ändert sich nicht
Moinzen... hab nben kleines Prob...
Ich hab mir ein Programm geschrieben, das meine Internetcafesoftware aktualisieren soll... nur hab ich ein problem, dass während dem Updatevorgang sich das Label mit den Updateinfos nicht ändert.. CODE:
Delphi-Quellcode:
Hat jem. ne idee?..... var I: Integer; update2: Tinifile; Label3.Caption := 'Verbinde mit Updateserver'; // Das ändert sich noch sleep(1000); downloadfile('http://'+setting.ReadString('config', 'host', '')+':24888/ricupdate.ricu', 'C:\Windows\ricupdate.ricu'); sleep(1000); Label3.Caption := 'Lade Dateiliste'; // Das nicht mehr update2 := TIniFile.create(ExtractFilePath(ParamStr(0))+ 'ricupdate.ricu'); sleep(1000); update2.ReadSections(filel.Items); pb3.Max := filel.Count; sleep(1000); Label3.Caption := 'Suche Daten'; for I := 0 to form1.filel.Count - 1 do begin Label3.Caption := 'Datei '+inttostr(I)+'/'+inttostr(filel.Count - 1)+' wird geladen'; downloadfile('http://'+setting.ReadString('config', 'host', '')+':24888/'+update2.ReadString('File'+inttostr(I), 'sdat', ''), update2.ReadString('File'+inttostr(I), 'pcdat', '')); pb3.Position := I; sleep(1500); end; Label3.Caption := 'Vorgang wird abgeschlossen'; / Das au nich sleep(5000); ende; // Abschlussfunktion zum registrywert setzen und runtefahren... end; MFG |
Re: Label ändert sich nicht
Dieses Problem haben wir zu Zeit jeden Tag.
1. Sleep ist suboptimal, da es dann Programm komplett schlafen legt. 2. Vor dem Warten (Sleep, delay, ...)
Delphi-Quellcode:
aufrufen
Application.ProcessMessages;
|
Re: Label ändert sich nicht
Moin Björn,
Du musst dem System auch Zeit geben den Inhalt zu aktualisieren. Mit Sleep gibst Du die Rechenzeit die Deinem Thread zusteht sofort ab. Vor dem Sleep könntest Du noch ein Application.ProcessMessages, oder LabelX.Refresh einbauen. |
Re: Label ändert sich nicht
ok danke... werde ich mal probieren...
|
Re: Label ändert sich nicht
Benutz statt dem Sleep besser:
Delphi-Quellcode:
Gruß
procedure Delay(const Milliseconds: DWord);
var FirstTickCount: DWord; begin FirstTickCount := GetTickCount; while ((GetTickCount - FirstTickCount) < Milliseconds) do Application.ProcessMessages; end; |
Re: Label ändert sich nicht
Zitat:
|
Re: Label ändert sich nicht
Wieso? Damit das passiert, muss man schon ziemlich genau den Moment treffen. Das halte ich für sehr unwahrscheinlich.
|
Re: Label ändert sich nicht
Zitat:
|
Re: Label ändert sich nicht
Hi,
diese Variante funktioniert auch, wenn der 49. Tag überschritten wird:
Delphi-Quellcode:
Anmerkung:
procedure Delay(const Milliseconds: Cardinal);
var c: Cardinal; begin c := GetTickCount; while (GetTickCount-Milliseconds < c) and not (Application.Terminated or DelayCanceled) do begin Application.ProcessMessages; Sleep(1); end; end; Eine globale Variable DelayCanceled: Boolean, damit das Delay auch jederzeit (z.B. bei einem Klick auf einen Button) abgebrochen werden kann. Sleep(1); damit das Programm nicht ständig mit 100% CPU-Auslastung läuft. Application.Terminated, damit Delay auch abgebrochen wird, falls man das Programm schließen will. BTW: In der CL sollte sich dazu auch jede Menge finden lassen: ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 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