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
  #7  
Antiguo 05-10-2005
lento manu lento manu is offline
Miembro
 
Registrado: oct 2004
Posts: 29
Poder: 0
lento manu Va por buen camino
Componente en si

Por si a alguien le interesa, este es mi componente final (de momento) que genera un Explorador TTable o TAdoTable, pero se puede aplicar a cualquier gestion SQL genérica con TQuery en vez de TTable. El asunto es crear un superForm dedicado a una conexión DB:
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;
    FOldOnActivate: TNotifyEvent;
    FOnActivate: TNotifyEvent;
    FOnShow: TNotifyEvent;
    FOldOnClose: TCloseEvent;
    FOnDie: TNotifyEvent;
    FOnClose: TCloseEvent;
    FOnEndDock: TEndDragEvent;
    CloseAction: TCloseAction;
    function GetTable: TDataSet;
    procedure SetTable (value: TDataSet);
    procedure Activate(Sender: TObject);
    procedure Cerrar(var Action: TCloseAction);
  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;
    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

constructor TDBexplorer.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FModal := True;
end;
destructor TDBexplorer.Destroy;
begin
  if Modal then
  begin
    //no destruir si no es modal: error de assigned
    if Assigned(Explorador) then
       FreeAndNil(Explorador);
  end;
  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;
begin
   CloseAction:= caFree;
   Explorador:= TfmExControlsTabla.CreateTabla(Owner, FTable);
   if Modal and (Owner<>nil) then
      Explorador.OnDestroy:= OnDie;
.
   FOldOnClose:= Explorador.OnClose;
   FOldOnActivate := Explorador.OnActivate;
   Explorador.OnActivate:= Activate;
   Explorador.OnShow:= OnShow;
   Explorador.OnEndDock:= OnEndDock;
   Explorador.OnClose:= OnClose;
   if FModal then
     try
        Explorador.ShowModal;
     finally
     begin
        //llamada a los eventos OnClose y FOldOnclose para sobrescribir
        Cerrar(CloseAction);
        Explorador.Free;
     end;
     end
   else
   begin
     try
       Explorador.Show;
     except
       Explorador.Free;
       //OJO: sigue viva
     end;
   end;
end;
procedure Register;
begin
  RegisterComponents('Data Controls', [TDBexplorer]);
end;
procedure TDBexplorer.Activate(Sender: TObject);
begin
  inherited;
    if Assigned(Explorador) then
    begin
       if Assigned(FOldOnActivate) then
          FOLdOnActivate(Sender);
       if Assigned(FOnActivate) then
          FOnActivate(Sender);
    end;
end;
procedure TDBexplorer.Cerrar(var Action: TCloseAction);
begin
  inherited;
  //como no modal no puedo llamar estos eventos (ya no existen)
  if Modal then
  begin
    if Assigned(FOldOnClose) then
    begin
       if  Assigned (Explorador.Tabla) then
       begin
          if Explorador.Tabla.Active then
             Explorador.Tabla.Close;
             FOldOnClose(Self, Action);
       end;
    end;
    if Assigned(FOnClose) then
       FOnClose(Self, Action);
    if Explorador <> nil then
       Explorador:= nil;
  end;
end;
end.
Espero que os pueda servir.
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 05:21:08.


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