AGB  ·  Datenschutz  ·  Impressum  







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

FMX - TLabel automatische Höhenanpassung

Ein Thema von DeddyH · begonnen am 17. Feb 2016 · letzter Beitrag vom 18. Feb 2016
Antwort Antwort
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

AW: FMX - TLabel automatische Höhenanpassung

  Alt 17. Feb 2016, 17:47
Kurioser: Diese Eigenschaften werden in FMX tatsächlich verwendet:
Delphi-Quellcode:
          StyleControl.SetBounds(StyleControl.Margins.Left, StyleControl.Margins.Top,
            Width - StyleControl.Margins.Width, Height - StyleControl.Margins.Height);
Das führt jetzt dazu, daß das SetBounds in der Breite Width - Margins.Right + Margins.Left und in der Höhe Height - Margins.Bottom + Margins.Top verwendet. Ich hätte jetzt Width - Margins.Left - Margins.Right und Height - Margins.Bottom - Margins.Top erwartet. Entweder steh' ich jetzt auf dem Schlauch oder das ist ein ganz böser Bug
Margins sind ja auch der Außenabstand, also gehören theoretisch nicht mit zum Element, während Padding der Innenabstand ist, also der Abstand vom Rand des Elements zum Inhalt.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#2

AW: FMX - TLabel automatische Höhenanpassung

  Alt 17. Feb 2016, 18:02
Ja, aber wieso wird dann addiert?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.757 Beiträge
 
Delphi 12 Athens
 
#3

AW: FMX - TLabel automatische Höhenanpassung

  Alt 17. Feb 2016, 19:41
Margins sind ja auch der Außenabstand, also gehören theoretisch nicht mit zum Element, während Padding der Innenabstand ist, also der Abstand vom Rand des Elements zum Inhalt.
Die Verwendung von Margins ist hier schon korrekt, da die Position des (inneren) Style-Elements relativ zu seinem Parent-Control herauskommen soll. An den anderen Stellen in FMX wird auch korrekt mit den Margin-Eigenschaften Left/Right und Top/Bottom gearbeitet. Nur(?) hier wird auf Margins.Width und Margins.Height zugegriffen, die allerdings unsinnige Werte liefern.

Man kann das gerne probieren:
Delphi-Quellcode:
program Project75;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  System.Types,
  FMX.Types;

procedure Main;
var
  margins: TBounds;
begin
  margins := TBounds.Create(TRectF.Empty);
  try
    margins.Left := 10;
    margins.Right := 8;
    Writeln(margins.Width:1:1); // liefert -2
  finally
    margins.Free;
  end;
end;

begin
  try
    Main;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  Readln;
end.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#4

AW: FMX - TLabel automatische Höhenanpassung

  Alt 18. Feb 2016, 09:58
Ich denke man sollte die Width und Height hier einfach nicht verwenden. Was soll denn die Höhe/Breite eines Außenabstands überhaupt sein? Die Summe der Abstände oder die Größe des umgebenden Rechtecks? Ist beides nicht wirklich einleuchtend.

Dasselbe gilt auch für Padding.

Ich habe gesehen, du hast da schon einen Quality-Eintrag erstellt.

Geändert von bra (18. Feb 2016 um 10:00 Uhr)
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.240 Beiträge
 
Delphi 12 Athens
 
#5

AW: FMX - TLabel automatische Höhenanpassung

  Alt 18. Feb 2016, 20:09
Ich würde sagen TBounds ist eigntlich eine Klasse die ziemlich ähnlich dem TRect ist:

Ein Rect wid so bestimmt
Delphi-Quellcode:
 property Rect: TRectF read GetRect write SetRect;

...

function TBounds.GetRect: TRectF;
begin
  Result := TRectF.Create(FLeft, FTop, FRight, FBottom);
end;
und daraus mit Funktion Width bestimmt:

Delphi-Quellcode:
function Width: Single;

...

function TBounds.Width: Single;
begin
  Result := Rect.Width;
end;

Weil L, T, R, B die Margins zu den Aussenseiten sind macht Width gar keinen Sinn.
Wozu das drin ist würde ich gerne mal wissen.

Wahrscheinlich weil TBounds auch für z.B. Aussenkonturen benutz wird (wie der Name schon sagt),
und man hat es für Margins missbraucht statt eine spezielle TMargin (ohne Width) zu bauen.

Rollo
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: FMX - TLabel automatische Höhenanpassung

  Alt 18. Feb 2016, 21:28
TBounds für Padding und Margin ist schon korrekt, das Width und Height ist allerdings kompletter Unfug und (ver)führt (wie man sehr schön sehen kann) nur zu falschen Ergebnissen.

Mit den Methoden MarginRect und PaddingRect kann man ein TRectF vergrößern (Margin) oder verkleinern (Padding).
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort


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 23:06 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