Unicode + XP

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
CSHW89
Beiträge: 489
Registriert: 14.12.2008 12:22

Unicode + XP

Beitrag 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
Bild Bild Bild
http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
Benutzeravatar
helpy
Beiträge: 636
Registriert: 29.08.2004 13:29

Re: Unicode + XP

Beitrag 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
Windows 10
PB Last Final / (Sometimes testing Beta versions)
Benutzeravatar
CSHW89
Beiträge: 489
Registriert: 14.12.2008 12:22

Re: Unicode + XP

Beitrag 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
Bild Bild Bild
http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
Benutzeravatar
helpy
Beiträge: 636
Registriert: 29.08.2004 13:29

Re: Unicode + XP

Beitrag 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
Windows 10
PB Last Final / (Sometimes testing Beta versions)
matbal
Beiträge: 261
Registriert: 30.03.2011 20:53

Re: Unicode + XP

Beitrag 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
Benutzeravatar
CSHW89
Beiträge: 489
Registriert: 14.12.2008 12:22

Re: Unicode + XP

Beitrag 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
Bild Bild Bild
http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
matbal
Beiträge: 261
Registriert: 30.03.2011 20:53

Re: Unicode + XP

Beitrag 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.
Benutzeravatar
CSHW89
Beiträge: 489
Registriert: 14.12.2008 12:22

Re: Unicode + XP

Beitrag von CSHW89 »

Ok, dann nochmal vielen Dank

lg Kevin
Bild Bild Bild
http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Unicode + XP

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
matbal
Beiträge: 261
Registriert: 30.03.2011 20:53

Re: Unicode + XP

Beitrag 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.
Antworten