Club Delphi  
    Paypal   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
  #34  
Antiguo 05-04-2013
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.210
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
He estado ausente un tiempo. Me he encontrado este hilo y la referencia en este otro.
Veo que posiblemente a estas alturas el problema está solucionado, pero me gustaría aportar mi granito de arena al problema.

Hasta Windows 8 no es posible tener el estilo WS_EX_LAYERED en ventanas child por lo que el problema no tiene solución... O si, la solución es hacer "trampas" y simular que una ventana top-level es child.

http://msdn.microsoft.com/es-es/libr...=vs.85%29.aspx
Cita:
Empezado por MSD
Windows 8: The WS_EX_LAYERED style is supported for top-level windows and child windows. Previous Windows versions support WS_EX_LAYERED only for top-level windows.
Mi propuesta es simple. Se trata de escribir la función de tratamiento de mensajes para WM_MOVING en el formulario padre y en los hijos:
Código Delphi [-]
procedure WMMoving(var Message: TWMMOVING); message WM_MOVING;


Para el formulario Padre tratamos de que las ventanas hijas se desplacen con él para que parezcan childwindows:
Código Delphi [-]
procedure TForm1.WMMoving(var Message: TWMMOVING);
var
  i: integer;
begin
  inherited;
  for i:= 0 to ComponentCount-1 do
  begin
    if Components[i].ClassName <> 'TForm2' then continue;
    with Components[i] as TForm do
      SetWindowPos(Handle, HWND_TOPMOST, Message.DragRect.Left + Left - self.Left,
                                         Message.DragRect.Top + Top - self.Top,
                                         0, 0, SWP_NOSIZE);
  end;
end;


Y para el formulario hijo evitamos que pueda salir del entorno de la ventana padre, simulando ser child:
Código Delphi [-]
procedure TForm2.WMMoving(var Message: TWMMOVING);
var
  Right, Bottom: integer;
begin
  inherited;
  with Application.MainForm do
  begin
    Right:=  Left + Width;
    Bottom:= Top + Height;
    if Message.DragRect.Left < Left then
    begin
      Message.DragRect.Left:= Left;
      Message.DragRect.Right:= Left + self.Width;
    end;
    if Message.DragRect.Top < Top then
    begin
      Message.DragRect.Top:= Top;
      Message.DragRect.Bottom:= Top + self.Height;
    end;
    if Message.DragRect.Left > Right - self.Width then
    begin
      Message.DragRect.Left:= Right - self.Width;
      Message.DragRect.Right:= Right - self.Width + self.Width;
    end;
    if Message.DragRect.Bottom > Bottom then
    begin
      Message.DragRect.Top:= Bottom - self.Height;
      Message.DragRect.Bottom:= Bottom - self.Height + self.Height;
    end;
  end;
end;

El resto del código que presento es adorno. Subo un ejemplo compilable en delphi7.
Espero haber servido de ayuda aunque sea un poco tarde.


Saludos.

Última edición por escafandra fecha: 06-04-2013 a las 20:19:27.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Crear un form fsMDIForm y varios forms hijos citlalliDgp Varios 11 07-12-2007 15:13:31
¿Quien es mi Form Padre? gabrio OOP 4 16-10-2007 20:33:06
Nodo padre sin hijos en TTreeView jorgesl OOP 3 10-04-2006 20:24:11
Formulario padre con hijos oscarsanta Conexión con bases de datos 2 31-01-2006 13:17:13
como puedo poner form hijos ronimaxh Varios 5 22-10-2003 22:55:23


La franja horaria es GMT +2. Ahora son las 15:59:30.


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