Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Höhe eines mit FillText in Firemonkey gezeicheten Textes ermitteln? (https://www.delphipraxis.net/191924-hoehe-eines-mit-filltext-firemonkey-gezeicheten-textes-ermitteln.html)

sko1 3. Mär 2017 15:47

Höhe eines mit FillText in Firemonkey gezeicheten Textes ermitteln?
 
Hallo,

warum ist mit Firemonkey alles so schwierig umzusetzen?

Ich male auf einem Canvas Texte mit FillText, dabei ist WordWrap = true so dass der Text, wenn er nicht auf die vorgegebene Breite passt, umgebrochen wird. Das funktioniert, aber wie bekomme ich heraus wie hoch dieser Textblock nun ist um die nächste Zeile darunter anordnen zu können?

Ciao
Stefan

himitsu 3. Mär 2017 16:07

AW: Höhe eines mit FillText in Firemonkey gezeicheten Textes ermitteln?
 
Du gehst die Pixel durch und schaust in welcher Zeile das Letze bemalt wurde. :stupid:



Canvas.MeasureText?

Harry Stahl 3. Mär 2017 17:57

AW: Höhe eines mit FillText in Firemonkey gezeicheten Textes ermitteln?
 
Versuch doch mal mit "MeasureLines" Dein Glück.

http://docwiki.embarcadero.com/Libra...s.MeasureLines

In TLineMetricInfo erhältst Du die Anzahl der Zeilen zurück, die Dein Text beanspruchen wird. Die mal Höhe einer Textzeile multipliziert gibt Dir dann die Y-Position, wo Du die nächste Textzeile ausgeben kannst.

Rollo62 3. Mär 2017 23:14

AW: Höhe eines mit FillText in Firemonkey gezeicheten Textes ermitteln?
 
Warum ist Firemonkey so einfach ?

Ich glaube soetwas wie MeasureLines gab es in VCL nicht ...

Rollo

himitsu 4. Mär 2017 01:15

AW: Höhe eines mit FillText in Firemonkey gezeicheten Textes ermitteln?
 
In der VCL, bzw. GDI und GDI+, kann man der Text-Zeichen-API sagen "nicht zeichnen, sondern miss nur und gib mir das Ergebnis".

Letztendlich bassiert ja der VCL-TCanvas auf diesen APIs
MSDN-Library durchsuchenDrawText und MSDN-Library durchsuchenDrawTextEx -> DT_CALCRECT

sko1 4. Mär 2017 13:45

AW: Höhe eines mit FillText in Firemonkey gezeicheten Textes ermitteln?
 
Danke für die Tips, ich werde mal sehen ob ich da weiterkomme!

Ciao
Stefan

sko1 6. Mär 2017 07:35

AW: Höhe eines mit FillText in Firemonkey gezeicheten Textes ermitteln?
 
Die Funktion habe ich gefunden, aber wie ich das verwende, ist mir absolut unklar, zumal die Onlinehilfe zwar Beispiele verweist, keines aber MeasureLines verwendet.

Kann mir bitte jemand mit 2 Zeilen Code auf die Sprünge helfen?

Danke
Ciao
Stefan

Edit:
Wald vor lauter Bäumen nicht gesehen, es fehlte bei mir

Alines := TLineMetricInfo.Create;

sko1 6. Mär 2017 13:28

AW: Höhe eines mit FillText in Firemonkey gezeicheten Textes ermitteln?
 
Ich hatte mich schon so gefreut, unter Windows alles fein, aber:

MeasureLines in der Android-App gibt mit Alines.Count immer 0 zurück!

Was mach ich nun?

Ciao
Stefan

Nachtrag:
MeasureLines gibt 0 Zeilen zurück, inzwischen habe ich auch MeasureText probiert, das Rect gibt immer die Höhe eines einzeiligen Textes zurück!

Sherlock 6. Mär 2017 15:39

AW: Höhe eines mit FillText in Firemonkey gezeicheten Textes ermitteln?
 
Nimmt man nicht lieber das Delphi-Referenz durchsuchenFMX.TextLayout.TTextLayout für sowas? Das hat auch alle Maße parat.

Sherlock

sko1 6. Mär 2017 15:50

AW: Höhe eines mit FillText in Firemonkey gezeicheten Textes ermitteln?
 
Hast Du dafür bitte mal einen Codeschnipsel?

Danke
Ciao
Stefan

Mavarik 6. Mär 2017 19:00

AW: Höhe eines mit FillText in Firemonkey gezeicheten Textes ermitteln?
 
Zitat:

Zitat von sko1 (Beitrag 1363345)
Hast Du dafür bitte mal einen Codeschnipsel?

Delphi-Quellcode:
  R := RectF(0,0,Memo.ViewportSize.Width,20000);
  Memo.Canvas.MeasureText(R,Memo.Text,true,[],TTextAlign.Leading,TTextAlign.Leading);

Sowas? R Hat dann die Höhe.

sko1 7. Mär 2017 05:55

AW: Höhe eines mit FillText in Firemonkey gezeicheten Textes ermitteln?
 
Nein, die Verwendung von MeasureText ist mir klar, funktioniert nur unter Android nicht!

Meine Frage nach dem Codeschnipsel bezog sich auf TTextLayout...

Ciao
Stefan

Sherlock 7. Mär 2017 07:18

AW: Höhe eines mit FillText in Firemonkey gezeicheten Textes ermitteln?
 
Na, ist eigentlich recht einfach bis auf den ersten Schritt, wo man nämlich das TTextLayout per TTextLayoutManager erzeugt.

Die OH hat dazu sogar ein Beispiel: http://docwiki.embarcadero.com/RADSt...von_FireMonkey
Das TTextLayout kennt auch WordWrap und damit ist alles drin, was Du brauchst. Die Größe des entstandenen Texts kannst schließlich Du über die TextRect Property abfragen.

Sherlock

sko1 7. Mär 2017 07:36

AW: Höhe eines mit FillText in Firemonkey gezeicheten Textes ermitteln?
 
Danke, ich habe es gefunden und es funktioniert, nur mit folgender Einschränkung:

Ich zeichne auf ein TImage (besser auf dessen Bitmap), ermittle die Texthöhe, zeichne weiter usw.
Jetzt bin ich aber leider darauf gestoßen, dass bei Firemonkey die Bitmapgröße limitiert ist, so dass ich nach bei ca. 130 Einträgen nicht mehr weiterkomme ("Bitmap zu groß").

Ein Richedit gibt es bei Firemonkey nicht, ich brauche aber gemischt normalen und fetten Text.
Lauter einzelne Labels erzeugen und positionieren widerstebt mir weil das ebenfalls auf dem Handy mehr als zähflüssig wird.

So langsam gehen mir die Ideen aus, wie ich meine Textausgabe realisieren kann!

Hat jemand dazu vielleicht eine Idee?

Ciao
Stefan

Sherlock 7. Mär 2017 07:37

AW: Höhe eines mit FillText in Firemonkey gezeicheten Textes ermitteln?
 
Diese Bitmap-Limitierung gilt auch für VCL (eventuell mit anderen Dimensionen), und ich werde in bälde auch daran zu knabbern haben. Man behilft sich dann, indem man mehrere Bitmaps aneinander klebt.

Sherlock

sko1 7. Mär 2017 09:58

AW: Höhe eines mit FillText in Firemonkey gezeicheten Textes ermitteln?
 
Zitat:

Man behilft sich dann, indem man mehrere Bitmaps aneinander klebt.
Das habe ich inzwischen probiert, unter Windows kein Problem, unter Android könnte schon mal der Speicher knapp werden, wird ausserdem extrem langsam.

Meine Lösung, die ich jetzt umgesetzt habe:
Im OnPaint der Komponente male ich jetzt meine Texte auf den Canvas, dafür braucht man keine Bitmap erzeugen und es gibt (bis jetzt jedenfalls) keine "Mengenbeschränkung", so dass ich auch 800 Texte zeichnen kann, das Scrolling wird dann etwas träger aber bei normaler Verwendung absolut problemlos.

Für die Positionierung jetzt das TTextLayout und alles ist schick ;-)

Ciao
Stefan

Sherlock 7. Mär 2017 10:19

AW: Höhe eines mit FillText in Firemonkey gezeicheten Textes ermitteln?
 
Gratuliere!

Sherlock

Mavarik 7. Mär 2017 11:30

AW: Höhe eines mit FillText in Firemonkey gezeicheten Textes ermitteln?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von sko1 (Beitrag 1363386)
Hat jemand dazu vielleicht eine Idee?

Ja...

Ich render mit meiner Engine 5-8 A4 Seiten (mehr brauche ich nicht, geht aber) Ich setze einfach Bitmap an Bitmap auf eine Scrollbox...

Screenshoot von der Windows-Version (ging jetzt einfacher) aber geht auf allen Plattformen...

Ich kann auch Blocksatz.
Und auch Fonts und Farbe!

Die Daten kommen aus eine XML-Datei und werden per TCP-IP übertragen und in der App in einer Datenbank gespeichert. Gent natürlich auf per App-Teathering.

Die Engine hat ca. 2500 LOC...

Mavarik


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz