Seite 1 von 2

Unicode + XP

Verfasst: 20.12.2012 23:46
von CSHW89
Hallo Leute,

ich habe mal eine generelle Frage zu Unicode, und ob WindowsXP alle Unicode-Zeichen korrekt ausgibt. Ich habe ein kleines Programm geschreiben, was ich veröffentlicht hab, darin habe ich ein paar Unicode-Zeichen verwendet. Nun gab es von einem XP-Nutzer die Meldung, dass diese Zeichen nicht korrekt dargestellt wurden, sondern nur ein Platzhalter. Dachte erst, er hätte eine eigene Schriftart fürs System eingestellt. Hab dann die Schriftart "Courier New" nur für diese Zeichen eingestellt, aber auch hier keine Verbesserung.

Ist dies nun generell so, dass XP bestimmte Unicodezeichen nicht anzeigen kann, bzw. dass die Standardschriftarten nicht alle Unicode-Zeichen enthalten?
Und zweite Frage: Kann man das irgendwie umgehen?

Es geht übrigens um Pfeile in alle vier Richtungen (nicht vergessen: Unicode im Compiler und UTF-8 in der IDE einstellen):

Code: Alles auswählen

Global Unicode_ArrowUp.s = Chr($02C4)
Global Unicode_ArrowDown.s = Chr($02C5)
Global Unicode_ArrowLeft.s = Chr($02C2)
Global Unicode_ArrowRight.s = Chr($02C3)

LoadFont(0, "Courier New", 10)

If OpenWindow(0, 0, 0, 300, 200, "UnicodeTest", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  TextGadget(#PB_Any, 10,  13, 90, 15, "Pfeil Links:")
  TextGadget(#PB_Any, 10,  43, 90, 15, "Pfeil Rechts:")
  TextGadget(#PB_Any, 10,  73, 90, 15, "Pfeil Oben:")
  TextGadget(#PB_Any, 10, 103, 90, 15, "Pfeil Unten:")
  ButtonGadget(0, 100,  10, 30, 20, Unicode_ArrowLeft)
  ButtonGadget(1, 100,  40, 30, 20, Unicode_ArrowRight)
  ButtonGadget(2, 100,  70, 30, 20, Unicode_ArrowUp)
  ButtonGadget(3, 100, 100, 30, 20, Unicode_ArrowDown)
  
  For i = 0 To 3
    SetGadgetFont(i, FontID(0))
  Next
  
  Repeat
  Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
lg Kevin

Re: Unicode + XP

Verfasst: 20.12.2012 23:59
von helpy
Hallo,

Du sollteset den richtigen Hex-Code verwenden.
Siehe ==> http://de.wikipedia.org/wiki/Unicodeblock_Pfeile

Code: Alles auswählen

Global Unicode_ArrowLeft.s = Chr($2190)
Global Unicode_ArrowUp.s = Chr($2191)
Global Unicode_ArrowRight.s = Chr($2192)
Global Unicode_ArrowDown.s = Chr($2193)
lg,
guido

Re: Unicode + XP

Verfasst: 21.12.2012 00:14
von CSHW89
Hm ja, dass wären richtige Pfeile, danke. Allerdings finde ich die nicht wirklich schön, vor allem nicht auf Buttons. Die sind dort immer so komisch nach unten verschoben, also nicht mittig.

Ich benutze z.Z. diese hier, ab $02C2:
http://de.wikipedia.org/wiki/Unicodeblo ... er_Letters

lg Kevin

Re: Unicode + XP

Verfasst: 21.12.2012 00:25
von helpy
Probiers doch mal damit:

Code: Alles auswählen

Global Unicode_ArrowUp.s = Chr($25B2)
Global Unicode_ArrowDown.s = Chr($25BC)
Global Unicode_ArrowLeft.s = Chr($25C4)
Global Unicode_ArrowRight.s = Chr($25BA

Re: Unicode + XP

Verfasst: 21.12.2012 00:38
von matbal
Hier unter XP habe ich zwei Probleme.

1. Chr() funktioniert bei mir nicht mit Unicode. Unicode ist in den Compiler-Optionen aber eingestellt! Ich sehe immer ein A mit einem Akzent.

2. Wenn ich Chr() nachbaue, sehe ich immer noch nicht die Pfeile, sondern nur einen Platzhalter (Viereck). "Courier New" scheint unter XP noch nicht die entsprechenden Zeichen zu enthalten - keine Ahnung, ob man die updaten kann.

Erst so sieht es bei mir richtig aus:

Code: Alles auswählen

Procedure.s Chr2(code.c)
   ProcedureReturn PeekS(@code,1)   
EndProcedure
Macro Chr(code)
   Chr2(code)
EndMacro


Global Unicode_ArrowUp.s = Chr($02C4)
Global Unicode_ArrowDown.s = Chr($02C5)
Global Unicode_ArrowLeft.s = Chr($02C2)
Global Unicode_ArrowRight.s = Chr($02C3)

Debug Unicode_ArrowUp
Debug Unicode_ArrowDown
Debug Unicode_ArrowLeft
Debug Unicode_ArrowRight

;LoadFont(0, "Courier New", 10)
LoadFont(0, "DejaVu Sans", 10)

If OpenWindow(0, 0, 0, 300, 200, "UnicodeTest", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  TextGadget(#PB_Any, 10,  13, 90, 15, "Pfeil Links:")
  TextGadget(#PB_Any, 10,  43, 90, 15, "Pfeil Rechts:")
  TextGadget(#PB_Any, 10,  73, 90, 15, "Pfeil Oben:")
  TextGadget(#PB_Any, 10, 103, 90, 15, "Pfeil Unten:")
  ButtonGadget(0, 100,  10, 30, 20, Unicode_ArrowLeft)
  ButtonGadget(1, 100,  40, 30, 20, Unicode_ArrowRight)
  ButtonGadget(2, 100,  70, 30, 20, Unicode_ArrowUp)
  ButtonGadget(3, 100, 100, 30, 20, Unicode_ArrowDown)
  
  For i = 0 To 3
    SetGadgetFont(i, FontID(0))
  Next
  
  Repeat
  Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf

Re: Unicode + XP

Verfasst: 21.12.2012 00:49
von CSHW89
@helpy: Vielen Dank, aber eigentlich auch nicht so das richtige. Ich denke, ich werde mal das folgende benutzen, zumindest wenn matbal mir ein ok geben könnte.

@matbal: UTF-8 in der IDE eingestellt? Kannst du vielleicht nochmal diesen Code ausprobieren?

Code: Alles auswählen

Global Unicode_ArrowUp.s = Chr($2227)
Global Unicode_ArrowDown.s = Chr($2228)
Global Unicode_ArrowLeft.s = "<"
Global Unicode_ArrowRight.s = ">"

LoadFont(0, "Courier", 10)

If OpenWindow(0, 0, 0, 300, 200, "UnicodeTest", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  TextGadget(#PB_Any, 10,  13, 90, 15, "Pfeil Links:")
  TextGadget(#PB_Any, 10,  43, 90, 15, "Pfeil Rechts:")
  TextGadget(#PB_Any, 10,  73, 90, 15, "Pfeil Oben:")
  TextGadget(#PB_Any, 10, 103, 90, 15, "Pfeil Unten:")
  ButtonGadget(0, 100,  10, 30, 20, Unicode_ArrowLeft)
  ButtonGadget(1, 100,  40, 30, 20, Unicode_ArrowRight)
  ButtonGadget(2, 100,  70, 30, 20, Unicode_ArrowUp)
  ButtonGadget(3, 100, 100, 30, 20, Unicode_ArrowDown)
 
  For i = 0 To 3
    SetGadgetFont(i, FontID(0))
  Next
 
  Repeat
  Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf

Re: Unicode + XP

Verfasst: 21.12.2012 01:19
von matbal
Das Problem scheint wirklich der Font zu sein - So siehts bei mir aus mit "Courier", "Courier New", "DejaVu Sans Condensed":

BildBildBild

ich habe es auch auf meinem alten Notebook ausprobiert, auch XP und gleiches Problem. (Und das Unicode-Problem mit Chr() besteht auch da. Mußte auch da Chr() ersetzen.)

Theoretisch müßte es reichen, wenn man den Font aktuallisiert.

Re: Unicode + XP

Verfasst: 21.12.2012 01:27
von CSHW89
Ok, dann nochmal vielen Dank

lg Kevin

Re: Unicode + XP

Verfasst: 21.12.2012 01:33
von STARGÅTE
Ich könnt für die Zeichen auch mein Unicode-Include nutzen, wo alle Zeichen als Konstante definiert sind:
http://www.purebasic.fr/german/viewtopi ... =8&t=25199
Unicode - Arrows.pbi enthält alle im UNicode definierten Pfeile.
Natürlich muss die Font diese Zeichen auch unterstützen, zB Arial Unicode MS, ansonsten nimmt das System entweder garkein Zeichen, oder ein ähnliches.

Die Sachen richtige Pfeile finde ich aber die Geometrieobjekte schöner: Unicode - Geometric Shapes.pbi

Im Übrigen könnt ihr auch Unicode-Strings direkt definieren, ohne Chr(), denn UTF8 muss ja eh eingestellt werden.

Code: Alles auswählen

LoadFont(0, "Arial Unicode MS", 12)

If OpenWindow(0, 0, 0, 300, 200, "UnicodeTest", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  TextGadget(#PB_Any, 10,  13, 90, 15, "Pfeil Links:")
  TextGadget(#PB_Any, 10,  43, 90, 15, "Pfeil Rechts:")
  TextGadget(#PB_Any, 10,  73, 90, 15, "Pfeil Oben:")
  TextGadget(#PB_Any, 10, 103, 90, 15, "Pfeil Unten:")
  ButtonGadget(0, 100,  10, 30, 20, "▲")
  ButtonGadget(1, 100,  40, 30, 20, "▶")
  ButtonGadget(2, 100,  70, 30, 20, "▼")
  ButtonGadget(3, 100, 100, 30, 20, "◀")
 
  For i = 0 To 3
    SetGadgetFont(i, FontID(0))
  Next
 
  Repeat
  Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf

Re: Unicode + XP

Verfasst: 21.12.2012 01:36
von matbal
Ich habe gerade die Lösung für das "Chr()-Unicode-Problem" herausgefunden. Es genügt nicht, in den Optionen "Unicode-Executable" einzustellen. Man muß auch das Datei-Format auf UTF8 stellen, damit Chr() mit Unicode zusammenarbeitet.
Da muß einer erst einmal darauf kommen...

Edit:
STARGÅTE hat geschrieben: Im Übrigen könnt ihr auch Unicode-Strings direkt definieren, ohne Chr(), denn UTF8 muss ja eh eingestellt werden.
Aber daß man für Chr() und Unicode auch UTF8 braucht, war mir noch nicht klar.