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

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-09-2005
lento manu lento manu is offline
Miembro
 
Registrado: oct 2004
Posts: 29
Poder: 0
lento manu Va por buen camino
Override eventos On...

Estoy intentando tener acceso a los eventos principales de un Form desde un componente que lo contiene, para poder sobrescribirlos al modo override o inherited.
La idea es disponer de un form de exploración DB tipo y convertirlo en componente. Pues bien, si yo llamo a este componente desde una Query, para editar los valores de algún dato en modo Tabla por ejemplo, y realizar un locate cuando el componente ha acabado su creación. Si accedo a la propiedad OnActivate, esta se sobrescribe sustituyendo, pero no complementando la original.
Este componente es parecido al TDBViewer del curso de Luis Roche, pero quiero que en inspector de objetos me aparezcan los eventos tales como: OnActivate, OnShow, OnClose, OnDestroy. Actualmente lo consigo, pero los métodos antecesores desparecen y no se ejecutan en 'inherited', es decir: en herencia después de lo declarado en los eventos originales.
¿Cómo puedo declarar estos eventos en mi componente de enlace?
Ya pego el código del compo para que lo probéis si queréis con cualquier Form al uso. Si queréis más código me lo pedís. ¿Vale?
El código imprescindible de la llamada del Componente en el form que creamos dinámicamente es:
Código Delphi [-]
public
constructor CreateTabla(aOwner:TComponent; data: TDataSet);
...
published
Tabla: TDataSet;
...
implementacion ...
constructor TfmExploracionTabla.CreateTabla(aOwner:TComponent; data: TDataSet);
begin
 
try
if data.Active then
abierta:= True
else
abierta:= False;
 
Tabla:= data;
if Tabla is TTable then
nombreTabla:= (Tabla as TTable).TableName;
if Tabla is TADOTable then
nombreTabla:= (Tabla as TADOTable).TableName;
except
begin
Destroy;
Raise;
end;
end;
 
inherited Create (aOwner);
 
end;
Jolines: Que bonitas quedan las etiquetas "Delphi".
Ahora el código del componente en si:
Código Delphi [-]
{$A+,B-,C+,D+,E-,F-,G+,H+,I+,J-,K-,L+,M-,N+,O+,P+,Q-,R-,S-,T-,U-,V+,W-,X+,Y+,Z1}
{$MINSTACKSIZE $00004000}
{$MAXSTACKSIZE $00100000}
{$IMAGEBASE $00400000}
{$APPTYPE GUI}
unit DBX;
interface
uses
Windows, Messages, SysUtils, Classes, Forms, DB, DBTables, DBGridCheck;
type
TDBexplorer = class(TComponent)
private
{ Private declarations }
FTable: TDataSet;
FModal: boolean;
FOnActivate: TNotifyEvent;
FOnShow: TNotifyEvent;
FOnDie: TNotifyEvent;
FOnClose: TCloseEvent;
FOnEndDock: TEndDragEvent;
function GetTable: TDataSet;
procedure SetTable (value: TDataSet);
 
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Execute;
published
{ Published declarations }
property Table: TDataSet read GetTable write SetTable;
property Modal: boolean read FModal write FModal default True;
//@J@// estos métodos se sobrescriben y no se ejecutan en TExControlsTabla
property OnActivate: TNotifyEvent read FOnActivate write FOnActivate;
property OnShow: TNotifyEvent read FOnShow write FOnShow;
property OnDie: TNotifyEvent read FOnDie write FOnDie;
property OnClose: TCloseEvent read FOnClose write FOnClose;
end;
 
procedure Register;
 
implementation
 
uses ExControlsTabla;
 
constructor TDBexplorer.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FModal := True;
end;
destructor TDBexplorer.Destroy;
begin
inherited Destroy;
end;
 
function TDBexplorer.GetTable :TDataSet;
begin
Result:= FTable;
end;
 
procedure TDBexplorer.SetTable(value: TDataSet);
begin
if FTable <> value then
begin
FTable:= Value;
if value <> nil then
value.FreeNotification(Self);
end;
end;
 
procedure TDBexplorer.Execute;
var
Explorador: TfmExControlsTabla;
begin
Explorador:= TfmExControlsTabla.CreateTabla(Owner, FTable);
//Ojo: para impedir acceder al código OnDestroy si el parent abre noModal
if Modal and (Owner<>nil) then
Explorador.OnDestroy:= OnDie;
//probando...
Explorador.OnClose:= OnClose;
Explorador.OnActivate:= OnActivate
Explorador.OnShow:= OnShow;
if FModal then
try
Explorador.ShowModal;
 
finally
Explorador.Free;
end
else
try
Explorador.Show;
except
Explorador.Free;
end;
end;
 
procedure Register;
begin
RegisterComponents('Data Controls', [TDBexplorer]);
end;
end.
¡¡Gracias a todos!!

Última edición por lento manu fecha: 05-10-2005 a las 17:57:36.
Responder Con Cita
 



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:25:00.


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