Molette de la souris dans une PaintBox ?

Résolu
luinily Messages postés 5 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 13 août 2009 - 12 août 2009 à 09:40
luinily Messages postés 5 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 13 août 2009 - 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.

7 réponses

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 34
13 août 2009 à 09:33
Aprés voici les conclusions :

tu balance une paintbox sur la fiche et tu utilise les evenements OnMouseWheelUp/OnMouseWheelDown de la fiche ...
tout simplement.
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
12 août 2009 à 13:03
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
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 34
13 août 2009 à 03:50
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;
luinily Messages postés 5 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 13 août 2009
13 août 2009 à 06:20
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
luinily Messages postés 5 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 13 août 2009
13 août 2009 à 06:22
ps : je viens de voir le message de f0xi, je regarde ça merci :)

(pas d'édit des messages sur ce forum ?)
luinily Messages postés 5 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 13 août 2009
13 août 2009 à 07:41
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 :/)
luinily Messages postés 5 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 13 août 2009
13 août 2009 à 09:40
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 :)
Rejoignez-nous