Seite 1 von 1
Enter/Return soll StringGadget ausführen
Verfasst: 02.04.2010 13:49
von Tombi
Liebe Community,
wie lasse ich durch einen Klick auf Enter ein StringGadget ausführen?
Bzw, wie prüfe ich, ob in einem StringGadget Enter gedrückt wurde?
MFG, Tombi
Re: Enter/Return soll StringGadget ausführen
Verfasst: 02.04.2010 14:00
von iostream
So kannst du z.B. ein Enter im StringGadget abfragen.
Code: Alles auswählen
Enumeration
#Window
#StringGadget
#Shortcut
EndEnumeration
If OpenWindow(#Window, 0, 0, 400, 200, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
AddKeyboardShortcut(#Window, #PB_Shortcut_Return, #Shortcut)
StringGadget(#StringGadget, 10, 10, 100, 20, "")
SetActiveGadget(#StringGadget)
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_Menu
If EventMenu() = #Shortcut And GetActiveGadget() = #StringGadget
Debug "Enter im StringGadget"
EndIf
EndIf
Until EventID = #PB_Event_CloseWindow
EndIf
Re: Enter/Return soll StringGadget ausführen
Verfasst: 03.04.2010 19:43
von Hyper
...Du must nur aufpassen: Falls Du auch ein EditorGadget auf dem Screen hast und dort Enter drückst, wird kein Zeilenumbruch mehr erzeugt, da Du das Enter für andere Zwecke abfängst. Du könntest aber das so lösen, dass Du immer dann, wenn das StringGadget den Fokus erhält, den Shortcut zufügst und beim Fokusverlust wieder entfernst.
Aber wahrscheinlich hast Du ja gar kein EditorGadget...
Re: Enter/Return soll StringGadget ausführen
Verfasst: 11.08.2014 15:04
von schleicher
Diese Thread ist zwar uralt, aber das genau habe ich gesucht.(Enter-Taste im Stringgadget). Danke
Re: Enter/Return soll StringGadget ausführen
Verfasst: 11.08.2014 16:01
von Andreas21
Der Code wenn man noch ein Editor Feld benutzt währ dieser.
Code: Alles auswählen
EnableExplicit
Define EventID
Define check
Enumeration
#Window
#StringGadget
#EditorGadget
#Shortcut
EndEnumeration
If OpenWindow(#Window, 0, 0, 400, 200, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
StringGadget(#StringGadget, 10, 10, 100, 20, "")
EditorGadget(#EditorGadget, 10, 40, 100, 100)
SetActiveGadget(#StringGadget)
check = #False
Repeat
EventID = WaitWindowEvent()
If GetActiveGadget() = #StringGadget
If check = #False
AddKeyboardShortcut(#Window, #PB_Shortcut_Return, #Shortcut)
check = #True
EndIf
Else
If check = #True
RemoveKeyboardShortcut(#Window, #PB_Shortcut_Return)
check = #False
EndIf
EndIf
If EventID = #PB_Event_Menu
If EventMenu() = #Shortcut
Debug "Enter im StringGadget"
EndIf
EndIf
Until EventID = #PB_Event_CloseWindow
EndIf
Re: Enter/Return soll StringGadget ausführen
Verfasst: 11.08.2014 16:16
von Derren
Code: Alles auswählen
Repeat
EventID = WaitWindowEvent()
If GetActiveGadget() = #StringGadget
Du überprüfst also ständig (bei jeder noch so kleinen Mausbewegung), ob das aktive Gadget das StringGadget ist?
Wie wär's mit EventGadget() abfragen?
Dann brauchst du auch kein "check" Flag, dank EventType() (Focus/LostFocus)
Code: Alles auswählen
EnableExplicit
Define EventID
Enumeration
#Window
#StringGadget
#EditorGadget
#Shortcut
EndEnumeration
If OpenWindow(#Window, 0, 0, 400, 200, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
StringGadget(#StringGadget, 10, 10, 100, 20, "")
EditorGadget(#EditorGadget, 10, 40, 100, 100)
SetActiveGadget(#StringGadget)
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_Gadget
Select EventGadget()
Case #StringGadget
Select EventType()
Case #PB_EventType_Focus
AddKeyboardShortcut(#Window, #PB_Shortcut_Return, #Shortcut)
Case #PB_EventType_LostFocus
RemoveKeyboardShortcut(#Window, #PB_Shortcut_Return)
EndSelect
EndSelect
Case #PB_Event_Menu
If EventMenu() = #Shortcut
Debug "Enter im StringGadget"
EndIf
EndSelect
Until EventID = #PB_Event_CloseWindow
EndIf
Re: Enter/Return soll StringGadget ausführen
Verfasst: 11.08.2014 22:06
von hjbremer
oder so
Code: Alles auswählen
EnableExplicit
Structure StringGadgetData
parent.i
gadget.i
oldprc.i
;xyz
laenge.i
EndStructure
Enumeration #PB_EventType_FirstCustomValue
#PB_EventType_StrgReturn
#PB_EventType_StrgEscape
#PB_EventType_StrgUp
#PB_EventType_StrgDown
EndEnumeration
Procedure.i StringGadgetCallBack(hwnd, msg, wParam, lParam)
Protected *strg.StringGadgetData = GetWindowLongPtr_(hwnd, #GWL_USERDATA)
Select msg
Case #WM_CHAR
Select wparam
Case #VK_RETURN
PostEvent(#PB_Event_Gadget, *strg\parent, *strg\gadget, #PB_EventType_StrgReturn)
Case #VK_ESCAPE
PostEvent(#PB_Event_Gadget, *strg\parent, *strg\gadget, #PB_EventType_StrgEscape)
Default
;wParam = CheckChar()
EndSelect
Case #WM_KEYDOWN
Select wparam
Case #VK_DOWN
PostEvent(#PB_Event_Gadget, *strg\parent, *strg\gadget, #PB_EventType_StrgDown)
ProcedureReturn 0
Case #VK_UP
PostEvent(#PB_Event_Gadget, *strg\parent, *strg\gadget, #PB_EventType_StrgUp)
ProcedureReturn 0
EndSelect
;weitere Messages
Case #WM_KILLFOCUS
Debug "#WM_KILLFOCUS"
EndSelect
ProcedureReturn CallWindowProc_(*strg\oldprc, hwnd, msg, wParam, lParam)
EndProcedure
Procedure StringGadgetSetCallback(pbnr, parent, xyz = 0)
Protected strgid = GadgetID(pbnr)
Protected *strg.StringGadgetData = AllocateMemory(SizeOf(StringGadgetData))
*strg\gadget = pbnr
*strg\parent = parent
*strg\oldprc = GetWindowLongPtr_(strgid, #GWL_WNDPROC)
SetWindowLongPtr_(strgid, #GWL_USERDATA, *strg)
SetWindowLongPtr_(strgid, #GWL_WNDPROC, @StringGadgetCallBack())
EndProcedure
Define EventID
Enumeration
#Window
#StringGadget
#EditorGadget
#Shortcut
EndEnumeration
If OpenWindow(#Window, 0, 0, 400, 200, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
StringGadget(#StringGadget, 10, 10, 100, 20, "")
EditorGadget(#EditorGadget, 10, 40, 100, 100)
SetActiveGadget(#StringGadget)
StringGadgetSetCallback(#StringGadget, #Window)
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_Gadget
Select EventGadget()
Case #StringGadget
Select EventType()
Case #PB_EventType_StrgReturn: Debug "Hurra Return"
Case #PB_EventType_StrgEscape: Debug "Hurra Escape"
Case #PB_EventType_StrgUp: Debug "Hurra Up"
Case #PB_EventType_StrgDown: Debug "Hurra Down"
EndSelect
EndSelect
EndSelect
Until EventID = #PB_Event_CloseWindow
EndIf
Re: Enter/Return soll StringGadget ausführen
Verfasst: 11.08.2014 22:09
von Derren
WinApi lastig aber nützlich
Rauf Runter Links Rechts. Ein paar SetGadgetText() dazu und man kann im EditorGadget Snake oder Tetris spielen

Re: Enter/Return soll StringGadget ausführen
Verfasst: 28.04.2015 04:32
von Marty2PB
Hallo,
Sorry das ich diesen alten Post ausgrab.
Aber wiso wird unter windows immer der 'Standardton Warn Signal' abgspielt ab wenn man die Return Taste oder die Escape taste im Stringadget drückt abgespielt ? Sobald man aber ein AddkeyboardShortcut hinzufügt hört das auf. Ist das unter Windows auch ohne AddkeyboardShortcut zu lösen das dieser nervige Sound nicht abgespielt wird wenn der user im Stringgadget 'Return' drückt.?
ich habe das für mich so in etwa gelöst
Code: Alles auswählen
Case DC::#String_005, DC::#String_006, DC::#String_007, DC::#String_008, DC::#String_009,
DC::#String_010, DC::#String_011, DC::#String_012, DC::#String_013
Select MainEventType
Case #PB_EventType_Focus
AddKeyboardShortcut(DC::#_Window_001, #PB_Shortcut_Return,1000)
SetGadgetColor(ObjectID,#PB_Gadget_BackColor,RGB(205,205,206))
SetGadgetColor(ObjectID,#PB_Gadget_FrontColor,RGB(0,0,0))
Case #PB_EventType_LostFocus
RemoveKeyboardShortcut(DC::#_Window_001, #PB_Shortcut_Return)
SetGadgetColor(ObjectID,#PB_Gadget_BackColor,BaseForm::SetColorGray4)
SetGadgetColor(ObjectID,#PB_Gadget_FrontColor,RGB(90,90,90))
EndSelect
Re: Enter/Return soll StringGadget ausführen
Verfasst: 28.04.2015 16:29
von edel
Bei dem Beispiel von hjbremer musst du einfach nur die weitere Verarbeitung durch Windows stoppen.
Aus :
Code: Alles auswählen
Case #WM_CHAR
Select wparam
Case #VK_RETURN
PostEvent(#PB_Event_Gadget, *strg\parent, *strg\gadget, #PB_EventType_StrgReturn)
Case #VK_ESCAPE
Wird :
Code: Alles auswählen
Case #WM_CHAR
Select wparam
Case #VK_RETURN
PostEvent(#PB_Event_Gadget, *strg\parent, *strg\gadget, #PB_EventType_StrgReturn)
ProcedureReturn 0
Case #VK_ESCAPE