Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Label ändert sich nicht (https://www.delphipraxis.net/86170-label-aendert-sich-nicht.html)

delphis spassbremse 10. Feb 2007 12:07


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:

 ..... 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;
Hat jem. ne idee?

MFG

mkinzler 10. Feb 2007 12:09

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:
Application.ProcessMessages;
aufrufen

Christian Seehase 10. Feb 2007 12:10

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.

delphis spassbremse 10. Feb 2007 12:12

Re: Label ändert sich nicht
 
ok danke... werde ich mal probieren...

MrKnogge 10. Feb 2007 12:14

Re: Label ändert sich nicht
 
Benutz statt dem Sleep besser:
Delphi-Quellcode:
procedure Delay(const Milliseconds: DWord);
var
  FirstTickCount: DWord;
begin
  FirstTickCount := GetTickCount;
  while ((GetTickCount - FirstTickCount) < Milliseconds) do
    Application.ProcessMessages;
end;
Gruß

jbg 10. Feb 2007 13:02

Re: Label ändert sich nicht
 
Zitat:

Zitat von MrKnogge
Benutz statt dem Sleep besser:

Und warte im 49. Tag nach dem Systenstart, 49 Tage bis die Schleife beendet ist, da GetTickCount wieder bei 0 anfängt zu zählen. :gruebel:

inherited 10. Feb 2007 13:22

Re: Label ändert sich nicht
 
Wieso? Damit das passiert, muss man schon ziemlich genau den Moment treffen. Das halte ich für sehr unwahrscheinlich.

mkinzler 10. Feb 2007 13:53

Re: Label ändert sich nicht
 
Zitat:

Zitat von inherited
Wieso? Damit das passiert, muss man schon ziemlich genau den Moment treffen. Das halte ich für sehr unwahrscheinlich.

Aber du weist ja, der Teufel ist ein Eichhörnchen

Martin K 10. Feb 2007 14:48

Re: Label ändert sich nicht
 
Hi,
diese Variante funktioniert auch, wenn der 49. Tag überschritten wird:
Delphi-Quellcode:
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;
Anmerkung:
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: DelayDelay


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:36 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