AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

UTF-8 mit GR32 zeichnen?

Ein Thema von alienous · begonnen am 16. Jul 2006 · letzter Beitrag vom 17. Jul 2006
Antwort Antwort
Seite 1 von 3  1 23      
alienous

Registriert seit: 27. Jan 2006
94 Beiträge
 
#1

UTF-8 mit GR32 zeichnen?

  Alt 16. Jul 2006, 16:53
hi,

habe hier ein kleines problem.

also, in einer mysql-db stehn einträge im utf-8 format drinne (russische zeichen zb)
diese lese ich aus, und wandele sie um mit utf8decode(utf8text);

bei umlauten klappt es ganz gut, aber bei den russischen zeichen erhalte ich nur ?????????
gebe testweise die strings mit showmessage aus.

als schriftart habe ich verdana in der fonteigenschaft der form genommen. diese sollte die zeichen enthalten, in word werden die ja auch angezeigt.

woran könnte das liegen?
danke
mfg
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: UTF-8 im Programm darstellen?

  Alt 16. Jul 2006, 16:55
Verwende unicode-fähige Anzeige-Komponenten wie z.B. die von TNT
Markus Kinzler
  Mit Zitat antworten Zitat
alienous

Registriert seit: 27. Jan 2006
94 Beiträge
 
#3

Re: UTF-8 im Programm darstellen?

  Alt 16. Jul 2006, 17:00
achso, ok liegt also an komponenten, danke

das anzeigen im programm mache ich nur aus testzwecken, will die strings dann aber in der gd32 imagekomponente zeichnen, würde das gehn? also auch mit den russischen zeichen? muss ich da was beachten?

danke
  Mit Zitat antworten Zitat
alienous

Registriert seit: 27. Jan 2006
94 Beiträge
 
#4

Re: UTF-8 im Programm darstellen?

  Alt 16. Jul 2006, 20:22
hmm habs jetz versucht im image32 mit textout... da kommen auch nur fragezeichen bei raus... die umlaute sind allerdings ok.

woran kann das liegen?

Delphi-Quellcode:
image32v.canvas.Font.Name := 'Verdana';
Image32V.Canvas.TextOut(10,10,utf8decode(_myrow[1]));
wobei Verdana mit russischen zeichen in word scheinbar klarkommt, Tahoma laut word auch, aber nicht in dem programm.

gibt es da tipps? binn am verzweifeln eine provisorische ausgabe über php klappt auch einwandfrei im utf8 format.


danke
  Mit Zitat antworten Zitat
jus

Registriert seit: 22. Jan 2005
344 Beiträge
 
Delphi 2007 Professional
 
#5

Re: UTF-8 im Programm darstellen?

  Alt 16. Jul 2006, 21:09
Zitat von alienous:
hmm habs jetz versucht im image32 mit textout... da kommen auch nur fragezeichen bei raus... die umlaute sind allerdings ok.

woran kann das liegen?

Delphi-Quellcode:
image32v.canvas.Font.Name := 'Verdana';
Image32V.Canvas.TextOut(10,10,utf8decode(_myrow[1]));
wobei Verdana mit russischen zeichen in word scheinbar klarkommt, Tahoma laut word auch, aber nicht in dem programm.

gibt es da tipps? binn am verzweifeln eine provisorische ausgabe über php klappt auch einwandfrei im utf8 format.


danke
Leider sind die VCL Canvas Methoden wie Canvas.TextOut auch nicht unicodefähig. Wenn es unbedingt per TextOut hingezeichnet werden muß, dann sollte sicherlich die Windows API Funktion "TextOutW" funktionieren. Wenn ich mich richtig erinnere, sind sogar die Canvas-Funktionen von den Tnt Komponenten nicht unicodefähig.

Eigentlich ist es nicht viel anders, wenn du die API Funktion TextOutW verwendest. Du mußt nur halt noch das dazugehörige Handle mitübergeben.
Kurzes Beispiel:
Delphi-Quellcode:
var
  ws: WideString;
begin
  //..
  ws:=utf8decode(_myrow[1]);
  TextOutW(Image32V.Canvas.Handle,xpos,ypos,PWideChar(ws),length(ws));
  //..
end;
Grüsse,
jus

P.S.: ich habe das Programm so auf die schnelle hingetippt, bitte schlagen, wenn es welche Fehler enthält
  Mit Zitat antworten Zitat
Ydobon

Registriert seit: 3. Mär 2006
264 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: UTF-8 im Programm darstellen?

  Alt 16. Jul 2006, 21:20
Zitat von mkinzler:
Verwende unicode-fähige Anzeige-Komponenten wie z.B. die von TNT
http://www.tntware.com/delphicontrols/unicode/

Die Tnt Units enthalten WideString Funktionen zur Textausgabe, sonst könnten sie schließlich nicht funktionieren.

Die Schrift spielt keinerlei Rolle, wenn in der gewählten ein entsprechender Glyph nicht enthalten ist, nimmt Windows zur Darstellung automatisch eine ähnliche mit diesem Zeichen, das klappt auch fast immer.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: UTF-8 im Programm darstellen?

  Alt 16. Jul 2006, 21:30
Zitat von Ydobon:
Die Schrift spielt keinerlei Rolle, wenn in der gewählten ein entsprechender Glyph nicht enthalten ist, nimmt Windows zur Darstellung automatisch eine ähnliche mit diesem Zeichen, das klappt auch fast immer.
Das wäre mir neu. Wenn ein Zeichen in einem Font nicht vorhanden ist wird entsprechende Leerzeichen-Zeichen dieses Fontes genommen.

Ab Win2000 hat Windows einen Trick mittels FontReplacement das o.g. Verhalten zu implementieren. Wird im Hauptfont das Zeichen nicht gefunden wir in der für diesen Font definierten "Ersatzfonts" gesucht welche Fontdatei das Zeichen beinhaltet. In 2000/XP/2003 wird das für den Tahoma-Font eingesetzt.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
alienous

Registriert seit: 27. Jan 2006
94 Beiträge
 
#8

Re: UTF-8 mit GR32 zeichnen?

  Alt 16. Jul 2006, 21:42
danke jus, das hat schonmal funktioniert, ein erfolgserlebniss juhu

@Ydobon: ich würd gern die image32 komponente behalten, du schlägst vor, ich soll ne andere imagekomponente nutzen? oder meinste was anderes?

achja, in meinem programm nutze ich auch noch an einer stelle die methode DrawText, flink wie ich binn, hab ich das dann da auch gleich probiert

Drawtext(Image32v.Canvas.Handle, PChar(UTF8Decode(_myrow[1])),Length(UTF8Decode(_myrow[1])), adrRect, DT_WORDBREAK or DT_NOPREFIX or DT_EDITCONTROL or DT_NOCLIP); aber da erscheinen zwischen den buchstaben ne menge quadrate


die methode gehört doch auch zu windows, aber da scheint es probleme zu geben?
brauche die drawtext-methode, um einen text in einem betimmten bereich umgebrochen anzuzeigen.

danke
  Mit Zitat antworten Zitat
Ydobon

Registriert seit: 3. Mär 2006
264 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: UTF-8 im Programm darstellen?

  Alt 16. Jul 2006, 21:48
Zitat von Bernhard Geyer:
Das wäre mir neu. Wenn ein Zeichen in einem Font nicht vorhanden ist wird entsprechende Leerzeichen-Zeichen dieses Fontes genommen.
Einen direkten Artikel dazu finde ich jetzt auf die Schnelle nicht, aber der MSDN-Library durchsuchenFont Mapper von Windows ist recht gut. Ich arbeite ziemlich viel mit CJK Texten, die werden auch angezeigt mit nicht dafür vorgesehen Schriftarten. Bei der SIP streikt der dann aber auch.
Wenn das Zeichen nicht gefunden werden kann, wird das im Font vorgesehen Ersetzungszeichen ausgegeben, meist eine Art Rechteck.

@alienous: Der große Vorteil der Tnt-Komponenten. Es gibt fast keinen Unterschied in der Verwendung zu den normalen von Delphi. Die entsprechende Funktion heißt dann einfach WideCanvasTextOut.
  Mit Zitat antworten Zitat
alienous

Registriert seit: 27. Jan 2006
94 Beiträge
 
#10

Re: UTF-8 mit GR32 zeichnen?

  Alt 16. Jul 2006, 21:52
naja, die image32 komponente is aber keine normale, die is aus der GR32-Lib, hat sehr viel mehr an bord, vorallem die bessere bildverarbeitung etc... darum kann ich die nich so einfach aufgeben.

drawtext is also nicht unicode-fähig?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:28 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