Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1452 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Bloquer l'utilisation de la molette de la souris ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Bloquer l'utilisation de la molette de la souris ?

n°170726
3Phach4
...
Posté le 03-07-2002 à 18:21:20  profilanswer
 

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.

mood
Publicité
Posté le 03-07-2002 à 18:21:20  profilanswer
 

n°170730
JWhy
je peux plier (héhé)
Posté le 03-07-2002 à 18:41:24  profilanswer
 

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
n°170731
JWhy
je peux plier (héhé)
Posté le 03-07-2002 à 18:46:35  profilanswer
 

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
n°170738
3Phach4
...
Posté le 03-07-2002 à 19:29:37  profilanswer
 

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

n°170742
3Phach4
...
Posté le 03-07-2002 à 19:36:24  profilanswer
 

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...

n°170745
antp
Super Administrateur
Champion des excuses bidons
Posté le 03-07-2002 à 19:40:36  profilanswer
 

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
n°170746
3Phach4
...
Posté le 03-07-2002 à 19:48:17  profilanswer
 

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  

n°170747
3Phach4
...
Posté le 03-07-2002 à 19:52:33  profilanswer
 

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
n°170750
JWhy
je peux plier (héhé)
Posté le 03-07-2002 à 20:00:31  profilanswer
 

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
n°170754
antp
Super Administrateur
Champion des excuses bidons
Posté le 03-07-2002 à 20:15:22  profilanswer
 

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
mood
Publicité
Posté le 03-07-2002 à 20:15:22  profilanswer
 

n°170755
3Phach4
...
Posté le 03-07-2002 à 20:22:12  profilanswer
 

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!

n°170786
[SDF]Poire
Vive Grumly
Posté le 03-07-2002 à 22:56:35  profilanswer
 

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:
n°171098
3Phach4
...
Posté le 04-07-2002 à 13:23:12  profilanswer
 

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

n°171117
3Phach4
...
Posté le 04-07-2002 à 13:31:28  profilanswer
 

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.

n°171122
[SDF]Poire
Vive Grumly
Posté le 04-07-2002 à 13:34:00  profilanswer
 

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:
n°171126
3Phach4
...
Posté le 04-07-2002 à 13:35:06  profilanswer
 

OK je change ca tout de suite. merci.

n°171145
3Phach4
...
Posté le 04-07-2002 à 13:53:01  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Bloquer l'utilisation de la molette de la souris ?

 

Sujets relatifs
Un code plus compact, utilisation d'interfaces (surement) bloquer le bouton droit uniquement sur une image du site
Detecter le sens de rotation de la mollette de la souris en Javascript[Delphi] Utilisation de ShellExecute !
Utilisation de "SecurityManager"Bloquer une page
Urgent (Aide sur utilisation de PWS)[Java] utilisation de thread
clickage de souris[PHP] Utilisation d'une classe objet en tant que variable globale
Plus de sujets relatifs à : Bloquer l'utilisation de la molette de la souris ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR