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.