Textausgabe in Image (UTF8)

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Benutzeravatar
juelin
Beiträge: 173
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Textausgabe in Image (UTF8)

Beitrag von juelin »

Hallo alle zusammen,
ich habe ein Problem mit der Textausgabe in einem TImage.
Der Text wird in TEdit eingeben.
Sollange ich den Text z. B. in einem Label ausgebe ist auch alles ok.
Wenn ich aber den Text (Edit1,Text) in einem Image ausgeben will (Image2.Canvas.Textout(X,Y,Edit1.Text)
so lommen bei Umaluten Hiroglyphen raus.
In Text1.Edit steht UTF8 Code und in Lazarus habe ich auch UTF8 als Code stehen. (kleines ü steht Hex: C3,BC in Edit1.Test)
Habe auch schon mit Utf8ToAnsi bzw UTF8Encode probiert hilft auch nicht.
Image2.Canvas.Font.Charset habe ich auch probiert. klappt auch nicht.
Habe heute den ganzen Abend nach einer Lösung im Internet gesucht, aber nix gefunden.
Kann mir da jemand helfen?
Danke und Gruß
Jürgen

wp_xyz
Beiträge: 5050
Registriert: Fr 8. Apr 2011, 09:01

Re: Textausgabe in Image (UTF8)

Beitrag von wp_xyz »

Kann ich nicht nachvollziehen - siehe Beispiel
Dateianhänge
image_textout.zip
(102.93 KiB) 58-mal heruntergeladen

Benutzeravatar
Jorg3000
Lazarusforum e. V.
Beiträge: 253
Registriert: So 10. Okt 2021, 10:24
OS, Lazarus, FPC: Win64
Wohnort: NRW

Re: Textausgabe in Image (UTF8)

Beitrag von Jorg3000 »

Guten Morgen!

Ich meine mich zu erinnern, dass ich mit Textout() auch schon mal stundenlang "Spaß" hatte. Ist aber schon Jahre her, in einer früheren Lazarus-Version.
Falls das Problem noch besteht, hätte ich folgenden Ansatz (nicht getestet) ...

Code: Alles auswählen

var s: RawByteString;
s:=Edit1.Text;
SetCodepage(s, cp_utf8, false);  // cp_utf8 = 65001
Image2.Canvas.Textout(X,Y,s);
Ich meine mich zu erinnern, dass ich es mir damals so erklärt habe, dass in FreePascal in der CodePage-Kennung eines Strings normalerweise nur 0 steht - und diese 0 einfach die aktuelle Programm-CodePage meint (i.d.R. UTF-8). Das finde ich ziemlich nachlässig, da eine 0 ohne den Kontext der Instanz nichts bedeutet.
Nachdem ich anstelle der 0 die echte CodePage-ID für UTF-8, nämlich 65001, manuell gesetzt habe, hatte es damals funktioniert, glaube ich.
Grüße, Jörg

Benutzeravatar
juelin
Beiträge: 173
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Re: Textausgabe in Image (UTF8)

Beitrag von juelin »

Hallo Jong3000,
habe ich probiert hat leider auch nix gebracht.
siehe Bild
Gruß
Jürgen
Dateianhänge
umlaute.jpg
umlaute.jpg (77.49 KiB) 687 mal betrachtet

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1537
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Textausgabe in Image (UTF8)

Beitrag von fliegermichl »

Das kann ich nicht nachvollziehen.
Ich habe eine Form mit einem TImage, TEdit und TButton erstellt und im ButtonClick steht:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
const cy : integer = 0;
begin
  Image1.Canvas.TextOut(100, cy, Edit1.Text);
  Inc(cy, Image1.Canvas.Textheight(Edit1.Text));
end; 
Da wird alles ordentlich ausgegeben.
Könntest du ein kleines Beispielprojekt posten, wo man das nachvollziehen kann?

Benutzeravatar
Jorg3000
Lazarusforum e. V.
Beiträge: 253
Registriert: So 10. Okt 2021, 10:24
OS, Lazarus, FPC: Win64
Wohnort: NRW

Re: Textausgabe in Image (UTF8)

Beitrag von Jorg3000 »

Hm,
ist Canvas.Font.CharSet = ANSI_CharSet (soll) oder OEM_CharSet (falsch) ?

Mach mal vorm Schreiben:

Code: Alles auswählen

Image2.Canvas.Font := Form1.Font;
Falls das auch nix bringt, hätte ich alternativ eine Nur-Windows-Lösung mittels UTF-16 ...
Dabei müssten die Koordinaten in einem TRect übergeben werden.

Code: Alles auswählen

var ws: UnicodeString;
ws := UnicodeString( Edit1.Text );
Windows.DrawTextW( Image2.Canvas.Handle, PWChar(ws), Length(ws), Rect, DT_SINGLELINE or DT_VCENTER or DT_NOPREFIX );

siro
Beiträge: 749
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 11
CPU-Target: 64Bit
Wohnort: Berlin

Re: Textausgabe in Image (UTF8)

Beitrag von siro »

Ich habe das Beispiel von fliegermichl grad probiert.

Lazarus 3.0 (rev lazarus_3_0) FPC 3.2.2 x86_64-win64-win32/win64

Bei mir funktioniert das problemlos.
ue_ue.jpg
ue_ue.jpg (9.28 KiB) 664 mal betrachtet
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

Benutzeravatar
theo
Beiträge: 10707
Registriert: Mo 11. Sep 2006, 19:01

Re: Textausgabe in Image (UTF8)

Beitrag von theo »

Hast du das Bsp. von wp_xyz oben ausprobiert? (erste Antwort).
Was passiert da bei dir?
Schon mal versucht, die Schriftart zu wechseln? Kann ich mir zwar kaum als Grund vorstellen, aber "Versuch macht kluch".

Benutzeravatar
juelin
Beiträge: 173
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Re: Textausgabe in Image (UTF8)

Beitrag von juelin »

Beispiel von wp_xyz bring nix.

Benutzeravatar
juelin
Beiträge: 173
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Re: Textausgabe in Image (UTF8)

Beitrag von juelin »

Hallo Jong3000,
in Deimen Beispiel:
Windows.DrawTextW( Image2.Canvas.Handle, PWChar(ws), Length(ws), Rect, DT_SINGLELINE or DT_VCENTER or DT_NOPREFIX );
mekert Lazarus Windows und PWChar an.
Da braucht er wahrscheinlich in USES noch einen Eintrag?????
Bei Rect fehlt doch die Angabe von Start/ende X,Y??????
Und die DT_......... findet er nicht.
Danke und Gruß
Jürgen

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1537
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Textausgabe in Image (UTF8)

Beitrag von fliegermichl »

juelin hat geschrieben: Di 7. Jan 2025, 10:47 Beispiel von wp_xyz bring nix.
Heisst das es geht oder geht nicht? Bei mir wird da alles ordentlich angezeigt.
Was hast du für eine Lazarus Version?
Windows oder Linux?

Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 501
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Linux Mint Cinnamon, Laz 3.7 Fpc 3.2.3 und Laz 3.0 Fpc

Re: Textausgabe in Image (UTF8)

Beitrag von Niesi »

Das Beispiel von wp_xyz arbeitet einwandfrei ...
Auswahl_025.png
Auswahl_025.png (736.68 KiB) 612 mal betrachtet
Auswahl_026.png
Auswahl_026.png (134.68 KiB) 612 mal betrachtet
Edit: Rechtschreibung
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

Benutzeravatar
juelin
Beiträge: 173
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Re: Textausgabe in Image (UTF8)

Beitrag von juelin »

hier nochmal,
das Beispiel von wp_xyz finktioniert bei mir nicht.
Habe WINDOWS 10
Gruß
Jürgen
Dateianhänge
bild2.jpg
bild2.jpg (35.45 KiB) 592 mal betrachtet
bild1.jpg
bild1.jpg (82.99 KiB) 592 mal betrachtet

Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 501
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Linux Mint Cinnamon, Laz 3.7 Fpc 3.2.3 und Laz 3.0 Fpc

Re: Textausgabe in Image (UTF8)

Beitrag von Niesi »

.

Und so sieht das Beispiel von wp_xyz unter Windows 10 aus:

.
2025-01-07 12_52_01-Form1.png
2025-01-07 12_52_01-Form1.png (726.34 KiB) 592 mal betrachtet
2025-01-07 12_52_54-Über Lazarus.png
2025-01-07 12_52_54-Über Lazarus.png (127.01 KiB) 592 mal betrachtet
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

Mathias
Beiträge: 6709
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Textausgabe in Image (UTF8)

Beitrag von Mathias »

wp_xyz hat geschrieben: Di 7. Jan 2025, 01:24 Kann ich nicht nachvollziehen - siehe Beispiel
Habe es auch getestet, normal unter Linux, sowie mit wine, beides ist io.

Wen ich die Screenshoots von juelin angucke, verwendet er ein ganz komischer Font.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten