Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #4  
Antiguo 30-09-2005
lento manu lento manu is offline
Miembro
 
Registrado: oct 2004
Posts: 29
Poder: 0
lento manu Va por buen camino
Solución a Sobreescibir Eventos en Componentes

He encontrado una solución, que funciona, pero no he conseguido un override sobre el evento, ya que el componente que abre el form, es un simple Tcomponent, no tiene este mismo valor en herencia. Tampoco he conseguido un inherited. La llamada
Código Delphi [-]
Explorador:= TfmExControlsTabla.CreateTabla(Owner, FTable);
crea un Form que ha su vez es un inherited de otro inicial. Este form tiene en el OnActivate las llamadas, que generan controles DBtext, DBimage, DB... lo que sea. Estas llamadas se inician en el evento OnActivate.
Os pego el código porque creo os puede interesar (si veis algo mal, avisarme, por favor).
Código Delphi [-]
 
unit DBX;
interface
uses
Windows, Messages, Controls, SysUtils, Classes, Forms, DB,
DBTables,
DBGridCheck,
ExControlsTabla;
type
TEndDragEvent = procedure(Sender, Target: TObject; X, Y: Integer) of object;
TDBexplorer = class(TComponent)
private
{ Private declarations }
FTable: TDataSet;
FModal: boolean;
FOnActivate: TNotifyEvent;
FOnShow: TNotifyEvent;
FOnDie: TNotifyEvent;
FOnClose: TCloseEvent;
FOnEndDock: TEndDragEvent;
CloseAction: TCloseAction;
function GetTable: TDataSet;
procedure SetTable (value: TDataSet);
procedure Cerrar(var Action: TCloseAction);
procedure Activate(Sender: TObject);
protected
{ Protected declarations }
public
{ Public declarations }
Explorador: TfmExControlsTabla;
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;
property OnEndDock: TEndDragEvent read FOnEndDock write FOnEndDock;
end;
procedure Register;
implementation
//uses ExControlsTabla;
constructor TDBexplorer.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
// asignar las propiedades por defecto:
FModal := True;
end;
destructor TDBexplorer.Destroy;
begin
if Assigned (Explorador) then
FreeAndNil(Explorador);
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;
//cambiado a public para poder escribir sobre evento OnActive desde el procedure Activate:
{
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;
Explorador.OnActivate:= Activate;
Explorador.OnClose:= OnClose;
Explorador.OnShow:= OnShow;
Explorador.OnEndDock:= OnEndDock;
 
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;
 
procedure TDBexplorer.Cerrar(var Action: TCloseAction);
begin
inherited;
if Assigned(FOnClose) then FOnClose(Self, Action);
end;
 
procedure TDBexplorer.Activate(Sender: TObject);
begin
inherited;
if Assigned(Explorador) then
begin
//rellamamos los mismos procedidmientos que están declarados en el
//evento OnActivate del form Explorador:
Explorador.Crear(Sender);
Explorador.ColorIndices;
end;
end;
end.
Gracias por las ayudas recibidas. Espero que esto pueda servir para alguien.

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


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


La franja horaria es GMT +2. Ahora son las 13:08:45.


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