Ver Mensaje Individual
  #1  
Antiguo 05-12-2023
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Reputación: 19
Angel.Matilla Va por buen camino
Barra de tareas

Hace unos meses lanzaba una pregunta acerca de este elemento (Sobre la barra de tareas) pero la duda no tuvo solución. He seguido buscando y en Stack Overflow encontré un código que me ha dado la pista para encontrar la solución. Adaptado a Builder me queda así:
Código:
void __fastcall TfMenu::FormShow(TObject *Sender)
{
     TRect WorkArea;

     HWND hTaskBar = FindWindow("Shell_TrayWnd", NULL);
     if (hTaskBar != 0)
     {
          GetWindowRect(hTaskBar, &WorkArea);
          this->Constraints->MinHeight = Screen->Height - (WorkArea.Bottom - WorkArea.Top);
          this->Height                 = this->Constraints->MinHeight;
     }
     this->Refresh();
}
En teoría con este código el formulario debería tener la altura de la pantalla menos la altura de la barra de tareas.

Si ejecuto depurando, para ver los valores que se van tomando, me encuentro que antes de ejecutarse GetWindowRect la altura del formulario fMenu es 768 que coincide con la de la pantalla (Screen->Height); WorkArea tiene como valores 0, 766, 136, 796 lo que significa que la barra de tareas tiene un altura de 30. Después de ejecutar las dos últimas líneas del if la altura del formulario es 738. En las propiedades del formulario Align está puesto como alNone por lo que al mostrarse el mismo debería ocupar toda la pantalla menos los últimos 30 pixeles. Sin embargo queda así, ocupando el 100% de la pantalla:

¿Qué estoy haciendo mal?
Responder Con Cita