TLabeledEdit is probably not a good example since both TEdit and TLabel are 
native widgets (maybe they scale by widgetset) and there is some Spacing 
between them hardcoded to 3px. I cannot see any scaling related code in this 
simple component.
 
Anyway, I know what's going on:
 
procedure TWinControl.AutoAdjustLayout(AMode: TLayoutAdjustmentPolicy;
  const AFromPPI, AToPPI, AOldFormWidth, ANewFormWidth: Integer);
var
  i: Integer;
begin
  DisableAutoSizing{$IFDEF 
DebugDisableAutoSizing}('TWinControl.AutoAdjustLayout'){$ENDIF};
  try
    for i:=0 to ControlCount-1 do
      Controls[i].AutoAdjustLayout(AMode, AFromPPI, AToPPI, AOldFormWidth, 
ANewFormWidth);


    inherited;
  finally
    EnableAutoSizing{$IFDEF 
DebugDisableAutoSizing}('TWinControl.AutoAdjustLayout'){$ENDIF};
  end;
end;
 
i.e. form loops all its children and scale them. But when component is dropped 
on the form, scaling is done before Parent is set. Therefore only main 
component's DoAutoAdjustLayout is called, subcomponent is ommited.
 
I noticed that it is opposite when loading from *.lfm. There scaling done after 
the Parent is set, so both component's and subcomponent's DoAutoAdjustLayout is 
called.
 
It's fine since there are simplier ways how to do initial scaling (when 
component is created and put on the form).
 
Thanks, I only needed to understand better how it works.
 
______________________________________________________________
Od: "Ondrej Pokorny" <laza...@kluug.net>
Komu: "Lazarus mailing list" <lazarus@lists.lazarus-ide.org>
Datum: 15.06.2023 08:35
Předmět: Re: [Lazarus] Hi-DPI tweak of components

On 14.06.2023 21:52, Vojtěch Čihák via lazarus wrote:This is strange. All 
controls should be adjusted regardless of the Owner. TLabeledEdit works fine 
(edit that has an attached label).
Ondrej

-- 
_______________________________________________
lazarus mailing list
lazarus@lists.lazarus-ide.org
https://lists.lazarus-ide.org/listinfo/lazarus

Reply via email to