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