So, hab es jetzt mal mit einer Enterprise und mit allen installierten Compilern probiert.
Im Android das SetHeight zu debuggen, kann ich ja vergessen. (der Android-Debugger ist
unzumutbar unbenutzbar),
aber da es auch im FormDesigner auftritt, hatte ich gehofft die
IDE (FormDesigner) selbst debuggen zu können, bzw. was passiert, wenn ich dort ein Height im Property-Editor zuweise.
Es betrifft jedenfalls alle mobilen Platformen (Android und iOS),
während Windows und macOS nicht betroffen sind (Anzeige-Stil im FormDesigner).
Leider ließ sich die FMX.Controls.pas nicht debuggen. (keine Haltepunkte und so)
Wollte bei TControl.SetHeight einsteigen, aber da ist nicht viel zu sehen.
Delphi-Quellcode:
procedure TControl.SetHeight(const Value: Single);
begin
SetSize(FSize.Width, Value, False);
end;
procedure TControl.SetSize(const AWidth, AHeight: Single; const APlatformDefault: Boolean);
begin
if DoSetSize(FSize, APlatformDefault, AWidth, AHeight, FLastWidth, FLastHeight) then
HandleSizeChanged;
end;
function TControl.DoSetSize(const ASize: TControlSize; const NewPlatformDefault: Boolean;
ANewWidth, ANewHeight: Single; var ALastWidth, ALastHeight: Single): Boolean;
var
NewSize: TSizeF;
begin
NewSize.Width := System.Math.Max(0, ANewWidth);
NewSize.Height := System.Math.Max(0, ANewHeight);
Result := not SameValue(NewSize.Width, ASize.Width, TEpsilon.Position) or
not SameValue(NewSize.Height, ASize.Height, TEpsilon.Position);
if Result then
Repaint;
ALastWidth := ASize.Width;
ALastHeight := ASize.Height;
ASize.SetSizeWithoutNotification(NewSize);
ASize.SetPlatformDefaultWithoutNotification(NewPlatformDefault);
end;
procedure TControlSize.SetSizeWithoutNotification(const Value: TSizeF);
begin
FSize.Width := Value.Width;
FSize.Height := Value.Height;
SetPlatformDefaultWithoutNotification(False);
end;
procedure TControlSize.SetPlatformDefaultWithoutNotification(const Value: Boolean);
begin
FUsePlatformDefault := Value;
end;
Allerdings kann das jetzt auch mehrfach überschrieben sein
und irgendwie/irgendwo hängt sich dann noch das Styling mit rein
und ...
Beim Letzten geht es dann bissl rund
Delphi-Quellcode:
procedure TControl.HandleSizeChanged;
begin
UpdateSmallSizeControl;
if [csLoading, csReading] * ComponentState <> [csLoading, csReading] then
Resize
else
Include(FDelayedEvents, TDelayedEvent.Resize);
InternalSizeChanged;
if not FAnchorMove then
begin
UpdateExplicitBounds;
UpdateAnchorRules(True);
end;
if RotationAngle <> 0 then
MatrixChanged(Self);
if [csLoading, csReading] * ComponentState <> [csLoading, csReading] then
DoResized
else
Include(FDelayedEvents, TDelayedEvent.Resized);
end;
Hach, was wäre das, wenn man sich da einfach mit'm Debugger reinhängen und schauen könnte, ab wann sich das plötzlich ändert ....
Ein Therapeut entspricht 1024 Gigapeut.