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

C++Builder Discussion :

Redéfinition de la méthode SetEnabled


Sujet :

C++Builder

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 164
    Points : 85
    Points
    85
    Par défaut Redéfinition de la méthode SetEnabled
    Bonjour,

    Je suis en cours de création d'un composant héritant de TCustomPanel, composé de plusieurs boutons. J'ai autorisé la propriété "Enabled" au composant, mais quand celui ci est à false, mais bouton ne le sont pas ...
    J'ai essayé de re définir la méthode SetEnabled; mais dans cette re définition, lorsque j'essaye de passer les propriétés "Enabled" de mes boutons à "value", mon composant se construit et s'installe correctement.
    Par contre, dès que je le place sur une fiche, j'ai un gros message d'insulte : RAD Studio a cessé de fonctionner ... et hop le RAD se ferme ...

    Si vous avez déjà réalisé ce genre de chose, merci pour vos retours d'expérience,

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 164
    Points : 85
    Points
    85
    Par défaut
    Bon,

    J'ai changé de fusil d'épaule, et j'ai créé ma propre propriété "MyComponentEnabled", et je gère moi même l'activité des différents boutons + l'activité de la classe parente ...
    Mais bon, j'aimerais bien savoir si quelqu'un d'entre vous à déjà réussi à surcharger une propriété "existante" d'un composant de la VCL sous C++ Builder ou même Delphi. C'est une question ouverte, et si oui, quelle est la meilleure procédure à suivre. Je pense que cette question peut être utile à l'ensemble de la communauté.

    Merci par avance,

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Points : 578
    Points
    578
    Par défaut
    Hello,

    Je viens d'essayer ceci:

    .h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    //---------------------------------------------------------------------------
     
    #ifndef MyPanelH
    #define MyPanelH
    //---------------------------------------------------------------------------
    #include <SysUtils.hpp>
    #include <Classes.hpp>
    #include <Vcl.Controls.hpp>
    #include <Vcl.ExtCtrls.hpp>
    //---------------------------------------------------------------------------
    class PACKAGE TMyPanel : public TCustomPanel
    {
    private:
    protected:
      bool __fastcall GetEnabled(void);
      void __fastcall SetEnabled(bool enabled);
     
    public:
     
      __fastcall TMyPanel(TComponent* Owner);
     
    __published:
     
      __property Caption;
      __property bool Enabled = {read = GetEnabled, write = SetEnabled};
    };
    //---------------------------------------------------------------------------
    #endif
    .cpp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    //---------------------------------------------------------------------------
     
    #include <vcl.h>
     
    #pragma hdrstop
     
    #include "MyPanel.h"
    #pragma package(smart_init)
    //---------------------------------------------------------------------------
    // ValidCtrCheck est utilisée pour garantir que les composants créés n'ont pas
    // de fonctions virtuelles pures.
    //
     
    static inline void ValidCtrCheck(TMyPanel *)
    {
      new TMyPanel(NULL);
    }
    //---------------------------------------------------------------------------
    __fastcall TMyPanel::TMyPanel(TComponent* Owner)
      : TCustomPanel(Owner)
    {
    }
     
    bool __fastcall TMyPanel::GetEnabled(void)
    {
      return TCustomPanel::Enabled;
     
    }
    void __fastcall TMyPanel::SetEnabled(bool enabled)
    {
      if (enabled)
        Caption = "Enabled";
      else
        Caption = "Disabled";
     
      for (int i=0; i<ControlCount; i++)
      {
        TButton* pBouton = dynamic_cast<TButton*>(Controls[i]);
        if (pBouton != NULL)
        {
          pBouton->Enabled = enabled;
          pBouton->Caption = enabled ? "Bouton Enabled" : "Bouton Disabled";
        }
      }
      TCustomPanel::SetEnabled(enabled);
     
    }
     
    //---------------------------------------------------------------------------
    namespace Mypanel
    {
      void __fastcall PACKAGE Register()
      {
         TComponentClass classes[1] = {__classid(TMyPanel)};
         RegisterComponents(L"Samples", classes, 0);
      }
    }
    //---------------------------------------------------------------------------
    Dans une appli qui utilise le composant, je pose des boutons dans le TMyPanel, et un autre bouton en dehors.
    Le code de ce bouton:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void __fastcall TForm76::Button2Click(TObject *Sender)
    {
      MyPanel1->Enabled = !MyPanel1->Enabled;
    }
    Quand on clique sur ce bouton, le MyPanel1 est désactivé/réactivé, son Caption est modifié, et idem pour les boutons qu'il contient.

    Comment est-ce que tu créais tes boutons ? Tu leur mettais bien ton descendant de TCustomPanel comme Parent ??

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 164
    Points : 85
    Points
    85
    Par défaut
    Tout d'abord merci pour le retour,

    Effectivement, j'ai fait la même genre de code, sauf évidemment que j'ai mis les boutons dans la partie "private" de ma classe héritant de TCustomPanel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    private:
    	TButton *btn1;
    Dans le constructeur de ma nouvelle classe, je met le code pour un seul bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	// Boutons 
    	btn1 = new TButton(this);
    	btn1->Left = 5;
    	btn1->Top = 5;
    	btn1->Width = 55;
    	btn1->Height = 55;
    	btn1->Caption = "";
    	btn1->Enabled = true;
    	btn1->OnClick = btn1Click;
    	btn1->Tag = 0;
    	btn1->Parent = this;
    Le reste était identique à ton code ... à part le type de retour "bool" à la propriété Enabled, je n'en avais pas mis ...

    Je vais retenter, et je vous tiens au courant,

    Merci,

Discussions similaires

  1. Redéfinition de la méthode Render et postback
    Par eGmBe dans le forum ASP.NET
    Réponses: 7
    Dernier message: 19/03/2010, 10h19
  2. [XML] Redéfinition d'une méthode de minidom
    Par Rupella dans le forum Général Python
    Réponses: 3
    Dernier message: 23/09/2009, 15h43
  3. Redéfinition d'une méthode de QComboBox
    Par gassi64 dans le forum Qt
    Réponses: 8
    Dernier message: 16/07/2009, 13h41
  4. Réponses: 4
    Dernier message: 25/03/2009, 15h18
  5. [Héritage] Redéfinition méthode
    Par petit-ourson dans le forum Langage
    Réponses: 9
    Dernier message: 06/05/2004, 16h06

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