autohotkey - problemas ao usar if, senão se instruções dentro de Funções

0

Eu tenho problemas ao usar if , else if declarações dentro de Funções que eles não reconhecem meus vars, apesar de eu tê-los definido como globais no início do script ...

global AR4toolCur :=
global AR4psetCollCurY :=
global AR4psetCollCurYselect :=
global AR4psetCollCurYfill :=
global AR4psetCollCurYeraser :=
global AR4psetCollCurYknife :=

~l::
AR4toolCur := "Selection"   ; means the current selected tool
return




AR4psetCollCurYperToolSelFn()    ; Sel means Select, I want to pass the value of AR4psetCollCur*NameOfTheTool* to AR4psetCollCurY
{
    msgbox, AR4psetCollCurYperToolSelFn will run'nAR4toolCur = %AR4toolCur%
    If (%AR4toolCur% := "Selection")    ; this pass the value of AR4psetCollCur*NameOfTheTool* (in this case "select") to AR4psetCollCurY
        AR4psetCollCurY := AR4psetCollCurYselect
    Else If (%AR4toolCur% := "Fill")
        AR4psetCollCurY := AR4psetCollCurYfill
    Else If (%AR4toolCur% := "Eraser")
        AR4psetCollCurY := AR4psetCollCurYeraser
    Else If (%AR4toolCur% := "Knife")
        AR4psetCollCurY := AR4psetCollCurYknife
    msgbox, AR4psetCollCurY = %AR4psetCollCurY%
return
}

esta função acima está funcionando.

Meu script fur executa esta função acima para passar o valor de AR4psetCollCur*NameOfTheTool* (ferramenta atual selecionada) para AR4psetCollCurY em seguida, modifica o valor AR4psetCollCurY e usa-o como parâmetro de outra função e, em seguida, deve armazenar de volta o valor modificado de AR4psetCollCurY em AR4psetCollCur*NameOfTheTool* é por isso que eu uso esta função abaixo, mas não funciona, sempre vê %AR4toolCur% como vazio, por que isso?

AR4psetCollCurYperToolStrFn()
{
    msgbox, AR4psetCollCurYperToolStrFn will run'nAR4toolCur = %AR4toolCur%
    If (%AR4toolCur% := "Selection")
        AR4psetCollCurYselect := AR4psetCollCurY
    Else If (%AR4toolCur% := "Fill") ; I have tried    AR4toolCur = Fill   it doesn't work either
    {
        AR4psetCollCurYfill := AR4psetCollCurY
        msgbox, AR4psetCollCurYfill = %AR4psetCollCurYfill%
    }
    Else If (%AR4toolCur% := "Eraser")
        AR4psetCollCurYeraser := AR4psetCollCurY
    Else If (%AR4toolCur% := "Knife")
        AR4psetCollCurYknife := AR4psetCollCurY
return
}

Obrigado Advanced.

    
por litu16 01.12.2016 / 12:18

1 resposta

0

Eu tenho problemas ao usar if, senão se instruções dentro de Functions eles não reconhecem meus vars, apesar de eu tê-los definido como globais no começo do script ...

Você acredita que o problema é fazer com if / else if, no entanto, as evidências apontam para problemas com variáveis locais / globais.

Você precisa definir uma variável como global, dentro de uma função para se referir à versão global da variável (em vez da versão local da variável).

Exemplo de código:

^q::
vText := "hello" ;the global version of vText
Func1()
Func2()
Func3()
Return

Func1()
{
MsgBox %vText% ;the function's local version of vText is blank
Return
}

Func2()
{
global vText
MsgBox %vText% ;the function uses the global version of vText
Return
}

Func3()
{
global
MsgBox %vText% ;the function uses the global versions for all variables
Return
}

Nota:
As linhas 'if' devem estar no formato:

If (AR4toolCur = "Selection")

não:

If (%AR4toolCur% := "Selection")
    
por 04.01.2017 / 13:53

Tags