Valnurat Posted September 1, 2016 Posted September 1, 2016 (edited) I want to lookup in our AD when I exit a GUICtrlCreateInput don't have focus anymore. I know how to do the lookup in AD, but how to activate something when you exit the GUICtrlCreateInput with a TAB or a mouseclick, so the GUICtrlCreateInput don't have focus anymore, I do not know. It is the $idInput2 that I need to check if there is a focus or not. Can someone please help. expandcollapse popupFunc Main() Local $sOU, $sDescription, $dDate ; Loop until the user exits. While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop Case $idOKay For $id = $idInput1 to $idInput11 if GUICtrlRead($id) = '' Then MsgBox(64, "Info", "At least one input is empty.",0,$hGUI) ContinueLoop 2 EndIf Next $sFirst = GUICtrlRead($idInput1) $sShort = GUICtrlRead($idInput2) $sCountrySite = Stringleft($sShort,4) $sOU = Stringleft($sShort,4) $sOU = "OU=Consultants,OU=" & StringRight($sOU,2) & ",OU=" & StringLeft($sOU,2) & ",OU=company,DC=AD,DC=company,DC=ORG" $sLast = GUICtrlRead($idInput3) $sDisp = GUICtrlRead($idInput4) For $id = $idRadio1 To $idRadio2 If GUICtrlRead($id) = $GUI_CHECKED Then $sDescription = GUICtrlRead($id, $GUI_READ_EXTENDED) EndIf Next $sEmail = GUICtrlRead($idInput5) $sDepart = GUICtrlRead($idInput6) $sOffice = GUICtrlRead($idInput7) $sManager = GUICtrlRead($idInput8) $sMisalCode = GUICtrlRead($idInput9) $sTicketNo = GUICtrlRead($idInput10) $sCostNo = GUICtrlRead($idInput11) $sExtCompe = GUICtrlRead($idInput12) $sExtEmail = GUICtrlRead($idInput13) If GUICtrlRead($idCheckBox) = $GUI_CHECKED Then $dDate = GUICtrlRead($idDate) Else $dDate = _DateAdd('Y',1,_NowCalcDate()) EndIf Case $idCheckBox If _IsChecked($idCheckbox) Then GUICtrlSetState($idDate,$gui_enable) Else GUICtrlSetState($idDate,$gui_disable) EndIf EndSwitch WEnd EndFunc Edited September 1, 2016 by Valnurat Yours sincerely Kenneth.
JohnOne Posted September 1, 2016 Posted September 1, 2016 AutoIt Absolute Beginners Require a serial Pause Script Video Tutorials by Morthawt ipify Monkey's are, like, natures humans.
Valnurat Posted September 2, 2016 Author Posted September 2, 2016 (edited) Should I understand that the link you sent is for detecting of focus? I would like to find out when a input do not have focus anymore. I would like to do at lookup in out Active Directory. Edited September 2, 2016 by Valnurat Yours sincerely Kenneth.
AutoBert Posted September 2, 2016 Posted September 2, 2016 32 minutes ago, Valnurat said: I would like to find out when a input do not have focus anymore. Isn't this the same problem, only other words? Recognizing when focus leaves the input field?
Valnurat Posted September 2, 2016 Author Posted September 2, 2016 (edited) But the links in that link shows when a control get the focus, as I understand it. The Link JohnOne is pointing to is to google. InunoTaishou - might point to the correct solution, but I don't know if that exists in AutoIT. Edited September 2, 2016 by Valnurat Yours sincerely Kenneth.
AutoBert Posted September 2, 2016 Posted September 2, 2016 when a other control gets focus the old control has lost focus, correct me if i am wrong!
Valnurat Posted September 2, 2016 Author Posted September 2, 2016 True. I'm not saying that the link is not true. I can't not see the light and maybe it is bad experience of coding. Yours sincerely Kenneth.
AutoBert Posted September 2, 2016 Posted September 2, 2016 Make a small runable reproducer without AD.
Valnurat Posted September 2, 2016 Author Posted September 2, 2016 (edited) I don't know how to make non focus thing, but this should work. Hopefully. #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Outfile=test Focus.Exe #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** #include <GUIConstantsEx.au3> Global $hGUI, $idInput1, $idInput2 FormCreate() Main() Func Main() ; Loop until the user exits. While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop EndSwitch WEnd EndFunc Func FormCreate() ; Create a GUI with various controls. $hGUI = GUICreate("Create Consultant") GUICtrlCreateLabel("First name:", 10, 13) GUICtrlCreateLabel("Shortname:", 245, 13) $idInput1 = GUICtrlCreateInput("", 90, 10, 150, 20) ; First $idInput2 = GUICtrlCreateInput("", 300, 10, 90, 20) ; Shortname GUISetState(@SW_SHOW, $hGUI) EndFunc Edited September 2, 2016 by Valnurat Yours sincerely Kenneth.
kylomas Posted September 2, 2016 Posted September 2, 2016 Valnurat, This may help... expandcollapse popup; *** Start added by AutoIt3Wrapper *** #include <EditConstants.au3> #include <WindowsConstants.au3> ; *** End added by AutoIt3Wrapper *** #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Outfile=test Focus.Exe #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** #include <GUIConstantsEx.au3> #AutoIt3Wrapper_Add_Constants=n Global $hGUI, $idInput1, $idInput2 GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND') ; <--- Monitor "command" type messages FormCreate() Main() Func Main() ; Loop until the user exits. While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop EndSwitch WEnd EndFunc ;==>Main Func FormCreate() ; Create a GUI with various controls. $hGUI = GUICreate("Create Consultant") GUICtrlCreateLabel("First name:", 10, 13) GUICtrlCreateLabel("Shortname:", 245, 13) $idInput1 = GUICtrlCreateInput("", 90, 10, 150, 20) ; First $idInput2 = GUICtrlCreateInput("", 300, 10, 90, 20) ; Shortname GUISetState(@SW_SHOW, $hGUI) EndFunc ;==>FormCreate ; this routine will monitor edit notifications. EN_KILLFOCUS is sent to the parent window every time ; an edit control loses focus. Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam) Local $iCtl = BitAND($wParam, 0xFFFF) Local $iCode = BitShift($wParam, 16) Switch $iCtl Case $idInput2 Switch $iCode Case $EN_killfocus ConsoleWrite('$idinput2 just lost focus and it''s value is ' & GUICtrlRead($iCtl) & @CRLF) EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==>WM_COMMAND MSDN - https://msdn.microsoft.com/en-us/library/windows/desktop/bb761682(v=vs.85).aspx kylomas Forum Rules Procedure for posting code "I like pigs. Dogs look up to us. Cats look down on us. Pigs treat us as equals." - Sir Winston Churchill
Valnurat Posted September 5, 2016 Author Posted September 5, 2016 I get some warnings on this. I tried to declear it and I could compile it, but I don't get any messages in the console. Yours sincerely Kenneth.
AutoBert Posted September 5, 2016 Posted September 5, 2016 Original script from @kylomas is working. The error sounds like you have forgotten a include file.
Valnurat Posted September 6, 2016 Author Posted September 6, 2016 I did a little search and I found a solution. expandcollapse popup#Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Outfile=test Focus.Exe #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** #include <GUIConstantsEx.au3> #include <GUIConstants.au3> Global Const $DebugIt = 1 Global $hGUI, $idInput1, $idInput2, $idInput3 GUIRegisterMsg($WM_COMMAND, 'MY_WM_COMMAND') ; <--- Monitor "command" type messages FormCreate() Main() Func Main() ; Loop until the user exits. While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop EndSwitch WEnd EndFunc Func FormCreate() ; Create a GUI with various controls. $hGUI = GUICreate("Create Consultant") GUICtrlCreateLabel("First name:", 10, 13) GUICtrlCreateLabel("Last name:", 245, 13) GUICtrlCreateLabel("Display name:", 10, 53) $idInput1 = GUICtrlCreateInput("", 90, 10, 150, 20) $idInput2 = GUICtrlCreateInput("", 300, 10, 90, 20) $idInput3 = GUICtrlCreateInput("", 90, 50, 200, 20) GUISetState(@SW_SHOW, $hGUI) EndFunc Func MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam) ; gaFrost for monitoring inputfield change Local $nNotifyCode = BitShift($wParam, 16) Local $nID = BitAND($wParam, 0xFFFF) Local $hCtrl = $lParam Switch $nID Case $idInput1 Switch $nNotifyCode Case $EN_CHANGE If $DebugIt Then ConsoleWrite(_DebugHeader("Input1 Changed")) GUICtrlSetData($idInput3,GUICtrlRead($idInput1)) Case $EN_SETFOCUS If $DebugIt Then ConsoleWrite(_DebugHeader("Input1 Setfocus")) Case $EN_KILLFOCUS If $DebugIt Then ConsoleWrite(_DebugHeader("Input1 Killfocus")) EndSwitch Case $idInput2 Switch $nNotifyCode Case $EN_CHANGE If $DebugIt Then ConsoleWrite(_DebugHeader("Input2 Changed")) GUICtrlSetData($idInput3,GUICtrlRead($idInput2)) Case $EN_SETFOCUS If $DebugIt Then ConsoleWrite(_DebugHeader("Input2 Setfocus")) Case $EN_KILLFOCUS If $DebugIt Then ConsoleWrite(_DebugHeader("Input2 Killfocus")) EndSwitch Case $idInput3 Switch $nNotifyCode Case $EN_CHANGE If $DebugIt Then ConsoleWrite(_DebugHeader("Input1 Changed")) Case $EN_SETFOCUS If $DebugIt Then ConsoleWrite(_DebugHeader("Input1 Setfocus")) Case $EN_KILLFOCUS If $DebugIt Then ConsoleWrite(_DebugHeader("Input1 Killfocus")) EndSwitch EndSwitch ; Proceed the default Autoit3 internal message commands. ; You also can complete let the line out. ; !!! But only 'Return' (without any value) will not proceed ; the default Autoit3-message in the future !!! Return $GUI_RUNDEFMSG EndFunc ;==>MY_WM_COMMAND ;=============================================================================== ; Function Name: _DebugHeader ; Description: Gary's console debug header. ; Parameter(s): $s_text - IN - ; ; Requirement(s): ; Return Value(s): ; User CallTip: ; Author(s): ; Note(s): ;=============================================================================== Func _DebugHeader($s_text) Return _ "!===========================================================" & @LF & _ "+===========================================================" & @LF & _ "-->" & $s_text & @LF & _ "+===========================================================" & @LF EndFunc ;==>_DebugHeader Func _GUIEvents() Select Case @GUI_CtrlId = $GUI_EVENT_CLOSE Terminate() EndSelect EndFunc ;==>_GUIEvents Func OnAutoItExit() ConsoleWrite('CLOSED via Exit'&@CRLF) EndFunc Func Terminate() ConsoleWrite('CLOSED via Terminate'&@CRLF) Exit EndFunc I do now have another small request. In this exampel I have 3 Inputs. I would like to have input 3 fill out what I type in Input 1 and input 2. Input1 is Firstname and Input3 is Lastname. I tried to GUICtrlSetData($idInput3,GUICtrlRead($idInput1)) for "Firstname" and that seems to ok. I have the same GUICtrlSetData($idInput3,GUICtrlRead($idInput2)) for "Lastname", but then it will just overwrite what that is already in Input3. I can't see the light in this one, please help. Yours sincerely Kenneth.
AutoBert Posted September 6, 2016 Posted September 6, 2016 Something like this: #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Outfile=test Focus.Exe #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** #include <GUIConstantsEx.au3> #include <GUIConstants.au3> FormCreate() Func FormCreate() ; Create a GUI with various controls. Local $hGUI = GUICreate("Create Consultant") GUICtrlCreateLabel("First name:", 10, 13) GUICtrlCreateLabel("Last name:", 245, 13) GUICtrlCreateLabel("Display name:", 10, 53) Local $idInput1 = GUICtrlCreateInput("", 90, 10, 150, 20) Local $idInput2 = GUICtrlCreateInput("", 300, 10, 90, 20) Local $idInput3 = GUICtrlCreateInput("", 90, 50, 200, 20) GUISetState(@SW_SHOW, $hGUI) Local $Old3 ; Loop until the user exits. While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE ExitLoop Case $idInput1, $idInput2 $Old3 = GUICtrlRead($idInput1) & ' ' & GUICtrlRead($idInput2) If $Old3 <> GUICtrlRead($idInput3) Then GUICtrlSetData($idInput3, $Old3) EndSwitch WEnd EndFunc ;==>FormCreate
Valnurat Posted September 6, 2016 Author Posted September 6, 2016 Yes, like that, but can it be done on the fly in the $EN_CHANGE? Yours sincerely Kenneth.
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