Jump to content

Exit GUICtrlCreateInput with a TAB


Valnurat
 Share

Recommended Posts

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.

Func 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 by Valnurat

Yours sincerely

Kenneth.

Link to comment
Share on other sites

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 by Valnurat

Yours sincerely

Kenneth.

Link to comment
Share on other sites

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 by Valnurat

Yours sincerely

Kenneth.

Link to comment
Share on other sites

Valnurat,

This may help...

; *** 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

Link to comment
Share on other sites

I did a little search and I found a solution.

#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.

Link to comment
Share on other sites

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

 

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...