Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-12-2004
Javi2 Javi2 is offline
Miembro
 
Registrado: jun 2004
Posts: 152
Poder: 20
Javi2 Va por buen camino
Como añadir un nuevo evento a un componente

Hola, necesito añadir un nuevo evento a un DBGrid y no tengo ni idea de como hacerlo. Creo que hay que crear un nuevo componente que herede del DBGrid y a partir de ahí añadir los eventos que se quiera.

Si alguien me puede ayudar le estaré muy agradecido y si pudiera ser con algún ejemplo mucho mejor pues he estado leyendo en varios sitios sobre el tema pero no me aclaro.

Muchas gracias.
Responder Con Cita
  #2  
Antiguo 20-12-2004
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Javi2
...necesito añadir un nuevo evento a un DBGrid y no tengo ni idea de como hacerlo. Creo que hay que crear un nuevo componente que herede del DBGrid y a partir de ahí añadir los eventos que se quiera.
Efectivamente, si quieres añadirle un evento no puedes hacerlo directamente, debes derivarlo en un nuevo componente y añadirselo.


Cita:
Empezado por Javi2
...Si alguien me puede ayudar le estaré muy agradecido y si pudiera ser con algún ejemplo mucho mejor pues he estado leyendo en varios sitios sobre el tema pero no me aclaro.
Para crear un nuevo componente utiliza el asistente de Delphi;
(1) File/New/Other...
(2) Selecciona Component y pulsa OK.
(3) Ancestor Type=TDBGrid (DBGrids)
(4) ClassName=TMyDBGrid (por ejemplo)
(5) En Palette Page escribe "MY COMPS" (por ejemplo)
(6) Unit, la que quieras, es el PAS donde se va a guardar.
(7) Pulsa el botón INSTALL...
(8) Como package selecciona el de usuario; Normalmente lo puedes encontrar en: "c:\Archivos de programa\Borland\Delphi6\Lib\dclusr.dpk"
(9) Luego te pedirá que recompiles el package; Hazlo y lo Instalas.

Ahora ya debería aparecer la nueva pestaña con tu componente.
Abre en el IDE el .PAS que has generado y añádele el evento. Recuerda que para que los cambios que realices al componente funcionen debes ir recompilando el package en el que lo has instalado (el de arriba).

Para añadir el evento, en la parte published añade una nueva propiedad, por ejemplo:

Código Delphi [-]
    // Evento antes de la ordenación
    property OnBeforeSort:TNotifyEvent read FOnBeforeSort write FOnBeforeSort;

Cuando quieras hacer "saltar" el evento para que se active lo que tengas programado debes añadir lo siguiente:

Código Delphi [-]
    ...
    // Lanzar el evento antes de ordenar...
    if Assigned(Self.FOnBeforeSort) then begin
      Self.OnBeforeSort(Self);
    end;

Pruébalo, si tienes problemas ya dirás...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 20-12-2004
Javi2 Javi2 is offline
Miembro
 
Registrado: jun 2004
Posts: 152
Poder: 20
Javi2 Va por buen camino
Muchas gracias por tu ayuda. He seguido (creo) tus indicaciones y, aunque he creado el nuevo evento como published no me aparece en la paleta de eventos. ¿He hecho algo mal?

El código que indicas que tengo que añadir, ¿donde lo tengo que añadir exactamente?
Responder Con Cita
  #4  
Antiguo 20-12-2004
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Si has seguido mis indicaciones habrás creado una nueva Unit (un nuevo fichero .PAS) que tiene tu nuevo componente. En ese fichero estará la definición de tu componente. Será una Unit con una pinta similar a ésta:

Código Delphi [-]
unit MydbGrid;
interface
uses
  Windows, Messages, SysUtils, Classes, Controls, Grids, DBGrids;
type
  TMyDBGrid= class(tdbGrid)
  private
    { Private declarations }
  protected
    { Protected declarations }
  public
    { Public declarations }
  published
    { Published declarations }
  end;
procedure Register;
implementation
procedure Register;
begin
  RegisterComponents('MY COMPS', [TMyDBGrid]);
end;
end.
Localiza esa Unit y en la parte published añades el código anterior. Es IMPRESCINDIBLE que luego vuelvas a recompilar el package donde has instalado (el de usuario) éste componente y lo instales de nuevo, sino no verás los cambios realizados, como te está pasando.

Una vez modificado, compilado e instalado, crea un nuevo proyecto y añade tu DBGrid.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 20-12-2004
Javi2 Javi2 is offline
Miembro
 
Registrado: jun 2004
Posts: 152
Poder: 20
Javi2 Va por buen camino
Muchísimas gracias!!! Efectivamente, me faltaba instalarlo una vez compilado. Ahora ya me aparece con el evento creado por mi.

Pero tengo una duda. ¿Cómo sabe Delphi o cómo le indico yo cuando se debe lanzar el evento (por ejemplo, el evento OnClick se lanza después de pulsar con el ratón sobre el componente)?
Responder Con Cita
  #6  
Antiguo 20-12-2004
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Javi2
Pero tengo una duda. ¿Cómo sabe Delphi o cómo le indico yo cuando se debe lanzar el evento (por ejemplo, el evento OnClick se lanza después de pulsar con el ratón sobre el componente)?
Pues colocando el código que te puesto arriba donde desees que se "lanze" el evento.

Código Delphi [-]
    ... 
    // Lanzar el evento antes de ordenar...
    if Assigned(Self.FOnBeforeSort) then begin
      Self.OnBeforeSort(Self);
    end;

¿Exactamente qué evento deseas lanzar? ¿O cuando deseas lanzarlo?
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #7  
Antiguo 20-12-2004
Javi2 Javi2 is offline
Miembro
 
Registrado: jun 2004
Posts: 152
Poder: 20
Javi2 Va por buen camino
Perdona por las molestias pero después de escribir la duda he releido tu mensaje y lo he entendido.

Muchas gracias por tu ayuda porque me ha sido utilísima.

Que pases unas felices fiestas.

Feliz Navidad.
Responder Con Cita
Respuesta



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


La franja horaria es GMT +2. Ahora son las 17:01:20.


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