Créer une temporisation [Résolu]

ced55957 110 Messages postés dimanche 2 mars 2003Date d'inscription 19 juin 2012 Dernière intervention - 20 févr. 2005 à 21:16 - Dernière réponse : rozg 8 Messages postés vendredi 12 décembre 2008Date d'inscription 11 juin 2014 Dernière intervention
- 10 sept. 2009 à 15:09
bonjour
je voudrais savoir comment fait t'on pour créer une tempo avec un Tedit(ou on mais la valeur en seconde) un Timer un bouton et un label
Sachant que :
quand on mais par exemple 10seconde dans le Tedit et qu'on appuye sur le button le label s'affiche pendant 10 seconde et au bout de 10 seconde le label disparait

Je vous remercie d'avance pour m'aider!!
Afficher la suite 

3 réponses

Répondre au sujet
retaks666 289 Messages postés jeudi 2 janvier 2003Date d'inscription 16 juillet 2007 Dernière intervention - 20 févr. 2005 à 22:18
+3
Utile
dans le form create, ou dans l'éditeur de form, tu mets ton la propriété enabled de ton timer false.

ensuite pour faire apparaître fait comme ça :p

label1.visible := true;

timer1.interval := strtoint(Edit1.text);

timer1.enabled := true;



et dans le timer:



procedure TForm1.Timer1Timer(Sender: TObject);

begin

label1.visible := false;

timer1.Enabled := false;

end;



voila!
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de retaks666
rozg 8 Messages postés vendredi 12 décembre 2008Date d'inscription 11 juin 2014 Dernière intervention - 10 sept. 2009 à 15:09
+1
Utile
Il y a une solution un peu plus complexe mais qui offre beaucoup plus de souplesse dans certains cas.

1/ Tu crée une procédure et un Thread de préférence dans une unité séparée :
INTERFACE
USES WINDOWS;
PROCEDURE PostDelayedMessage(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM; delais: LONGWORD);

implementation

USES Classes;

TYPE
Thdelais = class(TThread)
private
FHw: THandle;
FMsg: UINT;
FwParam: WPARAM;
FlParam:LPARAM;
Fdelais: LONGWORD;
protected
procedure Execute; override;
public
end;

PROCEDURE PostDelayedMessage(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM; delais: LONGWORD);
VAR t: ThDelais;
BEGIN
t:=ThDelais.Create(TRUE); // On créé le Thread à l'état suspendu
WITH t DO BEGIN
FreeOnTerminate:=TRUE; // Pour qu'il s'autodétruise à la fin
FHw:=hWnd; // La fenêtre de destination du message
FMsg:=Msg; // Le message à envoyer
FwParam:=wParam; FlParam:=lParam; // Paramètres facultatifs
Fdelais:=delais; // Le délais d'attente
Resume; // Ceci lance le Thread (-> sa procédure Execute)
END;
END;

{ Thdelais }

procedure Thdelais.Execute;
begin
Sleep(fDelais); // Le Tread va dormir pendant la durée voulue
// Puis il enverra le message voulu à la fenêtre voulue.
PostMessage(FhW,FMsg,FwParam,FlParam);
Terminate; // Il se termine et s'autodétruit
end;


2/ Ensuite tu utilise cela dans ta forme (principale ou non) comme ceci

INTERFACE

CONST WM_TEMPO = WM_APP+$01; // Message de temporisation

type
TFMain = Class(TForm)
....
private
PROCEDURE WMTempo(var msg: TMessage); MESSAGE WM_TEMPO;
....
public
PROCEDURE QuiFaitApparaitreLeLabel;
end;

IMPLEMENTATION

PROCEDURE TFMain.QuiFaitApparaitreLeLabel;
BEGIN
...
Label1.visible:=TRUE;
PostDelayedMessage(self.handle,WM_TEMPO,0,0,500);
.... // On peu faire autre chose, le label s'éteindra au bout de 500 ms
.....
END;

PROCEDURE TFmain.WMTempo(var msg: TMessage);
BEGIN
Label1.visible:=FALSE;
END;


Le premier avantage c'est que l'on peu continuer l'exécution après avoir poster la tempo d'extinction du label.
Le second avantage est que ça ne consomme que très peu de ressources.
Le troisième c'est que l'on peu demander l'envoi différé de n'importe quel message, y compris donc des messages Windows comme de fermer une fiche etc...
Commenter la réponse de rozg
dugy 1 Messages postés mardi 16 juin 2009Date d'inscription 9 septembre 2009 Dernière intervention - 9 sept. 2009 à 20:21
0
Utile
bjr
jai essayer de créer une fonction de temporisation.
et je l"utiliz dan mes programs
private sub retard(temps as integer)
debut = timer
while timer < debut + temps
wend
lorsq j"en ai besoin par expl pour 10s; retard(10) et sa marche..
Commenter la réponse de dugy

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.