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 20: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 13-02-2009 00: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 06: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 11:28:22

Muchas gracias a los dos.

Voy a probarlo.

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

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


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

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