TabbedNoteBook

0

Cześć

Są komponenty które nie mają ustawienia koloru w Object Inspector np:
TButton czy TabbedNoteBook
więc jakim sposobem mogę sam ustalić kolor tych komponentów ?

Dodam że chce zmieniać kolory w trakcie działania programu np. na clSilver

  1. ustawienie koloru formy na którą kłade te komponenty nic nie pomaga
  2. takie coś też nic nie pomaga:
//w interface
type TZmiany = class(TWinControl)
  public
    property Color;
  end;
//procka....
PROCEDURE ZmianaKoloru;
Begin
 TZmiany(Form1.TabbedNotebook).Color := clSilver;
 TZmiany(Form1.Button1).Color := clSilver;
End; //

Te komponenty zawsze są koloru jaki jest ustawiony w systemie (wygląd okna)
nic nie pomaga :(
Malowałem po Canvasie ale cały komponent ulega zamalowaniu na moment <ort>do pÓÓÓÓki</ort> nie kliknę na nim.

0

Maluj po Canvasie, ale w zdarzeniu OnPaint. Jeśli chodzi o TButton, to użyj TSpeedButtona.

0

Hmmm.. jeszcze inaczej powiem o co chodzi.
Mam na formie komponent TTabbedNotebook.
Kolor jego zakładek jest siwy bo taki jest kolor ustawiony w systemie.
Jedynie można go zmienić wykorzystując okienko systemowe windowsa
Włściwości: Ekran >zakładka wygląd
A ja nie chcę zmieniać koloru systemowego dla całego windowsa tylko zakładki.
Dopowiem że w Delphi odpowiednik tego koloru zawarty jest w zmiennej clBtnFace.
I z takiej zmiennej clBtnFace TTabbedNotebook pobiera kolor.

Więc jak tu się dobrać do tej zmiennej ? i ustawić dla niej kolor.
To co poradziłeś nic nie dało :(
po pierwsze nie ma zdarzenia onPaint dla TTabbedNotebook a w zdarzeniu dla formy nic sie nie dzieje.
Zresztą malując te zakładki (z innej procedury) zamalowywane zostaje dosłownie
wszystko (napisy na zakładkach i obramowania).
A jak klikne w miejsce gdzie są zakładki to znowu przywraca się ten niechciany kolor ;(

0

Wracam do powyższego tematu chociaż teraz inaczej sformułuje pytanie.

TTabbedNoteBook pobiera kolor z koloru systemowego COLOR_BTNFACE
można zmienić ten kolor stosując taki zapis:

var
 sysColor   :DWORD;
 kind          :Integer;
 newColor :Tcolor;
Begin
   sysColor:= GetSysColor(COLOR_BTNFACE);
   kind:= COLOR_BTNFACE;                           
   SetSysColors(Kind,Kind,newColor);              //tu ustawia nowy kolor
end;

Ale ten zapis zmienia w całej windozie kolor :/
Pytanie brzmi: Jak zmienić kolor systemowy tylko w obrębie aplikacji ?

Proszę o pomoc i z góry dziękuje.

0

Myślę, że te 2 artykuły powinny Ci pomóc:
http://www.borland.pl/tech/t_fun_sys.shtml
http://www.borland.pl/cgi-bin/tip.exe/showtip?mode=1&id_tip=72
Ten ostatni dotyczy DBGrida, ale myślę, że chodzi raczej o ogólny sposób.</url>

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.