Ver Mensaje Individual
  #5  
Antiguo 30-12-2012
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Reputación: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
_CALI,

Cita:
Empezado por _CALI
Tal vez no fui muy claro, pero lo que quiero es que el panel se muestre siempre el ultimo sitio del Z orden.
Esta aplicación implementa tu requerimiento:



Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, ExtCtrls;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    Forms1: TMenuItem;
    Form21: TMenuItem;
    Form31: TMenuItem;
    Form41: TMenuItem;
    Exit1: TMenuItem;
    Panel1: TPanel;
    procedure Form21Click(Sender: TObject);
    procedure Form31Click(Sender: TObject);
    procedure Form41Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Exit1Click(Sender: TObject);
  private

    // Control de Orden Z del TPanel

    FPanelWndProc: TWndMethod;
    procedure PanelWndProc(var M: TMessage);

  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

Uses Unit2, Unit3, Unit4;

{$R *.dfm}

// Inicio del Código de Control del Orden Z del TPanel

procedure TForm1.FormCreate(Sender: TObject);
begin
  Windows.SetParent(Panel1.Handle, ClientHandle);
  // Sobreescribe el Panel1 WindowProc
  FPanelWndProc := Panel1.WindowProc;
  Panel1.WindowProc := PanelWndProc;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  // Restaura Panel1 WindowProc
  Panel1.WindowProc := FPanelWndProc;
end;

procedure TForm1.PanelWndProc(var M: TMessage);
var
  P: ^WINDOWPOS;
begin
  if M.Msg = WM_WINDOWPOSCHANGING then
  begin
    P := Pointer(M.LParam);
    // Siempre coloca Panel1 en el Orden Z Bottom
    P.hwndInsertAfter := HWND_BOTTOM;
  end;
  FPanelWndProc(M);
end;

// Fin del Código de Control del Orden Z del TPanel

procedure TForm1.Form21Click(Sender: TObject);
begin
   Form2.Show;
end;

procedure TForm1.Form31Click(Sender: TObject);
begin
   Form3.Show;
end;

procedure TForm1.Form41Click(Sender: TObject);
begin
   Form4.Show;
end;

procedure TForm1.Exit1Click(Sender: TObject);
begin
   Application.Terminate;
end;

end.
El código anterior mantiene el TPanel en el Orden Z mas inferior, permitiendo que el TPanel siempre este visible y nunca se superponga a un MDIChild. Todo el código de control esta en el MDIForm, no hace falta colocar ningún código adicional en los MDIChild. Quizás esta solución pueda ser adaptada a tu proyecto.

La aplicación implementada esta en el siguiente link: http://terawiki.clubdelphi.com/Delph...+MDI+Forms.rar

Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 30-12-2012 a las 01:21:25.
Responder Con Cita