ToAsciiEx gibt chinesische Zeichen zurück

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

ToAsciiEx gibt chinesische Zeichen zurück

Beitrag von Fluid Byte »

Funktionstasten wie BKSPACE oder ESC geben keine oder zufällige Zeichen zurück, was auch normal ist. Wenn ich aber aber Zirkumflex "^" oder Akut "´" drücke kommen chinesische Zeichen. Soll das so sein oder habe ich was übersehen?

Code: Alles auswählen

OpenWindow(0,0,0,300,100,"",#PB_Window_SystemMenu | 1)
TextGadget(0,20,20,260,60,"none",#WS_BORDER|#SS_CENTER|#SS_CENTERIMAGE)
SetGadgetColor(0,#PB_Gadget_BackColor,#White)
SetGadgetFont(0,LoadFont(0,"Arial",22,#PB_Font_Bold))

Procedure WindowCallback(hwnd,usmg,wparam,lparam)		
	If usmg = #WM_KEYDOWN
		Scancode = lParam >> 16 & $00FF
		
		Layout = GetKeyboardLayout_(0)
		
		Dim State(256)
			
		If GetKeyboardState_(State()) = #False
			ProcedureReturn 0
		EndIf	
			
		VKey = MapVirtualKeyEx_(Scancode,1,Layout)
		
		ToAsciiEx_(VKey,Scancode,State(),@lpChar,0,Layout) 		
		
 		SetGadgetText(0,PeekS(@lpChar))
		
		ProcedureReturn 0
	EndIf
	
	ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

SetWindowCallback(@WindowCallback())

Repeat : Until WaitWindowEvent()  = #PB_Event_CloseWindow
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: ToAsciiEx gibt chinesische Zeichen zurück

Beitrag von RSBasic »

Es hat damit zu tun, dass bei dir Unicode aktiviert ist. Ohne Unicode gehts.
D.h. du musst es nach Unicode konvertieren oder nach einer Unicode-Funktion suchen.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: ToAsciiEx gibt chinesische Zeichen zurück

Beitrag von mk-soft »

Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Re: ToAsciiEx gibt chinesische Zeichen zurück

Beitrag von Fluid Byte »

RSBasic hat geschrieben:Es hat damit zu tun, dass bei dir Unicode aktiviert ist. Ohne Unicode gehts.
D.h. du musst es nach Unicode konvertieren oder nach einer Unicode-Funktion suchen.
Ich kann mich dunkel erinnern das es früher in den Compiler-Optionen eine Einstellung gab um Unicode zu aktivieren/deaktivieren. Ist es das was du meinst? Das Ding ist, diese Option gibt es bei mir nicht.

Teste ich diesen Code bestätigt er das Unicode aktiviert ist.

Code: Alles auswählen

CompilerIf #PB_Compiler_Unicode 
	Debug "Unicode = True"
CompilerElse
	Debug "Unicode = False"
CompilerEndIf
Und die Dokumentation zeigt Unicode als Compiler-Option:

https://www.purebasic.com/german/docume ... piler.html

Bild

Ich benutze PB v5.61 / 64bit. Ist das normal oder ein Bug?
mk-soft hat geschrieben:ToUnicodeEx...

Link https://msdn.microsoft.com/de-de/librar ... s.85).aspx
So läufts einwandfrei, gracias.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Re: ToAsciiEx gibt chinesische Zeichen zurück

Beitrag von Fluid Byte »

Gerade das hier gefunden:

https://www.purebasic.com/documentation ... story.html
25th July 2016 : Version 5.50

- Removed: ASCII mode for internal PureBasic string representation, PureBasic is now unicode only.
Hat sich somit erledigt
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: ToAsciiEx gibt chinesische Zeichen zurück

Beitrag von mk-soft »

Der Ascii Support endet mit der PB-Version 5.46 LTS.

Mit der Version 5.6x kann man nur noch Unicode Applikationen schreiben.

Sollte man zur Übergabe von Textdaten noch Ascii oder UTF8 benötigen, so gibt es seit dem zwei neue Befehle

*mem = ASCII(text) und *mem = UTF8(text)

P.S.
Einfaches Handling von Ascii und UTF8 Daten im Unicode Programm

Code: Alles auswählen

Structure udtArray
  a.a[0]
  b.b[0]
  c.c[0]
  w.w[0]
  ; etc
EndStructure

Macro AsciiByteLen(mem)
  (MemorySize(mem) - 1)
EndMacro

Macro UTF8ByteLen(mem)
  (MemorySize(mem) - 1)
EndMacro

*mem.udtArray = Ascii("Hello World")
len = AsciiByteLen(*mem)
Debug "Len = " + len
Debug PeekS(*mem, -1, #PB_Ascii)
FreeMemory(*mem)

*mem.udtArray = UTF8("Hello World, äöü")
len = UTF8ByteLen(*mem)
Debug "Len = " + len
Debug PeekS(*mem, -1, #PB_UTF8)

For i = 0 To Len ; with Nullbyte
  Debug "Char " + i+ ": " + Hex(*mem\a[i], #PB_Byte)
Next                     
FreeMemory(*mem)
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Re: ToAsciiEx gibt chinesische Zeichen zurück

Beitrag von Fluid Byte »

Ich will jede Taste auf dem Keyboard lesen und den entsprechenden Namen, abhängig von der Systemsprache, per Text ausgeben.

Das funktioniert hiermit ganz gut:

Code: Alles auswählen

OpenWindow(0,0,0,280,150,"",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)
TextGadget(0,10,10,100,20,"CHARACTER")
TextGadget(1,10,80,100,20,"VIRTUAL KEY")
TextGadget(2,150,80,100,20,"SCAN CODE")
SetGadgetFont(#PB_Default,LoadFont(0,"Segoe UI",10,#PB_Font_Bold))
TextGadget(3,10,30,260,40,"none",#WS_BORDER | #SS_CENTER | #SS_CENTERIMAGE)
TextGadget(4,10,100,120,40,"none",#WS_BORDER | #SS_CENTER | #SS_CENTERIMAGE)
TextGadget(5,150,100,120,40,"none",#WS_BORDER | #SS_CENTER | #SS_CENTERIMAGE)

SetGadgetColor(3,#PB_Gadget_BackColor,#White)
SetGadgetColor(4,#PB_Gadget_BackColor,#White)
SetGadgetColor(5,#PB_Gadget_BackColor,#White)

Procedure.s GetKeyName(wParam,lParam)
	Protected Buffer$ = Space(256)
	
	GetKeyNameText_(lparam,Buffer$,256)
	SetGadgetText(3,Buffer$)
	SetGadgetText(4,Str(wParam))
	SetGadgetText(5,Str((lParam >> 16) & $FF))	
	
	ProcedureReturn Buffer$
EndProcedure

Procedure WindowCallback(hWnd,uMsg,wParam,lParam)
	Select uMsg		
		Case #WM_KEYUP ; PRINT KEY
		If wParam = #VK_SNAPSHOT
			GetKeyName(wParam,lParam)
			
			ProcedureReturn 0
		EndIf				

		Case #WM_SYSKEYDOWN ; LEFT ALT / F10
		GetKeyName(wParam,lParam)		
		
		ProcedureReturn 0

 		Case #WM_KEYDOWN
		GetKeyName(wParam,lParam)		
		
		ProcedureReturn 0
	EndSelect
	
	ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

SetWindowCallback(@WindowCallback())

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
Zwei Fragen diesbezüglich:

1.) Drücke ich die Tasten "/" und "*" auf dem Numpad steht da nur "(ZEHNERTASTATUR)" ohne das Zeichen das die Taste repräsentiert. Drücke ich ENTER steht da "ENTER (ZEHNERTASTATUR)". So sollte es auch für die beiden erwähnten Tasten sein.

Also "/ (ZEHNERTASTATUR)" und "* (ZEHNERTASTATUR)"

2.) Wie kann ich den TAB key auslesen? Drücke ich diese Taste kommen lediglich 3 Nachrichten:

Code: Alles auswählen

; #WM_COMMAND ; 273
; WM_QUERYUISTATE ; 297
; WM_KEYUP ; 257
Kein #WM_KEYDOWN oder #WM_SYSKEYDOWN. Ist das normal?
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
HeX0R
Beiträge: 2954
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Re: ToAsciiEx gibt chinesische Zeichen zurück

Beitrag von HeX0R »

zu 2:

Code: Alles auswählen

RemoveKeyboardShortcut(0, #PB_Shortcut_Tab)
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Re: ToAsciiEx gibt chinesische Zeichen zurück

Beitrag von Fluid Byte »

Danke, wäre ich in 100 Jahren nicht drauf gekommen.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Antworten