AutoHotkey GUI в цикле - PullRequest
       16

AutoHotkey GUI в цикле

0 голосов
/ 06 июня 2018

Итак ... Я занимался этим некоторое время, но определенно все еще ужасен в этом.

Подводя итог:

Я бы хотел начать следующую итерациюцикл после нажатия определенных параметров в определенном графическом интерфейсе.

В моем исследовании я обнаружил, что в цикле не может быть никаких возвратов.Проблема в том, что я понятия не имею, как заставить эту работу работать без возвратов.

Пожалуйста, ПОМОГИТЕ!

Спасибо,

Марк S

(TRIMMED!)

`Startline: = 5

                Loop, 10
            {
                         CurrentRow := (StartLine - 1) + A_Index ;*****

                        ;----------------***GETTING THE DATA***----------------
                        ControlFocus,, Proto_Names - Excel 
                        Sleep, 200
                        oNamesDoc := ComObjActive("Excel.Application")
                        Global AlertStatus := oNamesDoc.Range("C" CurrentRow).Text
                        Global AlertQualifier := oNamesDoc.Range("D" CurrentRow).text
                        Global First := oNamesDoc.Range("H" CurrentRow).text
                        Global Last := oNamesDoc.Range("I" CurrentRow).text
                        Global State := oNamesDoc.Range("J" CurrentRow).text
                        Global Type := oNamesDoc.Range("M" CurrentRow).text
                        Global HMSStatus := oNamesDoc.Range("P" CurrentRow).text
                        Global HMSQualifier := oNamesDoc.Range("Q" CurrentRow).text
                        Global LicenseNo := oNamesDoc.Range("N" CurrentRow).text
                        Global Scrubbed := oNamesDoc.Range("AB" CurrentRow).value
                        ;----------------***GETTING THE DATA***----------------

            ;Gui
                            Gui, 2:Add, Text,x1 y8, Blah Blah
                            Gui, 2:Add, Button, x1 y40, License
                            Gui, 2:Add, Button, x80 y40, Name 
                            Gui, 2:Show, , blah blah - Row %CurrentRow% ; Important because it references A_Index
                        return

                                2GuiClose:    
                                    Gui, 2:Destroy  
                                return        

                                2ButtonLicense:
                                    Gui, 2:Submit 
                                    Gui, 2:Destroy  
            ;Another GUI
                                        Gui, 3:Add, Text,x1 y8, Text
                                        Gui, 3:Add, Text,x170 y132, Row %CurrentRow%  ;Important because it references A_index
                                        Gui, 3:Add, Button,x1 y125 , blah
                                        Gui, 3:Show, , blah blah

                                        return

                                            3GuiClose:     
                                                Gui, 3:Destroy  
                                            return        

                                            3ButtonAgree:
                                                Gui, 3:Submit  
                                                Gui, 3:Destroy  
                                                MsgBox, Click OK for Next
                                            continue 
            } 

`

Подводя итог:

Цель: Цикл: 1. Gui # 1: опцияа |опция b также хотела бы отобразить A_Index

Если выбрана опция A или B, перейдите к Gui # 2

Gui # 2: опция c |опция d также хотела бы отобразить A_Index

Если опция c, начать следующую итерацию цикла с графического интерфейса 1.

Есливариант d, перейти к Gui # 3

Gui # 3: Флажок E | F | G | H

Если выбрана какая-либо опция, я бы хотел обновить файл xslx (я могу понять эту часть), а затем запуститьследующая итерация цикла.

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Спасибо за предложение, но я думаю, что понял.Проверьте код ниже, и я постараюсь ответить на любые вопросы.Это так красиво ....

LoopTot := (Endline - StartLine) + 1 

Loop, %LoopTot% ;***Starts the loop***
{ 

Global CurrentRow := (StartLine - 1) + A_Index

;----------------***GETTING THE DATA***----------------
ControlFocus,, Proto_Names - Excel 
Sleep, 200
oNamesDoc := ComObjActive("Excel.Application")
Global AlertStatus := oNamesDoc.Range("C" CurrentRow).Text
Global AlertQualifier := oNamesDoc.Range("D" CurrentRow).text
Global First := oNamesDoc.Range("H" CurrentRow).text
Global Last := oNamesDoc.Range("I" CurrentRow).text
Global State := oNamesDoc.Range("J" CurrentRow).text
Global Type := oNamesDoc.Range("M" CurrentRow).text
Global HMSStatus := oNamesDoc.Range("P" CurrentRow).text
Global HMSQualifier := oNamesDoc.Range("Q" CurrentRow).text
Global LicenseNo := oNamesDoc.Range("N" CurrentRow).text
Global Scrubbed := oNamesDoc.Range("AB" CurrentRow).value
;----------------***GETTING THE DATA***----------------

    Gui, 2:font, s12, Verdana
    Gui, 2:Add, Text,x1 y8, %First% %Last% License:%LicenseNo%
    Gui, 2:Add, Button, x1 y40, License
    Gui, 2:Add, Button, x80 y40, Name 
    Gui, 2:Show, , Search Options - Row %CurrentRow%

  WinWaitClose, Search Options - Row %CurrentRow% 

  If Var = 1

    Continue 

  If Var = 2

    Continue

} 

msgbox DONE!
ExitApp 



2ButtonLicense: 

    Var = 1

    Gui,  2:Destroy 

    CALicense1()

    LicenseAgreeDisagree()

return
return



  2ButtonName:

        Var = 2

        Gui,  2:Destroy 

    CAName1()

    NameAgreeDisagree()

return 
return
0 голосов
/ 07 июня 2018

Документация для Loop предполагает, что вы можете использовать break для раннего выхода из цикла.Это то, что вы пытаетесь достичь с помощью возврата?
Вы можете установить переменную возврата, разбить и вернуть ее?

Редактировать после уточнения:

Я думаю, что лучший способсделать это было бы, чтобы отделить каждый графический интерфейс как функцию, которая просто запускает циклы, которые вы здесь используете.

Имейте основной цикл и глобальную переменную, сообщающую, какой будет следующий цикл для ввода.
Тогдакаждая функция может установить эту переменную.

global NextLoop:=1
main(){
    global NextLoop
    loop{
        if NextLoop == 1 {
            gui1()
        }else if NextLoop == 2 {
            gui2()
        } ; etc...
    }
}
gui1(){
    global NextLoop
    loop{
        if ; user chooses an option {
            NextLoop := 2
            return
        }
    }
} 
gui2(){
    global NextLoop
    loop{
        if ; user chooses c {
            NextLoop := 1
            return
        }

        if ; user chooses d {
            NextLoop := 3
            return
        }
    }
}

} 

Заполните этот код, и он должен работать.

...