Я знаю, что можно отключить пользовательские стили для компонентов, но как я могу включить стили только для одного класса компонентов? Например, оставьте всю форму и все компоненты на ней без скина, а скините только TButton. Как на этом изображении.
Стилизация только одного компонента VCL в Delphi
Ответы (1)
В большинстве элементов управления VCL для получения методы рисования элемента управления. Поэтому, если вы не используете стили Vcl, StyleServices
возвращает экземпляр функциям Windows API для рисования тематических элементов управления (API UxTheme). потому что нет способа скинировать (применить стили Vcl) только к одному элементу управления классом (по крайней мере, который вы рисуете сами).
Таким образом, единственная альтернатива - применить стили Vcl, а затем отключить все элементы управления, кроме одного типа, который вы ищете.
Вы можете использовать что-то вроде этого
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;
Проверьте эту форму с помощью стиля Vcl
И теперь после вызова вышеуказанного метода
DisableVclStyles(Self,'TButton');
Примечание. Использование StyleElements свойство для включения или отключения стилей vcl не работает с некоторыми компонентами, такими как (TStringGrid, TBitBtn, TSpeedButton и т. д.)
TControl
не имеет свойства StyleElements
- person Jerry Dodge; 24.11.2013
TButton
компонент-потомок, который выглядит не так, как обычноTButton
. Добавление в проект функциональных возможностей стилей VCL, а затем их отключение для всего проекта, за исключениемTButton
, — не лучший способ скрыть только одну кнопку в проекте. - person teran   schedule 25.12.2012