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

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    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
    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 confirm�
    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
    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 �m�rite
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 52
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    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 confirm�
    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
    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