begin process at 2008 05 16 04:33:50
1 173 215 membres
57 nouveaux aujourd'hui
13 970 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Comment détecter la fin d'activation de la molette ? [ Système / Périphérique ] (geocad)

Comment détecter la fin d'activation de la molette ? le 23/10/2007 11:56:36

geocad
Bonjour,
J'ai une petite appli dévellopée en Delphi 5, dans laquelle je fais un traitement rapide mais provisoire quand on fait rouler la molette de la souris. Pour ça, c'est OK, j'utilise OnMouseWheel(...) Mais le Hic, c'est que je dois faire un traitement plus fin, dès qu' on arrête la manipulation de la molette. Ce serait facile s'il existait un évènement qu'on pourrait appeler "OnMouseWheelStop", mais voilà, j'ai pas trouvé, et je ne sais pas trop comment faire pour détecter la fin de la manip de la molette.
Quelqu'un a-t-il une idée?

Re : Comment détecter la fin d'activation de la molette ? le 24/10/2007 13:25:19

geocad
Ca bouge pas beaucoup ici. Serait-ce à cause de la rentrée???

Re : Comment détecter la fin d'activation de la molette ? le 24/10/2007 22:11:27

Caribensila
Membre Club
Salut,

Tu voudrais faire un événement avec un non-événement, quoi.

Et tu t'étonnes que personne ne bouge?

En fait, quand on fait rouler la molette, l'événement n'arrête pas d'arrêter et de recommencer...


Re : Comment détecter la fin d'activation de la molette ? le 24/10/2007 22:48:37

Caribensila
Membre Club

Essaie ça quand même :

if ssMiddle in Shift then begin
    Repeat
     
//Traitement  rapide
      Application.ProcessMessages;
    until (GetAsyncKeyState(VK_MBUTTON) = 0
);//On teste l'état du bouton gauche.
 
//Traitement fin
  end;


Re : Comment détecter la fin d'activation de la molette ? le 24/10/2007 22:55:01

Caribensila
Membre Club
Bien sûr, il faut presser la molette pendant tout le temps du traitement rapide...

Re : Comment détecter la fin d'activation de la molette ? le 24/10/2007 23:30:50

Caribensila
Membre Club
Oups!
...
... //On teste l'état du bouton central.
...

Mille excuses

Re : Comment détecter la fin d'activation de la molette ? le 24/10/2007 23:43:47

geocad
Mon soi-disant non-évènement, n'appelait pas forcément une non-réponse. Je vais pas dire à ceux qui utilisent mon appli de presser un bouton pour signaler qu'on a fini de tourner la molette! Ca serait de la non-informatique...
En tout cas le besoin que j'ai exprimé existe, et c'est même une solution élégante pour faire certains effets en DAO.

Ma solution: Un timer avec un intervale de 100 milli sec
var WheelOn : boolean = false;
var wheeltime : TDateTime = 0.0;
 
procedure TForme1.FormMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
 
TraitementProvisoireRapide; //
 
WheelOn := true;
Timer1.enabled := true; // Traitement Final dans OnTimer
Handled := true;
end;

procedure TForme1.Timer1Timer(Sender: TObject);
begin
// détection de la fin d'activation de la molette
// pour se substituer à un évènement manquant: "OnMouseWheelStop"
if WheelOn thenbegin WheelOn:=false; wheeltime := Now; exit; end;
 
//ici la molette n'a pas été activée depuis Timer1.interval milli sec
// On se donne un délai supplémentaire pour assurer
if( Now - wheeltime ) >0.0000023thenbegin{200 milli sec (1 s = 0.0000115)}
Timer1.enabled := false;
wheeltime := 0.0;
 
TraitementFinal;
 
end;
end;

 

Qui dit "mieux" ?

Re : Comment détecter la fin d'activation de la molette ? le 25/10/2007 14:25:46

Caribensila
Membre Club

procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState;
                WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
  if ssMiddle in Shift then begin
      Repeat
        
  //...Traitement  rapide...
          Application.ProcessMessages;
      Until (GetAsyncKeyState(VK_MBUTTON) = 0 );
     
//...Traitement final...
  end;
end;


C'est concis, pas de Timer, pas de variables globales...

Qu'est-ce qui ne te plaît pas?
Que l'utilisateur doive appuyer sur la molette centrale?


Re : Comment détecter la fin d'activation de la molette ? le 25/10/2007 18:12:40

geocad
Réponse acceptée !
Ben Oui


Classé sous : fin, traitement, détecter, activation, molette

Participer à cet échange

Appels d'offres

Pub



Snippets en rapport

CalendriCode

Mai 2008
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS