Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-12-2004
zerelho zerelho is offline
Miembro
 
Registrado: mar 2004
Posts: 28
Poder: 0
zerelho Va por buen camino
Hacer una ventana MDI siempre delante (always on top)

Hola a todos, os cuento el problema que tengo:

Estoy haciendo una aplicación MDI y necesito que las ventanas hijas tengan la posibilidad de estar siempre delante (la típica opción de "Always on Top").

Para ésto lo que estoy haciendo es cambiar el FormStyle de las ventanas hijas de "fsMDIChild" a "fsStayOnTop" y viceversa, lo que pasa es que al hacer los cambios no me coloca la ficha en el mismo lugar por lo que almaceno la posición actual y despues la recupero (de forma bastante chapucera) pero el problema es que se ven los cambios de posición y me salen unos "pantallazos" bastante feos.

Corregi el problema a medias minimizando y restaurando la ventana, pero aun así no queda muy bien.

¿Alguien sabe otra forma mas correcta y eficiente de hacer esto si que se note el cambio de FormStyle?

Este es el codigo del metodo donde realizo el cambio:

Código:
	  
Izq:=Self.Left;
Arriba:=Self.Top;
{**}
// esto lo quité del libro de "La Cara Oculta de Delphi": 
// Anula la actualización de la ventana en el monitor, para evitar el parpadeo
LockWindowUpdate(Self.Handle); 
try
	WindowState:=wsMinimized;
	{**}
	if SiempreVisible.Checked then 
		// Checkbox activado (de MDIChild a StayOnTop)
		Begin
		FormStyle:=fsStayOnTop;
		Self.Left:=(Izq+2);
		Self.Top:=Arriba+(FormPrincipal.Height-FormPrincipal.ClientHeight+23);
		End
	else 
		 // Checkbox desactivado (de StayOnTop a MDIChild)
		 Begin
		 FormStyle:=fsMDIChild;
		 Self.Left:=(Izq-2);
		 Self.Top:=Arriba-(FormPrincipal.Height-FormPrincipal.ClientHeight+23);
		 End;
	{**}
finally
	WindowState:=wsNormal;
	LockWindowUpdate(0);
	end;
No me pregunteis de donde viene el Top:=...+23 y el Left:=...+2 pero me posiciona la ventana el mismo lugar exacto... si alguien sabe por qué este valor?

Aunque sea otra duda diferente, que tipo de botón tengo que utilizar para que si hago click en él me quede como presionado y volviendo a hacer click vuelve a su posición habitual?

La idea sería cambiar el checkbox que utilizo por un botón de este tipo, para ponerle el típico icono con la agujita pinchada.
Responder Con Cita
 



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


La franja horaria es GMT +2. Ahora son las 13:46:51.


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