AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[FMX] Control.Height nicht änderbar

Ein Thema von himitsu · begonnen am 28. Aug 2025 · letzter Beitrag vom 29. Aug 2025
 
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.654 Beiträge
 
Delphi 12 Athens
 
#11

AW: [FMX] Control.Height nicht änderbar

  Alt Gestern, 15:11
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.

Geändert von himitsu (Gestern um 15:14 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz