Pergunta

Com Screen.DesktopHeight e Screen.DesktopWidth, eu posso obter o tamanho da área de trabalho "virtual" e acredito que funciona para um ou vários monitores.

Eu salvar a posição (superior e esquerda) e tamanho (altura e largura) da minha candidatura para o registo quando se fecha. Quando se abre, quero garantir que é totalmente visível, uma vez que pode ter sido movido parcialmente fora da área visível, ou o tamanho da tela pode ter mudado, por exemplo, através das definições de tela ou remoção de um monitor.

Basicamente, eu posso fazer isso com este código:

if MyForm.Width > screen.DesktopWidth then 
  MyForm.Width := screen.DesktopWidth;

if MyForm.Height > screen.DesktopHeight then 
  MyForm.Height := screen.DesktopHeight;

if (MyForm.Left + MyForm.Width) > screen.DesktopWidth then 
  MyForm.Left := screen.DesktopWidth - MyForm.Width;
if MyForm.Left < 0 then MyForm.Left := 0;

if (MyForm.Top + LogoAppForm.Height) > screen.DesktopHeight then 
  MyForm.Top := screen.DesktopHeight - LogoAppForm.Height;
if MyForm.Top < 0 then MyFormTop := 0;

Isso funciona bem, exceto que ele não leva em conta a barra de tarefas que é geralmente (mas nem sempre) na parte inferior do desktop. Então, se a barra de tarefas está no caminho da janela do meu aplicativo, o meu pedido fica obscurecida.

Como posso obter a posição eo tamanho configurações utilizáveis ??da tela que excluem a localização da barra de tarefas?

Foi útil?

Solução

Eu não tenho certeza de que o Windows realmente funciona da maneira que você acha que ele faz - Eu tenho vários monitores, mas eles não têm a mesma altura - para meu desktop não tem uma altura uniforme em todos os monitores.

O que eu faço é usar Screen.MonitorCount ea matriz Screen.Monitors descobrir qual monitor contém a maior parte da janela e, em seguida, encontrar um retângulo adequado naquela tela. A propriedade WorkareaRect de TMonitor dá-lhe os limites da área de trabalho em um monitor específico, que exclui quaisquer barras de tarefas ou barras de ferramentas.

Outras dicas

Você deve usar Screen.WorkArea * Propriedades:

  Screen.WorkAreaRect
  Screen.WorkAreaHeight
  Screen.WorkAreaLeft
  Screen.WorkAreaTop
  Screen.WorkAreaWidth

ou

Screen.Monitors[I].WorkareaRect

Para determinar a área de trabalho para a forma atual, o uso Monitor.WorkareaRect. por exemplo.

BoundsRect := Monitor.WorkareaRect;

para definir o tamanho do formulário para a área máxima sem maximizando-lo.

Você também deve olhar para o método TCustomForm.MakeFullyVisible .

De D2006 ajuda:

"cheques MakeFullyVisible se o formulário se encaixa inteiramente no monitor especificado. Se não, ele reposiciona o formulário para que ele se encaixa, se possível."

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top