[kein Bug] CanvasGadget und Key-Codes Ctrl,Shift,Alt

Für allgemeine Fragen zur Programmierung mit PureBasic.
DePe
Beiträge: 194
Registriert: 26.11.2017 16:17

[kein Bug] CanvasGadget und Key-Codes Ctrl,Shift,Alt

Beitrag von DePe »

Windows 7, PB v6.01 32-Bit

Die Tastatureingaben in einem CanvasGadget entsprechen laut der Hilfe den #PB_Shortcut_-Konstanten.
Bei der Ctrl, Shift und Alt bzw. AltGr-Taste ist das nicht so. Da wird die Nummer des gesetzten Bits der Konstante zurückgegeben.
Ich vermute das ist ein Fehler, da keine kombinierten Tastencodes zurückgegeben werden, sondern jede Taste einzeln.
Oder ist das ein Fehler in der Hilfe?

Code: Alles auswählen

If OpenWindow(0, 0, 0, 400, 300, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
	CanvasGadget(0, 10, 10, 380, 280, #PB_Canvas_Keyboard)
	SetActiveGadget(0)
	
	Repeat
		Event = WaitWindowEvent()
		
		If Event = #PB_Event_Gadget And EventGadget() = 0
			EventType = EventType()
			If EventType = #PB_EventType_KeyDown
				Debug "KeyDown = " + GetGadgetAttribute(0, #PB_Canvas_Key)
			ElseIf EventType = #PB_EventType_KeyUp
				Debug "KeyUp = " + GetGadgetAttribute(0, #PB_Canvas_Key)
			EndIf
		EndIf    
		
	Until Event = #PB_Event_CloseWindow
	
	Debug "Shift = " + #PB_Shortcut_Shift ; 65536 = 2^16
	Debug "Control = " + #PB_Shortcut_Control ; 131072 = 2^17
	Debug "Alt (Alt Gr) = " + #PB_Shortcut_Alt ; 262144 = 2^18
EndIf

// Verschoben von "Bugs" nach "Fragen/Allgemein" (Kiffi)
Zuletzt geändert von DePe am 11.04.2023 20:57, insgesamt 1-mal geändert.
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: CanvasGadget und Key-Codes Ctrl,Shift,Alt

Beitrag von mk-soft »

Dafür gibt es GetGadgetAttribute(0, #PB_Canvas_Modifiers)

Wie es aussieht verhalten sich die OS unterschiedlich in der Codeausgabe von der Tastatur.

macOS:
Ctrl+A ist 1, Ctrl+B ist 2 und so weiter ..
Alt+[x] hat keine Zeichen, da diese für Menu Short Cut reserviert sind.

Code: Alles auswählen

If OpenWindow(0, 0, 0, 400, 300, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
	CanvasGadget(0, 10, 10, 380, 280, #PB_Canvas_Keyboard)
	SetActiveGadget(0)
	
	Repeat
		Event = WaitWindowEvent()
		
		If #PB_Event_Gadget And EventGadget() = 0
			Select EventType()
			Case #PB_EventType_KeyDown
			  modifier.s = ""
			  modi = GetGadgetAttribute(0, #PB_Canvas_Modifiers)
			  If modi & #PB_Canvas_Shift
			    modifier.s + "Shift + "
			  EndIf
			  
			  If modi & #PB_Canvas_Control
			    modifier.s + "Ctrl + "
			  EndIf
			  If modi & #PB_Canvas_Alt
			    modifier.s + "Alt + "
			  EndIf
			  CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
  			  If modi & #PB_Canvas_Command ; macOS
  			    modifier.s + "CMD + "
  			  EndIf
  			CompilerEndIf
			  key = GetGadgetAttribute(0, #PB_Canvas_Key)
				Debug "KeyDown = " + modifier + key 
			Case #PB_EventType_KeyUp
			  ;Debug "KeyUp = " + GetGadgetAttribute(0, #PB_Canvas_Key)
			Case #PB_EventType_Input
			  Debug "Input = " +Chr(GetGadgetAttribute(0, #PB_Canvas_Input))
			EndSelect
		EndIf    
		
	Until Event = #PB_Event_CloseWindow
	
	
EndIf
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
DePe
Beiträge: 194
Registriert: 26.11.2017 16:17

Re: CanvasGadget und Key-Codes Ctrl,Shift,Alt

Beitrag von DePe »

Hallo mk-soft,

danke. Die Option mit #PB_Canvas_Modifiers habe ich übersehen.

Peter
Antworten