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

TButtonGroup zmiana koloru tła

problemy z funkcjonowaniem bibliotek, komponentów itp.

TButtonGroup zmiana koloru tła

Nowy postprzez Yari27 » sobota, 14 maja 2016, 18:13

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++.
Avatar użytkownika
Yari27
Bladawiec
Bladawiec
 
Posty: 23
Dołączył(a): niedziela, 19 lipca 2015, 20:54
Podziękował : 6
Otrzymał podziękowań: 0
System operacyjny: Windows 7 64bit
Kompilator: C++ Builder XE2 Update4
Gadu Gadu: 10382601
    Windows 7Chrome

Re: TButtonGroup zmiana koloru tła

Nowy postprzez Cyfrowy Baron » niedziela, 15 maja 2016, 09:19

Pokaż kod, który już masz.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows 7Firefox

Re: TButtonGroup zmiana koloru tła

Nowy postprzez Yari27 » niedziela, 15 maja 2016, 12:39

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.
Avatar użytkownika
Yari27
Bladawiec
Bladawiec
 
Posty: 23
Dołączył(a): niedziela, 19 lipca 2015, 20:54
Podziękował : 6
Otrzymał podziękowań: 0
System operacyjny: Windows 7 64bit
Kompilator: C++ Builder XE2 Update4
Gadu Gadu: 10382601
    Windows 7Chrome

Re: TButtonGroup zmiana koloru tła

Nowy postprzez Cyfrowy Baron » niedziela, 15 maja 2016, 13:15

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.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows 7Firefox

Re: TButtonGroup zmiana koloru tła

Nowy postprzez Yari27 » niedziela, 15 maja 2016, 14:46

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 :?:
Avatar użytkownika
Yari27
Bladawiec
Bladawiec
 
Posty: 23
Dołączył(a): niedziela, 19 lipca 2015, 20:54
Podziękował : 6
Otrzymał podziękowań: 0
System operacyjny: Windows 7 64bit
Kompilator: C++ Builder XE2 Update4
Gadu Gadu: 10382601
    Windows 7Chrome

Re: TButtonGroup zmiana koloru tła

Nowy postprzez Cyfrowy Baron » niedziela, 15 maja 2016, 19:25

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.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows 7Firefox


Powrót do Biblioteki i komponenty

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 9 gości

cron