IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants VCL Delphi Discussion :

Nouveau compo masquer propriété Width


Sujet :

Composants VCL Delphi

  1. #1
    Membre confirmé
    Avatar de OutOfRange
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 533
    Points : 474
    Points
    474
    Par défaut Nouveau compo masquer propriété Width
    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...

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 141
    Points : 142
    Points
    142
    Par défaut
    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*

  3. #3
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    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;

  4. #4
    Membre confirmé
    Avatar de OutOfRange
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 533
    Points : 474
    Points
    474
    Par défaut
    Salut
    Citation Envoyé par LeGEC
    Ce sont quelles propriétés qui te gênent? vraiment Width et Height?
    OUI
    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...

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 141
    Points : 142
    Points
    142
    Par défaut
    Citation Envoyé par guillemouze Voir le message
    tu peux surcharger SetBounds si tu veux forcer une des valeurs
    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*

  6. #6
    Membre confirmé
    Avatar de OutOfRange
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 533
    Points : 474
    Points
    474
    Par défaut
    Bon j'ai pas tout compris
    Citation Envoyé par LeGEC
    je ne sais pas dans quel cadre tu comptes utiliser ton composant
    Dans un cadre totalement confidentiel !
    Je suis un modeste autodidacte qui code par pur hobby
    Citation Envoyé par LeGEC
    tu peux surcharger les méthodes SetWidth et SetHeight
    J'avais pensé effectivement à intercepter toute modification de leur valeur dans l'inspecteur d'objet.... mais là ça dépasse mes compétences
    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...

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 141
    Points : 142
    Points
    142
    Par défaut
    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 :

    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;
    Même chose pour Height...

    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*

  8. #8
    Membre confirmé
    Avatar de OutOfRange
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 533
    Points : 474
    Points
    474
    Par défaut
    Salut LeGEC
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        PROPERTY Width:Integer READ GetWidth WRITE MonSetWidth;
    Cette déclaration dans le type de mon compo provoque une erreur
    [Erreur] SwitchBtn.pas(14): Identificateur de champ ou de méthode attendu
    Mon aide D6 dit
    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.
    Je pense que c'est la méthode GetWidth qui plante...

    Merci pour ton aide
    Choisir, c'est renoncer...

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 141
    Points : 142
    Points
    142
    Par défaut
    Citation Envoyé par OutOfRange Voir le message
    Je pense que c'est la méthode GetWidth qui plante...
    Effectivement, je n'ai pas testé le code que j'ai proposé. Peut-être en redéfinissant une méthode GetWidth dans ta classe? qui appellerait bêtement le GetWidth de TControl.
    *LeGEC*

Discussions similaires

  1. masquer propriete width et height d'un usercontrol
    Par medkarim dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 14/10/2008, 10h33
  2. Propriété "width" d'un label
    Par Faladin dans le forum VB.NET
    Réponses: 2
    Dernier message: 29/07/2008, 21h39
  3. Changement de la propriété Width (en l'occurence) après une animation
    Par Marcolinho dans le forum Windows Presentation Foundation
    Réponses: 0
    Dernier message: 29/07/2008, 10h47
  4. propriété width zappée dans un echo php
    Par skyangel20 dans le forum Langage
    Réponses: 2
    Dernier message: 15/10/2007, 11h30
  5. [CSS / FireFox] Balise de lien <A> et propriété width
    Par DemonKN dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 18/08/2005, 10h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo