CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - TButtonGroup zmiana koloru tła
Strona 1 z 1

TButtonGroup zmiana koloru tła

Nowy postNapisane: sobota, 14 maja 2016, 18:13
przez Yari27
Jak pokolorować tło tego komponentu, widzę tylko zdarzenia do rysowania przycisków, próbowałem w zdarzeniu onCreate formy rysować coś na płótnie tego komponentu ale mi nie wychodzi albo źle coś robię.
Dziwnie zachowuje się pobieranie koloru rodzica tego komponentu, gdy na przykład całej formie dam kolor czerwony to komponent koloruje tylko przyciski od 2 w tym kolorze.

Do rysowania przycisków chciałbym wykorzystać kod z metody OnBeforeDrawButton z tej strony http://blog.csdn.net/akof1314/article/details/6947516 ale nie wiem jak przerobić tą linijkę
KOD cpp:     UKRYJ  
if bdsSelected in State then
na c++.

Re: TButtonGroup zmiana koloru tła

Nowy postNapisane: niedziela, 15 maja 2016, 09:19
przez Cyfrowy Baron
Pokaż kod, który już masz.

Re: TButtonGroup zmiana koloru tła

Nowy postNapisane: niedziela, 15 maja 2016, 12:39
przez Yari27
Trochę jeszcze popróbowałem i mam teraz coś takiego:
KOD cpp:     UKRYJ  
void __fastcall TForm1::ButtonGroup1BeforeDrawButton(TObject *Sender, int Index, TCanvas *Canvas,
                  TRect &Rect, TButtonDrawState State)
{
        //mogło by być tło ale zakrywa wszystkie przyciski oprócz ostatniego
        Canvas->Brush->Color = clBackground;
        TRect R(0,20,ButtonGroup1->Width,180);
        Canvas->FillRect(R);

        //if (State == bdsSelected)//nie działa
        Canvas->Brush->Color = clGreen;//tło pod przyciskami
        //Rect.init(0,0,ButtonGroup1->Width,40);//jest tylko jeden przycisk i pokazuje na nim tekst ostatniego przycisku
        Canvas->FillRect(Rect);//nie działa
}
 

taki efekt:
Obrazek

Próbowałem w BeforeDrawButton zrobić tylko tło a w DrawButton przyciski ale wtedy zdarzenie BeforeDrawButton nie działa.

Re: TButtonGroup zmiana koloru tła

Nowy postNapisane: niedziela, 15 maja 2016, 13:15
przez Cyfrowy Baron
Pokolorowanie samych przycisków jest łatwe:

KOD cpp:     UKRYJ  
void __fastcall TForm1::ButtonGroup1BeforeDrawButton(TObject *Sender, int Index,
          TCanvas *Canvas, TRect &Rect, TButtonDrawState State)
{

  if(State.Contains(bdsSelected) )  // koloruje przycisk zaznaczony
  {
   Canvas->Brush->Color = clGreen;
  }
  else       // koloruje pozostałe przyciski
  {
        Canvas->Brush->Color = clRed;
  }
}


Tła jednak nie da się tak pokolorować, gdyż te zdarzenia tyczą się przycisków, a nie całego obiektu.

Re: TButtonGroup zmiana koloru tła

Nowy postNapisane: niedziela, 15 maja 2016, 14:46
przez Yari27
Dodałem taką linijkę na sam początek i jest prowizoryczne malowanie tła a raczej miejsca gdzie nie ma przycisków, ale gdy nie ma przycisków lub pojawia się scrollbar to już to nie działa :(
KOD cpp:     UKRYJ  
  int wolne = ButtonGroup1->ButtonHeight * ButtonGroup1->Items->Count;
  Canvas->Brush->Color = clBackground;
  TRect R(0,wolne,ButtonGroup1->Width,ButtonGroup1->Height);
  Canvas->FillRect(R);


to wypełnienie w zdarzeniu BeforeDrawButton nic nie robi
KOD cpp:     UKRYJ  
Canvas->FillRect(Rect);

Można jakoś lepiej to tło pomalować, jakaś inna metoda :?:

Re: TButtonGroup zmiana koloru tła

Nowy postNapisane: niedziela, 15 maja 2016, 19:25
przez Cyfrowy Baron
Obiekt nie udostępnia możliwości malowania tła. Próbowałem różnych sposobów, tego który podałeś też, z takim samym efektem. Zdarzenie OnBeforeDrawButton i wszystki pozostałe OnAfterDrawButton i DrawButton tyczą się rysowania przycisków na obiekcie, a nie samego obiektu. Brak zdarzenia pozwalającego malować na samym obiekcie.

Nie da się tego zrobić, ponieważ obiekt ma zhermetyzowany dostęp do tej metody obiektu.