Delphi : Contrôler un CalcEdit avec la roulette de la souris (MousWheel/Edit)

Le composant CalcEdit de la JEDI présente de nombreuse qualités mais ne possède pas d’évènement “OnMouseWheel”,

  • Très utile pour faire “rouler” les valeurs saisie à la souris, sans toucher le clavier.
  • Il est assez facile de détourner évènement “OnMouseWheel” du formulaire pour le diriger vers n’importe quel contrôle.

Le principe est très semblable à celui qui affiche l’ensemble des “HINT” de chaque composant sur un panneau général d’aide au niveau formulaire, à chaque passage de la souris sur un composant


La manip se résume à 3 lignes d’écriture :

Déclarer la Fonction FormMouseWheel

La fonction se déclare dans la section PRIVATE du formulaire

procedure FormMouseWheel(Sender: TObject; 
Shift: TShiftState; 
WheelDelta: Integer; 
MousePos: TPoint;
var Handled: Boolean);

Activer la fonction FormMouseWheel

La fonction s’active au niveau du Form_create, et consiste à rediriger la fonction générale Form.OnMouseWheel vers une routine privée FormMOuseWheel.

 procedure TForm1.FormCreate(Sender: TObject);
    begin
      OnMouseWheel := FormMouseWheel;
    end;

 

Activer la roulette au niveau de chaque composant EDIT

L’activation se fait dans la routine privée unique FormMouseWheel, qui reçoit en paramètre dans WheelDelta la direction de la roulette sous la forme d’un chiffre positif ou négatif (le chiffre dépend du paramétrage Windows de la souris = +120/-120 par défaut),

Il suffit donc de tester si le chiffre et positif ou non pour savoir dans quel sens va la roulette.

A placer sous le {$R *.dfm}

Ici le code gère 3 Mesures

  1. CN
  2. et LCC incrémente/décrémente le compteur au 10° de mm
  3. LCC au mm

Le contrôle ou est la souris est toujours pointé par le formulaire sous le nom générique “ActiveControl”

   procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint;
    var Handled: Boolean);
    begin
      { Placer sur le form create  :
        OnMouseWheel := FormMouseWheel; }

      // Wheeldelta est définit dans les propriétés de la souris
      if WheelDelta > 0 then
        WheelDelta := 1
      else
        WheelDelta := -1;

      if ActiveControl.Name = 'Edit_CN' then
        Edit_CN.Value := Edit_CN.Value + WheelDelta / 10
      else
        if ActiveControl.Name = 'Edit_BIP' then
          Edit_BIP.Value := Edit_BIP.Value + WheelDelta / 10
        else
          if ActiveControl.Name = 'Edit_LCC' then
            Edit_LCC.Value := Edit_LCC.Value + WheelDelta;

    end;
  • L’edit utilisé est le JvCalcEdit JEDI qui accepte dans sa propriété VALUE directement un nombre
  • Pour un EDIT classique (propriété TEXT) , il faut rajouter la double conversion : edit1.text := IntToStr(strToInt(edit1.text) +1);

Laisser un commentaire