Einzelnen Beitrag anzeigen

AuronTLG

Registriert seit: 2. Mai 2018
Ort: Marburg
242 Beiträge
 
Delphi 12 Athens
 
#1

Texthöhen-Berechnung fehlerhaft in FMX auf Android

  Alt 19. Sep 2018, 11:40
Hallo,

ich habe ein äußerst nerviges Problem auf einer App, mit dem ich mich gerade rumschlagen muss:

Ich verwende eine TreeView, deren Nodes mehrzeiligen Text beinhalten können, und deren Größe dementsprechend angepasst werden muss.
Mein Problem ist, dass Firemonkey auf Android anscheinend für einen gewissen Textlängen-Bereich nach einem erfolgten WordWrap die Texthöhe nicht richtig berechnet und von einem einzeiligen Text ausgeht, wodurch der zweizeilige Text in der Node abgeschnitten ist.
Dies tritt nach bisherigem Stand nur auf Android auf.

Ich hatte erst angenommen, dass meine manuelle Berechnung falsch sein könnte und habe die Standard-TreeView durch die TMSFMXTreeView ersetzt, welche die Node-Höhe automatisch kalkuliert, doch bescheuerterweise tritt derselbe Fehler dort genauso auf, was natürlich Sinn machen würde bei meiner Vermutung, denn letztendlich benutzt diese Komponente natürlich auch an irgendeinem Punkt die normalen Delphi-Methoden wie z.B. MeasureText etc...
TMS haben mir auch nach Prüfung bestätigt, dass das wohl ein Firemonkey-Problem ist und sie daran nichts ändern können.

Nur um sich den Fehler mal visuell vorstellen zu können:
Angenommen, man fügt zu der TreeView sukzessiv immer mehr Nodes hinzu, die jedesmal einen kleinfügig längeren Text enthalten (z.B. immer ein kurzes 'l' mehr), dann sieht man, dass die ersten paar zweizeiligen Nodes immer noch diesselbe Größe wie die einzeiligen haben und der Text dementsprechend abgeschnitten ist. Dann nach ein paar fehlerhaften Nodes ist die Berechnung dann plötzlich korrekt und es wird richtig angezeigt.
Dies setzt sich natürlich auch so weiter fort beim Übergang zu dreizeilig etc...

In der Praxis bedeutet das, dass ein TreeView-Eintrag, der eine Textlänge hat, die in solch einen Fehlerbereich reinfällt, mit abgeschnittenem Text angezeigt wird, was zwar relativ selten vorkommt, aber absolut hässlich aussieht, wenn es dann mal passiert.

Ich bin schon seit geraumer Zeit am rumwühlen und experimentieren, aber ich bekomme diesen Fehler einfach nicht vollständig weg.

Ich habe z.B. schon probiert, ein unsichtbares Label irgendwohin zu legen, dem ich die Breite, Einstellungen und Font der Node verpasse und dann der Node die Höhe vom Label verpasse, was den Fehlerbereich reduziert, aber nicht vollständig auflöst.

Ebenso hab ich auch schon versucht, mit TTextLayouts rumzuspielen, womit ich den Fehler leider auch nicht komplett weg bekomme.

Momentan bin ich dabei, tief in den Eingeweiden der Delphi-Klassen rumzuwühlen, in der Hoffnung dort irgendwo eine Möglichkeit zur Behebung zu finden, aber bis jetzt ohne Erfolg.

Da mich das Ganze langsam in den Wahnsinn treibt, wollte ich hier mal nachfragen, ob jemand schonmal dasselbe oder ein ähnliches Problem hatte, und eventuell eine Lösung bzw einen Workaround gefunden hat.
  Mit Zitat antworten Zitat