[Composant] Diminution de la visibilité d'une propriété

Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 - 27 sept. 2008 à 20:32
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 - 1 oct. 2008 à 13:34
Bonjour,
je suis en train de faire un composant ('rrahh toujours avec ses composants lui') visuel (pour changer) et j'ai un petit problème.
Mon composant ne doit pas changer de taille (toujours 13x13).
J'arrive à bloquer son redimensionnement, mais je voudrais cacher Width et Height dans l'éditeur de propriétés (en effet, si par exemple on fixe Width à 15, le composant ne changera pas de taille, mais Width affichera 15 dans l'editeur jusqu'au prochain dessin du composant).
J'utilise comme classe ancêtre TGraphicControl.
Donc Width et Height sont Public (ou Published).
Pour les rendre invisible à l'editeur, il faudrait les faire passer en Protected ou Private.

J'ai déjà essayé :

private
...
property Width;
property Height;
...

Mais sans résultat.
Dans l'aide Delphi, il est dit qu'il est déconseillé de réduire la visibilité d'une propriété ou d'une méthode (ce que je fais, car je passe de >= Public à <= Protected ...).

Quelle est la syntaxe à utiliser pour cette manip ?
J'ai tenté override, overload, reintroduce ... sans résultats ...

Bien sûr ce ne sera pas un drame si cette manipulation n'est pas possible, ce sera moins "style" c'est tout :/

Mon beau livre ne m'est d'aucune utilité, il ne précise pas assez la réécriture d'une propriété existante ...

Cordialement, Bacterius !

6 réponses

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
28 sept. 2008 à 02:39
d'ou l'interet de lacher les vieilles versions des IDE delphi.

puisque depuis delphi 2005 on peu reduire la visibilitée des propriétés et methodes sans problemes.

<hr size="2" width="100%" />
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
28 sept. 2008 à 11:28
Je ne sais pas si la version 6 est déjà obsolete ... nez en moins, je n'arrive pas à récupérer le sérial de TurboDelphi (et apparement on ne peut plus installer ses composants dans cette version), et les versions > 6 sont payantes/trial (et je ne veux pas d'un IDE trial).

Sinon f0xi, est-ce possible sans recoder TGraphicControl ?

Cordialement, Bacterius !
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
30 sept. 2008 à 22:09
A mon avis, réduire la visibilité d'une propriété ou d'une méthode serait un non sens total.
J'explique : selon que l'on va utiliser tel ou tel objet dans la hiérarchie des composants, il va falloir constamment se poser la question : à ce niveau, quelle est la portée de cette propriété/méthode ?
Pour pallier ce problème, l'application d'un pattern simple comme l'adaptateur règlera la difficulté.
Rappel d'un principe fondamental : préférez la composition à l'héritage.

May Delphi be with you !
<hr color="#008000" />Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
30 sept. 2008 à 23:52
Bonsoir

Pourquoi ne pas utiliser tout simplement l'existant, c'est à dire la propriété Constraints ?

type
  TGraphiControl1 = class(TGraphicControl)
  published
    property Constraints ;
  end;

En fixant MaxHeight et MinHeight à la même valeur (de même pour MaxWidth et MinWidth) ton composant gardera alors la taille que tu lui auras donné et le changement des valeurs Width et Height seront ineffectives.

Si tu ne veux pas que constraints apparaisse dans l'éditeur, alors tu peux faire quelquechose comme :

type
  TGraphiControl1 = class(TGraphicControl)
  public
    constructor Create(AOwner: TComponent); override;
  end;

et

constructor TGraphiControl1.Create(AOwner: TComponent);
begin
  inherited;
  TControl(Self).Constraints.MaxHeight := 13 ;
  TControl(Self).Constraints.MinHeight := 13 ;
  TControl(Self).Constraints.MaxWidth  := 13 ;
  TControl(Self).Constraints.MinWidth  := 13 ;
end;

P.S. La méthode utilisée ci-dessus pourra être utilisée de la même façon  pour modifier les dimensions de ton composant.

Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
0

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

Posez votre question
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
30 sept. 2008 à 23:56
Ah j'allais oublier, merci encore Bactérius de m'avoir fait rigoler avec ton "nez en moins"  

Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
1 oct. 2008 à 13:34
De rien il faut rire 1 minute par jour ^^
Sinon, je vais essayer les Constraints, c'est une bonne idée pour contourner Width and Height, et de plus Constraints est protected dans TGraphicControl.
Merci pour le tuyau WhiteHippo :)

Cordialement, Bacterius !
0
Rejoignez-nous