2012-12-25 22 views
6

Biliyorum ki, bileşenler için özel şekillendirmeyi devre dışı bırakmak mümkün, ancak stilleri yalnızca bir bileşen sınıfı için nasıl etkinleştirebilirim? Örneğin, tüm formu ve üzerindeki tüm bileşenleri koparmayın ve sadece TButton'u ciltleyin. Bu görüntüde olduğu gibi. VCL çoğu içten kontrolDelphi'de sadece bir VCL bileşeni şekillendirme

enter image description here

+3

gibi bazı bileşeni ile çalışmaz - tarz bulmaya button - 'TButton'un alt öğesi, her zamanki gibi TButton'a benzemiyor. Projeye VCL Stilleri işlevselliği eklenmesi ve daha sonra 'TButton' hariç tüm proje için devre dışı bırakılması, projede yalnızca bir düğmenin ciltlenmesi için iyi bir yol değildir. – teran

+0

Sadece Delphi'de stil sahibi olmak ve tüm uygulamaya başvurmadan kullanamazsınız. – Zelenov

+0

@Zelenov Bunu garip bulmuyorum - bu amaçla tasarlandı. Bir temayı uyguladığınız sürece, uygulamanın tamamını ciltliyorsunuz. Şahsen, bu tarzları sadece belirli kontrolleri ciltlemek için tuhaf buluyorum. Amacınız için, oldukça önemsiz olan kendi özel düğme kontrolümü oluşturacağım. –

cevap

13

yöntemleri kontrolünü çizmek almak için StyleServices küresel işlevini kullanır. Bu nedenle, Vcl Stilleri'ni kullanmıyorsanız, StyleServices, temasa geçen denetimleri (UxTheme API's) çizmek için bir örneği Windows API işlevlerine döndürür. çünkü cildin (Vcl Stillerini uygular) sadece tek bir sınıfa kontrol etmenin bir yolu yoktur (en azından kontrolü kendiniz çizersiniz).

Tek seçenek, Vcl Stilleri uygulamak ve sonra aradığınız tek tip dışında tüm denetimler için devre dışı bırakmaktır.

Bir VCL Stil

enter image description here

Ve şimdi sonra bir çağrı yukarıdaki yöntemle

DisableVclStyles(Self,'TButton'); 

enter image description here

ile bu

procedure DisableVclStyles(Control : TControl;const ClassToIgnore:string); 
var 
    i : Integer; 
begin 
    if Control=nil then 
    Exit; 

    if not Control.ClassNameIs(ClassToIgnore) then 
    Control.StyleElements:=[]; 

    if Control is TWinControl then 
    for i := 0 to TWinControl(Control).ControlCount-1 do 
     DisableVclStyles(TWinControl(Control).Controls[i], ClassToIgnore); 
end; 

kontrol edin gibi bu formu bir şey kullanın

Not: sadece düğmeye tarz gerek olmadığını o vcl stilleri devre dışı etkinleştirmek için StyleElements özelliğini kullanarak (böylece TStringGrid TBitBtn, TSpeedButton ve)

+0

Bunu XE2'de deniyorum ve 'TControl' bir özelliğe sahip değil' StyleElements' –

+0

Nevermind Başka bir yanıt buldum: http://stackoverflow.com/questions/16538890/how-to-color-the -background-of-a-tcombobox-vcl stilleri etkin –

+0

bileşenim DataModule'de oluşturuluyorsa ne olur? "DisableVclStyles (Self, 'TButton')” yazdığımda, "DataModule'de IDE bu hatayı döndürür: Uyumsuz türler: 'TControl' ve 'TDMRotinas' –