cs_orelien
Messages postés137Date d'inscriptiondimanche 7 juillet 2002StatutMembreDernière intervention11 janvier 2009
-
27 juil. 2006 à 14:43
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 2022
-
28 juil. 2006 à 01:14
Bonjour,
Je suis à la recherche d'un moyen pour exécuter une action (lancement d'une procédure en boucle par exemple) lors que je laisse le bouton de la souris enfoncée et lque losque je le relâche, la boucle se termine.
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 27 juil. 2006 à 16:07
Salut,
une autre méthode :
Procedure Test;
Var X : Integer;
Begin x := 0;
Repeat
Form1.Label1.Caption : = IntToStr(X);
Form1.Label1.Refresh;
Inc(X);
Until (GetAsyncKeyState(VK_LBUTTON) And $8000) = 0; // et tant que le bouton gauche est enfoncé on continue
End ;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin If Button = mbLeft Then Test; // on déclanche l'action
end;
cs_orelien
Messages postés137Date d'inscriptiondimanche 7 juillet 2002StatutMembreDernière intervention11 janvier 2009 27 juil. 2006 à 18:19
Juste une autre question :
Toujours par code et en complétant cette façon de procéder, comment serait-il possible de détecter que l'utilisateur maisse sa souris cliqué gauche pendant deux secondes par exemple ?
Ainsi j'aimerais détecter s'il désire faire un défilement de ma nière automatique.
cs_orelien
Messages postés137Date d'inscriptiondimanche 7 juillet 2002StatutMembreDernière intervention11 janvier 2009 27 juil. 2006 à 18:40
C'est presque ça, mais en réalité je souhaitais lancer le défilement auto quand l'utilisateur laisse le bouton enfoncé pendant au moins deux secondes sinon un défilement normal se produit.
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 27 juil. 2006 à 19:01
un peut de réflection t'aurai mené à ceci :
Procedure Test;
Var X : Integer;
Start : DWORD;
Begin x := 0;
Start := GetTickCount;
Repeat
// Défilement Normal
If GetTickCount - Start > 2000 Then
// Défilement Automatique
Until (GetAsyncKeyState(VK_LBUTTON) And $8000) = 0;
End;
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 27 juil. 2006 à 19:03
Une petite correction :
Procedure Test;
Var Start : DWORD;
Begin Start := GetTickCount;
Repeat
// Défilement Normal
If GetTickCount - Start > 2000 Then
// Défilement Automatique
Until (GetAsyncKeyState(VK_LBUTTON) And $8000) = 0;
End;
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 27 juil. 2006 à 20:59
Attention:
Repeat
DoSometing ...
Until (GetAsyncKeyState(VK_LBUTTON) And $8000) = 0;
Ça ne marche pas si tu relaches le bouton et que tu cliques une nouvelle fois n' importe oú en restant enfoncé pendant que le programme execute le code représenté par "something" ...
Je te conseille d' ailleurs d' utiliser application.processMessages; pour pas que ton programme bloque/rame ...
Je suis plus pour la solution de Loda qui marcehrait sur n' importe quelle situation ...
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 28 juil. 2006 à 01:14
@ Mauricio,
Salut, j'ai fait le teste 20 fois de suite et ça à fonctionné 20 fois ???????
20 sur 20 c'est un bon rapport ... non ?
En effet le DoSomething (chez moi) est interne à la procedure (Test) de ce fait dès que le bouton de la souris est relâché l'action est terminé et est prête pour un nouveau cycle.
As-tu au moins essayé le code ?
Et l'utilisation abusive d'Application.ProcessMessages peut provoquer l'effet inverse (ralentissement blocage ...)
@+
Cirec