class procedure TWin32WSCustomCheckBox.GetPreferredSize(const AWinControl: TWinControl;
var PreferredWidth, PreferredHeight: integer; WithThemeSpace: Boolean);
var
dx: Integer; // pixel spacing between checkbox and text
iconHeight: integer;
iconWidth: Integer;
details: TThemedElementDetails;
begin
if MeasureText(AWinControl, AWinControl.Caption, PreferredWidth, PreferredHeight) then
begin
if ThemeServices.ThemesEnabled then
begin
dx := 4;
if AWinControl is TRadioButton then
details := ThemeServices.GetElementDetails(tbRadioButtonCheckedNormal)
else
details := ThemeServices.GetElementDetails(tbCheckBoxCheckedNormal);
with ThemeServices.GetDetailSize(details) do
begin
iconWidth := CX;
iconHeight := CY;
end;
end else
begin
dx := 6;
iconWidth := GetSystemMetrics(SM_CXMENUCHECK);
iconHeight := GetSystemMetrics(SM_CYMENUCHECK);
end;
Inc(PreferredWidth, iconWidth + dx);
if iconHeight > PreferredHeight then
PreferredHeight := iconHeight;
if WithThemeSpace then
begin
Inc(PreferredWidth, 1);
Inc(PreferredHeight, 4);
end;
end;
end;