Event OnMouseEnter dans TBitBtn

Résolu
jderf Messages postés 189 Date d'inscription mercredi 29 décembre 2004 Statut Membre Dernière intervention 2 octobre 2014 - 24 déc. 2009 à 12:05
jderf Messages postés 189 Date d'inscription mercredi 29 décembre 2004 Statut Membre Dernière intervention 2 octobre 2014 - 27 déc. 2009 à 11:45
Bonjour,

Je ne comprend pas pourquoi la property OnMouseEnter n'est pas accesible dans le class TbitBtn alors qu'elle hérite de TControls.
J'ai trouvé des bouts de code qui surcharge la class Tbitbtn afin d'ajouter les évenements OnMouseEnter et OnMouseLeave. Mais cela me chagrine car dans la doc VCL, ci-dessous, la property est déclarée avec la visibilité protected donc visible par les class enfant !?


From Controls.pas

property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
Unit: Controls

Type: event

Visibility: protected

Member Of: TControl



Pourquoi surchargé alors ??

^Merci pour vos réponse et bon Noël.

6 réponses

jderf Messages postés 189 Date d'inscription mercredi 29 décembre 2004 Statut Membre Dernière intervention 2 octobre 2014 1
27 déc. 2009 à 11:45
Oui, oui, accessible pour les class enfants mais pas visible. Je viens de me faire une petit test. Encore merci.

Bonne journée.
3
Utilisateur anonyme
24 déc. 2009 à 17:37
Salut

Simplement parce que TBitBtn hérite de TButton qui lui même n'admet pas cet évènement, qui lui même hérite de TButtonControl qui lui même n'admet pas cet évènement, qui lui même hérite de TWinControl qui lui même n'admet pas cet évènement.
0
Utilisateur anonyme
24 déc. 2009 à 18:03
Pour répondre clairement à ta question :
Protected signifie que cet évènement est accessible dans les classes enfants. Ceci dit accessible n'induit pas obligatoirement qu'il est déclaré dans ces dernières. Ainsi cet évènement est accessible depuis la classe TWinControl mais non déclaré : Bilan tu es obligé de surcharger la classe TBitBtn pour ajouter ces 2 évènements .
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
25 déc. 2009 à 04:02
Dans ce cas-là, tu crée une unité séparée par exemple NewBitBtn.pas, et dedans, tu mets :
type
 TBitBtn = class(Controls.TBitBtn)
 published
  procedure OnMouseEnter;
  procedure OnMouseLeave;
 end;

N'oublie pas d'ajouter cette unité à la clause "uses" de ton application, après l'unité "Controls".

Cordialement, Bacterius !
0

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

Posez votre question
jderf Messages postés 189 Date d'inscription mercredi 29 décembre 2004 Statut Membre Dernière intervention 2 octobre 2014 1
27 déc. 2009 à 10:43
Bonjour,

Merci pour vos réponses. Y'a visiblement un truc qui m'a échappé sur l'héritage. Pour moi une méthode déclarée protected dans une class parent était obligatoirement accessible dans toutes les class enfants.

A+
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
27 déc. 2009 à 10:45
Elle est accessible, mais c'est à toi de la déclarer afin de la rendre visible, en la redéclarant en published.

Cordialement, Bacterius !
0
Rejoignez-nous