Molette de la souris dans une PaintBox ? [Résolu]

luinily 5 Messages postés mercredi 12 août 2009Date d'inscription 13 août 2009 Dernière intervention - 12 août 2009 à 09:40 - Dernière réponse : luinily 5 Messages postés mercredi 12 août 2009Date d'inscription 13 août 2009 Dernière intervention
- 13 août 2009 à 09:40
Bonjour,

Je voudrais ajouter des fonctionalités a un composant héritant d'une TPaintBox. En fait je voudrais que l'on puisse zoomer à l'aide de la molette de la souris.

Or pour faire ceci j'ai besoin de récupérer les évènements OnMouseWheelDown et OnMouseWheelUp, mais ces derniers, bien que présents dans Tcontrol (TPaintBox hérite de TGraphicControl qui hérite de TControl), ne se retrouvent plus dans la TPaintBox et donc dans ma PaintBox perso.

Je voudrais donc savoir comment faire pour réintroduire ces évenements dans mon composant pour pouvoir ensuite leur associer des méthodes pour zoomer et dezoomer ?

Je vous remercie d'avance pour votre aide.
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 13 août 2009 à 09:33
3
Merci
Aprés voici les conclusions :

tu balance une paintbox sur la fiche et tu utilise les evenements OnMouseWheelUp/OnMouseWheelDown de la fiche ...
tout simplement.

Merci f0xi 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 125 internautes ce mois-ci

Commenter la réponse de f0xi
Guillemouze 1015 Messages postés samedi 25 octobre 2003Date d'inscription 29 août 2013 Dernière intervention - 12 août 2009 à 13:03
0
Merci
il faut que tu override DoMouseWheel / DoMouseWheelUp / DoMouseWheelDown

Quand tu herite un composant, il ne faut pas affecter de methodes aux evenements, il y a tres souvent (tout le temps) un procedure qui permet de faire ton traitement au meme moment, mais laisse l'evenement libre pour l'utilisateur. La plupart du temps, ces procedures ne font qu'appeler l'evenement. Il commencent par "Do", ou par rien, à la place du "On". PAr exemple:
OnMouseWheel -> DoMouseWheel
OnMouseDown -> MouseDown
Commenter la réponse de Guillemouze
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 13 août 2009 à 03:50
0
Merci
TPaintBox -> click droit -> chercher la declaration

TPaintBox = class(TGraphicControl)

TGraphicControl -> click droit -> chercher la declaration

TGraphicControl = class(TControl)

TControl -> click droit -> chercher la declaration


analyser le contenus de TControl, surtout les methodes marquées Virtual/Dynamic, ce sont les methodes que l'on peut overrider.

pour avoir les evenements OnMouseWheel* dans TPaintBox ou composant dérivé :

TNouvellePaintBox = class(TGraphicControl)
{ code TPaintBox copié }
published
property OnMouseWheel;
property OnMouseWheelUp;
property OnMouseWheelDown;
end;
Commenter la réponse de f0xi
luinily 5 Messages postés mercredi 12 août 2009Date d'inscription 13 août 2009 Dernière intervention - 13 août 2009 à 06:20
0
Merci
Merci pour ta réponse.

J'ai bien ajouté les 3 méthodes dans ma PaintBox, en mettant comme implémentation un simple showMessage mais quand je bouge ou clique la molette au dessus de la paintbox (fenêtre ayant le focus évidemment) rien ne se passe.

quand je dis que je voulais les évènements, c'est car ils ne sont pas présents dans l'onglet events de l'inspecteur d'objet.

D'ailleurs si je met la fonction sans le override, il ne me sort pas d'erreur alors qu'il devrait si l'une des classes parentes la comprenaient non ?

Je continue a chercher de mon coté, mais si quelqu'un pouvait m'éclairer, ce serais gentil. :)
Merci
Commenter la réponse de luinily
luinily 5 Messages postés mercredi 12 août 2009Date d'inscription 13 août 2009 Dernière intervention - 13 août 2009 à 06:22
0
Merci
ps : je viens de voir le message de f0xi, je regarde ça merci :)

(pas d'édit des messages sur ce forum ?)
Commenter la réponse de luinily
luinily 5 Messages postés mercredi 12 août 2009Date d'inscription 13 août 2009 Dernière intervention - 13 août 2009 à 07:41
0
Merci
j'ai regardé ce que tu as dit f0xi, en effet je peux forcer l'affichage dans l'inspecteur d'objet en réécrivant les propriétés dans mon composant mais ça me force aussi à redéclarrer la variable évênement qui est dans TControl.
De plus ce composant n'as pas redéclarré dans published les propriétés pour onMouseUp par ex, et elles sont bien présentes. Pourquoi ?

Pour le sans override il me sort bien un warning que je n'avais pas vu en attendant une erreur.

La ou j'en suis c'est que malgré d'avoir overridé les méthodes DoMouseWheel, etc.. il ne se passe rien lorsque je teste.

je donne ici le code d'une des méthodes overridées pour que vous puissiez voir :
function  MaPaintBox.DoMouseWheelUp(Shift: TShiftState; MousePos: TPoint): Boolean;
    begin
    result := inherited DoMouseWheelUp(Shift, MousePos);
    ShowMessage('Up!');
    end;



(c'est embêtant de pas pouvoir éditer les messages, je suis en train de faire une suite de messages :/)
Commenter la réponse de luinily
luinily 5 Messages postés mercredi 12 août 2009Date d'inscription 13 août 2009 Dernière intervention - 13 août 2009 à 09:40
0
Merci
C'est une solution qui irait pour le problème que je veux résoudre là,
mais y'a pas moyen de le faire directement sur la paintbox ? ça permettrais a ceux qui la réutilisent plus tard de pouvoir le faire directement.

Surtout qu'il faut que mon zoom a la molette ne fonctionne que sur la zone de la paintbox (qui ne remplit pas toute la fiche) et ne me fasse pas zoomer non plus quand la paintbox est cachée.

Si on est obligé de passer par un composant contenant la paintbox ça me dérange pas, mais si je pouvais le faire direct sur la paintbox, ça m'arrangerais.

En tout cas merci pour l'aide :)
Commenter la réponse de luinily

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.