TdxCustomForm.ScaleFactorChanged(Integer,Integer) Method
Automatically scales the form and components within it when the scale factor changes.
Declaration
procedure ScaleFactorChanged(M: Integer; D: Integer); virtual;
Parameters
Name | Type | Description |
---|---|---|
M | Integer | The new scale factor multiplier. |
D | Integer | The new scale factor denominator. |
Remarks
The ScaleFactorChanged
procedure is called automatically every time the application accepts the WM_DPICHANGED
[1] system message if the Scaled property is set to True
. ScaleFactorChanged
calls the UpdateImageLists procedure to dynamically switch between multiple image lists with bitmap icons that target different DPIs.
For example, you can override the ScaleFactorChanged
procedure in a TdxCustomForm class descendant to execute custom actions when the ScaleFactor property value changes. To allow the custom form to switch between DPI-specific image lists, call the UpdateImageLists procedure within custom ScaleFactorChanged
procedure implementation.
Tip
This image list replacement technique is deprecated. We recommend that you use only SVG images as UI icons in projects that target mixed-monitor high-DPI environments.
Code Example: Switch Between Bitmap Image Lists Based on DPI
The following code example demonstrates custom ScaleFactorChanged
procedure implementation that switches between multiple image lists based on DPI thresholds:
function TMyForm.GetMostSuitableImageList: TcxImageList;
var
ATargetDPI: Integer;
begin
ATargetDPI := ScaleFactor.Apply(96); // Calculates the current DPI
if ATarget >= 192 then
Result := ilImages200 // Chooses the icon set designed for 200% DPI
else if ATargetDPI >= 144 then
Result := ilImages150 // Chooses the icon set designed for 150% DPI
else if ATargetDPI >= 120 then
Result := ilImages125 // Chooses the icon set designed for 125% DPI
else
Result := ilImages; // Chooses the icon set designed for 100% DPI (unscaled)
end;
procedure TMyForm.ScaleFactorChanged(M, D: Integer); // Overrides the ScaleFactorChanged procedure
var
AImageList: Integer;
begin
AImageList := GetMostSuitableImageList; // Chooses a suitable replacement image list
btnBMPGlyph.OptionsImage.Images := AImageList; // Substitutes the button's image list
AImageList.GetImage(0, btnBMPGlyph.OptionsImage.Glyph); // Applies the first image as a button glyph
btnBMPGlyph.OptionsImage.Glyph.SourceDPI := AImageList.SourceDPI; // Updates the glyph DPI
end;