Avatar billede brhino Nybegynder
24. marts 2004 - 14:49 Der er 8 kommentarer og
1 løsning

Arv fra TCheckBox

Hej med jer

Jeg har et problem med at arve fra TCheckBox (BC++ 6.0). Måden jeg gør det på er måske ikke den smarteste, så hvis der findes en anden måde I velkommen til at fortælle.

Nå, men mit problem ligger i min constructor. Jeg ved ikke hvordan den skal se ud. Har prøvet lidt forskelligt, men uden held. Kan nogen fortælle mig hvordan den skal se ud hvis min klasse ser sådan her ud:

#include <StdCtrls.hpp>

class BitBut : public TCheckBox
{
  public:
    __fastcall BitBut();
};

Til orientering er det jeg ønsker at lave, ganske simpelt et antal "knapper" af typen TCheckBox og derefter sætte dem på min TForm. Men som sagt svigter min constructor mig, kan nogen hjælpe ??
Avatar billede segmose Nybegynder
24. marts 2004 - 16:00 #1
Skal du ikke bare kalde sådan?
    __fastcall BitBut() : TCheckBox(???) { };
Avatar billede jpk Nybegynder
24. marts 2004 - 16:21 #2
Nu er jeg ikke BC++ bruger, men er vel ikke nødvendigt at lave en nedarvet klasse bare for at sætte nogle checkboxes på en form..?
Avatar billede brhino Nybegynder
24. marts 2004 - 19:45 #3
@segmose: Det ser ikke ud til at det virke. Eller også gøre jeg noget forkert

@jpk: du har ganske ret mht. at sætte TCheckBox'es på en TForm, men hvis jeg skal sætte lad os sige 32, så vil det være lidt lettere at sætte dem via en løkke.
Avatar billede coldplay Nybegynder
25. marts 2004 - 00:11 #4
*.h:

class TBitBut : public TCheckBox
{
    // constructor
    public:
        virtual __fastcall TBitBut(TComponent *Owner);
};

*.cpp:

TBitBut *BitBut;
//---------------------------------------------------------------------------
__fastcall TBitBut::TBitBut(TComponent *Owner) : TCheckBox(Owner)
{
    // constructor: definition
}
//--------------------------------------------------------
void __fastcall TForm1::Form1Create(TObject *Sender)
{
    BitBut = new TBitBut(this);
    BitBut->Parent = this;
    BitBut->Visible = true;
    BitBut->Checked = true;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Form1Close(TObject *Sender, TCloseAction &Action)
{
    delete BitBut;
}
Avatar billede jpk Nybegynder
25. marts 2004 - 08:07 #5
Jo, men jeg forstår stadig ikke hvad det har med arv at gøre?
Hvis du ikke vil ændre noget i TCheckBox' funktionalitet, kan du så ikke bare gøre sådan:

// I TForm1's klassedefinition
TCheckBox* m_pCheckBox1;

// I implementationsfilen
#define NUM_CHECKBOXES 32

void __fastcall TForm1::Form1Create(TObject* Sender)
{
    m_pCheckBoxes = new TCheckBox[NUM_CHECKBOXES];
    for(int i=0; i<NUM_CHECKBOXES; ++i)
    {
        m_pCheckBoxes[i] = new TCheckBox(this);
        m_pCheckBoxes[i]->Parent = this;
        m_pCheckBoxes[i]->Visible = true;
        m_pCheckBoxes[i]->Checked = true;
    }
}
Avatar billede jpk Nybegynder
25. marts 2004 - 08:08 #6
Det skulle naturligvis være:

// I TForm1's klassedefinition
TCheckBox* m_pCheckBoxes;
Avatar billede coldplay Nybegynder
25. marts 2004 - 12:21 #7
jpk-->

Jeg kan heller ikke se hvad det har med arv at gøre, men nu vil manden have det sådan.

:)
Avatar billede jpk Nybegynder
25. marts 2004 - 12:28 #8
Tja, vil han?
"Måden jeg gør det på er måske ikke den smarteste, så hvis der findes en anden måde I velkommen til at fortælle"...
Avatar billede brhino Nybegynder
25. marts 2004 - 13:16 #9
I har begge helt ret. Det giver ingen mening at oprette en klasse bare for at sætte et vist antal checkboxes på TForm, men det er netop som jpk siger fordi jeg vil give min "nye" checkbox nogle ekstra metoder.

Men mange tak for hjælpen begge to. Det var en stor hjælp :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester