GUI customizada Topic is solved

Tire suas dúvidas sobre programação em AutoHotkey
User avatar
juanmuscaria
Posts: 56
Joined: 29 Oct 2017, 10:53
GitHub: juanmuscaria
Location: Brazil
Contact:

GUI customizada

23 Dec 2017, 13:30

Estou querendo fazer GUI customizada,tipo,mudar o ícone do botão fechar/minimizar,as bordas,etc..
Alguém tem alguma ideia de Biblioteca ou funções para isso?
Ex. do que quero fazer:
Image
User avatar
Gio
Posts: 505
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: GUI customizada

26 Dec 2017, 15:54

Olá juanmuscaria.

Seja bem-vindo ao fórum do AutoHotkey.

Desconheço uma biblioteca para customização de GUIs de um modo geral, talvez porque GUIs sejam na verdade compostas de vários elementos diferentes (e em quantidades e posições diferentes). Há, no entanto, alguns exemplos bem interessantes de GUIs customizadas neste tópico:

https://autohotkey.com/boards/viewtopic.php?t=3851

E também é possível encontrar exemplos de customização de vários elementos específicos de GUIs (Por exemplo, como criar botões com imagens e etc).
tipo,mudar o ícone do botão fechar/minimizar,as bordas,etc..
Todas essa modificações são possíveis também. Eu sugiro olhar o que já está disponível de forma integrada no AutoHotkey primeiro (pois é o mais fácil de implementar). Você pode encontrar algumas das opções integradas aqui: https://autohotkey.com/docs/misc/Styles.htm

Assim, para criar uma gui sem bordas, por exemplo, basta usar:

Code: Select all

Gui -Border
Gui, show, w300 h300
E mesmo assim se quando estiver fazendo sua GUI customizada sentir necessidade de mudar algum elemento específico (botão, borda, cor, etc) e não encontrar a solução, pode fazer uma pergunta sobre o elemento em questão e vamos ajudá-lo :thumbup:
"What is suitable automation? Whatever saves your day for the greater matters."
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
User avatar
juanmuscaria
Posts: 56
Joined: 29 Oct 2017, 10:53
GitHub: juanmuscaria
Location: Brazil
Contact:

Re: GUI customizada

26 Dec 2017, 17:51

Obrigado pelas respostas,mas tenho uma duvida em:
1-se eu usar funções para fazer elementos de GUI (Botão,Texto,etc...) pode me causar problemas
2-Criar varias GUIs no mesmo script
Agradeço se conseguir me responder
User avatar
Gio
Posts: 505
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: GUI customizada  Topic is solved

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
"What is suitable automation? Whatever saves your day for the greater matters."
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
User avatar
juanmuscaria
Posts: 56
Joined: 29 Oct 2017, 10:53
GitHub: juanmuscaria
Location: Brazil
Contact:

Re: GUI customizada

27 Dec 2017, 09:52

Muito obrigado pela ajuda,com isso vou fazer umas funções para simplificar a criação de GUIs :)
A_AhkUser
Posts: 884
Joined: 06 Mar 2017, 16:18
Location: France

Re: GUI customizada

27 Dec 2017, 11:33

Outro exemplo:

Code: Select all

#NoEnv
#Warn
SendMode Input
SetWorkingDir %A_ScriptDir%
#SingleInstance force

WM_NCLBUTTONDOWN := "0xA1" ; https://msdn.microsoft.com/en-us/library/windows/desktop/ms645620(v=vs.85).aspx
HTCAPTION := 2 ; https://msdn.microsoft.com/en-us/library/windows/desktop/ms645618(v=vs.85).aspx

JANELA_AMPLIADA := 1 ; https://www.autohotkey.com/docs/commands/WinGet.htm#List

Gui, minhaGUI:Default
Gui, -Caption hwndminhaJanelaID +MinSize300x300 +Resize
Gui, Color, White, White
Gui, Margin, 10, 10
Gui, Add, Picture, vbotãoMinimizar Section gminimizarAJanela Icon40, mmcndmgr.dll ; https://diymediahome.org/windows-icons-reference-list-with-details-locations-images/?lang=es
Gui, Add, Picture, vbotãoAmpliar ys-3 gampliarAJanela Icon62, mmcndmgr.dll
Gui, Add, Picture, vbotãoFechar ys-1 gfecharAJanela Icon162, imageres.dll
Gui, Add, Text, vbarraDoTítulo x0 y0 hp+20 Border BackgroundTrans Center gmoverAFanela,
Gui, Font, s15, Segoe UI
Gui, Add, Text, vtítulo x0 ys-3 BackgroundTrans Center, minha GUI
GuiControlGet, títuloPosiçãoETamanho, Pos, título ; https://www.autohotkey.com/docs/commands/GuiControlGet.htm#subcommands
TITULO_LARGURA := títuloPosiçãoETamanhoW
Gui, Show, w400 h400
return


minimizarAJanela:
MsgBox % A_ThisLabel
	WinMinimize, A ;  A = janela ativa
return
ampliarAJanela:
MsgBox % A_ThisLabel
	WinGet, minOMax, MinMax ; https://www.autohotkey.com/docs/commands/WinGet.htm#List
	if (minOMax = JANELA_AMPLIADA)
		WinRestore, A
	else 
		WinMaximize, A
return

moverAFanela: ; ; https://autohotkey.com/board/topic/80594-how-to-enable-drag-for-a-gui-without-a-titlebar/
	PostMessage, %WM_NCLBUTTONDOWN%, %HTCAPTION%,,, A
return
minhaGUIGuiSize: ; https://www.autohotkey.com/docs/commands/Gui.htm#GuiSize ; https://www.autohotkey.com/docs/commands/GuiControl.htm#Move
	GuiControl, MoveDraw, barraDoTítulo, % "w" . A_GuiWidth
	GuiControl, MoveDraw, título, % "x" . A_GuiWidth//3-TITULO_LARGURA//2
	GuiControl, MoveDraw, botãoMinimizar, % "x" . A_GuiWidth-110
	GuiControl, MoveDraw, botãoAmpliar, % "x" . A_GuiWidth-70
	GuiControl, MoveDraw, botãoFechar, % "x" . A_GuiWidth-30
return
minhaGUIGuiEscape:
minhaGUIGuiClose:
fecharAJanela:
MsgBox % A_ThisLabel
	Exitapp

Return to “Ajuda e Suporte Geral”

Who is online

Users browsing this forum: No registered users and 1 guest