Styling only one VCL component in Delphi

前端 未结 1 460
挽巷
挽巷 2020-12-06 18:54

I know, that it\'s possible to disable custom styling for components, but how can I enable styles for only one component class? For example leave the whole form and all comp

相关标签:
1条回答
  • 2020-12-06 19:45

    Most of the VCL controls internally uses the StyleServices global function to get the methods to draw the control. So if you are not using the Vcl Styles, the StyleServices return an instance to the windows API functions to draw themed controls (UxTheme API's). because that there is not way to skin (apply the Vcl Styles) to only a single class control (at least which you draw the control yourself).

    So the only alternative is apply a Vcl Styles and then disable for all the controls except the one type which you are looking for.

    You can use something like this

    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;
    

    Check this form with a Vcl Style

    enter image description here

    And now after of call the above method

    DisableVclStyles(Self,'TButton');
    

    enter image description here

    Note : using the StyleElements property to enable o disable the vcl styles doesn't work with some component like (TStringGrid, TBitBtn, TSpeedButton and so on)

    0 讨论(0)
提交回复
热议问题