Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Presencia del mouse sobre un objeto (https://www.clubdelphi.com/foros/showthread.php?t=63420)

ElDuc 12-02-2009 19:35:47

Presencia del mouse sobre un objeto
 
Hola otra vez chicos/as

¿Alguien sabe como puedo saber cuando el mouse pasa por encima de un objeto?

Me refiero a saber cuandro entra y sale, no el clikck.

Lord Delfos 12-02-2009 23:37:46

Por objeto supongo que dirás un control, como un botón digamos.

El evento OnMouseMove se dispara cuando el mouse para por arriba de un control.

Si intuyo bien, lo que te pasa es que no podés saber cuándo el mouse se te fue de arriba del control... El truco que yo he hecho varias veces (y que es bastante simple, pero molesto) es crear una nueva clase y agregarle estos dos métodos.

Código Delphi [-]
uses ... Messages...;

type TMiBoton=class(TButton)
  procedure CMMouseEnter(var Msg: TMessage); message CM_MouseEnter;
  procedure CMMouseLeave(var Msg: TMessage); message CM_MouseLeave;
end;

procedure TMiBoton.CMMouseEnter(var Msg: TMessage); message CM_MouseEnter;
begin
end;

procedure TMiBoton.CMMouseLeave(var Msg: TMessage); message CM_MouseLeave;
begin
end;

Y después crear el botón "a mano" y no ponerlo con el editor visual... Lamentablemente, si hay otra manera, no la conozco.

Espero te sirva de algo. Saludongos.

roman 13-02-2009 05:31:32

Una manera de evitar la instalación de un nuevo componente es nombrando la nueva clase igual que su ancestro. Siguiendo el ejemplo de Delfos:

Código Delphi [-]
type
  TButton=class(StdCtrls.TButton)
    procedure CMMouseEnter(var Msg: TMessage); message CM_MouseEnter;
    procedure CMMouseLeave(var Msg: TMessage); message CM_MouseLeave;
  end;

procedure TButton.CMMouseEnter(var Msg: TMessage); message CM_MouseEnter;
begin
end;

procedure TButton.CMMouseLeave(var Msg: TMessage); message CM_MouseLeave;
begin
end;

Si se coloca la declaración del tipo antes de la del formulario donde se quiera usar el botón, entonces puede insertarse éste visualmente como siempre en el formulario, y responderá a los nuevos mensajes CMMouseEnter y CMMouseLeave.

// Saludos

ElDuc 14-02-2009 10:28:22

Muchas gracias a los dos.

Voy a probarlo.

Lord Delfos 16-02-2009 20:21:57

¡Ah! ¡Qué trucazo ese! Gracias román...


La franja horaria es GMT +2. Ahora son las 10:21:47.

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