Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-04-2017
FENIXadr FENIXadr is offline
Miembro
 
Registrado: may 2010
Ubicación: Córdoba - Cba. - Argentina
Posts: 101
Poder: 14
FENIXadr Va por buen camino
Thumbs up Eventos del Mouse en un Componente.

Hola gente .. una consulta.. estoy haciendo un componente donde quiero capturar los eventos del Mouse para que los use el usuario y para que los use el componente mismo.. mi problema es que mientras que el usuario no le asigne ningún procedimiento al evento, éste puede ser utilizado por el componente sin nigún problema.. pero si el usuario necesita hacer su propia llamada para el evento entonces, ese evento, deja de funcionar para el componente y solo funciona para el usuario..



Definiendolo de esta manera funciona para el componente hasta que el usuario define su propio procedimiento..

Código Delphi [-]
 ...
 .....
 ...
 published
    ......
    ...
    .....
    property OnMouseDown;
    property OnMouseMove;
    property OnMouseUp;

  end;

  ....
  ...
  ....



constructor TMiClase.Create (AOwner : TComponent);

begin
  Inherited Create (AOwner);

  ....
  ..
  .....
  ....

  OnMouseDown := MiClaseOnMouseDown;
  OnMouseMove := MiClaseOnMouseMove;
  OnMouseUp := MiClaseOnMouseUp;

  ...
  ....
  ..
  .....

Lo cual es lógico porque al valor inicial que le puse lo cambia por el del usuario..




definiendolo de esta otra manera no funciona para nadie .. ni usuario ni componente...

Código Delphi [-]
  
    ...
    ....
 private
    .....
    ....
    ......
    ...
    FOnMouseDown : TMouseEvent;
    FOnMouseMove : TMouseMoveEvent;
    FOnMouseUp : TMouseEvent;

    ....
    ......
    ...
    ....
 published
    property OnMouseDown : TMouseEvent read FOnMouseDown write FOnMouseDown;
    property OnMouseMove : TMouseMoveEvent read FOnMouseMove write FOnMouseMove;
    property OnMouseUp : TMouseEvent read FOnMouseUp write FOnMouseUp;

 end;


Cómo debería hacer para que me funcione para ambos??

desde ya muchas gracias..
Responder Con Cita
  #2  
Antiguo 12-04-2017
FENIXadr FENIXadr is offline
Miembro
 
Registrado: may 2010
Ubicación: Córdoba - Cba. - Argentina
Posts: 101
Poder: 14
FENIXadr Va por buen camino
Gente lo pude solucionar de una manera tal vez no muy elegante.. diganme si hay una manera mejor porfavor..

Hice lo siguiente:
Código Delphi [-]

    ... ..
    ..
 private
    .....
    ....
    ......
    ...
    FOnMouseDown : TMouseEvent;
    FOnMouseMove : TMouseMoveEvent;
    FOnMouseUp : TMouseEvent;
    
    procedure MiClaseOnMouseDown (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure MiClaseOnMouseMove (Sender: TObject; Shift: TShiftState; X, Y: Integer);
    procedure MiClaseOnMouseUp (Sender: TObject; Button: TMouseButton;
    ...
    .. .
    ... ..
    ..

 protected
   ...
   .....
   ...
    property OnMouseDown;
    property OnMouseMove;
    property OnMouseUp;
   ...
   .....
   ...
 published
    ......
    ...
    .....
    property MouseDown : TMouseEvent read FOnMouseDown write FOnMouseDown;      //Estos son los 
    property MouseMove : TMouseMoveEvent read FOnMouseMove write FOnMouseMove;  //Eventos que 
    property MouseUp : TMouseEvent read FOnMouseUp write FOnMouseUp;            //el usuario ve.

  end;

  ....
  ...
  ....



constructor TMiClase.Create (AOwner : TComponent);

begin
  Inherited Create (AOwner);

  ....
  ..
  .....
  ....

  OnMouseDown := MiClaseOnMouseDown;
  OnMouseMove := MiClaseOnMouseMove;
  OnMouseUp := MiClaseOnMouseUp;

  ...
  ....
  ..
  .....
 
end;

...
....
.
....

procedure TMiClase.MiClaseOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  .....
  ...
  .....
  ..
 
  if Assigned (FOnMouseMove) then
    FOnMouseMove(Sender, Shift, X, Y);  // Aqui llama al procedimiento definido por el usuario.
end;

....
..
....
Responder Con Cita
  #3  
Antiguo 12-04-2017
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
De que componente estas heredando? Lo idiomatico es dejar los eventos al usuario del componente. Deberia haber metodos protegidos y virtuales llamados DoMouseUp, DoMouseDown, DoMouseMove, etc

Redefines esos metodos y ahi pones el codigo que necesitas. Recuerda invocar a inherited en algun momento
Responder Con Cita
  #4  
Antiguo 12-04-2017
FENIXadr FENIXadr is offline
Miembro
 
Registrado: may 2010
Ubicación: Córdoba - Cba. - Argentina
Posts: 101
Poder: 14
FENIXadr Va por buen camino
Estoy haciendo un componente propio derivado de TCustomControl pero si dejo esos eventos para el usuario, no los puedo utilizar en el componente, se que renombrarlos no es lo optimo, pero de esa manera los usa el componente y el usuario y con respecto a los eventos "DOMouseXXX" no existen o almenos no los encuentro..
Responder Con Cita
  #6  
Antiguo 12-04-2017
FENIXadr FENIXadr is offline
Miembro
 
Registrado: may 2010
Ubicación: Córdoba - Cba. - Argentina
Posts: 101
Poder: 14
FENIXadr Va por buen camino
Excelente AgustinOrtu.. es justo lo que necesitaba... muchisimas gracias..
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Componente que use eventos de mensajes r_e_g_2007 OOP 2 24-06-2011 22:16:50
Eventos del Mouse Paulao Varios 2 29-08-2008 18:48:18
Problema con MSDIForm y eventos del mouse... jorgesl Varios 3 07-02-2006 22:42:59
Los eventos y un componente heredado de TGraphicControl zuriel_zrf OOP 1 01-10-2004 01:55:32
Eventos de un componente... craven OOP 3 08-05-2003 17:17:51


La franja horaria es GMT +2. Ahora son las 22:16:11.


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
Copyright 1996-2007 Club Delphi