Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #4  
Antiguo 29-12-2012
_CALI _CALI is offline
Miembro
 
Registrado: mar 2008
Posts: 99
Poder: 17
_CALI Va por buen camino
Smile

Gracias por tu colaboración ecfisa y a los demás tambien,
Talvez no fui muy claro, pero lo que quiero es que el panel se muestre siempre el ultimo sitio del Z orden, asi hayan formularios hijos abiertos
Aquí les dejo la solucion que escribi:

la definición del panel esta en el formulario padre,
primero que nada hay que colocar un panel en el formulario padre y luego sobre el panel cualquier control
Código Delphi [-]
type
  TPanel = class(Vcl.ExtCtrls.TPanel)
  protected
   procedure Loaded; override;
   procedure WMWindowPosChanging(var Msg: TWMWindowPosChanging);
   message WM_WINDOWPOSCHANGING;
 end;
 
type
 TMain = class(TForm)
  ...
 
var
  Main: TMain;
 
implementation
 
procedure TPanel.Loaded;
begin
  inherited;
  Windows.SetParent(Handle, Main.ClientHandle);
end;
procedure TPanel.WMWindowPosChanging(var Msg: TWMWindowPosChanging);
begin
  if (Msg.WindowPos^.flags and SWP_NOZORDER) = 0 then
      Msg.WindowPos^.hwndInsertAfter := HWND_BOTTOM;
 inherited;
end;


luego en el formulario hijo...

Código Delphi [-]
const
 WM_GETACTIVEFORM = WM_USER + 100;
 
type
 TChild = class(TForm)
...
private
procedure WMWindowPosChanging(var Msg: TWMWindowPosChanging);
   message WM_WINDOWPOSCHANGING;
procedure WMGetActiveForm(var Msg: TMessage); 
   message WM_GETACTIVEFORM;

var
  Child: TChild;
 
implementation
 
procedure TChild.WMGetActiveForm(var Msg: TMessage);
var i: integer;
begin
 for i := 0 to MDIChildCount - 1 do
  begin
   if MDIChildren[i].WindowState <> wsMinimized then
      begin
      MDIChildren[i].BringToFront;
      Break;
      end;
  end;
end;
 
procedure TChild.WMWindowPosChanging(var Msg: TWMWindowPosChanging);
 begin 
 
       if Msg.windowpos^.hwndInsertAfter <> HWND_TOP  then
          begin
          Msg.windowpos^.hwndInsertAfter := HWND_TOP;
          PostMessage(Handle, WM_GETACTIVEFORM, 0, 0);
          end;

inherited;
end;

Manejando los mensajes WM_WINDOWPOSCHANGING del panel y el formulario hijo, se consige que el panel este siempre al fondo y otra cosa mas..

se dieron cuenta que cuando minimizan un formulario, este se queda como ActiveMDIChild?,
con un mensaje de ususario lo que hace es establecer el ActiveMDIChild del ultimo formulario activo al minimizarlo.


Saludos y Gracias denuevo !!!

Última edición por _CALI fecha: 29-12-2012 a las 04:08:43.
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
panel siempre visible RebeccaGL Varios 4 07-10-2011 18:29:37
Mantener el Formulario principal en el fondo. Critter Lazarus, FreePascal, Kylix, etc. 5 25-10-2010 10:04:27
Mantener viva la aplicación HombreGordo Varios 9 04-11-2008 20:57:24
Mantener Aplicacion Arancada ramonibk API de Windows 10 26-10-2004 18:25:00
Mantener Form1 siempre detrás de Form2 Gorka Varios 1 13-10-2004 13:13:48


La franja horaria es GMT +2. Ahora son las 01:24: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
Copyright 1996-2007 Club Delphi