wmismail Posted August 11, 2008 Share Posted August 11, 2008 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. Ergün YÜCEL Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.