Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: maxt - Maggio 17, 2013, 12:20:11 pm

Titolo: sleep secondi
Inserito da: maxt - Maggio 17, 2013, 12:20:11 pm
come mai se faccio:
edit1.text:='a';
sleep(1000);
edit1.text:='b';

non mi fa vedere la 'a', ma aspetta direttamente e mi fa vedere direttamente la 'b' ?
come faccio per obbligarlo a visualizzare prima a e poi b ?

Titolo: Re:sleep secondi
Inserito da: nomorelogic - Maggio 17, 2013, 01:27:31 pm
perchè il refresh della gui è ottimizzato e viene disegnato tutto insieme, non dopo ogni singola istruzione

per disottimizzarlo (passami il termine :D ) puoi forzare l'esecuzione della coda dei messaggi della tua applicazione
prova:

Codice: [Seleziona]
edit1.text:='a';
Application.ProcessMessages;
sleep(1000);
edit1.text:='b';
Titolo: Re:sleep secondi
Inserito da: maxt - Maggio 17, 2013, 02:11:08 pm
ok
grazie
Titolo: Re:sleep secondi
Inserito da: Microges2000 - Giugno 13, 2013, 12:25:32 pm
Meglio ancora.....
crea una procedura di attesa non bloccante ne sui messaggi di sistema ne sui vari thread tipo questa:

Codice: [Seleziona]
Procedure Delay(MilliSecondi : Integer);
Var
  Max : Integer;
Begin
  Max := Integer(GetTickCount)+MilliSecondi;
  Repeat
      Application.ProcessMessages;
  Until (Integer(GetTickCount) >= Max);
End;