Boa Noite.
Gostaria de saber alguma forma de fazer um texto ficar centralizado em uma GUI("Ao invés de expandir para frente ele expande para os lados fazendo ficar no mesmo eixo").
Creio que isso possa ser resolvido usando aqueles códigos de style, porem eu não sei usar eles.
Aqui uma explicação rápida do que quero fazer:
Quando um texto na minha GUI muda,ele expandir para os lados e ainda ficar centralizado.
Obrigado pela sua atenção.
Texto Centralizado em uma GUI Topic is solved
Moderator: Gio
- juanmuscaria
- Posts: 65
- Joined: 29 Oct 2017, 10:53
- Location: Brazil
- Contact:
Re: Texto Centralizado em uma GUI Topic is solved
Gui menu-icon ,text , button example
Code: Select all
;- Gui with menu and center text
#warn
#NoEnv
setworkingdir,%a_scriptdir%
Gui,2:default
Gui,2: -DPIScale
Gui,2:Font,Cdefault,Fixedsys
Gui,2:Color,Black
Gui,2:Color,ControlColor, Black
t:=""
;-------------------------------------------------
Menu,S1,add,calc ,MH1a
Menu,S1,add,charmap ,MH1a
menu,myMenuBar,Add,Programs ,:S1
Menu, MyMenuBar, Add, Notepad , Label1
Menu, MyMenuBar, Icon,Notepad , Notepad.exe,0,20 ;- 20 is size , maybe 16
gui,2:menu,MyMenuBar ,
;-------------------------------------------------
Gui,2:add,Text, x0 y10 w500 cGray center vT1 ,Test ... ;- same width as GUI
Gui,2:add,button,x10 y40 h25 w140 gA1,Alterar-texto
Gui,2:show,x10 y10 w500 h100, Test
gosub,textchange
return
2Guiclose:
exitapp
a1:
T:= !T
if t
GuiControl,2: Text,T1,Toggle=Este é um exemplo de texto longo
else
GuiControl,2: Text,T1,Toggle=Texto curto
return
TextChange:
sleep,1000
GuiControl,2: Text,T1,Este é um exemplo de texto longo
sleep,1000
GuiControl,2: Text,T1,Texto curto
sleep,1000
GuiControl,2: Text,T1,Pressione o botão várias vezes: 'alterar texto'
return
Label1:
run,notepad
return
mh1a:
gui,2:submit,nohide
if A_thisMenuItem=calc
run,calc
if A_thisMenuItem=charmap
run,charmap
return
Last edited by garry on 22 Jan 2018, 15:37, edited 1 time in total.
- juanmuscaria
- Posts: 65
- Joined: 29 Oct 2017, 10:53
- Location: Brazil
- Contact:
Re: Texto Centralizado em uma GUI
A solução do garry está correta, mas tem uma coisa que eu gostaria de apontar também. Quando estamos criando GUIs a ordem de criação dos controles é a mesma ordem de "desenho" dos mesmos e as dimensões desses controles (como w, que é a largura) podem fazer com que uns sejam desenhados em cima dos outros. Então, no código abaixo, embora usando a opção de largura w500 (500 é a mesma largula da janela criada) juntamente com a opção center eu tenha conseguido centralizar o controle, eu na verdade tenho que considerar agora que para todos os efeitos tem um controle de texto que foi desenhado em toda a largura da janela (mesmo que não apareça porque a mensagem é pequena).
No código abaixo dá pra ver isso claramente. O primeiro controle de texto não vai aparecer porque o segundo está desenhado em cima dele (e ocupa toda a extensão da largura da janela). O terceiro aparece mesmo estando dentro da extensão do segundo controle porque foi desenhado após ele (logo, foi desenhado em cima dele).
Com efeito, se eu tirar a primeira linha e colocar logo após a terceira (mas antes do show, claro), o controle de texto aparece também. E como a área dos dois últimos entra em conflito, o último é desenhado em cima do segundo.
E tem mais um efeito disso também. Os controles têm área de ativação, então se você clicar na área entre o segundo e o terceiro, fica difícil dizer qual vai ativar.
Por isso, w500 center tem que ser usado com cautela. E nisto vale destacar que existem algumas opções para você centralizar o controle sem precisar usar essas duas opções. Uma delas é calcular a posição do controle e escrever a posição x adequada. Nisso pode até usar o w também. O objetivo é não terminar com um w gigantesco. Eu costumo fazer isso assim:
1 - coloco um w que apareça toda a mensagem, mas que seja o menor possível
2 - calculo o x de acordo com a seguinte expressão: (largura da tela - w) / 2
Então se eu tiver uma tela de 500 de largura total e eu precisar de um w de 100 para escrever um texto inteiro (fui testando e aumentando até encontrar o w que caubesse todo o texto), eu simpleesmente calculo a posição central usando a fórmula acima: (500 - 100) / 2, que dá 200, daí findo escrevendo simplesmente assim:
Dessa forma eu posso escrever controles do lado do texto centralizado e também tenho uma certeza sobre qual controle vai ser ativado quando o usuário clicar em qualquer posição.
Para ver melhor a diferença entre as duas opções, basta fazer aparecer a cor de fundo dos controles:
No código abaixo dá pra ver isso claramente. O primeiro controle de texto não vai aparecer porque o segundo está desenhado em cima dele (e ocupa toda a extensão da largura da janela). O terceiro aparece mesmo estando dentro da extensão do segundo controle porque foi desenhado após ele (logo, foi desenhado em cima dele).
Code: Select all
gui add, text, x300 y50, isso aqui não vai aparecer
gui add, text, center x0 w500 y50, texto centralizado
gui add, text, x400 y50, mas isso vai
Gui, show, w500 h200
Code: Select all
gui add, text, center x0 w500 y50, texto centralizado
gui add, text, x400 y50, mas isso vai
gui add, text, x300 y50, isso aqui não vai aparecer
Gui, show, w500 h200
Por isso, w500 center tem que ser usado com cautela. E nisto vale destacar que existem algumas opções para você centralizar o controle sem precisar usar essas duas opções. Uma delas é calcular a posição do controle e escrever a posição x adequada. Nisso pode até usar o w também. O objetivo é não terminar com um w gigantesco. Eu costumo fazer isso assim:
1 - coloco um w que apareça toda a mensagem, mas que seja o menor possível
2 - calculo o x de acordo com a seguinte expressão: (largura da tela - w) / 2
Então se eu tiver uma tela de 500 de largura total e eu precisar de um w de 100 para escrever um texto inteiro (fui testando e aumentando até encontrar o w que caubesse todo o texto), eu simpleesmente calculo a posição central usando a fórmula acima: (500 - 100) / 2, que dá 200, daí findo escrevendo simplesmente assim:
Code: Select all
gui add, text, center x200 w100 y50, texto centralizado
Gui, show, w500 h200
Para ver melhor a diferença entre as duas opções, basta fazer aparecer a cor de fundo dos controles:
Code: Select all
Gui, color, red
gui add, text, center -background x165 w170 y50, texto centralizado com cálculo
gui add, text, center -background x0 w500 center y150, texto centralizado com w500 center
Gui, show, w500 h200
"What is suitable automation? Whatever saves your day for the greater matters."
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
Archmage Gray - A fantasy shooter game fully coded in AutoHotkey
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
Archmage Gray - A fantasy shooter game fully coded in AutoHotkey
- juanmuscaria
- Posts: 65
- Joined: 29 Oct 2017, 10:53
- Location: Brazil
- Contact:
Re: Texto Centralizado em uma GUI
Essa opção também é valida.porem tive problema com ela pois tem que fazer varias variáveis para ela funcionar com o meu LoadLang.
Agora tava tentando faze um texto centralizado que mude depois de um tempo,só que ao invés de muda o texto ele cria outro por cima.
Aqui o script (Coloquei comentários sobre o texto que apareceria no loadlang):
Acho que o problema é eu não estar usando corretamente o GuiControl,Text,T1,%lang%
E sobre o que você falo sobre área de ativação:
Eu já fiz testes de coloca 2 controles um em cima do outro,Então já estou ciente desse problema.
Obrigado pela atenção.
Agora tava tentando faze um texto centralizado que mude depois de um tempo,só que ao invés de muda o texto ele cria outro por cima.
Aqui o script (Coloquei comentários sobre o texto que apareceria no loadlang):
Code: Select all
Gui,New,AlwaysOnTop -Caption ToolWindow,MainWin
Gui,Add, Picture,x0 y0 w800 h400, %A_WorkingDir%\Files\Img\Logo.png
Gui,font, s40 q4
lang := LoadLang("launcher","LOGO2")
Gui,Add,Text,+BackgroundTrans Center vT1 x0 y300 w800,%Lang% ;Iniciando
Gui,show, w800 h400,Logo
sleep 400
lang := LoadLang("launcher","LOGO3")
GuiControl,Text,T1,%lang%;Procurando por atualizações
Update() ;ignore isso
Gui, Destroy
E sobre o que você falo sobre área de ativação:
Eu já fiz testes de coloca 2 controles um em cima do outro,Então já estou ciente desse problema.
Obrigado pela atenção.
Re: Texto Centralizado em uma GUI
O código abaixo funcionou aqui no meu computador. Muda o texto de "iniciando" para "Procurando por atualizações" depois de 3 segundos.
Code: Select all
Gui,New,AlwaysOnTop -Caption ToolWindow,MainWin
Gui,Add, Picture,x0 y0 w800 h400, %A_WorkingDir%\Files\Img\Logo.png
Gui,font, s40 q4
Gui,Add,Text,+BackgroundTrans Center vT1 x0 y300 w800, Iniciando
Gui,show, w800 h400,Logo
sleep 3000
GuiControl,,T1, Procurando por atualizações
"What is suitable automation? Whatever saves your day for the greater matters."
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
Archmage Gray - A fantasy shooter game fully coded in AutoHotkey
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
Archmage Gray - A fantasy shooter game fully coded in AutoHotkey
Re: Texto Centralizado em uma GUI
@Gio
desculpe , obrigado , eu esqueço
... e ocupa toda a extensão da largura da janela
Code: Select all
gui add, text, center x0 w500 y50, texto centralizado
Gui, show, w500 h200
- juanmuscaria
- Posts: 65
- Joined: 29 Oct 2017, 10:53
- Location: Brazil
- Contact:
Re: Texto Centralizado em uma GUI
Boa Tarde.
Aqui uma foto de como fica:
Obs: Quando inicio pela primeira vez ele fica normal,depois de 1 vez ele fica assim bugado e só volta ao normal quando reinicio o windows.
Meu windows:10 empresarial
Versão do AHK:1.1.26.01
Gio,eu usei esses script que você fez e continuo com o mesmo problema.Gio wrote:O código abaixo funcionou aqui no meu computador. Muda o texto de "iniciando" para "Procurando por atualizações" depois de 3 segundos.
Code: Select all
Gui,New,AlwaysOnTop -Caption ToolWindow,MainWin Gui,Add, Picture,x0 y0 w800 h400, %A_WorkingDir%\Files\Img\Logo.png Gui,font, s40 q4 Gui,Add,Text,+BackgroundTrans Center vT1 x0 y300 w800, Iniciando Gui,show, w800 h400,Logo sleep 3000 GuiControl,,T1, Procurando por atualizações
Aqui uma foto de como fica:
Obs: Quando inicio pela primeira vez ele fica normal,depois de 1 vez ele fica assim bugado e só volta ao normal quando reinicio o windows.
Meu windows:10 empresarial
Versão do AHK:1.1.26.01
Re: Texto Centralizado em uma GUI
Hmm...
Se você rodar somente o código sugerido acima em um novo script, isso também acontece?
Se não, precisamos ver o restante do código para encontrar o que está de fato afetando ele.
Se sim, vamos ter que estudar outra solução, pois o código funcionou aqui. Uma opção nesse caso é usar o ControlSetText no lugar do GuiControl e ver se o problem é resolvido.
Também vejo que a sua tela tem uma espécie de textura que cobre todo o fundo (esses riscos verticais). Pode ser que seja isso também. As janelas podem ter problemas quando colocamos elas para desenhar controles em cima de controles (tipo, texto em cima de imagem). Se for esse o caso, teremos que estudar outra solução também. Mas não se preocupe, as vezes as solução pode estar em simplesmente pedir que a Gui redesenhe os controles em questão (tipo, redesenhar a imagem e depois redesenhar o texto alterado). Isso pode ser feito com duas chamadas ao comando GuiControl, MoveDraw.
Se você rodar somente o código sugerido acima em um novo script, isso também acontece?
Se não, precisamos ver o restante do código para encontrar o que está de fato afetando ele.
Se sim, vamos ter que estudar outra solução, pois o código funcionou aqui. Uma opção nesse caso é usar o ControlSetText no lugar do GuiControl e ver se o problem é resolvido.
Também vejo que a sua tela tem uma espécie de textura que cobre todo o fundo (esses riscos verticais). Pode ser que seja isso também. As janelas podem ter problemas quando colocamos elas para desenhar controles em cima de controles (tipo, texto em cima de imagem). Se for esse o caso, teremos que estudar outra solução também. Mas não se preocupe, as vezes as solução pode estar em simplesmente pedir que a Gui redesenhe os controles em questão (tipo, redesenhar a imagem e depois redesenhar o texto alterado). Isso pode ser feito com duas chamadas ao comando GuiControl, MoveDraw.
"What is suitable automation? Whatever saves your day for the greater matters."
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
Archmage Gray - A fantasy shooter game fully coded in AutoHotkey
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
Archmage Gray - A fantasy shooter game fully coded in AutoHotkey
- juanmuscaria
- Posts: 65
- Joined: 29 Oct 2017, 10:53
- Location: Brazil
- Contact:
Re: Texto Centralizado em uma GUI
Bem,rodando o script sozinho funciona normalmente,vou mandar o pacote com meu programa (O script principal é o GamesToolbox.ahk). Agora fiquei na duvida pois a unica coisa que roda antes desse script são algumas directives e o import .Gio wrote:Hmm...
Se você rodar somente o código sugerido acima em um novo script, isso também acontece?
Se não, precisamos ver o restante do código para encontrar o que está de fato afetando ele.
Se sim, vamos ter que estudar outra solução, pois o código funcionou aqui. Uma opção nesse caso é usar o ControlSetText no lugar do GuiControl e ver se o problem é resolvido.
Também vejo que a sua tela tem uma espécie de textura que cobre todo o fundo (esses riscos verticais). Pode ser que seja isso também. As janelas podem ter problemas quando colocamos elas para desenhar controles em cima de controles (tipo, texto em cima de imagem). Se for esse o caso, teremos que estudar outra solução também. Mas não se preocupe, as vezes as solução pode estar em simplesmente pedir que a Gui redesenhe os controles em questão (tipo, redesenhar a imagem e depois redesenhar o texto alterado). Isso pode ser feito com duas chamadas ao comando GuiControl, MoveDraw.
- juanmuscaria
- Posts: 65
- Joined: 29 Oct 2017, 10:53
- Location: Brazil
- Contact:
Re: Texto Centralizado em uma GUI
Ok,Coloquei um Sleep 100 antes da função Update e resolveu o problema e fico assim o código:
Realmente o GuiControl bugo por conta dessa função.
De qualquer forma obrigado ela ajuda
Code: Select all
Gui,New,AlwaysOnTop -Caption ToolWindow,MainWin
Gui,Add, Picture,x0 y0 w800 h400, %A_WorkingDir%\Files\Img\Logo.png
Gui,font, s40 q4
Gui,Add,Text,+BackgroundTrans Center vT1 x0 y300 w800, Iniciando
Gui,show, w800 h400,Logo
sleep 3000
GuiControl,,T1, Procurando por atualizações
sleep 100 ;Esse é o sleep que coloquei
Update()
De qualquer forma obrigado ela ajuda
Return to “Ajuda e Suporte Geral”
Who is online
Users browsing this forum: No registered users and 6 guests