Post by Gio » 27 Dec 2017, 08:52
1-se eu usar funções para fazer elementos de GUI (Botão,Texto,etc...) pode me causar problemas
Não creio que causaria problemas, mas você teria que alinhar todas as particularidades das funções e da criação das GUIs, é claro.
2- Criar varias GUIs no mesmo script
Isso é bem simples na verdade. Você pode fazer isso usando números ou nomes para identificar as diferentes GUIs. A sintaxe é essa abaixo (usando o número ou nome e depois dois pontos entre o comando "gui" e os comandos que você quer que se refiram a uma GUI específica).
Code: Select all
Gui, add, text, x50 y50, PRIMEIRA GUI
Gui, show, w300 h400
Gui, 2: add, text, x50 y50, SEGUNDA GUI
Gui, 2: show, w600 h100
Algumas particularidades a serem observadas quando você estiver lidando com múltiplas GUIs:
1 - Algumas GUIs podem ser
"pertencentes" a outras GUIs. Isso é muito útil quando você quer criar uma gui secundária para colher dados acessórios em uma rotina implementada em uma GUI principal, por exemplo.
2 - As funções de GUIs, como Lv_Add(), operam na GUI considerada "padrão" do script. Você pode redefinir a gui padrão a qualquer momento usando a sintaxe
Gui, Default (ou
Gui, 2: Default se for uma gui numerada ou nomeada) por exemplo.
3 - Quando uma gui principal é fechada, a label
GuiClose é executada se existir. Quando uma gui numerada ou nomeada é fechada, a label chamada, se existir, segue a sintaxe
2GuiClose (com o número antes).
4 - As variáveis embutidas A_Gui e A_GuiControl podem te ajudar a implementar algumas rotinas.
5 - As labels dos botões e outras rotinas podem te ajudar a definir quando as GUIs secundárias são criadas.
Abaixo eu coloquei um exemplo de duas GUIs, sendo que a segunda complementa a rotina da primeira, trabalhando de forma conjunta para implementar uma rotina só. Usei algumas das implementações descritas acima. Basicamente o papel da segunda GUI é coletar uma senha do usuário. Se a senha estiver correta, ela dará seguimento à rotina da Gui 1 (soma dos valores). Espero que seja um bom exemplo para estudo de GUIs secundárias.
Code: Select all
;************************************************************************************
; PRIMEIRO, CRIAMOS A GUI PRINCIPAL, CHAMADA "SOMADORA COM SENHA"
;************************************************************************************
Gui, add, edit, x50 y50 number vPRIMEIRO_VALOR
Gui, add, edit, x50 y80 number vSEGUNDO_VALOR
Gui, add, button, x50 y120 gSOMAR_VALORES, SOMAR
Gui, add, EDIT, x50 y150 disabled
Gui, show, w400 h400, SOMADORA COM SENHA
Return
;******************************************************************************************************************************************************************
; DEPOIS, CRIAMOS UMA FUNÇÃO PARA CRIAR A SEGUNDA GUI, QUE SERÁ PERTENCENTE À GUI 1 (E VAI BLOQUEÁ-LA ENQUANTO NÃO FOR FECHADA).
; Essa função será chamada através da label do botão da Gui 1.
;******************************************************************************************************************************************************************
SOMAR_VALORES:
COLLECT_PASS()
Return
COLLECT_PASS()
{
Gui, 2: Add, Text, x50 y50, SENHA:
Gui, 2: add, edit, x50 y80 vSENHA_INSERIDA
Gui, 2: Add, Button, x50 y120 gVERIFICA_SENHA, CONFIRMAR
Gui, 2: show, w200 h150
Gui, 2: +Owner1
Gui, 1: +Disabled ; Aqui desabilitamos a Gui 1 quando a Gui 2 for criada (isso será desfeito quando a gui 2 for fechada, lá em 2guiclose).
}
VERIFICA_SENHA:
Gui, 2: Submit, nohide
If (SENHA_INSERIDA = "EXEMPLO") ; Se a senha escrita na Gui 2 estiver correta, o valor será somado.
{
Gosub, 2GuiClose
Gui, 1: Submit, nohide
VALOR_A_EXIBIR := PRIMEIRO_VALOR + SEGUNDO_VALOR
ControlSetText, Edit3, %VALOR_A_EXIBIR%, SOMADORA COM SENHA
}
Else ; Mas se a senha estiver errada, nada acontece (e não adianta fechar a gui 2, pois o código acima só ocorre se a senha estiver certa e o botão pressionado).
{
msgbox % "Senha errada! A senha correta é a palavra EXEMPLO"
}
Return
;***********************************************************************
; SE A GUI 2 FOR FECHADA, DESTRUÍMOS ELA E LIBERAMOS A GUI 1.
;***********************************************************************
2GuiClose:
Gui, 1: -Disabled ; Aqui reabilitamos a gui 1.
Gui, 2: Destroy
Return
;***********************************************************************
; SE A GUI 1 FOR FECHADA, ENCERRAMOS O SCRIPT.
;***********************************************************************
Guiclose:
ExitApp
[quote]1-se eu usar funções para fazer elementos de GUI (Botão,Texto,etc...) pode me causar problemas[/quote]
Não creio que causaria problemas, mas você teria que alinhar todas as particularidades das funções e da criação das GUIs, é claro.
[quote]2- Criar varias GUIs no mesmo script[/quote]
Isso é bem simples na verdade. Você pode fazer isso usando números ou nomes para identificar as diferentes GUIs. A sintaxe é essa abaixo (usando o número ou nome e depois dois pontos entre o comando "gui" e os comandos que você quer que se refiram a uma GUI específica).
[code]Gui, add, text, x50 y50, PRIMEIRA GUI
Gui, show, w300 h400
Gui, 2: add, text, x50 y50, SEGUNDA GUI
Gui, 2: show, w600 h100[/code]
Algumas particularidades a serem observadas quando você estiver lidando com múltiplas GUIs:
1 - Algumas GUIs podem ser [url=https://autohotkey.com/docs/commands/Gui.htm#Owner]"pertencentes" a outras GUIs[/url]. Isso é muito útil quando você quer criar uma gui secundária para colher dados acessórios em uma rotina implementada em uma GUI principal, por exemplo.
2 - As funções de GUIs, como Lv_Add(), operam na GUI considerada "padrão" do script. Você pode redefinir a gui padrão a qualquer momento usando a sintaxe [c]Gui, Default[/c] (ou [c]Gui, 2: Default[/c] se for uma gui numerada ou nomeada) por exemplo.
3 - Quando uma gui principal é fechada, a label [c]GuiClose[/c] é executada se existir. Quando uma gui numerada ou nomeada é fechada, a label chamada, se existir, segue a sintaxe [c]2GuiClose[/c] (com o número antes).
4 - As variáveis embutidas A_Gui e A_GuiControl podem te ajudar a implementar algumas rotinas.
5 - As labels dos botões e outras rotinas podem te ajudar a definir quando as GUIs secundárias são criadas.
Abaixo eu coloquei um exemplo de duas GUIs, sendo que a segunda complementa a rotina da primeira, trabalhando de forma conjunta para implementar uma rotina só. Usei algumas das implementações descritas acima. Basicamente o papel da segunda GUI é coletar uma senha do usuário. Se a senha estiver correta, ela dará seguimento à rotina da Gui 1 (soma dos valores). Espero que seja um bom exemplo para estudo de GUIs secundárias.
[code];************************************************************************************
; PRIMEIRO, CRIAMOS A GUI PRINCIPAL, CHAMADA "SOMADORA COM SENHA"
;************************************************************************************
Gui, add, edit, x50 y50 number vPRIMEIRO_VALOR
Gui, add, edit, x50 y80 number vSEGUNDO_VALOR
Gui, add, button, x50 y120 gSOMAR_VALORES, SOMAR
Gui, add, EDIT, x50 y150 disabled
Gui, show, w400 h400, SOMADORA COM SENHA
Return
;******************************************************************************************************************************************************************
; DEPOIS, CRIAMOS UMA FUNÇÃO PARA CRIAR A SEGUNDA GUI, QUE SERÁ PERTENCENTE À GUI 1 (E VAI BLOQUEÁ-LA ENQUANTO NÃO FOR FECHADA).
; Essa função será chamada através da label do botão da Gui 1.
;******************************************************************************************************************************************************************
SOMAR_VALORES:
COLLECT_PASS()
Return
COLLECT_PASS()
{
Gui, 2: Add, Text, x50 y50, SENHA:
Gui, 2: add, edit, x50 y80 vSENHA_INSERIDA
Gui, 2: Add, Button, x50 y120 gVERIFICA_SENHA, CONFIRMAR
Gui, 2: show, w200 h150
Gui, 2: +Owner1
Gui, 1: +Disabled ; Aqui desabilitamos a Gui 1 quando a Gui 2 for criada (isso será desfeito quando a gui 2 for fechada, lá em 2guiclose).
}
VERIFICA_SENHA:
Gui, 2: Submit, nohide
If (SENHA_INSERIDA = "EXEMPLO") ; Se a senha escrita na Gui 2 estiver correta, o valor será somado.
{
Gosub, 2GuiClose
Gui, 1: Submit, nohide
VALOR_A_EXIBIR := PRIMEIRO_VALOR + SEGUNDO_VALOR
ControlSetText, Edit3, %VALOR_A_EXIBIR%, SOMADORA COM SENHA
}
Else ; Mas se a senha estiver errada, nada acontece (e não adianta fechar a gui 2, pois o código acima só ocorre se a senha estiver certa e o botão pressionado).
{
msgbox % "Senha errada! A senha correta é a palavra EXEMPLO"
}
Return
;***********************************************************************
; SE A GUI 2 FOR FECHADA, DESTRUÍMOS ELA E LIBERAMOS A GUI 1.
;***********************************************************************
2GuiClose:
Gui, 1: -Disabled ; Aqui reabilitamos a gui 1.
Gui, 2: Destroy
Return
;***********************************************************************
; SE A GUI 1 FOR FECHADA, ENCERRAMOS O SCRIPT.
;***********************************************************************
Guiclose:
ExitApp[/code]