Mit Return zum nächsten Textfeld??
Mit Return zum nächsten Textfeld??
Hallo,
will jetzt endlich meine Progs zu ende proggen welche ich früher angefangen hab. Dabei bin ich wieder auf ein paar Probs gestoßen welche ich auch nicht durch die Suche beantwortet bekommen hab.
Und zwar wie lege ich den Focus automatisch auf ein Textfeld??
Wie kann ich es machen das wenn man die Eingabetaste drückt man zum nächsten Textfeld kommt bzw zu einem OK Button??
Vielen Dank schonmal
Gruß
Scream
will jetzt endlich meine Progs zu ende proggen welche ich früher angefangen hab. Dabei bin ich wieder auf ein paar Probs gestoßen welche ich auch nicht durch die Suche beantwortet bekommen hab.
Und zwar wie lege ich den Focus automatisch auf ein Textfeld??
Wie kann ich es machen das wenn man die Eingabetaste drückt man zum nächsten Textfeld kommt bzw zu einem OK Button??
Vielen Dank schonmal
Gruß
Scream
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Der Wechsel geschieht eigentlich per TAB und nicht mit Return, ist also absolut unüblich. Hier mal ein simples Beispiel, wie kompliziert das ist

Code: Alles auswählen
EnableExplicit
Procedure SetCallbackEx(hWnd.l, Proc.l)
Protected OldProc = SetWindowLong_(hWnd, #GWL_WNDPROC, Proc)
If OldProc
SetWindowLong_(hWnd, #GWL_USERDATA, OldProc)
EndIf
ProcedureReturn OldProc
EndProcedure
Procedure Callback(hWnd,Msg,wParam,lParam)
Protected OldProc = GetWindowLong_(hWnd, #GWL_USERDATA)
If #WM_KEYUP = Msg
If wParam = #VK_RETURN
SetActiveGadget(1)
EndIf
EndIf
ProcedureReturn CallWindowProc_(OldPROC, hWnd, Msg, wParam, lParam)
EndProcedure
OpenWindow(0, #PB_Ignore,0, 200, 200, "")
If CreateGadgetList(WindowID(0))
StringGadget(0,10,10,100,20,"")
SetCallbackEx(GadgetID(0), @callback())
ButtonGadget(1, 20, 80, 50, 25, "Okay")
EndIf
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Okay, dann eben so

Code: Alles auswählen
EnableExplicit
OpenWindow(0, #PB_Ignore,0, 200, 200, "")
AddKeyboardShortcut(0, #PB_Shortcut_Return, 0)
If CreateGadgetList(WindowID(0))
StringGadget(0,10,10,100,20,"")
ButtonGadget(1, 20, 80, 50, 25, "Okay")
EndIf
SetActiveGadget(0)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Menu
If EventMenu() = 0
SetActiveGadget(GetActiveGadget()!1)
EndIf
EndSelect
ForEver

PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Hallo,
Sowas hat mich auch interessiert. Da es mit dem XOR - Operator (!)
für den einen oder anderen Neuen etwas verwirrend ist, habe ich
obiges Beispiel etwas modifiziert. So sieht man denn auch, wie man
es mit mehreren StringGadgets macht.
PS : In meiner Firma arbeite ich auch mit einer Eingabemaske, die
mit Return die Eingabefelder verläßt. Die anderen Funktionen sind
über die Funktionstasten erreichbar (CSB Warenwirtschaftssystem).
Ich habs selber nicht geglaubt, wie schnell man mittags seine Bestellungen
eingetippt hat. Das geht (brauch ja nur Kundenr. , Datum und Artikelnr. einzugeben) über den Nummernblock und ganz rechts mit der Returntaste ganz fix. Die Maus brauch ich da in den seltensten Fällen.
Sowas hat mich auch interessiert. Da es mit dem XOR - Operator (!)
für den einen oder anderen Neuen etwas verwirrend ist, habe ich
obiges Beispiel etwas modifiziert. So sieht man denn auch, wie man
es mit mehreren StringGadgets macht.
Code: Alles auswählen
EnableExplicit
OpenWindow(0, #PB_Ignore,0, 200, 220, "")
AddKeyboardShortcut(0, #PB_Shortcut_Return, 0)
If CreateGadgetList(WindowID(0))
StringGadget(0,10,10, 100,20,"")
StringGadget(1,10,40, 100,20,"")
StringGadget(2,10,70, 100,20,"")
StringGadget(3,10,100,100,20,"")
StringGadget(4,10,130,100,20,"")
ButtonGadget(5, 20, 180, 50, 25, "Okay")
EndIf
SetActiveGadget(0)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Menu
If EventMenu() = 0
Select GetActiveGadget()
Case 0 To 3
; StringGadget 1 bis 3 : eins weiter schalten
SetActiveGadget(GetActiveGadget() +1)
Case 4
; bei StringGadget 4 (das letzte) --> wieder zum Ersten
SetActiveGadget(0)
EndSelect
EndIf
Case #PB_Event_Gadget
If EventGadget() = 5
; Button Okay --> Ende
Break
EndIf
EndSelect
ForEver
End
mit Return die Eingabefelder verläßt. Die anderen Funktionen sind
über die Funktionstasten erreichbar (CSB Warenwirtschaftssystem).
Ich habs selber nicht geglaubt, wie schnell man mittags seine Bestellungen
eingetippt hat. Das geht (brauch ja nur Kundenr. , Datum und Artikelnr. einzugeben) über den Nummernblock und ganz rechts mit der Returntaste ganz fix. Die Maus brauch ich da in den seltensten Fällen.
Hab da was im englischen Forum gefunden.
Common.pb
Über Menu SendKey auslösen.
FF
Code: Alles auswählen
Procedure SendKey(Option.l)
; Author : Oliv
keybd_event_(Option,0,0,0) ; Simulate Keypress
keybd_event_(Option,0,#KEYEVENTF_KEYUP,0) ; Simulate release key
Delay(60)
EndProcedure
; Delay(5000)
; SendKey(#VK_F5) ; Simulate F5 Keystroke
; SendKey(#VK_RETURN) ; Simulate Enter Keystroke
open_window_0()
AddKeyboardShortcut(0, #PB_Shortcut_Return, 1)
exit = 0
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case 0,1,2,3:
EndSelect
Case #PB_Event_Menu
Select EventMenu()
Case 1 : SendKey(#VK_TAB)
EndSelect
Case #PB_Event_CloseWindow
exit = 1
EndSelect
Until exit
End
Code: Alles auswählen
; PureBasic Visual Designer v3.95 build 1485 (PB4Code)
;- Window Constants
;
Enumeration
#Window_0
EndEnumeration
;- Gadget Constants
;
Enumeration
#String_0
#String_1
#String_2
#String_3
#Button
EndEnumeration
Procedure Open_Window_0()
If OpenWindow(#Window_0, 229, 111, 600, 300, "New window ( 0 )", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Window_0))
StringGadget(#String_0, 10, 10, 110, 30, "")
StringGadget(#String_1, 140, 10, 110, 30, "")
StringGadget(#String_2, 270, 10, 110, 30, "")
StringGadget(#String_3, 400, 10, 100, 30, "")
ButtonGadget(#Button, 10, 60, 110, 40, "Ok")
EndIf
EndIf
EndProcedure
FF

Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Was ne sinnvolle Ergänzung wäre:
Bei einem gefüllten Stringgadget automatisch ins nächste zu springen. Dazu muss die Anzahl der Zeichen natürlich begrenzt sein. Dann ist das mit der Return-Taste entbehrlich und so eigentlich am schnellsten.
Kenn ich auch so von meinem ERP-System.
Gruß Karl
Bei einem gefüllten Stringgadget automatisch ins nächste zu springen. Dazu muss die Anzahl der Zeichen natürlich begrenzt sein. Dann ist das mit der Return-Taste entbehrlich und so eigentlich am schnellsten.
Kenn ich auch so von meinem ERP-System.
Gruß Karl
The Kopyright Liberation Front also known as the justified ancients of Mumu!
PB 5.X
PB 5.X
Danke nochmal für die überarbeitung, habe das system auch mehr oder weniger verstanden....doch ist das eigentlich quelltext für pb4.0 ???H.Brill hat geschrieben:Code: Alles auswählen
EnableExplicit OpenWindow(0, #PB_Ignore,0, 200, 220, "") AddKeyboardShortcut(0, #PB_Shortcut_Return, 0) If CreateGadgetList(WindowID(0)) StringGadget(0,10,10, 100,20,"") StringGadget(1,10,40, 100,20,"") StringGadget(2,10,70, 100,20,"") StringGadget(3,10,100,100,20,"") StringGadget(4,10,130,100,20,"") ButtonGadget(5, 20, 180, 50, 25, "Okay") EndIf SetActiveGadget(0) Repeat Select WaitWindowEvent() Case #PB_Event_CloseWindow Break Case #PB_Event_Menu If EventMenu() = 0 Select GetActiveGadget() Case 0 To 3 ; StringGadget 1 bis 3 : eins weiter schalten SetActiveGadget(GetActiveGadget() +1) Case 4 ; bei StringGadget 4 (das letzte) --> wieder zum Ersten SetActiveGadget(0) EndSelect EndIf Case #PB_Event_Gadget If EventGadget() = 5 ; Button Okay --> Ende Break EndIf EndSelect ForEver End
Weil das mit EventMenu() = 0 kommt mir grad spanisch vor.......
Gruß Scream