Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #8  
Antiguo 21-05-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
A ver, tal como dice dec, cuando se mueve el cursor sobre un control dentro de un contenedor como un panel o un groupbox, la VCL determina que se ha salido del control (que no de control ).

Lo que comenta Lepe me parece que no aplica, porque estamos hablando -creo- del cursor del ratón, no del teclado. Los eventos OnEnter y OnExit aplican cuando se mueve el foco del teclado.

No conozco ni uso la JVCL, pero como pienso que esto es más una cuestión genérica de la VCL, creo que podemos resolverlo así (explicación al final):

Código Delphi [-]
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Memo1: TMemo;
    ApplicationEvents1: TApplicationEvents;

    procedure ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);

  private
    InPanel: Boolean;

  public
    procedure PanelEnter;
    procedure PanelLeave;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ApplicationEvents1Message(
  var Msg: tagMSG; var Handled: Boolean);
var
  Pt: TPoint;
  R: TRect;

begin
  if (Msg.message = WM_MOUSEMOVE) then
  begin
    Pt := Self.ScreenToClient(Mouse.CursorPos);
    R := Panel1.BoundsRect;

    if PtInRect(R, Pt) then
      if not InPanel then
      begin
        InPanel := true;
        PanelEnter;
      end
      else // gracias cHackAll 
    else
      if InPanel then
      begin
        InPanel := false;
        PanelLeave;
      end;
  end;
end;

procedure TForm1.PanelEnter;
begin
  Caption := 'Mouse Enter';
end;

procedure TForm1.PanelLeave;
begin
  Caption := 'Mouse Leave';
end;

end.

Usamos un componente ApplicationEvents para detectar el movimiento del ratón antes de que la VCL lo convierta en eventos OnMuseMove de los controles sobre los que pase el ratón.

Al detectar el mensaje WM_MOUSEMOVE, simplemente miramos si el ratón está dentro del contenedor (en el ejemplo, un panel) y lanzamos el "evento" PanelEnter o PanelLeave según sea el caso.

Usamos una variable booleana, InPanel, para controlar que los eventos no se lancen más de una vez.

Como observación final; para tomar la posición del cursor uso Mouse.CursorPos en lugar de Msg.lParam que es el que contiene la posición que envía el mensaje WM_MOUSEMOVE. Esto lo hago porque las coordenadas de WM_MOUSEMOVE son relativas al control interno (el Memo, en el ejemplo) y no al contenedor, así que tendríamos que averiguar qué control es y convertir las coordenadas. Mejor nos ahorramos eso.

pd: Si a lo que se refiere vejerf es al foco del teclado, entonces aplica los que comenta Lepe.

// Saludos

Última edición por roman fecha: 21-05-2008 a las 18:10:19.
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
Llamar evento desde otro evento nachito_tuc OOP 1 23-08-2006 21:37:43
Evento OnKeyPress papulo Varios 3 30-08-2005 13:37:04
OnMouseEnter/OnMouseLeave para una celda determinada de un DbGrid S.M.S. OOP 4 06-08-2005 00:13:48
¿Se puede añadir a un TPanel OnMouseLeave? Tonio OOP 4 20-06-2005 23:14:37
parar un evento empty Varios 7 29-04-2004 13:08:17


La franja horaria es GMT +2. Ahora son las 00:40:37.


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