Delay(1000); ne functione pas?

Résolu
Delphiturbo
Messages postés
68
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
29 juillet 2008
- 2 mai 2008 à 15:48
Delphiturbo
Messages postés
68
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
29 juillet 2008
- 4 mai 2008 à 13:14
Salut

je voudrais faire un Click et une pause de 1seconde :

SetCursorPos(left+50, top+50);
Delay(200); // error ici !

Mais je dois mettere la Function de Delay oubien ?!
Je ne voudrais pas utiliser "Sleep()". Il bloque le programm
je cherche la Function de Delay

4 réponses

Caribensila
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
18
2 mai 2008 à 16:22
Bonjour,

procedure Pause(Laps : Cardinal);
         var Deb,fin : Cardinal;
begin
  Deb := gettickcount;
  Fin  := deb + Laps;
  while Fin>Deb do begin
    Deb := gettickcount;
    Application.ProcessMessages
  end;
end;

Utilisation :  Pause(1000)  => 1 seconde
3
Cirec
Messages postés
3832
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
17 février 2022
48
2 mai 2008 à 16:38
Salut,

il y aussi cela  de Nebula et correction de Cam91 :
[codes/SLEEP-NON-BLOQUANT_12719.aspx Voir ici]
procedure TForm1.Pause2(t: DWORD);
asm
push esi
push edi
mov  esi,edx
call GetTickCount
add  esi,eax
mov  edi,Application
@attente:
   push 1
   call sleep
   mov  eax,edi                                   //ou rien (selon version)
   call TApplication.ProcessMessages //où call [edi].TApplication.ProcessMessages
   call GetTickCount
   cmp  esi,eax
jae @attente
pop  edi
pop  esi
end;

 
@+
Cirec

<hr siz="" />
3
Caribensila
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
18
2 mai 2008 à 17:20
Il y a aussi ça, pour de trèèèès
petits
intervals de temps. Particulièrement utile dans les Threads, où Sleep() donne automatiquement la main à un autre Thread...

procedure Pause3(Laps : int64);  
         var Deb,fin : int64;
begin
  QueryPerformanceCounter(deb);
  Fin := deb + Laps;
  while Fin>Deb do begin
    QueryPerformanceCounter(deb);
    Application.ProcessMessages;  //Facultatif dans un Thread.
  end;
end;

Utilisation :

var Freq : int64;
...
QueryPerformanceFrequency (Freq);
Pause3(Freq); // => 1 seconde.

PS: Tu nous le traduis en assembleur, Cirec?  Moi, je ne connais pas :(
3
Delphiturbo
Messages postés
68
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
29 juillet 2008

4 mai 2008 à 13:14
les 3 Fuctions sont ok :)

merci bien
0