qwert Posted March 6, 2008 Share Posted March 6, 2008 I need to be able to enter characters into an input field by either clicking a button on the screen -- an "X" in this example -- or by pressing a character on the keyboard. The field needs to accept several characters per entry and allow the keyboard and button to be used interchangeably. The problem is that the first click of the button method deactivates the field for keyboard input. expandcollapse popup; Field entry from button action blocks subsequent keyboard input ; #include <GUIConstants.au3> GUICreate("Example", 200, 177, -1, 240, $WS_SIZEBOX + $WS_SYSMENU) GUICtrlCreatePic(@Systemdir & "\oobe\images\mslogo.jpg", -1, -1, 200, 50) GUICtrlSetState(-1, $GUI_DISABLE) $ctrlInput = GUICtrlCreateInput("", 20, 60, 160, 30, $ES_RIGHT) GUICtrlSetFont($ctrlInput, 16, 600) $Graphic1 = GUICtrlCreateGraphic(33, 14, 100, 30, $SS_NOTIFY + $SS_WHITEFRAME) GUICtrlSetTip(-1, "Grahic Button") $clear = GUICtrlCreateButton("Clear", 50, 110, 40, 20) GUIRegisterMsg($WM_COMMAND, "On_WM_COMMAND") GUISetState() While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit Case $clear GUICtrlSetData( $ctrlInput, "" ) ControlFocus("", "", $ctrlInput ) ; <<<<< this works to enable keyboard entry EndSwitch WEnd Func On_WM_COMMAND($hWnd, $Msg, $wParam, $lParam) Local $iNotifyCode = BitShift($wParam, 16), $iID = BitAnd($wParam, 0x0000FFFF) If $iID = $Graphic1 Then Switch $iNotifyCode Case 0, 1; STN_CLICKED, STN_DBLCLK GUICtrlSetData( $ctrlInput, GUICtrlRead( $ctrlInput ) & "X" ) ; ControlFocus("", "", $ctrlInput ) ; <<<<< this didn't work! EndSwitch EndIf Return $GUI_RUNDEFMSG EndFunc I was able to add a ControlFocus to the action for the Clear button to reactivate the field after button input -- but adding it to the button process, itself, didn't work (gave a strange result where the field contents highlighted every other button click). How can I ensure that the field will accept keyboard entry following a button-based entry? Also, can someone explain where the highlighting came from and why? Thanks in advance for any help with this. Link to comment Share on other sites More sharing options...
Uriziel01 Posted March 6, 2008 Share Posted March 6, 2008 This work fine for me It is OK ? expandcollapse popup; Field entry from button action blocks subsequent keyboard input ; #include <GUIConstants.au3> GUICreate("Example", 200, 177, -1, 240, $WS_SIZEBOX + $WS_SYSMENU) GUICtrlCreatePic(@Systemdir & "\oobe\images\mslogo.jpg", -1, -1, 200, 50) GUICtrlSetState(-1, $GUI_DISABLE) $ctrlInput = GUICtrlCreateInput("", 20, 60, 160, 30, $ES_RIGHT) GUICtrlSetFont($ctrlInput, 16, 600) $Graphic1 = GUICtrlCreateGraphic(33, 14, 100, 30, $SS_NOTIFY + $SS_WHITEFRAME) GUICtrlSetTip(-1, "Grahic Button") $clear = GUICtrlCreateButton("Clear", 50, 110, 40, 20) GUIRegisterMsg($WM_COMMAND, "On_WM_COMMAND") GUISetState() While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit Case $clear GUICtrlSetData( $ctrlInput, "" ) ControlFocus("", "", $ctrlInput ) ; <<<<< this works to enable keyboard entry EndSwitch WEnd Func On_WM_COMMAND($hWnd, $Msg, $wParam, $lParam) Local $iNotifyCode = BitShift($wParam, 16), $iID = BitAnd($wParam, 0x0000FFFF) If $iID = $Graphic1 Then Switch $iNotifyCode Case 0, 1; STN_CLICKED, STN_DBLCLK GUICtrlSetData( $ctrlInput, GUICtrlRead( $ctrlInput ) & "X" ) GUICtrlSetState($ctrlInput,$GUI_FOCUS) Send("{RIGHT}") EndSwitch EndIf Return $GUI_RUNDEFMSG EndFunc Link to comment Share on other sites More sharing options...
qwert Posted March 6, 2008 Author Share Posted March 6, 2008 It is OK ?GUICtrlSetState($ctrlInput,$GUI_FOCUS)Send("{RIGHT}")Almost. Adding the two steps (above) took care of activating the field. But now the field has a slight flash effect when clicking in several characters. I'm sure this is because the field is already highlighted when focus is added -- and then the Send clears the highlight.So the question is: what is causing the highlight in the first place? Getting rid of it would make your solution perfect.Thanks for the response. Link to comment Share on other sites More sharing options...
Uriziel01 Posted March 6, 2008 Share Posted March 6, 2008 Hmmmm, try change : GUICtrlSetState($ctrlInput,$GUI_FOCUS) Send("{RIGHT}") To: if GUICtrlGetState($ctrlInput)<>$GUI_FOCUS then GUICtrlSetState($ctrlInput,$GUI_FOCUS) Send("{RIGHT}") endif Better ? I now that it is not perfect but i dont have any better ideas in this moment Link to comment Share on other sites More sharing options...
qwert Posted March 6, 2008 Author Share Posted March 6, 2008 I couldn't see a difference, but thanks for trying.Maybe someone can suggest a different approach that avoids the highlighting altogether. It's the part of this that I still don't understand. Link to comment Share on other sites More sharing options...
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