Problem mit EVENT_KEYDOWN
Übersicht

danibertBetreff: Problem mit EVENT_KEYDOWN |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo
ich versuche, eine Tastatureingabe abzufragen, bekomme es aber leider nicht zum Laufen. Alle Beispiele, die ich hier im Forum finden konnte, zeigen keine Reaktion auf das Drücken einer Taste. Code: [AUSKLAPPEN] Import maxgui.drivers
Strict Local MyWindow:TGadget=CreateWindow("Fenstertitel", 200,200,320,240) Local MyButton:TGadget=CreateButton("Text",140,60,80,40, MyWindow,BUTTON_OK) Repeat WaitEvent() Select EventID() Case EVENT_WINDOWCLOSE End Case EVENT_KEYDOWN Select EventData() Case KEY_ENTER Print "TASTE GEDRÜCKT" End Select End Select Forever Hat jemand einen Tipp, wie ich das hin bekomme? Danke im Voraus |
||
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hast du ein Canvas-Gadget erstellt?
Nein. So viel ich weiß, werden diese Events nur bei diesen speziellen Zeichenflächen und bei keinem anderen Gadget erstellt. Da es bei dir aber nur ein Fenster und einen Button gibt, passiert nichts. Wenn du irgendeine Tastenkombination erstellen möchtest, ist "SetHotKeyEvent" wahrscheinlich eher angebracht. mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Buttons, die den Parameter BUTTON_OK verwenden, sollte man genauso abfragen können wie normale Buttons wenn ich mich recht erinnere. Einfach nur
BlitzMax: [AUSKLAPPEN] If EventSource()=MyButton Then ... |
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
danibert |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ich möchte das Ganze in einem Panel mit Eingabefeldern verwenden, damit man die Eingaben auch mit Return abschicken kann.
Wenn ich in dem Panel Code: [AUSKLAPPEN] SetGadgetSensitivity panel_Eingabe, SENSITIZE_KEYS angebe, kann ich die Tasten mit EVENT_KEYDOWN abfragen.
Allerdings muss ich zuerst mit der Maus in das Panel klicken, um den Fokus darauf zu setzen. Gibt es einen Befehl, mit dem ich den Focus automatisch auf das Panel setzen kann? |
||
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sollte mit ActivateGadget(panel) funktionieren. | ||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
danibert |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
OK, ich versuche das jetzt mal noch einfacher aufzubauen:
Ich habe also ein Eingabeformular mit 2 Eingabefeldern und einer Schaltfläche. Wenn ich die Schaltfläche mit activategadget() fokussiere, kann ich das Formular mit Return abschicken. Sobald ich den Cursor in ein Eingabefeld stelle, geht das natürlich nicht mehr. Code: [AUSKLAPPEN] Import maxgui.drivers
Strict Local MyWindow:TGadget=CreateWindow("Fenster", 200,200,320,240) Local in01:TGadget=CreateTextField(10,10,180,20,MyWindow) Local in02:TGadget=CreateTextField(10,40,180,20,MyWindow) Local btn1:TGadget = CreateButton("Weiter", 10, 80, 100, 22, MyWindow) activategadget(btn1) Function machwas() Print "OK" End Function Repeat WaitEvent() Select EventID() Case EVENT_WINDOWCLOSE End Case EVENT_GADGETACTION Select EventSource() Case btn1 machwas() End Select End Select Forever Ich habe schon versucht, die Eingaben auszuwerten, bekomme aber für die Returntaste keinen Wert zurückgeliefert. Ich habe hier im Forum einige Beiträge zu dem Thema gefunden, aber nichts davon funktioniert. Wie kann ich das denn nun bewerkstelligen, dass die Return-Taste abgefragt wird, wenn eines der Eingabefelder aktiv ist? |
||
jsp |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zitat: Wie kann ich das denn nun bewerkstelligen, dass die Return-Taste abgefragt wird, wenn eines der Eingabefelder aktiv ist?
Dafuer ist der BUTTON_OK Style gedacht. Der Event vom Button wird erzeugt wenn man drauf klickt oder wenn die Return Taste gedrückt wurde. Das Gegenstück dazu ist der BUTTON_CANCEL Style, der wird auch aufgerufen wenn man ESC gedrückt hat. Wenn die Buttons nicht gewünscht sind aber ihre Funktion gebraucht wird, einfach den Button mit HideGadget verstecken. Eine andere Variante ist die Events von den TextFields abzufangen und praktisch bei jeder Tasteneingabe zu prüfen was nun darin steht... TextFields verfügen auch über Filter die gesetzt werden können falls bestimmte Tasten nicht erlaubt sind oder einer besonderen Behandlung bedürfen. EDIT: Es gibt auch noch den nützlichen EVENT_GADGETLOSTFOCUS für TextFields. Der Event ist praktisch wenn man sich von einem Textfeld zum nächsten weitergeht - z.B. mit Tab - dann verliert das vorherige TextField den Focus, darauf kann man dann reagieren und z.B. den Wert speichern oder so... Code: [AUSKLAPPEN] Import maxgui.drivers
Strict Local MyWindow:TGadget=CreateWindow("Fenster", 200,200,320,240) Local in01:TGadget=CreateTextField(10,10,180,20,MyWindow) Local in02:TGadget=CreateTextField(10,40,180,20,MyWindow) Local btn1:TGadget = CreateButton("Weiter", 10, 80, 100, 22, MyWindow,BUTTON_OK) ActivateGadget(btn1) Function machwas() Print "OK" End Function Repeat WaitEvent() Select EventID() Case EVENT_WINDOWCLOSE End Case EVENT_GADGETACTION Select EventSource() Case btn1 machwas() End Select End Select Forever |
||
Logic Gui Professional a Gui Designer for MaxGui |
danibert |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@jsp
Danke, so werde ich es umsetzen. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group