[BCB6] Własny komponent CheckBox

0

Utworzyłem sobie klasę mojCheckBox, która definiuje komponent check box składający się z TImage i TLabel. Nie stosuję dziedziczenia. Konstruktor klasy:
mojCheckBox(TWinControl* Owner, TRect obszar, int nr);
parametr: obszar - ograniczenia left, top i right
parametr: nr - nr kolejny komonentu mojCheckBox
Na razie zdarzenia OnClick i OnMouseEnter/Leave są obsługiwane z wnętrza obiektu. Jednak napotkałem na problem przy implementowaniu działania grupy CheckBox jak grupy RadioButton. Nie wiem jak przy zaznaczaniu jednego odznaczyć pozostałe (mam wskaźniki do wszystkich obiektów w tablicy trzymanej w klasie TForm1). Jak uzyskać wskaźnik do obiektu mojCheckBox, który został kliknięty? Wtedy przeglądając tablicę wskaźników do wszystkich obiektów, można zaznaczyć ten kliknięty a odznaczyć resztę.
Sprawdziłem, że parametr (TObject *Sender) w momencie kliknięcia na tekscie mojCheckBox "pochodzi" z klasy TLabel (metoda ClassName klasy TObject). Nie znalazłem metody, która by zwracała wskaźnik lub uchwyt do obiektu, albo mój angielski jest za słaby :-(
Albo idę jakąś okrężną drogą, co mi się czasem zdaża :-D

0

Pewnie gdzieś w klasie mojCheckBox posiadasz wskażnik do tego TLabel, co pozwala na dostęp do Label'a z poziomu CheckBox'a. Aby mieć dostęp w drugą strone tzn od TLabel do mojCheckBox, musisz w momeniecie tworzenia TLabel zapisać w nim adres CheckBoxa, np. w polu Tag Label'a. Wtedy obsługując klikanie na TLabel Sender'em będzie TLabel, a CheckBoxem będzie
(mojCheckBox
) ((TComponent*) Sender->Tag)

Identycznie postępuj z TImage.

A tak w ogóle to radze dziedzczyć po TCustomLabel.

0

Dzięki za pomoc. Działa takie wywołanie:
((mojCheckBox*) (((TComponent*) Sender)->Tag))->odpKlik(Sender);
odpKlik() jest metodą klasy mojCheckBox. Jak widać nawiasów jest dostatek :-D

Zmodyfikowałem kod na dziedziczenie z TLabel i utworzyłem drugą klasę pochodną TImage, która ma dwa nowe zdarzenia OnMouseEnter i OnMouseLeave.
Jeszcze się zastanawiam nad innym rozwiązaniem, ale to nie jest takie straszne.
Są jeszcze jakieś inne pomysły?

1 użytkowników online, w tym zalogowanych: 0, gości: 1