Ver Mensaje Individual
  #7  
Antiguo 14-05-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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; {otro formulario para la prueba }
  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
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita