Gambas France BETA


Pas de compte ? Incription

Bouton clignotant

1
AuteurMessages
LanoueC#1 Posté le 17/5/2010 à 22:24:00
Re Bonsoir à tous

Je cherche a réaliser un bouton changeant de couleur comme suit :

Suite à erreur et message infos d'erreur , un bouton x change de couleur
on click sur la fenetre message infos ok
et
tant que l'utilisateur n'a pas cliqué le bouton changeant de couleur, le changement de couleur continue.
pour moi ce bouton est simplement un bouton pour effacer le résultat inscrit dans un label

messages infos ("bla bla")
button.background= color yellow

while le bouton n'est pas cliqué : là est mon souci, en fait je ne sais pas quel évènement ou propriété doit être utilisé
button.background= color red
wait 0.5
button.background= color white
wait 0.5
button.background= color yellow
wait 0.5
wend

j'ai bien essayé en mettant une condition dans le click du bouton mais cela ne fonctionne pas puisque je pense que le processus est toujours sur la fonction d'ou est partie l'erreur déclenchant le changement de couleur

j'espère avoir été assez claire
merci
bonne soirée
LanoueC
spheris#2 Posté le 18/5/2010 à 09:40:00
Lanouec,
dès que tu as une notion de Temps dans ton programme, utilise un Timer.
pour ton programme voici ce que tu dois faire :

dès l'apparition de ton message d'erreur, tu récupères l'erreur par un
CATCH
puis tu démarres un timer par
Timer1.enabled = TRUE

ensuite dans ta fonction timer tu mets :
PUBLIC SUB Timer1_Timer()
select case monbackground
case color.yellow
monbacground.background = red
case color.red
monbacground.background = yellow
end select
END

et au moment ou tu cliques sur ton bouton , tu mets dans button1_click() :
timer1.enabled = false
pour l'utilisation d'un timer voir ici :

http://gambaslinux.eg2.fr/articles.php?lng=fr&pg=31
A+
;)

Lanouec,
je ne sais si cela peut t'aider, mais voici un tuto pour ton appli :
http://gambaslinux.eg2.fr/articles.php?lng=fr&pg=633
;) ;)
gambix#3 Posté le 18/5/2010 à 12:28:00
Faire simple !Lanouec la est toute la différence entre la programmation procédurale et la programmation objet orienté interface comme l'est gambas.

On utilise des timer (ou des thread aussi mais gambas n'est pas encore équipé). En fait virtulellement il y a déja une boucle MainLoop dans chaque appli gambas,
cette boucle sert a vérifier l'état de chaque composant et d'envoyer des evenement au besoin. Un timer c'est ni plus ni mois un drapeau qu'on ajoute a la boucle pour qu'elle génère un evenement selon un delay. C'est ce que tu veut :)... et ce que spheris a proposé.

Si on continue dans ton idée précédente, le problème c'est que ça bloque tout le processus evenementiel de qt... d'ou le crash. (+ une imbrication de wait ...stack overflow ?))


Règle le timer.delay=500
Moins de texte dans une signature c'est agrandir son espace.
spheris#4 Posté le 18/5/2010 à 20:07:00
En fait virtulellement il y a déja une boucle MainLoop

Ca ressemble etrangement à du C/gtk non ?
;)
LanoueC#5 Posté le 18/5/2010 à 20:32:00
Merci à tous les deux
Effectivement avec la solution de sphéris il n'y a plus de problème tout fonctionne bien

Par contre je ne me suis pas servie de catch, j'ai pas réussi et pas compris a quoi cela sert !
Sans le Catch cela fonctionne très bien

Bonne soirée
LanoueC
gambix#6 Posté le 18/5/2010 à 20:44:00
Faire simple !catch sert a déricer ta fonction en cas d'erreur ... le code passe directement au code contenu a sa suite



Public sub masub()

dim s as string
s= load("myfile")

Catch
Print error.text
End


ou


Public sub masub()

dim s as string
try s= load("myfile")
if error then print error.text
end


catch se situ toujour en fin de procedure
Moins de texte dans une signature c'est agrandir son espace.
1