Ver Mensaje Individual
  #1  
Antiguo 03-12-2004
zerelho zerelho is offline
Miembro
 
Registrado: mar 2004
Posts: 28
Reputación: 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