Pregunta

Con Screen.DesktopHeight y Screen.DesktopWidth, puedo obtener el tamaño de " virtual " escritorio y creo que funciona para uno o varios monitores.

Guardo la posición (superior e izquierda) y el tamaño (alto y ancho) de mi aplicación en el registro cuando se cierra. Cuando se abre, quiero asegurarme de que sea completamente visible, ya que puede haberse movido parcialmente fuera del área visible, o el tamaño de la pantalla puede haber cambiado, por ejemplo, a través de la configuración de la pantalla o la eliminación de un monitor.

Básicamente puedo hacerlo con 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;

Esto funciona bien, excepto que no tiene en cuenta la barra de tareas que suele estar (pero no siempre) en la parte inferior del escritorio. Entonces, si la barra de tareas está en el camino de la ventana de mi aplicación, mi aplicación se oscurece.

¿Cómo puedo obtener las configuraciones de posición y tamaño utilizables de la pantalla que excluyen la ubicación de la barra de tareas?

¿Fue útil?

Solución

No estoy seguro de que Windows realmente funcione de la manera que crees: tengo varios monitores, pero no tienen la misma altura, por lo que mi escritorio no tiene una altura uniforme en todos los monitores.

Lo que hago es utilizar Screen.MonitorCount y Screen.Monitors para determinar qué monitor contiene la mayor parte de la ventana y luego encontrar un rectángulo adecuado en esa pantalla. La propiedad WorkareaRect de TMonitor le ofrece los límites del área de trabajo en un monitor en particular, lo que excluye cualquier barra de tareas o barra de herramientas.

Otros consejos

Debe usar las propiedades Screen.WorkArea *:

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

o

Screen.Monitors[I].WorkareaRect

Para determinar el área de trabajo para el formulario actual, use Monitor.WorkareaRect. por ejemplo,

BoundsRect := Monitor.WorkareaRect;

para establecer el tamaño del formulario en el área máxima sin maximizarlo.

También debe mirar el Método TCustomForm.MakeFullyVisible .

De la ayuda de D2006:

" MakeFullyVisible verifica si el formulario se ajusta completamente al monitor especificado. Si no, reposiciona el formulario para que se ajuste, si es posible. & Quot;

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top