Post by Gio » 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
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
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
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
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
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 [c]w500[/c] (500 é a mesma largula da janela criada) juntamente com a opção [c]center[/c] eu tenha conseguido centralizar o controle, eu na verdade tenho que considerar agora que para todos os efeitos tem [b]um controle de texto que foi desenhado em toda a largura da janela[/b] (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]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]
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]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[/code]
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, [c]w500 center[/c] 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]gui add, text, center x200 w100 y50, texto centralizado
Gui, show, w500 h200[/code]
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]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[/code]