Kodsal yolla windowsun sistem renklerini değiştirebilmek için user32.dll API’si ve ona ait SetSysColors fonksiyonu kullanılmaktadır. Windowsdaki mevcut tanımlanmış renklerin kodlarını da aynı API’den GetSysColor ile alabiliriz. Bu fonksiyonları projelerimizde kullanabilmek için aşağıdaki gibi tanımlıyoruz.C# için;
[DllImport("user32.dll")]
static extern bool SetSysColors(int cElements, int[] lpaElements, int[] lpaRgbValues);
[DllImport("user32.dll")]
static extern uint GetSysColor(int nIndex);
VB.NET içinse;
Declare Function SetSysColors Lib “user32″ (ByVal nChanges As Integer, ByRef lpSysColor As Integer, ByRef lpColorValues As Integer) As Long
Declare Function GetSysColor Lib “user32″ (ByVal nIndex As Long) As Long
Set işlemi yapılırken verilen parametreler sıra ile değiştirilmek istenen renk sayısı, değiştirilecek olan renk dizisi, ve bu renklerin yeni değerleridir. Renk bilgisini ise sabit tanımlanmış değişkenlerden verebilmekteyiz. Ve bunlar sıra ile şunlardır:
COLOR_SCROLLBAR – 0 : Scrollbar rengi
COLOR_BACKGROUND – 1 : Masaüstü rengi
COLOR_DESKTOP – 1 : Masaüstü rengi
COLOR_ACTIVECAPTION – 2 : Aktif pencere başlığında sol taraftaki renk (gradient aktif ise)
COLOR_INACTIVECAPTION – 3 : Pasif pencere(ler)in başlığında sol taraftaki renk (gradient aktif ise)
COLOR_MENU – 4 : Menü arkaplan rengi
COLOR_WINDOW – 5 : Pencere arkaplan rengi
COLOR_WINDOWFRAME – 6 : Pencere çerçevesinin rengi
COLOR_MENUTEXT – 7 : Menülerdeki yazı rengi
COLOR_WINDOWTEXT – 8 : Penceredeki yazı rengi
COLOR_CAPTIONTEXT – 9 : Pencere başlık yazısının rengi
COLOR_ACTIVEBORDER – 10 : Aktif pencerenin çerçeve rengi
COLOR_INACTIVEBORDER – 11 : Pasit pencere(ler)in çerçeve rengi
COLOR_APPWORKSPACE – 12 : MDI uygulamaların arkaplan rengi
COLOR_HIGHLIGHT – 13 : Seçili alan (SelectedItem) arkaplan rengi
COLOR_HIGHLIGHTTEXT – 14 : Seçili alan yazısının rengi
COLOR_BTNFACE – 15 : 3D nesnelerin görünen yüzünün ve dialag boxların arkaplan rengi
COLOR_3DFACE –15 : 3D nesnelerin görünen yüzünün ve dialag boxların arkaplan rengi
COLOR_BTNSHADOW – 16 : 3D nesneler için gölge rengi
COLOR_3DSHADOW – 16 : 3D nesneler için gölge rengi
COLOR_GRAYTEXT – 17 : Gri (disable edilmiş) yazı rengi
COLOR_BTNTEXT – 18 : Buton üzerindeki yazıların rengi
COLOR_INACTIVECAPTIONTEXT – 19 : Pasif başlıklardaki yazının rengi
COLOR_BTNHIGHLIGHT – 20 : Butonun 3D isaretlenmesi rengi
COLOR_3DHIGHLIGHT – 20 : 3D nesneler için seçim rengi
COLOR_3DHILIGHT – 20 : 3D nesneler için seçim rengi
COLOR_3DDKSHADOW – 21 : 3D nesneler için koyu gölge rengi
COLOR_3DLIGHT – 22 : 3D nesneler için açık gölge rengi
COLOR_INFOTEXT – 23 : Tooltiplerin yazı rengi
COLOR_INFOBK – 24 : Tooltiplerin arka plan rengi
COLOR_HOTLIGHT – 26 : Tıklanmış hyperlinklerin rengi
COLOR_GRADIENTACTIVECAPTION – 27 : Aktif pencere başlığında sol taraftaki renk (gradient aktif ise). Gradient özellikleri için SPI_GETGRADIENTCAPTIONS fonksiyonu kullanılabilir.
COLOR_GRADIENTINACTIVECAPTION – 28 : Pasif pencere(ler)in sağ taraftaki renk (gradient aktif ise)
COLOR_MENUHILIGHT – 29 : Flat menüde seçili alan rengi (Windows 2000’de desteklenmemektedir.)
COLOR_MENUBAR – 30 : Flat menü çubuğunun arka plan rengi (Windows 2000’de destekelenmemektedir.)
Kod içerisinden yukarıdaki sabitlerden yararlanılarak mevcut renk değerleri okunanabilir (get) ve ya değiştirilebilir (set). Örneğin grafik uygulamalarımızda windows renkleriyle ile çizim-yazı vs yapmamız gerekebilir. Bu tip durumlarda GetSysColor ile istediğimiz renk bilgisini elde ebiliriz. Mesela masaüstü rengini şöyle alabiliriz:
uint a = GetSysColor(1); //uint a = GetSysColor(COLOR_DESKTOP);
İlave olarak .NET ortamından windows renklerine ulaşmak için SystemColors sınıfından da yararlanabiliriz. Ancak bu sınıftan sadece okuma yapabildiğimiz için bu renkleri değiştirmek istersek SetSysColors fonksiyonunu kullanmamız gerekecektir. (Yapılan değişiklik windows genelinde etkili olacaktır.) Örneğin seçili alan (selecteditem) rengini şöyle değiştirebiliriz:
SetSysColors(1, COLOR_HIGHLIGHT, RGB(0, 100, 0)); //SetSysColors(1,13,RGB(0,100,0));
RGB kodları içinde RGB-Hexadecimal renk tablosuna bakılabilir.
Entries (RSS)