Bloquer l'utilisation de la molette de la souris ?

Bloquer l'utilisation de la molette de la souris ? - Delphi/Pascal - Programmation

Marsh Posté le 03-07-2002 à 18:21:20    

salut a tous,
 
voila j'ai un composant StringGrid sur une fiche, ce meme composant réagit a un evenement OnClick.
Ma procedure sert a "surligner" toute la ligne selectionnée.
 
Or quand on joue avec la molette de la souris ca incremente un index et ca réagit à l'evenement onClick de ce StringGrid donc ca me produit une erreur "index de liste hors norme".
 
J'ai réussi a contourner en testant la presence de la mouseWheel et en n'executant pas la procedure de surlignage si trouvé. Mais je souhaiterai pourvoir carrement désactiver l'utilisation de la molette afin de faire un truc propre.
J'espere avoir été assez clair... ;-)
 
J'ai recherché sur le net et je n'ai rien trouvé.
 
 
Merci d'avance pour votre aide.

Reply

Marsh Posté le 03-07-2002 à 18:21:20   

Reply

Marsh Posté le 03-07-2002 à 18:41:24    

essaye peut-etre de faire un nouveau composant qui override les 2 procedures de gestion des evenements Up et Down du mousewheel et ne fait rien a la place:
[pascal]
TNoWheelStringGrid = class(TStringGrid)
protected
  function DoMouseWheelDown(Shift: TShiftState; MousePos: TPoint): Boolean; override;
  function DoMouseWheelUp(Shift: TShiftState; MousePos: TPoint): Boolean; override;
end;
 
...
function TNoWheelStringGRid.DoMouseWheelDown(Shift: TShiftState;
  MousePos: TPoint): Boolean;
begin
//
end;
 
function TNoWheelStringGRid.DoMouseWheelUp(Shift: TShiftState;
  MousePos: TPoint): Boolean;
begin
//
end;
 
[/pascal]
 
ca a l'air de marcher avec ma Logitech...


---------------
www.alliancefrancophone.org ... Home is where the heart is
Reply

Marsh Posté le 03-07-2002 à 18:46:35    

oups... j'ai mal lu...
pour desactiver le click, rajoute un override des procedures MouseDown et MouseUp:
 
[pascal]
  TNoWheelStringGrid = class(TStringGrid)
  protected
    function DoMouseWheelDown(Shift: TShiftState; MousePos: TPoint): Boolean; override;
    function DoMouseWheelUp(Shift: TShiftState; MousePos: TPoint): Boolean; override;
    procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
    procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
  end;
 
...
 
 
function TNoWheelStringGRid.DoMouseWheelDown(Shift: TShiftState;
  MousePos: TPoint): Boolean;
begin
//
end;
 
function TNoWheelStringGRid.DoMouseWheelUp(Shift: TShiftState;
  MousePos: TPoint): Boolean;
begin
//
end;
 
procedure TNoWheelStringGrid.MouseDown(Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  // si button = bouton du milieu, ne rien faire
  if button <> mbMiddle then
    inherited;
end;
 
procedure TNoWheelStringGrid.MouseUp(Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  // si button = bouton du milieu, ne rien faire
  if button <> mbMiddle then
    inherited;
end;
[/pascal]
 
qqchose comme ca...


---------------
www.alliancefrancophone.org ... Home is where the heart is
Reply

Marsh Posté le 03-07-2002 à 19:29:37    

merci pour ta reponse je teste ca tout de suite !
 
c'est un truc que j'ai jamais fait " Override " je vais essayer de comprendre un peu comment ca marche (c'est quand meme le but !)  
 
merci

Reply

Marsh Posté le 03-07-2002 à 19:36:24    

juste une question  
 
 
Pascal :
 
   
  TNoWheelStringGrid = class(TStringGrid)
  protected
    function DoMouseWheelDown(Shift: TShiftState; MousePos: TPoint): Boolean; override;
    function DoMouseWheelUp(Shift: TShiftState; MousePos: TPoint): Boolean; override;
  end;
 
ca tu le met ou ?? c'est un truc que j'ai jamais fait...

Reply

Marsh Posté le 03-07-2002 à 19:40:36    

heu ça serait pas plus simple que dans ta procédure de surlignage tu teste si on est dans les bornes (0..nbligne-1) ?


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 03-07-2002 à 19:48:17    

si en effet ! pourquoi j'y ait pas pensé ! lol
 
mais en fait je viens d'essayer mais ca ne fonctionne pas mieux donc l'erreur doit etre ailleurs c'est pas possible !
 
Merci antp et jwhy  

Reply

Marsh Posté le 03-07-2002 à 19:52:33    

pour l'instant voila ce que j'ai :
 
[pascal]if mouse.WheelPresent = false then  
        begin
//On surligne la ligne selectionnée
  myRect.Left := 0;
  myRect.Top := Grid_Commande.Row;
  myRect.Right := 5;
  myRect.Bottom := Grid_Commande.Row;
  Grid_Commande.Selection := myRect;
        end;[/pascal]
 
si j'enleve le test [ mouse.WheelPresent = false ] ca plante, si je vire le surlignage ca marche.


Message édité par !cricri le 03-07-2002 à 19:53:09
Reply

Marsh Posté le 03-07-2002 à 20:00:31    

antp a écrit a écrit :

heu ça serait pas plus simple que dans ta procédure de surlignage tu teste si on est dans les bornes (0..nbligne-1) ?




 
oui c'est sur... ;)
 


---------------
www.alliancefrancophone.org ... Home is where the heart is
Reply

Marsh Posté le 03-07-2002 à 20:15:22    

3Phach4 a écrit a écrit :

pour l'instant voila ce que j'ai :
 
[pascal]if mouse.WheelPresent = false then  
        begin
//On surligne la ligne selectionnée
  myRect.Left := 0;
  myRect.Top := Grid_Commande.Row;
  myRect.Right := 5;
  myRect.Bottom := Grid_Commande.Row;
  Grid_Commande.Selection := myRect;
        end;[/pascal]
 
si j'enleve le test [ mouse.WheelPresent = false ] ca plante, si je vire le surlignage ca marche.




 
[pascal]
try
  myRect.Left := 0;
  myRect.Top := Grid_Commande.Row;
  myRect.Right := 5;
  myRect.Bottom := Grid_Commande.Row;
  Grid_Commande.Selection := myRect;
except
end;
[/pascal]
 
bon c'est pas ce qu'il y a de plus propre, mais ça devrait éviter les problèmes :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 03-07-2002 à 20:15:22   

Reply

Marsh Posté le 03-07-2002 à 20:22:12    

ca ne marche pas ! mais te casse pas la tete je vais laisser comme avant !
 
merci en tout cas ! et merci d'etre toujours present sur le forum Delphi, plus d'une fois tu m'a sorti de la mer*e grace a tes reponses a d'autre post!

Reply

Marsh Posté le 03-07-2002 à 22:56:35    

un tournevis ?
 
Ok je sors
 :hello:


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Marsh Posté le 04-07-2002 à 13:23:12    

le tournevios ca marche j'ai qu'un cruciforme et faut un plat !!
 
 :D  
 
plus serieusement j'ai cherché dans l'aide un peu car je rencotre a nouveau un probleme du meme type et j'ai trouvé ca :
 
 

Généralement, OnClick se produit quand l'utilisateur appuie puis relâche le bouton gauche de la souris alors que le pointeur de la souris est au-dessus du contrôle. Cet événement peut également se produire si :

L'utilisateur sélectionne un élément dans une grille, une arborescence, une liste ou une boîte à options en appuyant sur une touche de direction.

 L'utilisateur appuie sur Espace lorsqu'un bouton ou une case à cocher détient la focalisation.
 L'utilisateur appuie sur Entrée dans une fiche active contenant un bouton par défaut (spécifié par la propriété Default).
 L'utilisateur appuie sur Echap dans une fiche active contenant un bouton d'annulation (spécifié par la propriété Cancel).
 
L'utilisateur appuie sur la touche de raccourci d'un bouton ou d'une case à cocher.  
 La valeur True est affectée à la propriété Checked d'un bouton radio.
 La valeur de la propriété Checked d'une case à cocher est modifiée.
 La méthode Click d'un élément de menu est appelée.
 
Pour une fiche, il se produit un événement OnClick si l'utilisateur clique sur une zone vide de la fiche ou sur un composant désactivé.

 
 
comment eviter que l'evenement OnClick se produise lors de ces actions.
J'ai bien une petite idée c'est sur un evenements OnKeyPress (ou KeyDown) je teste si c'est la touche [fleche vers le haut] (par exemple) et je ne fais rien mais ca reste un peu du bricolage je trouve.
 
Si quelqu'un a une idée ...
 
La ce que je vex faire c'est la chose suivante, toujours sur mon StringGrid, quand le gars clique avec le bouton droit au dessus, un Menu popup s'affiche. Ca fonctionne mais vu que je modifie la propriété Row de ma StringGrid, l'evenement OnClick se produit aussi car j'ai changé de ligne !!
 
c'est assez dur a expliquer... ca m'enerve c'est des details qui font que mon travail n'avance pas...
 
merci pour vos reponses

Reply

Marsh Posté le 04-07-2002 à 13:31:28    

bon les gars ca y est je crois que j'ai trouvé !
 
j'ai tout simplement viré tous les OnClick en rapport avec la StringGrid et je les ai placé dans un OnMouseDown avec test sur bouton gauche !
 
j'espere que ca va fonctionner mais a priori ca a l'air.

Reply

Marsh Posté le 04-07-2002 à 13:34:00    

3Phach4 a écrit a écrit :

bon les gars ca y est je crois que j'ai trouvé !
 
j'ai tout simplement viré tous les OnClick en rapport avec la StringGrid et je les ai placé dans un OnMouseDown avec test sur bouton gauche !
 
j'espere que ca va fonctionner mais a priori ca a l'air.




Met le +tôt sur le OnMouseUp


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Marsh Posté le 04-07-2002 à 13:35:06    

OK je change ca tout de suite. merci.

Reply

Marsh Posté le 04-07-2002 à 13:53:01    

c'est terrible ca fonctionne et ca regle tous mes problemes !!
 
Je suis trop content !  
ouf enfin  !
 
merci les gars.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed