MaxGui Tastaturabfrage
Übersicht

![]() |
StarGazerBetreff: MaxGui Tastaturabfrage |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
ich würde gern in MaxGui Tasten abfragen, um bestimmte Sachen ausführen zu können, die eigentlich nichts mit MaxGui zu tun haben, und die sich so leider mit ihr gegenseitig stören. ZB beim drücken der "LShift" oder "LCtrl" mit kombinationen anderer Tasten etwas ausführen, jedoch geht das leider nicht, da MaxGui die Tasten irgendwie untegräbt. Bei diesem Beispiel kann ich trotz des drückens der "LShift" oder "LCtrl" Tasten, immer noch die Buttons anklicken, oder mit den Pfeiltasten durch sie durchschalten. Die MaxGui wird also immer noch durchlaufen, obwohl sie es doch nicht sollte. Auch der Print wird weiterhin ausgeführt. Es werden auch Functionen die man durch das "Select EventID()" aufruft, weiterhin durchlaufen. Hoffe ihr versteht was ich meine. Code: [AUSKLAPPEN] Import MaxGUI.Drivers
Strict Local MyWindow:TGadget=CreateWindow("MyWindow", 200,200,300,300) Local MyPanel:TGadget[2] MyPanel[0] = CreatePanel(80,50, 100,85, MyWindow,PANEL_GROUP,"Panel1") CreateButton("", 5, 5, 25,25, MyPanel[0], BUTTON_RADIO|BUTTON_PUSH) CreateButton("", 35,5, 25,25, MyPanel[0], BUTTON_RADIO|BUTTON_PUSH) CreateButton("", 65,5, 25,25, MyPanel[0], BUTTON_RADIO|BUTTON_PUSH) CreateButton("", 5, 35, 25,25, MyPanel[0], BUTTON_RADIO|BUTTON_PUSH) CreateButton("", 35,35, 25,25, MyPanel[0], BUTTON_RADIO|BUTTON_PUSH) CreateButton("", 65,35, 25,25, MyPanel[0], BUTTON_RADIO|BUTTON_PUSH) Repeat EnablePolledInput() 'KeyHit/KeyDown aktivieren If Not KeyDown(KEY_LSHIFT) And Not KeyDown(KEY_LCONTROL) Then Print "immer noch da" 'sollte aber nicht WaitEvent() Select EventID() Case EVENT_WINDOWCLOSE End End Select EndIf Forever Kann man übrigens das durchschalten der Buttons duch die Pfeiltasten ganz auschalten ? |
||
jsp |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hmm, Keydown ist eigentlich fuer den Graphics mode gedacht. Zwar schaltet Graphics auch nur EnablePolledInput ein aber ich meine der Tastaturscan fehlt dann.
In MaxGui kann man dafuer EVENT_KEYDOWN, EVENT_KEYUP und EVENT_KEYCHAR benutzen. Schwierig wird das Ganze wenn der Focus nicht kontrolliert werden kann. Als Beispiel habe ich mal die Key Sensitivity fuer die Buttons eingeschaltet, damit kann man auch KEYDOWN empfangen wenn ein Radio Button den Focus hat. Wahrscheinlich wuerde ich aber die Programmstruktur aendern, vielleicht kannst du besser beschreiben was du machen willst. Wenn die Buttons nicht gedrueckt werden sollen waehrend du was anderes machen willst wuerde ich den Code eher voneinander trennen. Um nicht mit den Pfeiltasten die Radio Button durchschalten zu koennen, koennte man entweder die Gruppe disablen: DisableGadget(MyPanel[0]) Oder wie im Code koennte man auch alle Pfeiltasten via HotKey 'verschwinden' lassen, falls die Buttons doch noch anwaehlbar sein muessen. Code: [AUSKLAPPEN] Import MaxGUI.Drivers
Strict Local MyWindow:TGadget=CreateWindow("MyWindow", 200,200,300,300) Local MyPanel:TGadget[2] MyPanel[0] = CreatePanel(80,50, 100,85, MyWindow,PANEL_GROUP,"Panel1") Local Button1:TGAdget=CreateButton("", 5, 5, 25,25, MyPanel[0], BUTTON_RADIO|BUTTON_PUSH) Local Button2:TGAdget=CreateButton("", 35,5, 25,25, MyPanel[0], BUTTON_RADIO|BUTTON_PUSH) Local Button3:TGAdget=CreateButton("", 65,5, 25,25, MyPanel[0], BUTTON_RADIO|BUTTON_PUSH) Local Button4:TGAdget=CreateButton("", 5, 35, 25,25, MyPanel[0], BUTTON_RADIO|BUTTON_PUSH) Local Button5:TGAdget=CreateButton("", 35,35, 25,25, MyPanel[0], BUTTON_RADIO|BUTTON_PUSH) Local Button6:TGAdget=CreateButton("", 65,35, 25,25, MyPanel[0], BUTTON_RADIO|BUTTON_PUSH) SetGadgetSensitivity(MyWindow,SENSITIZE_KEYS) SetGadgetSensitivity(Button1,SENSITIZE_KEYS) SetGadgetSensitivity(Button2,SENSITIZE_KEYS) SetGadgetSensitivity(Button3,SENSITIZE_KEYS) SetGadgetSensitivity(Button4,SENSITIZE_KEYS) SetGadgetSensitivity(Button5,SENSITIZE_KEYS) SetGadgetSensitivity(Button6,SENSITIZE_KEYS) SetHotKeyEvent:THotKey( KEY_LEFT,0 ) SetHotKeyEvent:THotKey( KEY_RIGHT,0 ) SetHotKeyEvent:THotKey( KEY_UP,0 ) SetHotKeyEvent:THotKey( KEY_DOWN,0 ) Repeat ' EnablePolledInput() 'KeyHit/KeyDown aktivieren ' If Not KeyDown(KEY_LSHIFT) And Not KeyDown(KEY_LCONTROL) Then Print "immer noch da" 'sollte aber nicht WaitEvent() Select EventID() Case EVENT_WINDOWCLOSE End Case EVENT_KEYDOWN DebugLog "Key down" Select EventData() Case KEY_LSHIFT DebugLog "Left Shift" Case KEY_LCONTROL DebugLog "Left Control" End Select End Select Forever |
||
Logic Gui Professional a Gui Designer for MaxGui |
![]() |
StarGazer |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich bastel an einem Editortool, indem ich beim klicken der Maustaste die Mauskoordinaten an TextFields übergebe. Das möchte ich aber nicht immer, dacher wollte ich beim drücken der Shift Taste oder CTRL Taste mit der Maus andere Sache machen, jedoch schreibt er dabei immer wieder die Mauskoordinaten in die TextFields neu ein und veränder so ständig die Daten.
Aber vieleicht kann ich das mit deiner Möglichkeit lösen, und mir dann die gedrückten Tasten in Variablen ablegen, um so auch wo anders abfragen zu können. Kann es eigentlich immer nur ein Event geben ? "EventData()", also wenn ich die Shift Taste drücke, kommt das ShiftTastenEvent, aber kann dann dafür nicht mehr die Maus abfragen ?. Ich hoffe nicht. Aufjedenfall danke, ich probiere es mal aus. |
||
jsp |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zitat: Aber vieleicht kann ich das mit deiner Möglichkeit lösen, und mir dann die gedrückten Tasten in Variablen ablegen, um so auch wo anders abfragen zu können.
Genau, damit kann man dann flexibler reagieren und z.B. das Update der TextFields entsprechend steuern. Zitat: Kann es eigentlich immer nur ein Event geben ?
Jein. Natuerlich gibt es mehr als ein Event, aber die kommen nicht gleichzeitig sondern hoechstens sehr schnell nacheinander. Und werden dann in eine Warteschlange zum Abarbeiten abgelegt. Dein WaitEvent() wartet bis ein Event vorhanden ist in der Warteschlange und Select EventID() prueft dann was das fuer ein Event war. Das heisst in der Abarbeitung befindet sich immer nur ein Event! In der Warteschlange wartet aber vielleicht schon der naechste Mausclick... Da das Programm jedes Event schnell in der Repeat WaitEvent Forever Schleife ausfuehrt, kommt einem das so vor, als wenn das alles gleichzeitig passiert. |
||
Logic Gui Professional a Gui Designer for MaxGui |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group