botão marca checkbox Topic is solved

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

Moderator: Gio

Lazyyy
Posts: 55
Joined: 27 Jan 2020, 21:56

botão marca checkbox

05 Jun 2020, 03:36

Bom dia, minha dúvida é simples, gostaria de saber se é possível fazer com que um botão marque e desmarque uma checkbox na GUI.

Por exemplo:

*F7::
Se não estiver marcada:
✔️ Checkbox (marca)

Se já estiver marcada:
❌ Checkbox (desmarca)
User avatar
Gio
Posts: 1247
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: botão marca checkbox

05 Jun 2020, 08:28

Bom dia Lazyyy.

Quando você mencionou botão, pensei que se tratava de um botão em uma gui (button), mas vejo que se trata na verdade de uma hotkey (F7).

Em ambos o caso isso é possível fazer isso usando o comando Control em suas opções Check e UnCheck.

Exemplo (veja os comentários no código):

Code: Select all

Gui, add, Text, x20 y20, Aperte F7 para marcar`n a checbox abaixo
gui, add, checkbox, x50 y50 vMARCADA_OU_DESMARCADA ; Usamos uma variável para o controle Checkbox.
gui, show, w200 h200, Exemplo - Checkbox
return

F7::
Gui, submit, nohide ; Populamos as variáveis dos controles.
If ((WinExist("Exemplo - Checkbox")) AND (MARCADA_OU_DESMARCADA = 1)) ; E então checamos se a variável do controle foi populada com 1 (marcado). Também vemos se a tela alvo existe (pode ter sido fechada pelo usuário).
{
	Control, UnCheck,, Button1, Exemplo - Checkbox ; Se ambas as condições resultarem verdadeiras, enviamos um comando para desmarcar a checbox (pois estava marcada).
	Return
}
Else if ((WinExist("Exemplo - Checkbox")) AND (MARCADA_OU_DESMARCADA = 0)) ; Também verificamos se a variável foi populada com 0 (desmarcada) e se a tela ainda existe.
{
	Control, Check,, Button1, Exemplo - Checkbox ; E se ambas as condições resultarem verdadeiras, enviamos um comando para marcar a checkbox (pois estava desmarcada)
	Return
}
else ; Agora se nenhuma das verificações deu resultado...
{
	msgbox, 0x10, Erro, A tela alvo não existe (foi fechada pelo usuário) ; É porque a tela não existe. Provavelmente foi fechada pelo usuário em algum momento (crie uma label GuiClose que implemente o comando ExitApp caso você queira terminar o script quando o usuário fechar a janela).
	Return
}
Return
Lazyyy
Posts: 55
Joined: 27 Jan 2020, 21:56

Re: botão marca checkbox

05 Jun 2020, 19:04

Gio wrote:
05 Jun 2020, 08:28
Bom dia Lazyyy.

Quando você mencionou botão, pensei que se tratava de um botão em uma gui (button), mas vejo que se trata na verdade de uma hotkey (F7).

Em ambos o caso isso é possível fazer isso usando o comando Control em suas opções Check e UnCheck.

Exemplo (veja os comentários no código):

Code: Select all

Gui, add, Text, x20 y20, Aperte F7 para marcar`n a checbox abaixo
gui, add, checkbox, x50 y50 vMARCADA_OU_DESMARCADA ; Usamos uma variável para o controle Checkbox.
gui, show, w200 h200, Exemplo - Checkbox
return

F7::
Gui, submit, nohide ; Populamos as variáveis dos controles.
If ((WinExist("Exemplo - Checkbox")) AND (MARCADA_OU_DESMARCADA = 1)) ; E então checamos se a variável do controle foi populada com 1 (marcado). Também vemos se a tela alvo existe (pode ter sido fechada pelo usuário).
{
	Control, UnCheck,, Button1, Exemplo - Checkbox ; Se ambas as condições resultarem verdadeiras, enviamos um comando para desmarcar a checbox (pois estava marcada).
	Return
}
Else if ((WinExist("Exemplo - Checkbox")) AND (MARCADA_OU_DESMARCADA = 0)) ; Também verificamos se a variável foi populada com 0 (desmarcada) e se a tela ainda existe.
{
	Control, Check,, Button1, Exemplo - Checkbox ; E se ambas as condições resultarem verdadeiras, enviamos um comando para marcar a checkbox (pois estava desmarcada)
	Return
}
else ; Agora se nenhuma das verificações deu resultado...
{
	msgbox, 0x10, Erro, A tela alvo não existe (foi fechada pelo usuário) ; É porque a tela não existe. Provavelmente foi fechada pelo usuário em algum momento (crie uma label GuiClose que implemente o comando ExitApp caso você queira terminar o script quando o usuário fechar a janela).
	Return
}
Return
Obrigado @Gio, esse código funcionou bem em script, só não consegui adaptar ao que eu já tinha, acho que o problema foi a variável, porque minha checkbox já tem uma label.
Meu código:

Code: Select all

Gui, Add, CheckBox, vCheck4 x18 y220 w160 h20 gstop1, STOP
Gui, show
Return

gosub stop1
stop1:
Gui, Submit, NoHide
	
if (check4)
{
	FileDelete, %A_ScriptDir%/Data/safestop.txt
	FileAppend, true, %A_ScriptDir%/Data/safestop.txt
}
else
{
	FileDelete, %A_ScriptDir%/Data/safestop.txt
	FileAppend, false, %A_ScriptDir%/Data/safestop.txt
}

Return
garry
Posts: 3777
Joined: 22 Dec 2013, 12:50

Re: botão marca checkbox  Topic is solved

06 Jun 2020, 14:16

@Gio , obrigado
@Lazyyy boa tarde , save state in INI ( iniread / iniwrite )

Code: Select all

;-------- saved at 2020-06-06  19:30 UTC --------------
;- botão marca checkbox / Gio
;- https://www.autohotkey.com/boards/viewtopic.php?f=69&t=76913

Gui,2: -dpiscale
Gui,2:color,black,black
Gui,2:Font,s12 cYellow,Lucida Console
f1=%A_scriptdir%\safestop.txt
ifnotexist,%f1%
    IniWrite,1,%f1%,yes_no,state
IniRead,var1, %f1%,yes_no,state
if (var1=1)
  cb1=checked
else
  cb1=
Gui,2:add,Text,x20 y5 cGray, Aperte F7 para marcar a checkbox abaixo
Gui,2:add,edit,x10 y60 w270 h40 vE1 -hscroll -vscroll center readonly 
Gui,2:Add, CheckBox, vVar1 %cb1% x18 y200 gAA, STOP
Gui,2:show,x500 y100 w800 h300,Exemplo - Checkbox
Gosub,aa
Return
;----------
aa:
Gui,2:submit, nohide
if (Var1=1)
  GuiControl,2:,E1,Checked
else
  GuiControl,2:,E1,NOT Checked
return
;----------
2Guiclose:
Gui,2:submit,nohide
    IniWrite,%var1%,%f1%,yes_no,state
exitapp
;------------------------------------
$F7::
Gui,2: submit, nohide                                      ;- Populamos as variáveis dos controles.
If ((WinExist("Exemplo - Checkbox")) AND (VAR1 = 1))       ;- E então checamos se a variável do controle foi populada com 1 (marcado). Também vemos se a tela alvo existe (pode ter sido fechada pelo usuário).
{
	Control, UnCheck,, Button1, Exemplo - Checkbox         ;- Se ambas as condições resultarem verdadeiras, enviamos um comando para desmarcar a checbox (pois estava marcada).
	Return
}
Else if ((WinExist("Exemplo - Checkbox")) AND (VAR1 = 0))  ;- Também verificamos se a variável foi populada com 0 (desmarcada) e se a tela ainda existe.
{
	Control, Check,, Button1, Exemplo - Checkbox           ;- E se ambas as condições resultarem verdadeiras, enviamos um comando para marcar a checkbox (pois estava desmarcada)
	Return
}
else ;- Agora se nenhuma das verificações deu resultado...
{
	msgbox, 0x10, Erro, A tela alvo não existe (foi fechada pelo usuário) ;- É porque a tela não existe. Provavelmente foi fechada pelo usuário em algum momento (crie uma label GuiClose que implemente o comando ExitApp caso você queira terminar o script quando o usuário fechar a janela).
	Return
}
Return

;===================================
Lazyyy
Posts: 55
Joined: 27 Jan 2020, 21:56

Re: botão marca checkbox

10 Jun 2020, 02:30

garry wrote:
06 Jun 2020, 14:16
@Gio , obrigado
@Lazyyy boa tarde , save state in INI ( iniread / iniwrite )

Code: Select all

;-------- saved at 2020-06-06  19:30 UTC --------------
;- botão marca checkbox / Gio
;- https://www.autohotkey.com/boards/viewtopic.php?f=69&t=76913

Gui,2: -dpiscale
Gui,2:color,black,black
Gui,2:Font,s12 cYellow,Lucida Console
f1=%A_scriptdir%\safestop.txt
ifnotexist,%f1%
    IniWrite,1,%f1%,yes_no,state
IniRead,var1, %f1%,yes_no,state
if (var1=1)
  cb1=checked
else
  cb1=
Gui,2:add,Text,x20 y5 cGray, Aperte F7 para marcar a checkbox abaixo
Gui,2:add,edit,x10 y60 w270 h40 vE1 -hscroll -vscroll center readonly 
Gui,2:Add, CheckBox, vVar1 %cb1% x18 y200 gAA, STOP
Gui,2:show,x500 y100 w800 h300,Exemplo - Checkbox
Gosub,aa
Return
;----------
aa:
Gui,2:submit, nohide
if (Var1=1)
  GuiControl,2:,E1,Checked
else
  GuiControl,2:,E1,NOT Checked
return
;----------
2Guiclose:
Gui,2:submit,nohide
    IniWrite,%var1%,%f1%,yes_no,state
exitapp
;------------------------------------
$F7::
Gui,2: submit, nohide                                      ;- Populamos as variáveis dos controles.
If ((WinExist("Exemplo - Checkbox")) AND (VAR1 = 1))       ;- E então checamos se a variável do controle foi populada com 1 (marcado). Também vemos se a tela alvo existe (pode ter sido fechada pelo usuário).
{
	Control, UnCheck,, Button1, Exemplo - Checkbox         ;- Se ambas as condições resultarem verdadeiras, enviamos um comando para desmarcar a checbox (pois estava marcada).
	Return
}
Else if ((WinExist("Exemplo - Checkbox")) AND (VAR1 = 0))  ;- Também verificamos se a variável foi populada com 0 (desmarcada) e se a tela ainda existe.
{
	Control, Check,, Button1, Exemplo - Checkbox           ;- E se ambas as condições resultarem verdadeiras, enviamos um comando para marcar a checkbox (pois estava desmarcada)
	Return
}
else ;- Agora se nenhuma das verificações deu resultado...
{
	msgbox, 0x10, Erro, A tela alvo não existe (foi fechada pelo usuário) ;- É porque a tela não existe. Provavelmente foi fechada pelo usuário em algum momento (crie uma label GuiClose que implemente o comando ExitApp caso você queira terminar o script quando o usuário fechar a janela).
	Return
}
Return

;===================================
ficou muito confuso pra mim, não consegui adaptar ao meu código. Tem algum jeito mais fácil de fazer isso?
User avatar
Hologram
Posts: 140
Joined: 06 May 2020, 16:47

Re: botão marca checkbox

10 Jun 2020, 06:11

Eu pessoalmente não uso ele, mas me parece algo bem simples, a unica coisa que precisa ser feita, é trocar a variavel de dentro desse script, pela variavel da sua CheckBox, nada mais
Discord: Npc Bugado#9074



local config = {
delrey = getPlayerCarValue(cid, DELREY),
cigarro = getPlayerCancer(cid, DERBY),
prostituta = getPlayerAIDS(cid, cracuda),
tresOitao = getPlayerRevorvi(cid, 38)
}
if(delrey == "Ligado" and cigarro == "Aceso" and prostituta == "No Colo" and tresOitao == "Carregado") then
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Começou o fim de semana. #PAS")
end


garry
Posts: 3777
Joined: 22 Dec 2013, 12:50

Re: botão marca checkbox

11 Jun 2020, 04:59

@Gio , obrigado > F7 button
@Lazyyy boa tarde ,exemplo fácil : Checkbox / IniRead

Code: Select all

;- Checkbox and Iniread example ---------------------
;Modified = 20200611
;Created  = 20200611

#Warn
#NoEnv
#SingleInstance force
filename1=Checkbox_IniReadWrite
SetWorkingDir, %A_ScriptDir%
Gui,2: Color, Gray,Black 
Gui,2: Font,s12 cYellow ,Lucida Console    ;- font , font-size and color

;----------- ini-file create once and read ------------------------
RSSINI=%A_scriptdir%\%filename1%_config.ini
ifnotexist,%rssini%
    {
    IniWrite,notepad, %rssini% , Program-1 ,EXE
    IniWrite,calc   , %rssini% , Program-2 ,EXE
    }
IniRead, var1, %rssini%, Program-1, EXE
IniRead, var2, %rssini%, Program-2, EXE
;---------- check ini file -----------------------------------------
if (var1=1)
  cb1a=checked
else
  cb1a=
;------------
if (var2=1)
  cb2a=checked
else
  cb2a=
;--------------------------------------------------------------------
Gui,2:Add, checkbox, x10  y10  vcb1 %cb1a%, NotePad 
Gui,2:Add, Checkbox, x10  y40  vcb2 %cb2a%, Calc

Gui,2: Add, Button,  x10  y80  w160 h27   gRunSelected  ,Run_Selected
Gui,2: Add, Button,  x180 y80  w170 h27   gClearCheckBox,Clear_Checkbox

Gui,2: Show,x100 y10 w370 h120,%filename1%
return
;======================== END GUI =============================================
;- close script and save checkbox settings ----------------------------
2Guiclose:
Gui,2:submit,nohide
IniWrite, %Cb1%  , %rssini% ,Program-1   , EXE
IniWrite, %Cb2%  , %rssini% ,Program-2   , EXE
exitapp
;--------- Run Selected ---------------------
RunSelected:
Gui,2: submit, nohide
If (cb1 = 1)
  run,Notepad
If (cb2 = 1)
  run,calc
return
;---------- clearcheckbox --------------------
clearcheckbox:
Loop,2
  GuiControl,2:, cb%A_Index%, 0
return
;============== END SCRIPT =============================================
Lazyyy
Posts: 55
Joined: 27 Jan 2020, 21:56

Re: botão marca checkbox

12 Jun 2020, 05:17

obrigado, @garry consegui utilizando seu primeiro código

Return to “Ajuda e Suporte Geral”

Who is online

Users browsing this forum: No registered users and 11 guests