Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi FMX : TBitmap.Canvas.FillText seltsames Ausgabe-Verhalten (https://www.delphipraxis.net/205584-fmx-tbitmap-canvas-filltext-seltsames-ausgabe-verhalten.html)

MyRealName 26. Sep 2020 08:54

FMX : TBitmap.Canvas.FillText seltsames Ausgabe-Verhalten
 
Ich habe auf einer FMX Form ein TImage (400x400) und einen Button mit einem OnClick Event handler, desses Code wie folgt aussieht

Code:
procedure TForm7.Button1Click(Sender: TObject);
const lTextOut = 'Hallo, guten Morgen! Wie geht''s ? ';
var
  BMP: TBitmap;
  R: TRectF;
  bWordWrap : Boolean;
  lWidth : Single;
begin
  BMP := TBitmap.Create;
  BMP.SetSize(400, 400);
  try
    BMP.Clear(TAlphaColorRec.Wheat);
    BMP.Canvas.BeginScene;
    R.Create(10, 10, 390, 390);
    BMP.Canvas.Font.Size := 36;
    BMP.Canvas.Font.Style:=[TFontStyle.fsbold];
    lWidth := BMP.Canvas.TextWidth(lTextOut);
    bWordWrap := (lwidth > 380);
    BMP.Canvas.FillText(R, lTextOut, bWordWrap, 1, [TFillTextFlag.RightToLeft], TTextAlign.Center, TTextAlign.Center);
    BMP.Canvas.EndScene;
    Image1.Bitmap.Assign(BMP);
  finally
    FreeAndNil(BMP);
  end;
end;
Wenn ich es einfach so ausgebe, dann ist das 2-zeilig. In der 1. Zeile steht "Hallo, guten Morgen!", in der 2. Zeile "? Wie geht's"
Ersetze ich das Fragezeichen am Ende mit einem Ausrufezeichen, passiert dasselbe, ersetze ich es mit einem "a", dann kommt das a wie im String am Ende... :o

Gibt es dafür eine Erklärung ?

himitsu 26. Sep 2020 09:01

AW: FMX : TBitmap.Canvas.FillText seltsames Ausgabe-Verhalten
 
TFillTextFlag.RightToLeft :roll:

MyRealName 26. Sep 2020 09:20

AW: FMX : TBitmap.Canvas.FillText seltsames Ausgabe-Verhalten
 
Ist die einzige Möglichkeit, gibt nichts anderes. Hab aber nicht daran gedacht, dass man eventuell nichts reinschreiben kann :)
Das war's ! Danke!

himitsu 26. Sep 2020 09:51

AW: FMX : TBitmap.Canvas.FillText seltsames Ausgabe-Verhalten
 
Du hättest auch in der Hilfe lesen können, was es eigentlich bedeutet. :zink:

Es ist für Sprachen, die von "recht nach links" schreiben, wie Hebräisch oder Arabisch.
Da ist aber nicht Alles (jedes Zeichen) linker, sondern es geht quasi Absatzweise und nun rate mal, wo dann auch das Satzzeichen bei Denen liegt.



Warum eigentlich WordWrap nicht einfach immer auf True setzen?



PS: Zu FillText, TextWidth und Co. sagt Delphi "deprecated, use TTextLayout"

MyRealName 26. Sep 2020 13:12

AW: FMX : TBitmap.Canvas.FillText seltsames Ausgabe-Verhalten
 
Ich probiere gerade erst damit rum. Deswegen alles erstmal halbwegs händisch. Dazu kommen Unterschiede wie es in den Delphi-Versionen gehandhabt wird und auch zwischen FMX und VCL. Also man kann in eine TBitmap in FMX nicht auf die Art und Weise schreiben wie in VCL.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:26 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