Darstellung erweiterter ASCII-Codes mit DrawText
-
- Beiträge: 26
- Registriert: 05.11.2006 22:01
- Kontaktdaten:
Darstellung erweiterter ASCII-Codes mit DrawText
Hey,
weiß jemand, ob und wie das möglich ist? Würde gerne mit DrawText solche erweiterten ASCII-Zeichen darstellen, wie z.B. diese Ecken (191, 192, 217, 218). Ich habe es schon mit verschiedenen Zeichensätzen, mit der Einstellung Unicode im Compiler und mit UTF-8 Codierung des Quellcodes probiert, jedoch klappt es nicht.
weiß jemand, ob und wie das möglich ist? Würde gerne mit DrawText solche erweiterten ASCII-Zeichen darstellen, wie z.B. diese Ecken (191, 192, 217, 218). Ich habe es schon mit verschiedenen Zeichensätzen, mit der Einstellung Unicode im Compiler und mit UTF-8 Codierung des Quellcodes probiert, jedoch klappt es nicht.
Zuletzt geändert von johnnysnet am 09.11.2006 13:57, insgesamt 1-mal geändert.
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
interessante frage....
ich habs noch nie probiert, man müste ja den charset-code auf reinem ANSI bzw. ASCII ansprechen...
...und das über direct-draw...
hast du schon mal die help-seiten von MS über direct-draw durchforstet?
ich habs noch nie probiert, man müste ja den charset-code auf reinem ANSI bzw. ASCII ansprechen...
...und das über direct-draw...
hast du schon mal die help-seiten von MS über direct-draw durchforstet?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
-
- Beiträge: 26
- Registriert: 05.11.2006 22:01
- Kontaktdaten:
Scheinbar hast Du nicht den richtigen Font erwischt ?
Code: Alles auswählen
If OpenWindow(0, 100, 200, 195, 260, "PureBasic Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
StartDrawing(WindowOutput(0))
DrawingFont(GetStockObject_(#OEM_FIXED_FONT))
FrontColor(RGB(255,0,0))
BackColor(0)
DrawText(20,8,Chr(191))
DrawText(10,22,Chr(192))
DrawText(20,22,Chr(217))
DrawText(10,8,Chr(218))
StopDrawing()
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_CloseWindow
Quit = 1
EndIf
Until Quit = 1
EndIf
End
Gruss Andreas
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
@Andreas
erklärung?
tatsächlich kann ich in der zeichentabelle auswählen, ob er mir den
gewählten zeichensatz in DOS, WIN oder Unicode anzeigen soll.
und zwar denselben zeichensatz.
und in DOS-mode hat er den rahmen, in Unicode nicht.
anscheinend ändert dein API-aufruf das.
aber nicht den Font, sondern der Font-mode.
@johnnysnet
> Auf die Idee, bei MS etwas nachzuschauen, würde ich nie kommen.
...bitte an die sarkasmus-tags denken...
Code: Alles auswählen
DrawingFont(GetStockObject_(#OEM_FIXED_FONT))
tatsächlich kann ich in der zeichentabelle auswählen, ob er mir den
gewählten zeichensatz in DOS, WIN oder Unicode anzeigen soll.
und zwar denselben zeichensatz.
und in DOS-mode hat er den rahmen, in Unicode nicht.
anscheinend ändert dein API-aufruf das.
aber nicht den Font, sondern der Font-mode.
@johnnysnet
> Auf die Idee, bei MS etwas nachzuschauen, würde ich nie kommen.
...bitte an die sarkasmus-tags denken...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
GetStockObject_(#OEM_FIXED_FONT) gibt ein Handle auf den OEM/DOS Font zurück, mehr nicht.Kaeru Gaman hat geschrieben:@Andreaserklärung?Code: Alles auswählen
DrawingFont(GetStockObject_(#OEM_FIXED_FONT))
tatsächlich kann ich in der zeichentabelle auswählen, ob er mir den
gewählten zeichensatz in DOS, WIN oder Unicode anzeigen soll.
und zwar denselben zeichensatz.
und in DOS-mode hat er den rahmen, in Unicode nicht.
anscheinend ändert dein API-aufruf das.
aber nicht den Font, sondern der Font-mode.
Gruss Andreas
-
- Beiträge: 26
- Registriert: 05.11.2006 22:01
- Kontaktdaten:
@Andreas
Vielen Dank für dein Beispiel. So wie ich das verstehe, ist die Konstante #OEM_FIXED_FONT sozusagen wie eine FontID.
Vielen Dank für dein Beispiel. So wie ich das verstehe, ist die Konstante #OEM_FIXED_FONT sozusagen wie eine FontID.
Das stimmt, denn nachdem ich mir mal in der Zeichentabelle ein paar Fonts angesehen habe, musste ich feststellen, dass längst nicht alle diese Rahmensymbole enthalten. Für mein Programm möchte ich die Schrift "Terminal" nutzen und tatsächlich funktioniert es mit dieser. Doch die Frage ist für mich noch nicht entgültig geklärt, denn auch die Schrift "Courier New" enthält diese Symbole nur bei dieser bekomme ich sie nicht angezeigt. Ich kann nur vermuten, dass das damit zusammenhängt, wieviele Zeichen ein Zeichensatz enthält. Womöglich sind dann die Zeichen, welche nach der 255. Position liegen, auf diesem Wege nicht erreichbar.Scheinbar hast Du nicht den richtigen Font erwischt ?
-
- Beiträge: 26
- Registriert: 05.11.2006 22:01
- Kontaktdaten:
Nicht schlecht, es direkt in den Editor von PB einzugeben. Was auch immer ich versuche, mir gelingt dies nicht.
Wie auch immer, PB ist ohne Frage eine super Sache, aber: Das Arbeiten mit Fonts ist meiner Meinung nach noch nicht zufriedenstellend. Noch immer enthält die Font Library lediglich 4 Befehle/Funktionen. Für die Zukunft fände ich ganz wichtig eine Funktion zum Überprüfen, ob genau der angegebene Zeichensatz geladen wurde oder nicht. Nur zu wissen, dass irgendeiner geladen wurde, reicht nicht immer aus. Über die Möglichkeit, einen eigenen Bitmapfont zu erstellen, den man dann in sein Programm einbindet, habe ich auch schon nachgedacht, nur gibt es den großen Nachteil, dass die Handhabung desselben nicht so komfortabel ist, wie mit einem "echten" Font.
Wie auch immer, PB ist ohne Frage eine super Sache, aber: Das Arbeiten mit Fonts ist meiner Meinung nach noch nicht zufriedenstellend. Noch immer enthält die Font Library lediglich 4 Befehle/Funktionen. Für die Zukunft fände ich ganz wichtig eine Funktion zum Überprüfen, ob genau der angegebene Zeichensatz geladen wurde oder nicht. Nur zu wissen, dass irgendeiner geladen wurde, reicht nicht immer aus. Über die Möglichkeit, einen eigenen Bitmapfont zu erstellen, den man dann in sein Programm einbindet, habe ich auch schon nachgedacht, nur gibt es den großen Nachteil, dass die Handhabung desselben nicht so komfortabel ist, wie mit einem "echten" Font.
Zuletzt geändert von johnnysnet am 10.11.2006 17:26, insgesamt 1-mal geändert.
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
du kannst dir auch nen TrueType-Font selber erstellen, gibt werkzeuge dafür im Netz....
ich gebe dir recht, dass die arbeit mit Fonts etwas erleichtert werden könnte...
aber es ist tatsächlich relativ normal, dass irgendein zeichensatz geladen wird,
wenn der gewünschte nicht vorhanden ist.
erstelle mal ein Word-Dokument mit ziemlich speziellen Zeichensätzen,
und lade es dann auf einem rechner, der diese zeichensätze nicht hat...
...du wirst sehen, dass er das stur in einem halbwegs ähnlichen oder sogar in Arial anzeigt,
ohne dir die gerigste fehlermeldung zu poppen...
eigentlich arbeitet man auch nur mit eigenen fonts, wenn man die selbst erstellt hat und mitliefert.
wenn man irgendwelchen text auf fenstern darstellt, put man den sowieso meist in gadgets,
und diese beläßt man in der einstellung, wie der benutzer sein windows eben eingestellt hat.
und rahmen zeichnet man eigentlich unter benutzung von Box und Line,
und nicht per zusammenstückeln aus einzelnen chars,
außer man möchte ganz bewusst für irgendein game ein DOS-Pur-Feeling erzeugen.
schau dir mal so ein beispiel an:
ich gebe dir recht, dass die arbeit mit Fonts etwas erleichtert werden könnte...
aber es ist tatsächlich relativ normal, dass irgendein zeichensatz geladen wird,
wenn der gewünschte nicht vorhanden ist.
erstelle mal ein Word-Dokument mit ziemlich speziellen Zeichensätzen,
und lade es dann auf einem rechner, der diese zeichensätze nicht hat...
...du wirst sehen, dass er das stur in einem halbwegs ähnlichen oder sogar in Arial anzeigt,
ohne dir die gerigste fehlermeldung zu poppen...
eigentlich arbeitet man auch nur mit eigenen fonts, wenn man die selbst erstellt hat und mitliefert.
wenn man irgendwelchen text auf fenstern darstellt, put man den sowieso meist in gadgets,
und diese beläßt man in der einstellung, wie der benutzer sein windows eben eingestellt hat.
und rahmen zeichnet man eigentlich unter benutzung von Box und Line,
und nicht per zusammenstückeln aus einzelnen chars,
außer man möchte ganz bewusst für irgendein game ein DOS-Pur-Feeling erzeugen.
schau dir mal so ein beispiel an:
Code: Alles auswählen
OpenWindow(0,0,0,200,200,"Rahmen-Demo",#PB_Window_ScreenCentered | #PB_Window_SystemMenu)
StartDrawing(WindowOutput(0))
Box(50,50,100,100,$802020)
DrawingMode(4)
Box(51,51,100,100,$401010)
Box(49,49,100,100,$FF4040)
Box(50,50,100,100,$C03030)
StopDrawing()
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.