luinily
Messages postés5Date d'inscriptionmercredi 12 août 2009StatutMembreDernière intervention13 août 2009
-
12 août 2009 à 09:40
luinily
Messages postés5Date d'inscriptionmercredi 12 août 2009StatutMembreDernière intervention13 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 ?
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 20136 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
luinily
Messages postés5Date d'inscriptionmercredi 12 août 2009StatutMembreDernière intervention13 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 ?
luinily
Messages postés5Date d'inscriptionmercredi 12 août 2009StatutMembreDernière intervention13 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és5Date d'inscriptionmercredi 12 août 2009StatutMembreDernière intervention13 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.