geocad
Messages postés4Date d'inscriptionmardi 23 octobre 2007StatutMembreDernière intervention25 octobre 2007
-
23 oct. 2007 à 11:56
geocad
Messages postés4Date d'inscriptionmardi 23 octobre 2007StatutMembreDernière intervention25 octobre 2007
-
25 oct. 2007 à 18:12
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.
geocad
Messages postés4Date d'inscriptionmardi 23 octobre 2007StatutMembreDernière intervention25 octobre 2007 24 oct. 2007 à 23:43
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;
Caribensila
Messages postés2527Date d'inscriptionjeudi 15 janvier 2004StatutMembreDernière intervention16 octobre 201918 25 oct. 2007 à 14:25
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?