Bouton à répétition

Résolu
danielator Messages postés 3 Date d'inscription mercredi 28 avril 2004 Statut Membre Dernière intervention 14 novembre 2004 - 12 nov. 2004 à 11:56
danielator Messages postés 3 Date d'inscription mercredi 28 avril 2004 Statut Membre Dernière intervention 14 novembre 2004 - 12 nov. 2004 à 23:39
Comment faire pour obtenir la répétition d'un bouton (TBitBtn ou TSpeedBtn) tant qu'il reste enfoncé ?
En effet l'événement OnClick est envoyé quand on relache la souris. L'événement OnKeyDown n'est envoyé que suite à une action clavier ...
Je cherche un événement "OnBoutonDown" par exemple

Merci

10 réponses

danielator Messages postés 3 Date d'inscription mercredi 28 avril 2004 Statut Membre Dernière intervention 14 novembre 2004
12 nov. 2004 à 23:39
Merci pour les réponses les gars MAIS ....

non

ce que je cherche, c'est faire un bouton comme une touche du clavier :
1) quand on click gauche dessus, il s'enfonce et il agit
2) tant qu'on garde le click gauche enfoncé, le bouton reste enfoncé et l'action se répéte
3) quand on relache le bouton de la souris, le bouton remonte

OK, je viens de vous faire au ralenti ce qu'on fait sans arret !

Mais la difference est que l'événement OnClick des TSpeedButton se déclenche quand on relache le bouton de la souris, c'est à dire quand sa proprité Down est sur FALSE.

J'ai quand même fais quelque-chose d'approchant, mais avec un TBitBtn, qui lui a des événements OnMouseDown et OnMouseUp pour mettre en route un timer, etc
Mais ça deviens très lourd si on veux aussi que ça marche quand on actionne le bouton avec les touches du clavier, par ex qd le bouton à le focus et qu'on appuie sur Espace.
Il faut alors utiliser les OnKeyDown et OnKeyUp et filtrer les Key ...
3
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
12 nov. 2004 à 12:27
Tout d'abord "Bonjour" :)

tu peux utiliser un TSpeedButton avec "GroupIndex" >0 et "AllowAllUp" à true.
Puis quand on clik sur le bouton, il deviens enfoncé, là, tu actives un timer qui va boucler sur une procedure tant ke le bouton est enfoncé.
si on reclic sur le bouton, il devient relevé, le timer dois etre desactivé, la procedure ne boucle plus.

si tu veux tester fais ça :

Cree un nouveau projet, pose sur ta form :
- un TSpeedButton (onglet Additionnel)
- un TMemo (onglet standard)
- un TTimer (onglet system)

dans l'inspecteur de proprietes de ton SpeedButton, mets "Groupindex" à 1 et "AllowAllUp" à true

dans l'evenement "onclick" du bouton mets :
timer1.Enabled := speedbutton1.Down;

dans l'evenement "OnTimer" de ton Timer mets :
memo1.Lines.Add(timetostr(now));

voila ça marche :)
sinon, tu veux utiliser ce systeme pour boucler quoi ??

N'oubliez pas de cliquer sur Réponse acceptée lorsque la réponse vous convient ! ;)

-------------------------------------------
0
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
12 nov. 2004 à 12:34
Ha, je viens de voir ton nombre de messages ici, je me dis que tu dois surement debuter, je vais commenter un peu plus alors :

- timer1.Enabled := speedbutton1.Down;
timer1.enabled est un Boolean (true ou false), speedbutton1.down aussi. En mettant ce code, j'active le timer si le bouton est enfoncé, et il se desactive si il ne l'est plus.
C'est comme si j'avais tapé :
if SpeedButton1.down = true then timer1.enabled := true else timer1.enabled := false;
Mais c'est plus court :)

- memo1.Lines.Add(timetostr(now));
j'ajoute dans mon memo l'heure actuelle (automatikement convertie en String - chaine de caracteres - par la fonction TimerToStr())
c'est ici que tu dois mettre ta procedure qui va se repeter, tu peux y mettre ce que tu veux mais fait attention au temps d'execution de cette procedure, il ne faut pas kelle soit trop longue ! Pour l'exemple j'ai fait simple, precise ce que toi tu cherches, merci

ps : pars defaut le TTimer a une intervalle de 1000ms (1 seconde) si tu veux ke la procedure se repete plus d'une fois par seconde, diminue cette intervalle, 500 pour 2fois, 100 pour dix fois etc

N'oubliez pas de cliquer sur Réponse acceptée lorsque la réponse vous convient ! ;)

-------------------------------------------
0
jinh68 Messages postés 215 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 1 septembre 2006
12 nov. 2004 à 14:52
Juste une précision, le Timer devient peu efficace pour des intervalles trop court, il vaut mieux utiliser l'api Windows...

j!nH
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
12 nov. 2004 à 15:36
tu fais comment avec l'api dis moi :D je sais po ça

N'oubliez pas de cliquer sur Réponse acceptée lorsque la réponse vous convient ! ;)

-------------------------------------------
0
jinh68 Messages postés 215 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 1 septembre 2006
12 nov. 2004 à 16:07
C'et vrai que je pourrai faire un petit tuto là-dessus mais faut que je me rapelle, ca fait un bye que je lai pas utilisé ;).

Enfin un tuto est un grand mot pr un truc si petit....

j!nH
0
jinh68 Messages postés 215 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 1 septembre 2006
12 nov. 2004 à 16:24
En fait, y'a un excellent exemple ici :

ICI

j!nH
0
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
12 nov. 2004 à 16:35
ha ouè qd meme ! il est vrai ke si je mets 10 à mon timer, il ne sera pas precis, j'avais remarqué...
merci pour le lien :D
on merite une "reponse acceptée" non ? lol

N'oubliez pas de cliquer sur Réponse acceptée lorsque la réponse vous convient ! ;)

-------------------------------------------
0
jinh68 Messages postés 215 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 1 septembre 2006
12 nov. 2004 à 16:40
Je crois oui ^^.
j!nH
0
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
12 nov. 2004 à 18:21
HAAAAAAAAAAAAA
mais il pete ce compo ! dsl Kenavo :D je ne connaissais pas ta source mais rien kavec le screen, je vais le DL c obligé !

sinon euh pour la reponse du monsieur qui poste, j'ai raison de faire comme ça non ?
qu'en pensez vous ?

N'oubliez pas de cliquer sur Réponse acceptée lorsque la réponse vous convient ! ;)

-------------------------------------------
0
Rejoignez-nous