Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   FreePascal Umlaute mit Windows.DrawText (https://www.delphipraxis.net/163341-umlaute-mit-windows-drawtext.html)

stiftII 26. Sep 2011 00:37


Umlaute mit Windows.DrawText
 
Hallo,

Code:
windows.DrawText(DbGrid1.Canvas.Handle, pchar('äää'),-1, @crect, DT_WORDBREAK or DT_TOP or DT_LEFT);
stellt die Umlaute falsch dar (in einem DbGrid(.canvas)).

Anstelle von Umlauten und Sonderzeichen werden nur Artefakte angezeigt.

Woran kann das liegen ?
(Kann man das Charset irgendwie verändern?)

PS: Ich Nutze die Lazarus IDE 0.9.31

grüße
stiftII

himitsu 26. Sep 2011 04:15

AW: Umlaute mit Windows.DrawText
 
Zitat:

Zitat von stiftII (Beitrag 1126592)
Kann man das Charset irgendwie verändern?

Hat DrawText einen Parameter für einen Charset?

Neee, also nicht.

Zitat:

Zitat von stiftII (Beitrag 1126592)
Woran kann das liegen ?

Die ANSI-Version DrawTextA, auf welche bei deinem Lazarus das DrawText weitergeleitet wird, nutzt den Charset, auf welchen Windows eingestellt ist.
Also wie wäre es, wenn du die Spracheinstellungen vom Windows verstellst? (auf Deutsch vermutlich?)

Eventuell ist der String aber auch nur auf UTF-8 eingestellt? :gruebel:
Wenn ja, dann kodiere es nach ANSI.

Oder man nutzt ganz einfach DrawTextW und Unicode.

Bernhard Geyer 26. Sep 2011 06:25

AW: Umlaute mit Windows.DrawText
 
Zitat:

Zitat von stiftII (Beitrag 1126592)
windows.DrawText(DbGrid1.Canvas.Handle, pchar('äää'),-1, @crect, DT_WORDBREAK or DT_TOP or DT_LEFT); [/CODE]

stellt die Umlaute falsch dar (in einem DbGrid(.canvas)).

Anstelle von Umlauten und Sonderzeichen werden nur Artefakte angezeigt.

An deinem Freepascal/Lazarus. Das Arbeitet sehr oft mit UTF8 und wenn du hier direkt native API's aufrufen willst must du selbst wandeln in einen Ansi/Unicodestring.

JamesTKirk 26. Sep 2011 09:48

AW: Umlaute mit Windows.DrawText
 
Code:
windows.DrawText(DbGrid1.Canvas.Handle, pchar('äää'),-1, @crect, DT_WORDBREAK or DT_TOP or DT_LEFT);
Erste Frage: Warum verwendest du
Delphi-Quellcode:
Windows.DrawText
statt
Delphi-Quellcode:
DbGrid1.Canvas.TextRect
? Letzteres unterstützt nämlich auch Zeilenumbrüche, wenn du eine
Delphi-Quellcode:
TTextStyle
-Variable mit
Delphi-Quellcode:
.WordBreak := True
verwendest.

Zweite Frage (falls du tunlichst bei
Delphi-Quellcode:
DrawText
bleiben möchtest): Welche Kodierung hat deine Quellcodedatei? Mache dazu einen Rechtsklick im Editorfenster und navigiere zu Dateieinstellungen->Zeichenkodierung. Steht der Punkt bei UTF-8 (oder ähnlich), so kannst du entweder die Einstellung auf CP1252 ändern oder das
Delphi-Quellcode:
PChar('äää')
zu
Delphi-Quellcode:
PChar(UTF8ToAnsi('äää'))
erweitern.

Gruß,
Sven

p80286 26. Sep 2011 10:01

AW: Umlaute mit Windows.DrawText
 
Ggf. hilft es auch den font zu wechsel, denn nicht jeder Font unterstützt alle Zeichen.
(mit Arial bist Du meist auf der sicheren Seite)

Gruß
K-H

stiftII 26. Sep 2011 12:41

AW: Umlaute mit Windows.DrawText
 
Zitat:

Zweite Frage (falls du tunlichst bei DrawText bleiben möchtest): Welche Kodierung hat deine Quellcodedatei? Mache dazu einen Rechtsklick im Editorfenster und navigiere zu Dateieinstellungen->Zeichenkodierung. Steht der Punkt bei UTF-8 (oder ähnlich), so kannst du entweder die Einstellung auf CP1252 ändern oder das PChar('äää') zu PChar(UTF8ToAnsi('äää')) erweitern.
Es ist UTF-8. Danke für den Hinweise mit TextRect :thumb:. Es ging mir tatsächlich um die Zeilenumbrüche.

(Habe mir die DBGrid Komponente so umgeschrieben, dass sie Umbrüche vernünftig darstellt.)

Danke an euch alle =)

stiftII

stiftII 26. Sep 2011 14:21

AW: Umlaute mit Windows.DrawText
 
Puh, Text Rect funktioniert zwar mit den Umlauten, aber wie kann ich denn damit den Schrift-Stil und die TextGröße verändern ??

PS:
Code:
      DbGrid1.Canvas.Font.size:=55;
Funktioniert leider nicht :x

JamesTKirk 26. Sep 2011 14:45

AW: Umlaute mit Windows.DrawText
 
Zitat:

Zitat von stiftII (Beitrag 1126708)
Puh, Text Rect funktioniert zwar mit den Umlauten, aber wie kann ich denn damit den Schrift-Stil und die TextGröße verändern ??

PS:
Code:
      DbGrid1.Canvas.Font.size:=55;
Funktioniert leider nicht :x

Hmm... probier mal
Delphi-Quellcode:
DbGrid1.Font
, da ich glaube, dass der Font des Canvas bei jedem Zeichnen mit genau diesem Font überschrieben wird.

Gruß,
Sven

stiftII 26. Sep 2011 15:01

AW: Umlaute mit Windows.DrawText
 
Zitat:

Zitat von JamesTKirk (Beitrag 1126719)
Zitat:

Zitat von stiftII (Beitrag 1126708)
Puh, Text Rect funktioniert zwar mit den Umlauten, aber wie kann ich denn damit den Schrift-Stil und die TextGröße verändern ??

PS:
Code:
      DbGrid1.Canvas.Font.size:=55;
Funktioniert leider nicht :x

Hmm... probier mal
Delphi-Quellcode:
DbGrid1.Font
, da ich glaube, dass der Font des Canvas bei jedem Zeichnen mit genau diesem Font überschrieben wird.

Gruß,
Sven

Tut sich leider nichts.
Die Schriftfarbe kann man aber zB verändern.. nur die Größe nicht.


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