PhilHibbs Posted March 29, 2010 Posted March 29, 2010 Can I detect a change of focus between edit boxes? I'm trying to set the default button depending on which edit box has focus. This doesn't work: IF BitAnd( GUICtrlGetState($ePass), $GUI_FOCUS ) Then GUICtrlSetState($bLaunch, $GUI_DEFBUTTON) ElseIf BitAnd( GUICtrlGetState($ePass_2), $GUI_FOCUS ) Then GUICtrlSetState($bLaunch_2, $GUI_DEFBUTTON) EndIf When I diagnose this, GUICtrlGetState is returning 80, but $GUI_FOCUS is 256, so this is clearly wrong. I don't think GUICtrlGetState is going to tell me if the control has focus.
Moderators Melba23 Posted March 29, 2010 Moderators Posted March 29, 2010 PhilHibbs, I would do it this way: #include <GUIConstantsEx.au3> #include <WinAPI.au3> $hGUI = GUICreate("Test", 500, 500) $hEdit_1 = GUICtrlCreateEdit("", 10, 10, 400, 140) $hEdit_1_Handle = GUICtrlGetHandle(-1) $hButton_1 = GUICtrlCreateButton("Edit 1", 10, 160, 80, 30) $hEdit_2 = GUICtrlCreateEdit("", 10, 210, 400, 140) $hEdit_2_Handle = GUICtrlGetHandle(-1) $hButton_2 = GUICtrlCreateButton("Edit 1", 10, 360, 80, 30) GUISetState() _WinAPI_SetFocus($hEdit_1_Handle) GUICtrlSetState($hButton_2, $GUI_DISABLE) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit EndSwitch Switch _WinAPI_GetFocus() Case $hEdit_1_Handle If BitAnd(GUICtrlGetState($hButton_1), $GUI_DISABLE) = $GUI_DISABLE Then GUICtrlSetState($hButton_1, $GUI_ENABLE) If BitAnd(GUICtrlGetState($hButton_2), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($hButton_2, $GUI_DISABLE) Case $hEdit_2_Handle If BitAnd(GUICtrlGetState($hButton_2), $GUI_DISABLE) = $GUI_DISABLE Then GUICtrlSetState($hButton_2, $GUI_ENABLE) If BitAnd(GUICtrlGetState($hButton_1), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($hButton_1, $GUI_DISABLE) EndSwitch WEnd M23 Xandy 1 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area
Andreik Posted March 29, 2010 Posted March 29, 2010 Or like this: $Main = GUICreate("Example",400,250) $Edit1 = GUICtrlCreateEdit("",5,5,190,190) $Edit2 = GUICtrlCreateEdit("",205,5,190,190) $Button1 = GUICtrlCreateButton("Launch",50,210,100,30) $Button2 = GUICtrlCreateButton("Launch",250,210,100,30) GUISetState(@SW_SHOW,$Main) While True If GUIGetMsg() = -3 Then Exit If ControlGetFocus("Example") = "Edit1" Then GUICtrlSetState($Button1,512) ElseIf ControlGetFocus("Example") = "Edit2" Then GUICtrlSetState($Button2,512) EndIf Sleep(10) WEnd
PhilHibbs Posted March 29, 2010 Author Posted March 29, 2010 Thanks, this works: IF _WinAPI_GetFocus() = GUICtrlGetHandle($ePass) Then GUICtrlSetState($bLaunch, $GUI_DEFBUTTON) ElseIf _WinAPI_GetFocus() = GUICtrlGetHandle($ePass_2) Then GUICtrlSetState($bLaunch_2, $GUI_DEFBUTTON) EndIf I'll capture the GUICtrlGetHandle for efficiency.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now