Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Mostrar y ocultar la barra de título de una aplicación (https://www.clubdelphi.com/foros/showthread.php?t=48019)

dec 13-09-2007 13:38:44

Mostrar y ocultar la barra de título de una aplicación
 
Hola,

A ver si me podéis echar una mano pataliebres. :) :D

Resulta que necesito mostrar y ocultar la barra de título de la ventana de una aplicación partiendo de su "Handle". Buscando en Google encuentro que el amigo Zarko Gajic propone una solución para ocultar la barra de título, y funciona bien, podría decirse. La solución es la siguiente:

Código Delphi [-]
  SetWindowLong(
    Handle,
    GWL_STYLE,
    GetWindowLong(Handle,GWL_STYLE) and not WS_CAPTION
  );

Entonces yo, en mi infinita sabiduría de ser superior y único, digo, pues ya está, si eso oculta la barra de título, entonces esto otro la mostrará:

Código Delphi [-]
  SetWindowLong(
    Handle,
    GWL_STYLE,
    GetWindowLong( Handle, GWL_STYLE ) or WS_CAPTION
  );

Y, aunque el asunto pudiera dar más de sí, pudiera ser que algo como eso me sirviera, ¡si no fuera porque la ventana recupera su barra de título, sí, pero no la muestra hasta que no minimizo la aplicación o de alguna manera la "activo" desde la barra de tareas!

Y claro, así no... Ahora bien. ¿Alguien sabe de alguna otra solución? Tenindo en cuenta que hay que partir del Handle de la ventana de una aplicación. ¿Quizás es posible "refrescar" la ventana? Por ejemplo, si utilizo la función "FlashWindow()", parece que, efectivamente, la ventana se refresca y aparece la barra de título, pero, claro, también se ve el efecto "Flash", y eso no interesa.

En fin. A ver si alguien puede echarme una pierna con esto. Y muchas gracias de antemano. :D

seoane 13-09-2007 15:14:54

Prueba con esto:
Código Delphi [-]
SetWindowLong(Handle,GWL_STYLE,GetWindowLong(Handle, GWL_STYLE ) or WS_CAPTION);
SetWindowPos(Handle, 0, 0, 0, 0, 0, SWP_FRAMECHANGED or SWP_NOMOVE or SWP_NOREPOSITION or SWP_NOSIZE or SWP_NOACTIVATE);

PD: Perdón por tardar tanto, pero tengo las patas de liebre poco entrenadas :D

dec 13-09-2007 15:29:14

Hola,

Código Delphi [-]
  SetWindowPos(Handle,0,0,0,0,0, SWP_FRAMECHANGED
   or SWP_NOMOVE or SWP_NOREPOSITION or SWP_NOSIZE
    or SWP_NOACTIVATE);

¡Qué intuitivo! :) ;) :D

Pero, en efecto, funciona. Muchas gracias Domingo. :)

gluglu 26-09-2007 16:02:30

Recupero este hilo que he vuelto a consultar buscando determinada información.

David, para conseguir lo que querías, no es lo mismo hacer Form1.BorderStyle := bsNone ?? Y para devolver el borde hacer la operación inversa poniéndolo al tipo de borde que utilizabas inicialmente ?? :rolleyes:

dec 26-09-2007 17:46:39

Hola,

gluglu, sí que podría emplearse el estilo del borde del formulario, probablemente, pero, se trata de hacer lo propio sabiendo el "Handle" de una ventana... que no tiene porqué ser (aunque podría serlo) un formulario de Delphi. :)


La franja horaria es GMT +2. Ahora son las 08:06:24.

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