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 03-02-2011
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 22
José Luis Garcí Va camino a la fama
Mi nuevo Componente NewPanelDB

Es un panel para usar con bases de datos, de manera que no tengamos que controlar cundo una serie de controles esta enables o visibles ya que al estar dentro de este panel, nos permite poder olvidarnos de tener que estar controlando estas situaciones.

os pongo el código completo, ya que no es muy grande.

Código Delphi [-]
//****************************************************************************************************  **********
//  NewPanelDb                                           03/02/2011
//
// Panel en el que no tenemos que controlar si esta enble o visible ya que lo detecta del Estado del datasourse
// puede controlar en estado norma (cuando esta editando o insertando) esta en enable o visible, por ejemplo,
// panel de los datos panel con los botones grabar y cancelar, etc.. O en inverso (cuando esta editando o
//  insertando) no esta enable o visible, por ejemplo panel con la botonera para movernos por los registros,
//  busqueda, nuevo, modificar, borrar, salir, imprimir, etc...
//--------------------------------------------------------------------------------------------------------------
// Aunque la idea Original es mía J.L.G.T. debo agradecer muchisimo la ayuda de Andres1569 de DelphiAccess sin
// el cual no estaría terminado este componente
//
// Como todos mis componentes, puedes usarlo gratuitamente sin restricciones de ningún tipo
//--------------------------------------------------------------------------------------------------------------
//
// Propiedades
//
//  Action: TTypeAction;           //Tipo de Acción a usar panel enabled o Visible
//  InverseAction: Boolean;    //Si queremos que trabaje al revés, lo normal es State  es DsEdit Panel seria
//                  Enabled, si esta opción esta seleccionada seria no enabled
//  UseColor: Boolean;           //Usamos Color En Edit y Color En no Edit
//  ActiveColor: Tcolor;           //Color a usar cuando este en edit o insert
//  ColorNotActive:Tcolor;         //Color a usar cuando no
//
//****************************************************************************************************  ***********



unit NewPanelDB;

interface

uses
  SysUtils, Classes, Controls, ExtCtrls, Db, Graphics, Dialogs;

type
  TTypeAction= (xEnable,xVisible);
  TPanelDataLink = class(TDataLink)
  private
    FOnEditingChange: TNotifyEvent;
  protected
    procedure EditingChanged; override;
  public
    property OnEditingChange: TNotifyEvent read FOnEditingChange write FOnEditingChange;
  end;

  TNewPanelDB = class(TPanel)
  private
    FDataLink : TPanelDataLink;
    FAction: TTypeAction;                     //Tipo de Acción a usar panel enabled o Visible
    FInverseAction: Boolean;                  // Si queremos que trabaje al reves, lo normal es
                                              //State  es DsEdit Panelñ seria Enabled, si esta
                                              //opcion esta seleccionada seria  no enabled
    FUseColor: Boolean;                       //USamos Color En Edit y Color En no Edit
    FActiveColor: Tcolor;                     //Color a usar cuando este en edit o insert
    FColorNotActive:Tcolor;                   //Color a usar cuando no
    function GetDataSource: TDataSource;
    procedure SetDataSource(const Value: TDataSource);
    procedure SetAction(const Value: TTypeAction);
    procedure SetInverseAction(const Value: Boolean);
    procedure SetUseColor(const Value: Boolean);
    procedure SetActiveColor(const Value:Tcolor);
    procedure SetColorNotActive(Const Value:Tcolor);
  protected
    procedure EditingChanged(Sender: TObject);   virtual;
    procedure Notification(AComponent: TComponent; Operation: TOperation);  override;
  public
    constructor Create(AOwner: TComponent);   override;
    destructor Destroy;   override;
  published
    property DataSource: TDataSource read GetDataSource   write SetDataSource;
    property Action: TTypeAction     read FAction         write SetAction          default xEnable;
    property InverseAction: Boolean  read FInverseAction  write SetInverseAction   default False;
    property UseColor: Boolean       read FUseColor       write SetUseColor        default False;
    property ActiveColor: Tcolor     read FActiveColor    write SetActiveColor     default clMoneyGreen;
    property ColorNotActive:Tcolor   read FColorNotActive write SetColorNotActive  default clBtnFace;
  end;

procedure Register;

implementation

{ TPanelDataLink }

procedure TPanelDataLink.EditingChanged;
begin
  if Assigned(FOnEditingChange) then FOnEditingChange(Self);
end;

{ TMiPanel }

constructor TNewPanelDB.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FDataLink := TPanelDataLink.Create;
  FDataLink.OnEditingChange := EditingChanged;
  FAction:=xEnable;
  FInverseAction:=False;
  FUseColor:=False;
  FActiveColor:=clMoneyGreen;
  FColorNotActive:=clBtnFace;
  Color:=clGray;                     //Esta y la segunda linea es para asegurar los cambios posteriores
  Color:=clBtnFace;
  Enabled:=False;
end;

procedure TNewPanelDB.EditingChanged(Sender: TObject);
begin
  if Assigned(FDataLink.DataSet) then
    if FDataLink.DataSet.State in [dsEdit,dsInsert] then
    begin     //Caundo insertamos o editamos
       if FAction=xEnable then              //Usando Enabled
       begin
          if FInverseAction=False then  Self.Enabled:=True
                                  else  Self.Enabled:=False;
       end else
       begin                                //Usando Visible
          if FInverseAction=false then  Self.Visible:=True
                                  else  Self.Visible:=False;
       end;
       if FUseColor=true then  self.Color:=FActiveColor;
    end else
    begin   //Caundo no insertamos o editamos
       if FAction=xEnable then              //Usando Enabled
       begin
          if FInverseAction=False then  Self.Enabled:=False
                                  else  Self.Enabled:=True;
       end else
       begin                                //Usando Visible
          if FInverseAction=false then  Self.Visible:=False
                                  else  Self.Visible:=True;
       end;
       if FUseColor=true then  self.Color:=FColorNotActive;
    end;
end;

destructor TNewPanelDB.Destroy;
begin
  FDataLink.Free;
  inherited Destroy;
end;

function TNewPanelDB.GetDataSource: TDataSource;
begin
  result := FDataLink.DataSource;
end;

procedure TNewPanelDB.Notification(AComponent: TComponent;
  Operation: TOperation);
begin
  inherited Notification(AComponent, Operation);
  if (Operation = opRemove) AND (FDataLink <> nil) AND
     (AComponent = DataSource) then DataSource := nil;
end;

procedure TNewPanelDB.SetDataSource(const Value: TDataSource);
begin
  if NOT (FDataLink.DataSourceFixed AND (csLoading in ComponentState)) then
    FDataLink.DataSource := Value;
  if Assigned(Value) then Value.FreeNotification(Self);
end;

procedure TNewPanelDB.SetAction(const Value: TTypeAction);
begin
    if FAction<>Value then  FAction:=Value;
    if FAction=xEnable then
    begin
        if FInverseAction=false then Enabled:=false
                                else Enabled:=True;
        Visible:=True;
    end else
    begin
        if FInverseAction=false then Visible:=false
                                else Visible:=True;
        Enabled:=true;
    end;
end;

procedure TNewPanelDB.SetInverseAction(const Value: Boolean);
begin
    if FInverseAction<>value then FInverseAction:=Value;
    if FAction=xEnable then
    begin
        if FInverseAction=false then Enabled:=false
                                else Enabled:=True;
        Visible:=true;
    end else
    begin
        if FInverseAction=false then Visible:=false
                                else Visible:=True;
        Enabled:=true;
    end;
end;

procedure TNewPanelDB.SetUseColor(const Value: Boolean);
begin
    if FUseColor<>value then  FUseColor:=Value;
    color:=FColorNotActive;
end;

procedure TNewPanelDB.SetActiveColor(const Value: TColor);
begin
    if FActiveColor<>value then  FActiveColor:=Value;
end;

procedure TNewPanelDB.SetColorNotActive(const Value: TColor);
begin
    if FColorNotActive<>value then  FColorNotActive:=Value;
    color:=FColorNotActive;
end;

procedure Register;
begin
  RegisterComponents('Standard', [TNewPanelDB]);
end;

end.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #2  
Antiguo 03-02-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Gracias por la aportación, habrá que probarlo
Responder Con Cita
  #3  
Antiguo 03-02-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Ya lo instale y me parece muy util.
Excelente aporte.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #4  
Antiguo 03-02-2011
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Muchas gracias por la aportación y un saludo para Andrés que hace tiempo no pasa por estos sus Foros.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #5  
Antiguo 04-02-2011
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 José Luis Garcí Ver Mensaje
Es un panel para usar con bases de datos, de manera que no tengamos que controlar cundo una serie de controles esta enables o visibles ya que al estar dentro de este panel, nos permite poder olvidarnos de tener que estar controlando estas situaciones.
A mi también me parece de utilidad y la idea muy buena. Lo dejo pendiente de probar, José Luis.

¿Podemos subirla al FTP (sección componentes)? Para tenerlo siempre a mano.

Gracias y un saludo.
__________________
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
  #6  
Antiguo 04-02-2011
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 22
José Luis Garcí Va camino a la fama
Me alego que les guste y prometo esta tarde subir el unit, cuando llege a casa que es donde tengo el original.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #7  
Antiguo 04-02-2011
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 22
José Luis Garcí Va camino a la fama
ya podéis encontrarlo en el Ftp Componentes con el nobre NewPAnelDB.zip de menos de 3 kb.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #8  
Antiguo 04-02-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Perfecto, justo en tu post 500
Responder Con Cita
  #9  
Antiguo 04-02-2011
Avatar de ElKurgan
[ElKurgan] ElKurgan is offline
Miembro Premium
 
Registrado: nov 2005
Posts: 1.234
Poder: 20
ElKurgan Va camino a la fama
Wink

Gracias por el aporte. Asi crecemos un poco más
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
Nuevo componente con lista desplegable DarKraZY OOP 8 07-12-2006 13:17:35
Como añadir un nuevo evento a un componente Javi2 Varios 6 20-12-2004 13:25:12
Cambiar el color de un componente nuevo nefy OOP 4 27-08-2004 21:38:19
Nuevo Componente diegofhernando OOP 3 29-03-2004 18:31:48
Ayuda con nuevo componente mosorio OOP 2 14-07-2003 13:33:09


La franja horaria es GMT +2. Ahora son las 05:13:41.


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