Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-06-2007
arieliten arieliten is offline
Miembro
 
Registrado: mar 2005
Posts: 29
Poder: 0
arieliten Va por buen camino
Abstraer eventos comunes a varios objetos (forms, dbgrids, etc)

Hola amigos del foro. Recurro a ustedes para que me orienten a resolver el problema que tengo a la hora de tratar de modularizar o abstraer métodos (procedures) comunes.
En mi aplicación se me ha presentado el caso donde tengo en varios forms una grilla (DBGrid) asociada a un dataset y el cual al hacerle click en el título ordeno la grilla (dataSet) por el campo clickeado.
Como este método siempre es igual, lo que yo quiero hacer es hacerlo una sola vez y luego en cada grilla que quiera que tenga este evento, asignarle al evento 'OnTitleClick' el método genérico mío.

Pero no sé dónde ubicar este método o donde definirlo para que lo pueda ver desde cualquier Form y poder asignarlo a cualquier DBGrid.

De más está decir que la definición de mi método es exactamente igual (tiene la misma estructura de parámetros) a la que te define solo Delphi al hacerle doble click al evento 'OnTitleClick'.

He probado a definir este método en una Unit global que uso para almacenar métodos, funciones y variables globales o comunes a toda mi aplicación; pero no hay caso . Desde los otros forms no me permiten asignar este método desde el Object Inspector de una DBGrid cualquiera.

Donde debo definirlo entonces??

Creo que este problema es bastante común y puede presentarse en cualquier caso (métodos comunes a todos los 'OnShow' de un Form por ejemplo, etc, etc).

Espero me puedan orientar un poco. Desde ya muchas gracias.
Saludos,

Ariel
Responder Con Cita
  #2  
Antiguo 23-06-2007
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
Quizá lo más adecuado sería derivar una nueva componente a partir del DBGrid y redefinir su método TitleClick:

Código Delphi [-]
type
  TExtendedDBGrid = class(TDBGrid)
  protected
    procedure TitleClick(Column: TColumn); override;
  end;

implementation

procedure TExtendedDBGrid .TitleClick(Column: TColumn);
begin
  // .. aquí pones tu código genérico
end;

Pero tiene el "inconveniente" de tener que instalar la nueva componente si es que quieres usarla desde la paleta de componentes.

Otra opción, muy sencilla, es hacer uso de un frame (File|New|Frame) en donde colocas un DBGrid y programas su evento OnTitleClick como ya sabes. Luego, basta que insertes el frame en cualquier formulario donde lo necesites.

Y una tercera opción que se me ocurre, para estar acorde con tu unidad global, es usar una clase de eventos:

Código Delphi [-]
type
  TGlobalEvents = class
  public
    class procedure TitleClick(Column: TColumn);
  end;

implementation

{ TGlobalEvents }

class procedure TGlobalEvents.TitleClick(Column: TColumn);
begin
  // .. aquí pones tu código genérico
end;

Lo único malo con esto, es que no puedes asignar el evento desde el inspector de objetos, pero puedes hacerlo por código:

Código Delphi [-]
DBGrid1.OnTitleClick := TGlobalEvents.TitleClick;

Nota que no es necesario crear una clase de tipo TGlobalEvents; basta usar la clase en sí.

// Saludos
Responder Con Cita
  #3  
Antiguo 25-06-2007
arieliten arieliten is offline
Miembro
 
Registrado: mar 2005
Posts: 29
Poder: 0
arieliten Va por buen camino
Hola Roman, muchas gracias por tu pronta respuesta.
La verdad que me ha sido de gran utilidad y he usado la tercer opción que mencionas para mantener la estructura que vengo desarrollando.
Muchas gracias nuevamente.
Saludos,

Ariel
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
¿Como puedo trabajar con varios forms en delphi PHP? fredo PHP 1 13-06-2007 18:20:06
Varios forms, frames y un Data Module gluglu Varios 1 07-04-2005 19:28:51
Funciones comunes a varios Forms gluglu Varios 10 06-01-2005 20:23:04
problema con app con varios forms y barra de tareas kalisto Varios 1 15-08-2004 17:25:15
eventos en objetos Nidia H. Ochoa OOP 4 27-02-2004 04:17:07


La franja horaria es GMT +2. Ahora son las 05:55:21.


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