Jump to content

Case statement with the "To" argument


kor
 Share

Recommended Posts

why does this code work

If _IsPressed("0D") Then ; if enter is pressed
            For $i = 9 To 31
                $aHandles[$i] = GUICtrlGetHandle($aControls[$i]) ; read controls into a new array (not sure this is necessary)
            Next
            Switch _WinAPI_GetFocus()
                Case $aHandles[9], $aHandles[11], $aHandles[13], $aHandles[16], $aHandles[18], $aHandles[20], $aHandles[22], $aHandles[24], $aHandles[27], $aHandles[29], $aHandles[31]
                    GUICtrlSendToDummy($cDummy)
            EndSwitch
            While _IsPressed("0D")
                Sleep(10)
            WEnd
        EndIf

but this code doesn't?

If _IsPressed("0D") Then ; has enter been pressed
            For $i = 9 To 31
                $aHandles[$i] = GUICtrlGetHandle($aControls[$i])
            Next
            Switch _WinAPI_GetFocus()
                Case $aHandles[9] To $aHandles[31]
                    GUICtrlSendToDummy($cDummy)
            EndSwitch
            While _IsPressed("0D")
                Sleep(10)
            WEnd
        EndIf

I'm trying to reduce the case statement down into something easier rather than naming each and every control.

Link to comment
Share on other sites

  • Moderators

kor,

It does not work because, unlike Autoit ControlIDs, handles are not consecutive integers and so using To to act on a range does not work.

What you could do is something like this (not tested): ;)

If _IsPressed("0D") Then ; has enter been pressed

    ; Why do this on every pass - why not do it just the once before the loop?
    For $i = 9 To 31
        $aHandles[$i] = GUICtrlGetHandle($aControls[$i])
    Next

    ; Get the focused handle
    $hActive = _WinAPI_GetFocus()
    ; Now loop through the array to see if there is a match
    For $i = 9 To 31
        If $aHandles[$i] = $hActive Then
            ; If there is then action something
            GUICtrlSendToDummy($cDummy)
        EndIf
    Next

    ; Wait until key is released
    While _IsPressed("0D")
        Sleep(10)
    WEnd
EndIf

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png 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 columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to comment
Share on other sites

Took your example and came up with this.

It works nicely. thanks!

If _IsPressed("0D") Then ; has enter been pressed
            For $i = 9 To 31
                If GUICtrlGetHandle($aControls[$i]) = _WinAPI_GetFocus() Then GUICtrlSendToDummy($cDummy)
            Next
            While _IsPressed("0D")
                Sleep(10)
            WEnd
        EndIf
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

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...