2009-07-07 19 views
5

Genelde bu tür sistem ayarlarıyla uğraşmaktan kaçınmam gerektiğini biliyorum, ancak uygulama zaten standart olmayan renkler kullanıyor ve bunun üzerinde hiçbir etkim yok. Bazı yerlerde standart .NET denetimleri ekleyebilmek istiyorum ancak renkleri eşleşmiyor. Bu tek uygulama için sistem renklerini değiştirecek bir kırbaç olmasını isterim. Dikkat edilmesi gereken bir şey de bunun bir .NET uygulaması olmasıdır.Tek bir uygulama için sistem renklerini değiştirme (Windows, .NET)

Benim (tamamlanmamış) fikirler şimdiye kadar vardı:

  • yerini GetSysColor ile bir proxy User32.dll kütüphanesi oluşturmak için, ama çok sıkıcı olurdu (731 işlevler 1 değiştirilmesi, yeniden yönlendirilmek için) ve Uygulamamı o kopyayı kullanmak için nasıl zorlayacağımı bilmiyorum.
  • Bir şekilde GetSysColors'a yapılan çağrıları engellemek için (beklenmedik şekilde CLR'de bir yerlerde olduğunu düşünüyorum).
  • Bir şekilde değiştirmek için .NET sınıfı SystemColors (bellekte? Mümkün mü?).

Bunu başarmak için en iyi (ve eksiksiz) yol nedir?

+0

GetSysColor ve GetSysColorBrush'ı başarılı bir şekilde çektim. Maalesef kontrolleri renklendirmek yeterli değil ve nedenini hala bilmiyorum. – olpa

cevap

2

İlk günlerimde, pencere kenarlıklarını çizmek için genel bir ileti kancasını kaydeden bir program geliştirdim - Tüm pencereleri çizebilirim. Bu da tek bir uygulama için mümkün olmalıdır. Bununla birlikte, bu basit bir görev olan değil. Aksi takdirde bunun mümkün olacağını düşünmüyorum. Krypton Toolkit gibi temalı üçüncü taraf kontrollerini kullanmaya ne dersiniz?

+0

Aslında bazı Geçiş Kontrollerini kullanıyorum, ancak düğmeler veya kaydırma çubukları gibi düzenli kontroller sağlamazlar. Krypton'u kontrol edeceğim. Bu öneri için teşekkür ederim. Bana bahsettiğin bu boyama programını bana göndermek mümkün mü? Daha fazla detay için minnettar olurum. –

+0

Üzgünüz, size aracın kaynağını gönderemem - 1992 yılında Borland Pascal'da yazmış olmalıyım. Kaynaklar uzun zamandır kayboldu ... –

+0

Bunu kontrol ettim - Sistem kancalarını kullanarak WM_PAINT olayını engelleyebilirim, ama bana hiçbir şey vermiyor. C# kodumda OnPaint'i daha basit bir şekilde geçersiz kılabiliyorum. Ve hala renkleri genel olarak değiştiremiyorum. Belki sadece sınırlar mümkün olabilir (müşteri dikdörtgenini bilmek), ancak bu yeterli değildir. –

4

Bazı yerlerde standart .NET denetimleri ekleyebilmek isterim ancak renkleri eşleşmiyor. Bu tek uygulama için sistem renklerini değiştirecek bir kırbaç olmasını isterim.

Bu, balyozla çivi sürmek gibidir.

Sistem içinde renkleri yukarı ayıklamak yerine, kullanmak istediğiniz her stok denetiminden numaralı ürüne yeni bir denetim gerçekleştirebilirsiniz. Yani düz bir TextBox yerine kendi ThemedTextBox oluşturmak için hisse senedi TextBox kontrolünden miras alırsınız. Uygulamanızın renk şemasını varsayılan olarak kullanmak için bu yeni denetimi ayarlarsınız ve hala bir Metin Kutusu, kalıtım yapısı söz konusu olduğunda, winforms tasarımcısı dahil olmak üzere normal bir metin kutusu kullandığınız her yerde kullanabilirsiniz.

+0

Ne yazık ki .NET'de miras alınan sınıftaki renkleri değiştirmek mümkün değildir. Tüm çizimleri sıfırdan yapmak zorundayım.Ve hatta bu çeşitli görsel stilleri nedeniyle yeterli olmaz (örneğin, XP vs Vista). –

+1

Elbette, renkleri değiştirebilirsiniz. Uygun özellikleri ayarlamak için miras alınan sınıfın yapıcısını güncellemeniz yeterlidir. –

+2

Sorun, WinFom'larda "uygun özellikler" bulunmamasıdır. Kontrol sınıfı sadece ForeColor ve BackColor'dur, ancak bu her şey değildir. TextBox için sadece arka rengi değiştirebiliriz, ancak ScrollBar için hiçbir şeyi değiştiremeyiz. –

İlgili konular