Texto Centralizado em uma GUI Topic is solved

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

Texto Centralizado em uma GUI

21 Jan 2018, 18:38

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.
O que estou fazendo na minha vida?
Spoiler
garry
Posts: 1230
Joined: 22 Dec 2013, 12:50

Re: Texto Centralizado em uma GUI  Topic is solved

22 Jan 2018, 05:18

Gui menu-icon ,text , button example

Code: [Select all] [Expand] [Download] GeSHi © Codebox Plus

Last edited by garry on 22 Jan 2018, 15:37, edited 1 time in total.
User avatar
juanmuscaria
Posts: 41
Joined: 29 Oct 2017, 10:53
GitHub: juanmuscaria
Location: Brazil
Contact:

Re: Texto Centralizado em uma GUI

22 Jan 2018, 09:06

Obrigado pela ajuda.
O que estou fazendo na minha vida?

Spoiler




User avatar
Gio
Posts: 380
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Texto Centralizado em uma GUI

22 Jan 2018, 09:44

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).

Code: [Select all] [Download] GeSHi © Codebox Plus

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


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.

Code: [Select all] [Download] GeSHi © Codebox Plus

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


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:

Code: [Select all] [Download] GeSHi © Codebox Plus

gui add, text, center x200 w100 y50, texto centralizado
Gui, show, w500 h200


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:

Code: [Select all] [Download] GeSHi © Codebox Plus

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 !!
User avatar
juanmuscaria
Posts: 41
Joined: 29 Oct 2017, 10:53
GitHub: juanmuscaria
Location: Brazil
Contact:

Re: Texto Centralizado em uma GUI

22 Jan 2018, 13:00

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):

Code: [Select all] [Expand] [Download] GeSHi © Codebox Plus



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.
O que estou fazendo na minha vida?

Spoiler




User avatar
Gio
Posts: 380
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Texto Centralizado em uma GUI

22 Jan 2018, 13:28

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] [Download] GeSHi © Codebox Plus

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 !!
garry
Posts: 1230
Joined: 22 Dec 2013, 12:50

Re: Texto Centralizado em uma GUI

22 Jan 2018, 15:35

@Gio
... e ocupa toda a extensão da largura da janela


Code: [Select all] [Download] GeSHi © Codebox Plus

gui add, text, center x0 w500 y50, texto centralizado
Gui, show, w500 h200


desculpe , obrigado , eu esqueço
User avatar
juanmuscaria
Posts: 41
Joined: 29 Oct 2017, 10:53
GitHub: juanmuscaria
Location: Brazil
Contact:

Re: Texto Centralizado em uma GUI

23 Jan 2018, 11:42

Boa Tarde.
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] [Download] GeSHi © Codebox Plus

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


Gio,eu usei esses script que você fez e continuo com o mesmo problema.

Aqui uma foto de como fica:
Image

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
O que estou fazendo na minha vida?

Spoiler




User avatar
Gio
Posts: 380
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Texto Centralizado em uma GUI

23 Jan 2018, 12:11

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.
"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: 41
Joined: 29 Oct 2017, 10:53
GitHub: juanmuscaria
Location: Brazil
Contact:

Re: Texto Centralizado em uma GUI

23 Jan 2018, 12:26

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.

Bem,rodando o script sozinho funciona normalmente,vou mandar o pacote com meu programa (O script principal é o GamesToolbox.ahk).
Games Toolbox.zip
Aqui o app
(1.24 MiB) Downloaded 18 times

Agora fiquei na duvida pois a unica coisa que roda antes desse script são algumas directives e o import .
O que estou fazendo na minha vida?

Spoiler




User avatar
juanmuscaria
Posts: 41
Joined: 29 Oct 2017, 10:53
GitHub: juanmuscaria
Location: Brazil
Contact:

Re: Texto Centralizado em uma GUI

23 Jan 2018, 12:33

Ok,Coloquei um Sleep 100 antes da função Update e resolveu o problema e fico assim o código:

Code: [Select all] [Download] GeSHi © Codebox Plus

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()

Realmente o GuiControl bugo por conta dessa função.
De qualquer forma obrigado ela ajuda :thumbup:
O que estou fazendo na minha vida?

Spoiler





Return to “Eu preciso de ajuda”

Who is online

Users browsing this forum: No registered users and 1 guest