[resolu] Message clignotant

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

[resolu] Message clignotant

Message par Ar-S »

Salut,

je voudrais faire clignoter un texte 3 fois pour indiquer que l'utilisateur a la dernière version de mon logiciel. j'utilise un simple For/Next mais rien ne se passe, la fenêtre freeze j'usquà la fin du "delay"

#AFFICHE est un StringGadget

Pourquoi cette simple boucle ne fonctionne pas ?

Code : Tout sélectionner

      For i=1 To 3
        SetGadgetText(#AFFICHE,"")
        Delay(1000)
        SetGadgetText(#AFFICHE,"Vous avez déjà la dernière version")
        Delay(1000)
       Next i
    EndIf

:?
Dernière modification par Ar-S le mer. 09/juil./2008 8:42, modifié 1 fois.
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message par wolfjeremy »

Ben si ta mis ça dans ton programme sans utiliser de thread c'est normal que ça freeze... vu que tu met ton programme complet en pause avec les delay :?
Donc il faut que tu utilise un thread pour ta boucle for/next :wink:
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

Ah les thread ! c'est vraiment quelque chose qui me fout dans l'impasse.

Si je passe en procédure mon code :

Code : Tout sélectionner

Procedure Clignote(parametre$)
  
  For i=1 To 3
    SetGadgetText(#AFFICHE,"")
    Delay(1000)
    SetGadgetText(#AFFICHE,parametre$)
    Delay(1000)
  Next i
  
EndProcedure
Comment dois-l'appeler en thread après ??

Si je mets :

Code : Tout sélectionner

     CreateThread(@Clignote(),153)
(le 153 est tiré de l'exemple de la doc mais à quoi sert-il...)
Mon prog se ferme casi illico !
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Le paramètre pour un thread ne peut être qu'une variable de type long.

Ta procédure:

Code : Tout sélectionner

Procedure Clignote(param.l)
 
  For i=1 To 3
    SetGadgetText(#AFFICHE,"")
    Delay(1000)
    SetGadgetText(#AFFICHE, peeks(param))
    Delay(1000)
  Next i
 
EndProcedure
Et le code

Code : Tout sélectionner

CreateThread(@Clignote(),@"Test")
Ca devrait etre fonctionnel.
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

Je teste ça de suite et je file au boulot.
Merci de votre aide.
Je vous confirme que ça marche d'ici ce soir.

----edit-----

ça marche au poil !!
je vais pouvoir me faire vraiment plaisir grace à ça.
Merci encore
Dernière modification par Ar-S le mar. 08/juil./2008 10:06, modifié 1 fois.
Octavius
Messages : 312
Inscription : jeu. 26/juil./2007 12:10

Message par Octavius »

La commande UpdateWindow_(WindowID(#MaFenetre)) permet de forcer la mise à jour de la fenêtre, tu aurais pu l'utiliser avant chaque Delay(1000) et ça aurait fait clignoter ton texte sans avoir recours aux threads, mais ça aurait quand même geler le reste du programme en attendant que ta boucle soit finit (je parle évidemment de ton code initial sur le premier post).
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

Merci pour l'info Octavius, mais j'ai vraiment souvent été bloqué avec les Threads, ça me permet donc d'un peu mieux piger leurs fonctionnement.
:D
Répondre