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
cevap
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
Ve şimdi sonra bir çağrı yukarıdaki yöntemle
DisableVclStyles(Self,'TButton');
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)
Bunu XE2'de deniyorum ve 'TControl' bir özelliğe sahip değil' StyleElements' –
Nevermind Başka bir yanıt buldum: http://stackoverflow.com/questions/16538890/how-to-color-the -background-of-a-tcombobox-vcl stilleri etkin –
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' –
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
Sadece Delphi'de stil sahibi olmak ve tüm uygulamaya başvurmadan kullanamazsınız. – Zelenov
@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. –