Ajustar width da form em tempo de execução conforme caption

Delphi

19/04/2005

Bom dia colegas!! Minha dúvida: tenho uma form cujo caption muda de acordo com a vontade do fregues, dependendo de que form chamou ela. O problema é que parte do caption fica escondido porque não cabe na largur da form. O que eu queria era aumentar o width automaticmente de acordo com o tamanho do caption. Se eu multiplicar o length do captio pelo size da font não dá certo, fica muito estranho.

O que eu posso fazer?

Grato!


Vitor Rubio

Vitor Rubio

Curtidas 0

Respostas

Edilcimar

Edilcimar

19/04/2005

tente colocar a largura de uma letra, mas não esqueça que o i gasta menos espaço que o m


GOSTEI 0
Vitor Rubio

Vitor Rubio

19/04/2005

Quero fazer um código que seja reaproveitável em qualquer aplicativo meu.

O tamanho da fonte do form nunca é igual ao tamanho do font do caption da form.

O tamanho da font do form pode variar, mas na barra de título continua o mesmo, então essa sugestão não dá certo. Além disso eu já testei isso.... ou ele fica muito pequeno, ou, se eu somar 1 ao tamanho da font, fica muito grande.

o tamanho da font na barra de títulos também pode variar de acordo com as configurações do windows.

Mesmo assim obrigado!


GOSTEI 0
Edilcimar

Edilcimar

19/04/2005

já tentou o trect(), não sei se é aplicável ao caso presente, eu já o utilizei para impressão, mas também dá para utilizar em tela


GOSTEI 0
Vitor Rubio

Vitor Rubio

19/04/2005

como eu usaria isso? vc poderia me dar um exemplo?
VLW!


GOSTEI 0
Edilcimar

Edilcimar

19/04/2005

o programa onde utilizei não está acessível no momento pois minha MB pifou e estou utilizando uma emprestada e para não reintalar o xp, instalei-o no meu hd de backup onde não tenho o delphi instalado, mas procure no help do delphi que existe exemplo com certeza


GOSTEI 0
Massuda

Massuda

19/04/2005

O texto do título da janela tem que ficar totalmente visível? As vezes dá menos trabalho mostrar parte do texto com um ´...´ no final.


GOSTEI 0
Vitor Rubio

Vitor Rubio

19/04/2005

Gostaria que ficasse totalmente visivel, porque é um tipo de diálogo temporizado que eu estou criando (igual o do avg) por isso o usuário não vai poder redimensionar a janela. Tem que aparecer todo o caption da form na barra de título.


GOSTEI 0
Massuda

Massuda

19/04/2005

[quote:c0928f73e4=´vitor^_^´]...Tem que aparecer todo o caption da form na barra de título.[/quote:c0928f73e4]Para medir o tamanho de um texto, você pode usar o Canvas do form:
var
  Tamanho: Integer;
...
  Tamanho := Canvas.TextWidth(Caption);
O problema é que dessa forma você tem o tamanho do texto apenas... para poder ajustar a largura da janela, precisaria levar em conta pelo menos o tamanho dos botões Maximizar/Minimizar/Fechar e do ícone da janela/form (se houver).

O ideal é que você limite o tamanho máximo que a janela pode atingir, para não ter uma janela com as laterais saindo da tela.


GOSTEI 0
Massuda

Massuda

19/04/2005

Para medir o tamanho de um texto, você pode usar o Canvas do form...
Uma outra coisa... não testei isso! Talvez tenha um problema porque não tenho certeza se o fonte que usa para escrever o título é o mesmo que usa no form.


GOSTEI 0
Vitor Rubio

Vitor Rubio

19/04/2005

Já pensei na possibilidade da form ser maior que a tela.

com relação ao textwidth do canvas..... a fonte do canvas é a mesma que a da form, enquanto que a fonte da bara de título é configurada no windows, nas propriedades de vídeo.


GOSTEI 0
Kapak

Kapak

19/04/2005

Utilize a função GetWindowTextLength.


GOSTEI 0
Kapak

Kapak

19/04/2005

GetWindowTextLength não irá adiantar.


GOSTEI 0
Massuda

Massuda

19/04/2005

[quote:b696b907a3=´vitor^_^´]a fonte do canvas é a mesma que a da form, enquanto que a fonte da bara de título é configurada no windows, nas propriedades de vídeo.[/quote:b696b907a3]Nada impede de você fazer o seguinte...
var 
  Tamanho: Integer; 
... 
  Canvas.Font.Name := ...nome do fonte usado no título...
  Canvas.Font.Size := ...tamanho do fonte usado no título...
  Tamanho := Canvas.TextWidth(Caption);
  Canvas.Font.Name := Font.Name;
  Canvas.Font.Size := Font.Size;



GOSTEI 0
Vitor Rubio

Vitor Rubio

19/04/2005

Tem uma coisa que me impede sim ...

...nome do fonte usado no título...


como eu vou saber isso? depende da configuração da maquina onde o programa for rodar...

não sei como pegar a fonte da barra de título do windows, sou iniciante :oops:

de qualquer forma, vou tentar sus outras sugestões.

vlw


GOSTEI 0
Massuda

Massuda

19/04/2005

[quote:8bd16b47f3=´vitor^_^´]Tem uma coisa que me impede sim ...[/quote:8bd16b47f3]Desculpe :oops: ... na hora que escrevi eu não tinha pensado em como obter essa informação.

Depois de alguma pesquisa, eis como obter os dados do fonte usado para escrever o título da janela...
var
  Metrics: TNonClientMetrics;
....
  Metrics.cbSize:=SizeOf(Metrics);
  SystemParametersInfo(SPI_GETNONCLIENTMETRICS, SizeOf(Metrics), @Metrics, 0);

  // Metrics.lfCaptionFont.lfHeight = altura do fonte, 
  // Metrics.lfCaptionFont.lfFaceName = nome do fonte



GOSTEI 0
Vitor Rubio

Vitor Rubio

19/04/2005

Muito obrigado pelas dicas Massuda!

Amanhã, assim que chegar no trabalho testarei.... meu projeto está lá.

o que estou fazendo é um conjuntinho de caixas de mensagm igual as messagebox(), msgdialog() ou showmessage da vida, só que com botões e ícones personalizados, e com temporizadores e gauges. Quando ficar pronto, se alguém se interessar eu posto o fonte. por enquanto está no começo... e está bem feinho.

Mas vai melhorar :)


Grato!!


GOSTEI 0
POSTAR