Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Sistemas operativos > Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-12-2023
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.354
Poder: 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
  #2  
Antiguo 05-12-2023
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.354
Poder: 19
Angel.Matilla Va por buen camino
¡Solucionado! Estaba poniendo el código en mal sitio: en lugar de en OnShow debe ir en OnPaint.
Responder Con Cita
  #3  
Antiguo 05-12-2023
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.549
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Angel.Matilla Ver Mensaje
¡Solucionado! Estaba poniendo el código en mal sitio: en lugar de en OnShow debe ir en OnPaint.
Ojo! que al menos en Delphi el evento OnPaint se lanza continuamente. Sólo debería ir en ese evento algo estrictamente obligatorio, de otra forma puedes sobrecargar el sistema mucho de forma innecesaria.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 05-12-2023
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.354
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
Ojo! que al menos en Delphi el evento OnPaint se lanza continuamente. Sólo debería ir en ese evento algo estrictamente obligatorio, de otra forma puedes sobrecargar el sistema mucho de forma innecesaria.
Gracias por la apreciación. Y así debe ser porque al probar me he encontrado que pulse el botón que pulse de la barra superior, no se lanza nada. Al menos he encontrado el modo de hacerlo; ahora tengo que ver donde colocarlo.
Responder Con Cita
  #5  
Antiguo 05-12-2023
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.354
Poder: 19
Angel.Matilla Va por buen camino
Pues al final me ha valido en el OnActivate.
Responder Con Cita
  #6  
Antiguo 05-12-2023
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.549
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Angel.Matilla Ver Mensaje
Pues al final me ha valido en el OnActivate.

Ese mucho mejor.
Es que piensa que (si no recuerdo mal) el OnPaint va saltandpo continuamente hasta cuando mueves el ratón por pantalla.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Crear barra de herramientas en barra de tareas de windows codicia Varios 1 21-01-2013 13:44:26
barra de tareas luis1980 C++ Builder 12 24-10-2008 17:23:27
No en la Barra de Tareas D-MO Varios 4 13-10-2005 01:55:18
barra de tareas agora18 Varios 1 17-02-2004 03:01:39
Barra de Tareas frankmch Varios 3 04-09-2003 16:58:16


La franja horaria es GMT +2. Ahora son las 01:45:33.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi