Hola pacopenin.
Otra opción es :
Formulario en que se encuentra el Panel,
Código Delphi
[-]
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
type
TPanel = class(ExtCtrls.TPanel)
private
FInPanel: Boolean;
procedure MouseEnter(var Msg: TMessage); message CM_MOUSEENTER;
procedure MouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
public
property InPanel: Boolean read FInPanel write FInPanel;
end;
TForm2 = class(TForm)
Panel1: TPanel;
procedure FormDestroy(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
procedure MouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
public
end;
var
Form2: TForm2;
implementation {$R *.dfm}
procedure TPanel.MouseEnter(var Msg: TMessage);
begin
FInPanel := True;
end;
procedure TPanel.MouseLeave(var Msg: TMessage);
begin
FInPanel := False;
end;
procedure TForm2.MouseLeave(var Msg: TMessage);
begin
Panel1.InPanel := False;
end;
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
procedure TForm2.FormDestroy(Sender: TObject);
begin
Form2 := nil;
end;
end.
Formulario principal,
Código Delphi
[-]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
procedure MouseEvent(var Msg: tagMsg; var Handled: Boolean);
public
end;
var
Form1: TForm1;
implementation {$R *.dfm}
uses ExtCtrls, Unit2, Unit3;
procedure TForm1.MouseEvent(var Msg: tagMsg; var Handled: Boolean);
begin
if (Msg.message = WM_LBUTTONDOWN) then
if Assigned(Form2) then
Form2.Panel1.Visible := Form2.Panel1.InPanel;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMessage := MouseEvent;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Form3.Show;
if not Assigned(Form2) then
Form2:= TForm2.Create(Self);
Form2.Show;
end;
end.
Me apego a lo que solicitas en tu mensaje "hacer click en cualquier parte de la aplicación". En el ejemplo, el panel será visible nuevamente cuando se destruya y cree el formulario que lo contiene.
Saludos