Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi GR32 - Drawtext rotiert, und Unicode (https://www.delphipraxis.net/197975-gr32-drawtext-rotiert-und-unicode.html)

myicq 24. Sep 2018 11:03

GR32 - Drawtext rotiert, und Unicode
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo alle

ich habe angefangen die Füße in GR32 naß zu machen. So weit eigentlich iO.

Ich habe die Demos durchgegangen, alles einfach zu verstehen.

Leider bin ich auf ein Stein gestoßen: Gedrehter Text als Widestring:

Sehe mein Beispiel: ich habe eine TNTUnicodeEdit, und zeichne mein Text mit sowohl SimpleText als TText32.draw.

Ergebniss: mit "normal" geht alles wie im Demo, wie gewollt.
Mit Chinesish wird offenbar das TText32.DrawText die Bytes einzeln ausgibt.

Frage: wie erreiche ich die Kombination:

- Delphi 6 (oder 7)
- UnicodeText
- Gedrehter Ausgabe

kann sein das GR32 doch nicht hier das beste Tool ist. Oder wurde Text32.draw() später für unicodeStrings korrigiert ?

Danke an alle Inputs.

Mein Code:
Delphi-Quellcode:
procedure TForm1.tntbtbtn1Click(Sender: TObject);
  var
    cl : TColor32;
    r1: TFloatRect;
      text32: TText32;
    thefont : TTrueTypeFont;
      x1, y1: integer;
      myfont: TFont;
begin
  img32.SetupBitmap( true, clwhite32 );

  thefont := TrueTypeFontClass.Create('Arial', randomrange(20,50));
  myfont := tfont.Create;
  myfont.Size := 32;
  myfont.Name := 'Arial Unicode MS';


       x1 := RandomRange (0, img32.Width div 2);
     y1 := randomrange(0, img32.Height div 2);

  // das geht gut:
        SimpleText(img32.Bitmap,
                myfont,
                x1,y1,
                'SimpleText: ' + tntedt1.Text,
                clBlack32);

      cl := clBlack32;
      text32 := ttext32.Create;

   // --------- Geht NICHT
   //
  with text32 do
       try
              Angle := 15;
              // procedure TText32.Draw(bitmap: TBitmap32; X, Y: single;  const text: widestring; ttFont: TTrueTypeFont; color: TColor32);


              draw (
                   img32.Bitmap,
                   x1,y1,
                   'text32.draw: ' + tntedt1.text,
                   thefont,
                   clblack32
                );
        finally
            free;
        end;

       img32.Bitmap.EndUpdate;
end;

Bernhard Geyer 24. Sep 2018 12:51

AW: GR32 - Drawtext rotiert, und Unicode
 
Muss es wirklich noch diese Antike Delphi-Version sein?
Wieso nimmst du keine aktuelle Delphi-Version die für den heimgebrauch kostenlos ist und den Funktionsumfang der Pro-Version hat?

myicq 24. Sep 2018 13:56

AW: GR32 - Drawtext rotiert, und Unicode
 
Ja, leider so. Muss eine "antike und alte Version" sein.

Ich habe 50-60.000 Zeilen Code, und viele alte Module.

Bernhard Geyer 24. Sep 2018 14:52

AW: GR32 - Drawtext rotiert, und Unicode
 
Dann musst du alles per Hand machen.
Allso statt die Methoden der VCL-Controls/Objekte aufrufen direkt die dahinter befindliche Wide-Version der WinAPI-Funktion.

HolgerX 24. Sep 2018 17:15

AW: GR32 - Drawtext rotiert, und Unicode
 
Hmm..

oder versuche mal

Delphi-Quellcode:
var
  W : WideString;
...
begin
..

  W := WideString('text32.draw: ') + tntedt1.text;

              draw (
                   img32.Bitmap,
                   x1,y1,
                   W,
                   thefont,
                   clblack32
                );
..
end;
Es könnte sein, das D6 zunächst aus 'text32.draw: ' + tntedt1.text einen AnsiString macht und diesen dann wieder in nen WideString umwandelt...

Nur so ne Vermutung...

KodeZwerg 24. Sep 2018 18:12

AW: GR32 - Drawtext rotiert, und Unicode
 
Ich weiß ja noch nicht was das Ziel, abgesehen von gedrehtem Text, sein soll.
Also wenn Du es schaffst den Wunschtext darzustellen, da würde ich diese Region als Bitmap auslesen und dann das Bitmap drehen, dem DIB ist der Inhalt egal.

EWeiss 24. Sep 2018 18:15

AW: GR32 - Drawtext rotiert, und Unicode
 
Zitat:

Zitat von KodeZwerg (Beitrag 1414034)
Ich weiß ja noch nicht was das Ziel, abgesehen von gedrehtem Text, sein soll.
Also wenn Du es schaffst den Wunschtext darzustellen, da würde ich diese Region als Bitmap auslesen und dann das Bitmap drehen, dem DIB ist der Inhalt egal.

Hast ja gut von mir gelernt ;)
Aber es geht ihm um den Text selbst dieser ist nicht UniCode.

Zitat:

da würde ich diese Region als Bitmap auslesen
Man liest aber nicht die Region aus sondern zeichnet den Text direkt auf ein Bitmap. (Dafür muss er aber gültig sein)
Mit Region ist da nix. ;)

gruss

myicq 24. Sep 2018 22:32

AW: GR32 - Drawtext rotiert, und Unicode
 
Zitat:

Zitat von HolgerX (Beitrag 1414027)
Hmm..

oder versuche mal

Delphi-Quellcode:
var
  W : WideString;
...
begin
..

  W := WideString('text32.draw: ') + tntedt1.text;
Es könnte sein, das D6 zunächst aus 'text32.draw: ' + tntedt1.text einen AnsiString macht und diesen dann wieder in nen WideString umwandelt...

Nur so ne Vermutung...

Leider nicht der Fall, es ist eindeutig das Problem das die Bytes einzeln ausgegeben weden, und dehalb kein sinn machen.

Ich hatte früher selber versucht mit Unicode "picth" zu machen, und dabei jeder "Zeichen" für sich ausgeben. Geht OK, bis die "transforming " chars in Spiel kommen.

p80286 25. Sep 2018 08:57

AW: GR32 - Drawtext rotiert, und Unicode
 
Wie sieht denn Deine UNICODE-Definition aus?
Zitat:

{$IFNDEF UNICODE}
71 UnicodeString = WideString;
72 {$ENDIF}
73

SimpleText erwartet einen WideString, während Drawtext einen UnicodeString erwartet.

Gruß
KH

myicq 25. Sep 2018 13:04

AW: GR32 - Drawtext rotiert, und Unicode
 
Zitat:

Zitat von p80286 (Beitrag 1414065)
Wie sieht denn Deine UNICODE-Definition aus?
Zitat:

70 {$IFNDEF UNICODE}
71 UnicodeString = WideString;
72 {$ENDIF}
SimpleText erwartet einen WideString, während Drawtext einen UnicodeString erwartet.

Gruß
KH

KH, genau so ist es. Aber werden die 2 dann nicht gleich sein ? Ich bekommen kein Fehler wenn ich die gegen enander tausche.

Ich bin recht sicher es wird von GR32 jeder Byte einzeln behandelt, und deshalb geht es schief.

Ist der Entwickler von GR32 anzusprechen ?

bytecook 25. Sep 2018 14:52

AW: GR32 - Drawtext rotiert, und Unicode
 
Zitat:

Zitat von myicq (Beitrag 1414125)
Ist der Entwickler von GR32 anzusprechen ?

manche davon ja, z.B. Christian :)

Welche GR32 Version verwendest du denn? Ich selber entwickle seit einiger Zeit eine dynamische GUI/ID damit, sprich alles
davon läuft auf einer (stark modifizierten) Engine von GR32 Version 2.0 Alpha. Aber auch die Standard Textroutinen von GR32 laufen auf Polygonbasis,
und Polygone kannst du natürlich jederzeit via Matrix frei rotieren / transformieren. Ein schönes Textbeispiel findest du unter "GR32\Examples\Drawing\TextVPR"

https://github.com/graphics32/graphics32 <= Version 2.0 Alpha

Vorgang:

- Polypolygone via Textroutinen erzeugen
- Polys je nach Wunsch drehen (Vectorutils machen Freude :))
- Polys via Rendercanvas ausgeben

myicq 25. Sep 2018 18:55

AW: GR32 - Drawtext rotiert, und Unicode
 
Zitat:

Zitat von bytecook (Beitrag 1414138)
Zitat:

Zitat von myicq (Beitrag 1414125)
Ist der Entwickler von GR32 anzusprechen ?

manche davon ja, z.B. Christian :)

==> SUPER!

Zitat:

Aber auch die Standard Textroutinen von GR32 laufen auf Polygonbasis,
und Polygone kannst du natürlich jederzeit via Matrix frei rotieren / transformieren. Ein schönes Textbeispiel findest du unter "GR32\Examples\Drawing\TextVPR"
Genau diese Version habe ich.

Zitat:

Vorgang:

- Polypolygone via Textroutinen erzeugen
- Polys je nach Wunsch drehen (Vectorutils machen Freude :))
- Polys via Rendercanvas ausgeben
Leider kann diese Beispiel auch keine UnicodeText ausgeben (so wie ich das verstehe).
Ich habe ein kleines Beispiel gemacht, wo ich eine Widestring aus Base64 as Const erstelle, lese das in eine TNTLabel aus, und versuche mittels GR32 das gleiche zu zeichnen. Ergebnis, nur Vierecke.

EXE-Datei sowie Sourcecode. TNT-Komponente nicht inkl.
https://megaupload.nz/T2X6abi4bd/Tex...icode_Test_zip

bytecook 26. Sep 2018 08:52

AW: GR32 - Drawtext rotiert, und Unicode
 
Zitat:

Zitat von myicq (Beitrag 1414155)
... snip ...
Leider kann diese Beispiel auch keine UnicodeText ausgeben (so wie ich das verstehe).
Ich habe ein kleines Beispiel gemacht, wo ich eine Widestring aus Base64 as Const erstelle, lese das in eine TNTLabel aus, und versuche mittels GR32 das gleiche zu zeichnen. Ergebnis, nur Vierecke.
... snip ...

Letztendlich liegt das Problem nur darin, die korrekten Kurven der Einzelglyphen via Unicode ID von Windows abzuholen und daraus einen Pfad zu bilden, es ist also möglich. Ich habe leider keine Delphi 7 Version hier vor Ort, um das zu testen, aber ggf kann ich dir in Kürze eine zusätzliche Unit meines Projektes anbieten...


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