kolor i TPanel

dział ogólny

kolor i TPanel

Nowy postprzez seweryn » czwartek, 1 października 2009, 17:55

W moim programie tworzÄ™ dynamicznie egzemplarz klasy TPanel:
Kod: Zaznacz cały
panel = new TPanel(this);
panel->Parent=Form1;
...

Na tym panelu tworzę jeszcze egzemplarz klasy TLabel. W programie, w zależności od stanu CheckBox'a, zmieniam kolor czcionki etykiety i kolor panela. U mnie gdzie mam zainstalowany C++ builder wszytko jest ok.
Panel raz jest siwy a raz zielony. Label odpowiednio czarny lub biały.
Gdy uruchomię program u kolegi, gdzie jest czysty Win, kolor labela zmienia się ale Panel już pozostaje w tym samy kolorze(jest jaśniejszy siwy).
Miał ktoś problem z takim czymś?
Avatar użytkownika
seweryn
Bladawiec
Bladawiec
 
Posty: 33
Dołączył(a): sobota, 11 lipca 2009, 10:42
PodziÄ™kowaÅ‚ : 1
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
Kompilator: C++ Builder 2010
    NieznanyNieznana

Re: kolor i TPanel

Nowy postprzez Cyfrowy Baron » czwartek, 1 października 2009, 19:34

Trudno powiedzieć czemu u Ciebie działa a u kolegi, zakładając, że ty i kolega korzystacie z tych samych systemów operacyjnych. Mam pewne podejrzenia, ale muszę wiedzieć czy w obydwu przypadkach chodzi o Windows XP lub Vista, oraz w jakiej wersji środowiska programujesz.
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
    NieznanyNieznana

Re: kolor i TPanel

Nowy postprzez seweryn » czwartek, 1 października 2009, 21:14

Na obydwóch komputerach jest zainstalowany WinXP SP3. Programuje w C++ builder 2010. Testowałem jeszcze na 3 kompie i to samo co u kumpla. W ogóle kolory u nich są jaśniejsze:
obraz1.JPG

obraz2.JPG
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
Avatar użytkownika
seweryn
Bladawiec
Bladawiec
 
Posty: 33
Dołączył(a): sobota, 11 lipca 2009, 10:42
PodziÄ™kowaÅ‚ : 1
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
Kompilator: C++ Builder 2010
    NieznanyNieznana

Re: kolor i TPanel

Nowy postprzez seweryn » czwartek, 1 października 2009, 21:23

RozwiÄ…zanie:
Kod: Zaznacz cały
panel1->ParentBackground=false;
Avatar użytkownika
seweryn
Bladawiec
Bladawiec
 
Posty: 33
Dołączył(a): sobota, 11 lipca 2009, 10:42
PodziÄ™kowaÅ‚ : 1
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
Kompilator: C++ Builder 2010
    NieznanyNieznana

Re: kolor i TPanel

Nowy postprzez Cyfrowy Baron » czwartek, 1 października 2009, 21:37

Użyj stylu Windows XP, a nie stylu klasycznego Windows. Kolory zależą od ustawień wyglądu. Patrz aplet Ekran. Zauważ że nie tylko tło okna ma inny kolor, ale również pasek tytułowy okna, na pierwszym jest jasno niebieski, a na drugim ciemno niebieski, co wskazuje na to, że na obydwu komputerach wygląd okien systemu ma różne ustawienia.


Jeżeli chcesz zmieniać kolor obiektu typu TPanel to musisz wyłączyć kopiowanie przez tenże Panel tła i koloru:

Kod: Zaznacz cały
panel = new TPanel(this);
panel->Parent=Form1;
panel->ParentBackground = false;
panel->ParentColor = false;


ParentBackgrount = true; -> kopiuje na Panel to co pod Panelem siÄ™ znajduje, kopiuje z "rodzica" Panelu.
ParentColor = false; -> kopiuje kolor z "rodzica" Panelu.

Jeżeli Panel znajduje się na formularzu, to przy ustawieniu ParentColor = true; zawsze skopiuje kolor z formularza, a kolor formularza ma standardowo wartość clBtnFace, czyli żaden konkretny kolor, lecz ten zdefiniowany w systemie.
W Twoim programie Panel kopiuje kolor z obiektu typu TPageControl, gdyż zakładam, ze to co widzę to PageControl.

Zauważ, że na pierwszym obrazku PageControl ma styl systemu Windows XP i co za tym idzie jest jaśniejszy:

pc1.png


na drugim obrazku ma standardowy styl Windows:

pc2.png


Co może oznaczać, ze Ty masz ustawiony niebieski styl Windows XP, a kolega styl standardowy, no i panel ma oczywiście ParentBackground na true gdyż domyślnie Panel zawsze ma zawsze Parentbackground ustawiony na true, a ParentColor na false.
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
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
    NieznanyNieznana

Re: kolor i TPanel

Nowy postprzez seweryn » piÄ…tek, 2 października 2009, 11:40

Jest dokładnie tak jak piszesz. Ja mam ustawione w Właściwości systemu->Zaawansowane->Wydajność->Dopasuj do uzyskania najlepszej wydajności. Kumpel ma natomiast najlepszy wygląd. Zastanawia mnie jeszcze dlaczego u mnie (styl klasyczny) nie musiałem ustawić
Kod: Zaznacz cały
panel1->ParentBackground=false;
i kolor zmieniał się jak chciałem a w stylu XP już nie? Jest jeszcze jedna różnica którą udało mi się zauważyć podczas Debuga. Na tym TTabControl mam jeszcze TPaintBox'a. W stylu XP zdarzenie OnPaint jest wywoływane częściej niż w stylu klasycznym. Np w takiej sytuacji:
Kod: Zaznacz cały
tabControl->Tabs->Clear();

zdażenie OnPaint jest wywoływane w stylu XP a klasycznym już nie.
Avatar użytkownika
seweryn
Bladawiec
Bladawiec
 
Posty: 33
Dołączył(a): sobota, 11 lipca 2009, 10:42
PodziÄ™kowaÅ‚ : 1
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
Kompilator: C++ Builder 2010
    NieznanyNieznana

Re: kolor i TPanel

Nowy postprzez Cyfrowy Baron » piÄ…tek, 2 października 2009, 14:03

Styk klasyczny oparty jest na funkcjach API jeszcze rodem z systemu WindowsXP.
Jeżeli chcesz tworzyć program w stylu klasycznym to musisz wyłączyć w opcjach projektu: Project -> Options -> Application -> odznacz opcję Enable runtime themes i nie dodawaj do programu żadnych manifestów.

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
seweryn
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
    NieznanyNieznana


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przeglÄ…da forum

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