Grupowanie przycisków i zdarzeń [Borland C++ 6]


(Bik128) #1

Jak zarządzać dużą ilością przycisków speedbutton?

Chodzi mi o napisanie zdarzenia onClick wspólnego dla tych przycisków.

Jedno zdarzenie dla wszystkich przycisków, ale muszę wiedzieć który przycisk został wciśnięty i wywołał to zdarzenie.

(Albo może da się stworzyć grupę tych przycisków, a potem zarządzać za pomocą porządkowego indeksu.)

Jak to zrobić?

Przycisków jest ponad 100 więc ręczne wpisywanie po prostu odpada.

Liczę na wasze pomysły. :slight_smile:


(Grzegorz Kwiatek) #2
  1. Gdzieś w deklaracji formularza tworzysz tablicę wskazników dla przycisków np. TSpeedButton * SpdButt[10];

  2. Dynamicznie w konstruktorze formularza wypełniasz tablicę i generujesz obiekty

    for(int i=0; i<10; i++) {

    SpdButt[i] = new TSpeedButton(this);

    // tutaj pewnie trochę manewrowania obiektami, np.

    SpdButt[i] -> Top = ....

    SpdButt[i] -> Left = ....

    SpdButt[i] -> Caption = ....

    // przypisujesz też każdemu obiektowy własność Tag, żeby go potem zidentyfikować w funkcji OnClick, np.

    SpdButt[i] -> Tag = i;

    // i przypisujesz zdarzenie OnClick...

    SpdButt[i] -> OnClick = SpeedButton1Click;

    }

  3. Definiujesz funkcję obsługi "OnClick"

    void __fastcall TForm1::SpeedButton1Click(TObject *Sender)

    {

    // trochę to nieporządne, powinieneś pomyśleć o zabezpieczeniu tego rzutowania, mi się nie chce.

    int Tag = dynamic_cast(Sender) -> Tag;

    // i w Tag masz numer SpeedButton który wywołał zdarzenie

    }

I tyle...


(Bik128) #3

No trochę to zaawansowane...ale dziękuję :slight_smile:

Popróbuję z tym i zobaczę co z tego wyjdzie.

Jeszcze raz dzięki.