Bonjour
Je mets au point un nouveau composant graphique hérité de TPaintBox
Peut-on cacher les propriétés héritées de TControl (Width et Height par exemple) de manière à ce qu'elles n'apparaissent pas dans l'inspecteur d'objet ?
Bonjour
Je mets au point un nouveau composant graphique hérité de TPaintBox
Peut-on cacher les propriétés héritées de TControl (Width et Height par exemple) de manière à ce qu'elles n'apparaissent pas dans l'inspecteur d'objet ?
Choisir, c'est renoncer...
Salut,
Je ne suis pas 100% sûr de la réponse, mais je pense que comme la classe TControl a déclaré ces propriétés en "published", elles apparaîtront de toutes façons dans les propriétés publiées par le composant.
Ce sont quelles propriétés qui te gênent? vraiment Width et Height?
*LeGEC*
je ne pense pas non plus que tu puisse. par contre, tu peux surcharger SetBounds si tu veux forcer une des valeurs
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override; ... procedure TMonCompo.SetBounds(ALeft, ATop, AWidth, AHeight: Integer); begin inherited SetBounds(ALeft, ATop, 50, AHeight); //force la width à 50 end;
SalutOUIEnvoyé par LeGEC
En fait, ce n'est pas vraiment qu'elles me gênent
Mais comme je les définis dans la méthode set d'autres propriétés en fonction de leur valeur (Height en fonction de la hauteur d'un bitmap et Width en fonction du TextWidth d'une caption) du coup elles ne me servent à rien dans l'inspecteur d'objet
Je peux les modifier mais de toute façon leur valeur ne sera pas prise en compte
@guillemouze ton idée est bonne mais ne correspond pas à ce que je veux
Merci qd même
Choisir, c'est renoncer...
De la même manière, tu peux surcharger les méthodes SetWidth et SetHeight -peut-être qu'il faudra que tu redéfinisses les propriétés aussi- pour qu'elles ne fassent rien, ou qu'elles affichent un message d'avertissement en mode design.
Ceci dit, même dans la VCL, il y a plusieurs propriétés -Align et Autosize par exemple- qui font que les propriétés Width et Height ne peuvent plus être modifiées directement.
Ensuite, je ne sais pas dans quel cadre tu comptes utiliser ton composant, mais je te suggèrerais tout de même d'avoir un flag -Autosize m'a l'air tout indiqué- qui te permette de choisir si tu veux que le composant se retaille tout seul ou pas : chez nous, on a plein de composants maison "intelligents" qui recalculent leur taille tout seul, et on perd une bonne partie de notre temps de développement à hacker ces comportements pour arriver à leur faire faire ce que l'on veut vraiment (une vraie plaie est lorsque tu mets de tels composants dans un Panel en Autosize, ou avec des options d'alignement par exemple, va t'amuser à déboguer la chaîne des messages WM_RESIZE après...)
*LeGEC*
Bon j'ai pas tout compris
Dans un cadre totalement confidentiel !Envoyé par LeGEC
Je suis un modeste autodidacte qui code par pur hobby
J'avais pensé effectivement à intercepter toute modification de leur valeur dans l'inspecteur d'objet.... mais là ça dépasse mes compétencesEnvoyé par LeGEC
Je sais comment accéder aux méthodes d'écriture des nouvelles propriétés de mon compo. Comment dois-je faire pour les propriétés natives ?
Choisir, c'est renoncer...
Il ne faut pas se laisser impressionner par des termes comme "surcharger" ou "propriété native" : il suffit de re-définir une méthode SetWidth, et de re-déclarer ta propriété Width :
Même chose pour Height...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 TMonComposant = CLASS(TControl) //mets un autre nom que "SetWidth", pour ne pas avoir de doute sur la méthode que tu appelles dans ton code : le SetWidth de la classe TCOntrol, ou le SetWidth de ta classe à toi... PROCEDURE MonSetWidth( AVal : Integer ); PROPERTY Width : READ GetWidth WRITE MonSetWidth; END; PROCEDURE TMonComposant.MonSetWidth( AVal : Integer ); BEGIN MessageDlg('Pas possible d''assigner Width directement!', mtInformation, [mbOK], 0); END;
Par contre, fais attention, dans le code de TMonComposant, à ne pas écrire "Width := ..." - tu utiliserais ton propre accesseur.
Utilises SetWidth, qui appellera le SetWidth de la classe TControl.
*LeGEC*
Salut LeGEC
Cette déclaration dans le type de mon compo provoque une erreur
Code : Sélectionner tout - Visualiser dans une fenêtre à part PROPERTY Width:Integer READ GetWidth WRITE MonSetWidth;
Mon aide D6 dit[Erreur] SwitchBtn.pas(14): Identificateur de champ ou de méthode attendu
Je pense que c'est la méthode GetWidth qui plante...Vous avez spécifié un identificateur pour une clause read ou write sur une propriété qui n'est pas un champ ou une méthode.
Merci pour ton aide
Choisir, c'est renoncer...
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager