Sobre Checkbox Topic is solved

Tire suas dúvidas sobre programação em AutoHotkey

Moderator: Gio

Nauany
Posts: 58
Joined: 12 Dec 2016, 01:37

Sobre Checkbox

23 Mar 2018, 06:47

Boa tarde galera, uso o Ahk ja tem um bom tempo, e sempre tive dúvidas sobre os "Checkbox"
alguém poderia me ajudar com algo simples?
por exemplo
eu quero um checkbox que ao ser selecionado ele ative teclas para mover W = Up, A = Left, S = Down, D = Right;
eu ja tentei de varias formas, e todas ao iniciar o programa ele ja esta funcionando o "W A S D" fazendo do checkbox desnecessário e apenas cancelando quando se pausa
um exemplo que estava fazendo (tirei o resto do programa para n precisar entender coisas atoas... mas vou mandar o codigo só do checkbox):

Code: Select all

#SingleInstance Force

GuiW := 60, GuiH := 50
Gui, +LastFound +Resize +MinSize%GuiW%x%GuiH%
hGui1 := WinExist()
Gui, Color, 007DBE
Gui, Margin, 10, 10

tabs:=2


gui, Add,Tab2,vTab TCS_BUTTONS	0x100,Heal

gui, Tab,Heal
Gui, Add, Checkbox, x30 y50 h20 w50 vwalking gwalkin, % "On/Off"
Gui, Add, Button, x80 y45 h20 w50 gAtt, W A S D
gui, show, h420
return
walkin:
Gui Submit, NoHide
  if(walking) 
  {
    SetTimer, action19999, 1,  On
    MsgBox ,48 , , W A S D foi ativado!, 10.

  }
  else
  {
    SetTimer, , Off
    MsgBox ,48 , , W A S D foi desativado!, 10.
  }
  Return

Att:
{
action19999:
 {
   w::Up
   a::Left
   s::Down
   d::Right
 }
return
}
return
guiclose:
exit:
 {
   exitapp
 }
return
Desde ja, Obrigado a quem der uma força ai.. =D
User avatar
Gio
Posts: 1247
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Sobre Checkbox

23 Mar 2018, 09:26

Bom dia Nauany.

Seja bem-vindo ao fórum da Comunidade do AutoHotkey em Português.

Para criar hotkeys que possam ser ativadas/desativadas você tem algumas opções nativas disponíveis. Uma delas é usar uma condicional #If. No seu caso, eu colocaria essa condicional para checar a variável associada ao checkbox.

Code: Select all

#SingleInstance Force

GuiW := 60, GuiH := 50
Gui, +LastFound +Resize +MinSize%GuiW%x%GuiH%
hGui1 := WinExist()
Gui, Color, 007DBE
Gui, Margin, 10, 10

tabs:=2


gui, Add,Tab2,vTab TCS_BUTTONS	0x100,Heal

gui, Tab,Heal
Gui, Add, Checkbox, x30 y50 h20 w50 vwalking gwalkin, % "On/Off"
Gui, Add, Button, x80 y45 h20 w50, W A S D
gui, show, h420

#If (Walking) ; A variável walking só contera um valor positivo se a checkbox for marcada e o comando "gui submit" for chamado (o que já é feito na g-label walkin).
w::Up
a::Left
s::Down
d::Right

Return

walkin:
Gui Submit, NoHide
  if(walking) 
  {
    MsgBox ,48 , , W A S D foi ativado!, 10.

  }
  else
  {
    SetTimer, , Off
    MsgBox ,48 , , W A S D foi desativado!, 10.
  }
  Return
Outra opção é usar o comando Hotkey, que permite ativar e desativar hotkeys específicas (desde que tenham sido criadas por ele).
Nauany
Posts: 58
Joined: 12 Dec 2016, 01:37

Re: Sobre Checkbox

23 Mar 2018, 09:37

aaahhh que legal!!!... muito obrigado man... agradeço muito a ajuda
abrass ;**
Nauany
Posts: 58
Joined: 12 Dec 2016, 01:37

Re: Sobre Checkbox

23 Mar 2018, 09:45

Acabei de fazer aqui essa parte funcionou bem.. porem o resto inteiro do programa só funciona agora quando eu ativo o check box...
vc sabe qual o problema que pode ter acontecido?
User avatar
Gio
Posts: 1247
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Sobre Checkbox

23 Mar 2018, 09:51

O código que eu postei não estava completo (eu tirei a label att e um dos SetTimer da label Walkin, pois o objetivo do exemplo era só explicar o comando #If). Se adicionando essas partes ainda não funcionar, vou precisar que coloque o código completo e descreva o que quer que ele faça exatamente antes que possa dar um parecer.
Nauany
Posts: 58
Joined: 12 Dec 2016, 01:37

Re: Sobre Checkbox

23 Mar 2018, 10:01

ss, e upercebi tudo que vc modificou e fiz igual... a questão é essa o resto das coisas pararam de funcionar pois estava com o check desligado...
n poste io código todo pois é muito grande... e tem muita coisa que seria desnecessaria mas vou refazer com coisas mais simples que vc entenderá..

coloquei 1 parte pra dar exemplo, quando uso a primeira hotkey, ela apenas funciona se o "checkbox" estiver selecionado...
a intenção n é exatamente o checkbox.. pode ser outra forma que eu consiga ativar essas teclas "WASD" tanto com um "botão" para ativar uma "hotkey" ou o proprio "checkbox" só gostaria que ela funcionasse e permitisse o resto do programa fluir sem que ele esteja ativado também..
vc consegue me ajudar com isso?

Code: Select all

#SingleInstance Force

GuiW := 60, GuiH := 50
Gui, +LastFound +Resize +MinSize%GuiW%x%GuiH%
hGui1 := WinExist()
Gui, Margin, 10, 10

tabs:=2


gui, Add,Tab2,vTab TCS_BUTTONS	0x100,Heal



gui, Tab,Heal
;----------------------------------------------------
;Revive
Gui, Add, Hotkey, x30 y45 h20 w50 vvariablel2
Gui, Add, Button, x80 y45 h20 w50 gSubmit2, Confirme
gui, add, button, x135 y45 h20 w50 gMF, Revive
;----------------------------------------------------
;W A S D
Gui, Add, Checkbox, x30 y95 h20 w50 vwalking gwalkin, % "On/Off"
Gui, Add, Button, x80 y95 h20 w50, W A S D
;----------------------------------------------------

gui, show, h420
return

;-----------------------------------------------
Submit2:
Gui, Submit, NoHide
Hotkey, %variablel2%, action2, On
return
MF: 
{
MsgBox ,48 , , Selecione a Posição que vai usar o Revive, 10
KeyWait, LButton, D
MouseGetPos, Bp1X, Bp1Y
MsgBox ,48 , , Selecione a posição do Revive, 10
KeyWait, LButton, D
MouseGetPos, Bp2X, Bp2Y
Sleep, 200
action2:
  {
    MouseGetPos, xpos, ypos
    MouseClick, right, %Bp1X%, %Bp1Y%, ,0
    Sleep, 200
    MouseClick, right, %Bp2X%, %Bp2Y%, ,0
    Sleep, 200
    MouseClick, left, %Bp1X%, %Bp1Y%, ,0
    Sleep, 200
    MouseClick, right, %Bp1X%, %Bp1Y%, ,0
    MouseMove, %xpos%,%ypos%
    return
  } 
}
return
;-----------------------------------------------


#If (Walking) ; A variável walking só contera um valor positivo se a checkbox for marcada e o comando "gui submit" for chamado (o que já é feito na g-label walkin).
w::Up
a::Left
s::Down
d::Right

Return

walkin:
Gui Submit, NoHide
  if(walking) 
  {
    MsgBox ,48 , , W A S D foi ativado!, 10.

  }
  else
  {
    SetTimer, , Off
    MsgBox ,48 , , W A S D foi desativado!, 10.
  }
  Return
;-----------------------------------------------
User avatar
Gio
Posts: 1247
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Sobre Checkbox

23 Mar 2018, 10:34

Bom, se você colocou o SetTimer, action19999, 1, On e a label Att: de volta, aqui vão algumas coisas que podem estar interferindo:

O comando #If vai condicionar todas as hotkeys abaixo dele até que seja chamado novamente e sem argumentos (é assim que você desliga ele). Eu não tinha escrito essa linha de desativar o #If no exemplo anterior porque pensei que não seria necessário, mas para clarificar, vai outro exemplo abaixo, onde você tem 4 hotkeys (a, b, c, d). As hotkeys a, b, c, só vão funcionar se a variável GATILHO contiver a palavra "ATIVO". Veja, no entanto, que a hotkey d funciona independente disso, pois há uma linha #If antes dela que desliga a condicional que depende do valor "ATIVO".
Veja também que o comando #If não respeita o Return (ele só desliga com outro #If mesmo).

Code: Select all

#If (GATILHO = "ATIVO")
a::
msgbox % "pressionou a"
Return

b::
msgbox % "pressionou b"
Return

c::
msgbox % "pressionou c"
Return
#If

d::
msgbox % "pressionou d"
If (GATILHO = "")
GATILHO := "ATIVO"
Else
GATILHO := ""
Outra coisa que pode estar confundindo são essas linhas do seu primeiro código:

Code: Select all

Att:
{
action19999:
 {
   w::Up
   a::Left
   s::Down
   d::Right
 }
return
}
return
Quando você chama a label Att nesse caso, ela vai entrar na label action19999 e quando encontrar o return da mesma, também vai cessar (não é só a action19999 que vai cessar ali). Veja que no exemplo abaixo o msgbox % "abc" nunca executa, mesmo chamado a label "abc".

Code: Select all

Gosub, Abc

Return
Abc:
{
	Def:
	msgbox "def"
	Return
}
msgbox % "abc"
return
No fim das contas essa parte do código (do jeito que está) é equivalente a este código:

Code: Select all

Gosub, Abc

Return
Abc:
Def:
msgbox "def"
Return
Veja também que labels não trabalham com blocos da mesma forma que funções.

Code: Select all

; Função abc termina no final do bloco (só executa o msgbox % "Abc")
abc()
Return


Return
abc()
{
msgbox % "abc"
}
msgbox % "def"

Code: Select all

; Mas a Label ABC não respeita fim de bloco (ela só acaba se encontrar um return)
Gosub ABC
Return

ABC:
{
msgbox % "abc"
}
msgbox % "def"
Bom, se ainda assim não conseguir encontrar o que está fazendo seu código terminar inesperadamente, vamos entrar em detalhes. Me apresenta um código e diga qual parte dele não está funcionando e em que situação você precisa que ela funcione.
Nauany
Posts: 58
Joined: 12 Dec 2016, 01:37

Re: Sobre Checkbox

23 Mar 2018, 10:49

OKs man, vou estudar esse que vc me mandou direitinho, se mesmo assim n conseguir eu volto com minhas dúvidas...
eu mandei o código como que esta ali em cima... coloquei com o exemplo que n estava funcionando, mais a parte que vc havia corrigido para mim... vou coloca-lo novamente
e enquanto isso vou estudando o que vc me passou...
se for possível vc entrar no meu ts3 para conversarmos também seria de grande ajuda mais 1 cabeça que entende sobre o assunto =D haha
muito obrigado pela ajuda e desculpa o incomodo =D

Code: Select all

#SingleInstance Force

GuiW := 60, GuiH := 50
Gui, +LastFound +Resize +MinSize%GuiW%x%GuiH%
hGui1 := WinExist()
Gui, Margin, 10, 10

tabs:=2


gui, Add,Tab2,vTab TCS_BUTTONS	0x100,Heal



gui, Tab,Heal
;----------------------------------------------------
;Revive
Gui, Add, Hotkey, x30 y45 h20 w50 vvariablel2
Gui, Add, Button, x80 y45 h20 w50 gSubmit2, Confirme
gui, add, button, x135 y45 h20 w50 gMF, Revive
;----------------------------------------------------
;W A S D
Gui, Add, Checkbox, x30 y95 h20 w50 vwalking gwalkin, % "On/Off"
Gui, Add, Button, x80 y95 h20 w50, W A S D
;----------------------------------------------------

gui, show, h420
return

;-----------------------------------------------
Submit2:                     ;o que eu estava dizendo é aqui por exemplo... essa parte que é dar use nos itens ela n esta funcionando por conta que o checkbox n esta selecionado
Gui, Submit, NoHide    ; ele só volta a funcionar ao ser selecionado o check box, eu queria que com o check box selecionado ou n, essa parte também funcionasse
Hotkey, %variablel2%, action2, On
return
MF: 
{
MsgBox ,48 , , Selecione a Pokeball que vai se usar o Revive, 10
KeyWait, LButton, D
MouseGetPos, Bp1X, Bp1Y
MsgBox ,48 , , Selecione a posição do Revive, 10
KeyWait, LButton, D
MouseGetPos, Bp2X, Bp2Y
Sleep, 200
action2:
  {
    MouseGetPos, xpos, ypos
    MouseClick, right, %Bp1X%, %Bp1Y%, ,0
    Sleep, 200
    MouseClick, right, %Bp2X%, %Bp2Y%, ,0
    Sleep, 200
    MouseClick, left, %Bp1X%, %Bp1Y%, ,0
    Sleep, 200
    MouseClick, right, %Bp1X%, %Bp1Y%, ,0
    MouseMove, %xpos%,%ypos%
    return
  } 
}
return
;-----------------------------------------------


#If (Walking)
w::Up
a::Left
s::Down
d::Right

Return

walkin:
Gui Submit, NoHide
  if(walking) 
  {
    MsgBox ,48 , , W A S D foi ativado!, 10.

  }
  else
  {
    SetTimer, , Off
    MsgBox ,48 , , W A S D foi desativado!, 10.
  }
  Return
;-----------------------------------------------

guiclose:
exit:
 {
   exitapp
 }
return
Last edited by Nauany on 23 Mar 2018, 11:07, edited 1 time in total.
User avatar
Gio
Posts: 1247
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Sobre Checkbox  Topic is solved

23 Mar 2018, 11:07

Teste o código abaixo e veja se funciona como espera (Adicionei a outra linha #If para desligar a condicional depois das definições das hotkeys WASD).

Code: Select all

#SingleInstance Force

GuiW := 60, GuiH := 50
Gui, +LastFound +Resize +MinSize%GuiW%x%GuiH%
hGui1 := WinExist()
Gui, Margin, 10, 10

tabs:=2


gui, Add,Tab2,vTab TCS_BUTTONS	0x100,Heala



gui, Tab,Heal
;----------------------------------------------------
;Revive
Gui, Add, Hotkey, x30 y45 h20 w50 vvariablel2
Gui, Add, Button, x80 y45 h20 w50 gSubmit2, Confirme
gui, add, button, x135 y45 h20 w50 gMF, Revive
;----------------------------------------------------
;W A S D
Gui, Add, Checkbox, x30 y95 h20 w50 vwalking gwalkin, % "On/Off"
Gui, Add, Button, x80 y95 h20 w50, W A S D
;----------------------------------------------------

gui, show, h420
return

;-----------------------------------------------
Submit2:                     ;o que eu estava dizendo é aqui por exemplo... essa parte que é dar use nos itens ela n esta funcionando por conta que o checkbox n esta selecionado
Gui, Submit, NoHide    ; ele só volta a funcionar ao ser selecionado o check box, eu queria que com o check box selecionado ou n, essa parte também funcionasse
Hotkey, %variablel2%, action2, On
return

MF: 
{
MsgBox ,48 , , Selecione a Pokeball que vai se usar o Revive, 10
KeyWait, LButton, D
MouseGetPos, Bp1X, Bp1Y
MsgBox ,48 , , Selecione a posição do Revive, 10
KeyWait, LButton, D
MouseGetPos, Bp2X, Bp2Y
Sleep, 200
action2:
  {
    MouseGetPos, xpos, ypos
    MouseClick, right, %Bp1X%, %Bp1Y%, ,0
    Sleep, 200
    MouseClick, right, %Bp2X%, %Bp2Y%, ,0
    Sleep, 200
    MouseClick, left, %Bp1X%, %Bp1Y%, ,0
    Sleep, 200
    MouseClick, right, %Bp1X%, %Bp1Y%, ,0
    MouseMove, %xpos%,%ypos%
    return
  } 
}
return
;-----------------------------------------------


#If (Walking)
w::Up
a::Left
s::Down
d::Right
#If ; Esta linha é que desliga a condiconal de execução de hotkeys anteriormente vigente, ou seja, o #If (Walking).

Return

walkin:
Gui Submit, NoHide
  if(walking) 
  {
    MsgBox ,48 , , W A S D foi ativado!, 10.

  }
  else
  {
    SetTimer, , Off
    MsgBox ,48 , , W A S D foi desativado!, 10.
  }
  Return
;-----------------------------------------------
Em qualquer script você pode clicar com o botão direito do mouse no ícone que aparece na parte inferior direita da tela e clicando em "open" você pode ver várias informações, como as linhas anteriormente executadas e as hotkeys ativas. Foi assim que vi que a hotkey que estava sendo criada no botão confirme estava obedecendo ao "#If (Walking)". Assim, ao colocar #If logo após as hotkeys WASD, garanti que somente essas quatro hotkeys iriam obedecer a essa condicional.
Nauany
Posts: 58
Joined: 12 Dec 2016, 01:37

Re: Sobre Checkbox

23 Mar 2018, 11:12

AAAAAAAAAAAAAAAAAAA
n acredito manoooo
nosso Paaai muito obrigado mesmo maan, fico muito feliz em saber que agora temos Moderados BR, e possam estar tirando dúvidas
desculpe realmente o incomodo por faze-lo "perder tempo" respondendo coisas aqui por mim...
abraços tenha um bom dia =D

Return to “Ajuda e Suporte Geral”

Who is online

Users browsing this forum: No registered users and 31 guests