Podstawy
24.07.1999
  • Tworzenie kontrolki w czasie pracy programu.

Krok 1:

      Dodaj deklarację wskaźnika do klasy, która będzie zawierała komponent. Ponieważ nie jest on obsługiwany przez IDE, nie umieszczaj deklaracji w sekcji __published.

    class TForm1 : public TForm
    {
        __published:   // IDE-managed Components
        private:       // User declarations
            TButton *OKButton;
        ...

      Teoretycznie, deklaracja wskaźnika nie musi znajdować się w klasie formy na której znajduje się komponent; np. mógłbyś umieścić deklarację przycisku OKButton w klasie TForm1, nawet gdyby znajdował się on (przycisk) na innej formie. Jednakże powinieneś unikać takich praktyk, w celu zachowania przejrzystości kodu.

Krok 2:

      Utwórz kontrolkę i przypisz jej właściwości. Jeżeli chcesz, by kontrolka pojawiła się wraz z formą, umieść kod w konstruktorze formy.

    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
        OKButton = new TButton(this);
        OKButton->Parent  = this;
        OKButton->Caption = "Dynamiczny Przycisk";
        OKButton->SetBounds(10,10,110,25);
    }

Uwaga: Kontrolka nie pojawi się, jeżeli zapomnisz przypisać właściwości Parent.

Uwaga: Dla bardziej dynamicznych kontrolek, będziesz musiał przypisać obsługę zdarzeń w kodzie. To zadanie będzie opisane w innym pytaniu-odpowiedzi. Poniższy przykład pokazuje obsługę zdarzenia OnClick dla przycisku.
    // header file
    class TForm1 : public TForm
    {
        __published:   // IDE-managed Components
        private:       // User declarations
            TButton *OKButton;
            void __fastcall ButtonClick(TObject *Sender);

        ...
        ...

    // source file
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
        OKButton = new TButton(this);
        OKButton->Parent  = this;
        OKButton->Caption = "Dynamiczny przycisk";
        OKButton->SetBounds(10,10,110,25);

        OKButton->OnClick = ButtonClick;
    }

    void __fastcall TForm1::ButtonClick(TObject *Sender)
    {

    }