Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: [FMX] Control.Height nicht änderbar

  Alt Gestern, 18:19
Hab's geschafft die IDE zu debuggen.
ein eigenes Package, mit abgeleitetem FMX-TEdit und SetHeight überschrieben, mit einem DebugBreak. (im Windows die IDE gedebugt, während der Formdesigner auf Stil=Android stand)

Hier ist der Schuldige, für die feste Höhe.
Delphi-Quellcode:
procedure TControl.SetSize(const AWidth, AHeight: Single; const APlatformDefault: Boolean);
begin
  if DoSetSize(FSize, APlatformDefault, AWidth, AHeight, FLastWidth, FLastHeight) then

function TPresentedControl.DoSetSize(const ASize: TControlSize; const NewPlatformDefault: Boolean;
  ANewWidth, ANewHeight: Single; var ALastWidth, ALastHeight: Single): Boolean;
var
  NewSize: TSizeF;
  OldSize: TSizeF;
begin
  if HasPresentationProxy then
  begin
    NewSize := TSizeF.Create(System.Math.Max(0, ANewWidth), System.Math.Max(0, ANewHeight));
    NewSize := RecommendSize(NewSize);

function TPresentedControl.RecommendSize(const AWishedSize: TSizeF): TSizeF;
begin
  Result := AWishedSize;
  if HasPresentationProxy then
    PresentationProxy.SendMessageWithResult<TSizeF>(PM_GET_RECOMMEND_SIZE, Result);

procedure TStyledPresentation.PMGetRecommendSize(var AMessage: TDispatchMessageWithValue<TSizeF>);
var
  Size: TSizeF;
begin
  if AdjustType in [TAdjustType.FixedSize, TAdjustType.FixedWidth] then
    Size.Width := AdjustSizeValue.Width
  else
    Size.Width := AMessage.Value.Width;

  if AdjustType in [TAdjustType.FixedSize, TAdjustType.FixedHeight] then <<<<<<<<<<<<
    Size.Height := AdjustSizeValue.Height <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  else
    Size.Height := AMessage.Value.Height;
Zu dem Zeitpunkt isses ein TFixedStyledEdit.

Scheinbar wird der Style und AdjustType erst später zugewiesen, noch nicht beim, bzw. kurz nach dem Laden der Form,
drum war es zum Zeitpunkt meines ShowMessage im Android wohl noch 0 (None),
aber grade eben, im SetHeight war es 3 (FixedHeight).


Irgendwas löst ein TStyledControl.ApplyStyle und TStyledControl.AdjustFixedSize aus, was im ChooseAdjustType zum FixedHeight führt.

Delphi-Quellcode:
procedure TStyledControl.AdjustFixedSize(const ReferenceControl: TControl);
var
  Link: TControl;
  LAdjustType: TAdjustType;
  LAdjustSizeValue: TSizeF;
begin
  if ReferenceControl <> Self then
    Link := ReferenceControl
  else
    Link := ResourceControl;

  if (Link <> nil) and not Link.FixedSize.IsZero then
  begin
    LAdjustSizeValue := Link.FixedSize;
    SetAdjustSizeValue(LAdjustSizeValue);

    LAdjustType := ChooseAdjustType(Link.FixedSize);
    if LAdjustType <> TAdjustType.None then
    begin
      SetAdjustType(LAdjustType);
      AdjustSize;
    end;
  end
  else
    SetAdjustType(TAdjustType.None);
end;
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat