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" ?