Bloquer l'utilisation de la molette de la souris ? - Delphi/Pascal - Programmation
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...
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...
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
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...
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) ?
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
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.
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...
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
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!
Marsh Posté le 03-07-2002 à 22:56:35
un tournevis ?
Ok je sors
Marsh Posté le 04-07-2002 à 13:23:12
le tournevios ca marche j'ai qu'un cruciforme et faut un plat !!
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
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.
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
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.
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.