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 04-03-2013
cd.rafael cd.rafael is offline
Miembro
 
Registrado: abr 2012
Posts: 59
Poder: 13
cd.rafael Va por buen camino
nuevo componente dbedit y datetimepicker

Cordial Saludo,

Nunca he hecho un componente y quisiera, para empezar, hacer un componente que me permita mostrar una fecha, opcional con hora, que se guarde en la BD.

Sé que existen varios componentes free, pero lo que quiero es entender cómo se hace.

Agradezco de antemano cualquier colaboración.
Responder Con Cita
  #2  
Antiguo 04-03-2013
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Hola,

Te recomiendo leas esta serie de artículos en Delphi About
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #3  
Antiguo 04-03-2013
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.289
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
Bueno, empezar con un componente de Base de datos (sin haber hecho ningun otro antes) tal vez no sea la mejor manera de entrar en el tema, pero bueno...

Empieza por pensar, cual es el componente que te iría bien, para poder usar como "ancestro" del que vas a hacer.
Piensa bien qué propiedades vas a necesitar en tu componente.

A partir de ahí genera un componente "vacío", derivando simplemente y comienza a añadirle código, para obtener el comportamiento que necesitas.

Es bueno, que tal vez sigas algún manual de los existentes por internet (revisa el FTP del club, porque creo recordar que hay alguno también). Sobre todo si no estás familiarizado con el tema de mensajes y con los diferentes ámbistos de propiedades/métodos y la sintaxis de estos (override, published, protected, private,...).
__________________
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
  #4  
Antiguo 05-03-2013
Avatar de ElKurgan
[ElKurgan] ElKurgan is offline
Miembro Premium
 
Registrado: nov 2005
Posts: 1.235
Poder: 20
ElKurgan Va camino a la fama
Para iniciarse, aqui hay dos buenos tutoriales:

Curso de creación de componentes, de Luis Roche - En castellano
Introduction to component building, de Ray Konopka - En perfecto inglés

El problema es que son un poco antiguos, pero para aprendizaje de la base, estan bastante bien.

Un saludo
Responder Con Cita
  #5  
Antiguo 05-03-2013
cd.rafael cd.rafael is offline
Miembro
 
Registrado: abr 2012
Posts: 59
Poder: 13
cd.rafael Va por buen camino
Thumbs up

Cordial Saludo,

De pronto tienen mucha razón en que debo iniciar con algo más sencillo, pero... me gustan los retos (aunque me estrelle en el intento).

Estoy revisando todos los enlaces que me enviaron para aprender e intentar desarrollarlo.

Cualquier cosita que logre sacar, la comparto con los amigos del foro.

Muchísimas gracias.
Responder Con Cita
  #6  
Antiguo 07-03-2013
cd.rafael cd.rafael is offline
Miembro
 
Registrado: abr 2012
Posts: 59
Poder: 13
cd.rafael Va por buen camino
Cordial Saludo,

Como mencioné anteriormente... me estrellé, pero así voy aprendiendo.

Ya he avanzado un poco en el componente, pero intento agregarle un tdbedit y no he podido... "Error catastrófico".

La idea es que el componente se base en un TDateTimePicker y que tenga dentro de sus propiedades un TDBEdit. Le agrego al nuevo componente dos pripiedades: DataField y DataSource, las cuales se asignan a las mismas del TDBEdit y hago que cuando cambie la propiedad Date de mi nuevo componente, se la asigne a la propiedad Text del TDBEdit, lo que no sé cómo hacer es cuando el dato cambie al cambiar de registro, se actualice la propiedad date de mi componente.

Alguien me puede decir qué puedo estar haciendo mal?

Código:
unit DBDateTimePicker;

interface

uses
    SysUtils, Classes, Controls, Grids, DBCtrls, ComCtrls, DB, Dialogs;

type
    TDBDateTimePicker = class(TDateTimePicker)
        private
            FDBEdit: TDBEdit;
            //
            procedure SetDataField(Value: String);
            function GetDataField: String;
            //
            procedure SetDataSource(Value: TDataSource);
            function GetDataSource: TDataSource;
        protected
            procedure Change; override;
        public
            constructor create(AOwner: TComponent); override;
            destructor destroy; override;
        published
            property DataField:  String read GetDataField write SetDataField;
            property DataSource: TDataSource read GetDataSource write SetDataSource;
    end;

procedure Register;

implementation

procedure Register;
begin
    RegisterComponents('PRUEBA', [TDBDateTimePicker]);
end;

{ TDBDateTimePicker }

procedure TDBDateTimePicker.Change;
begin
    if (Self.DataSource = nil) then
    begin
        Exit;
    end;
    if (Length(Trim(Self.DataField)) = 0) then
    begin
        Exit;
    end;
    if (not TDataSource(FDBEdit.DataSource).DataSet.Active) then
    begin
        Exit;
    end;
    FDBEdit.Text := DateTimeToStr(Self.DateTime);
    inherited Change;
end;

constructor TDBDateTimePicker.create(AOwner: TComponent);
begin
    inherited;
    FDBEdit := TDBEdit.create(Self);
end;

destructor TDBDateTimePicker.destroy;
begin
    FDBEdit.Free;
    inherited;
end;

function TDBDateTimePicker.GetDataField: String;
begin
    Result := FDBEdit.DataField;
end;

function TDBDateTimePicker.GetDataSource: TDataSource;
begin
    Result := Self.DataSource;
end;

procedure TDBDateTimePicker.SetDataField(Value: String);
begin
    FDBEdit.DataField := Value;
end;

procedure TDBDateTimePicker.SetDataSource(Value: TDataSource);
begin
    FDBEdit.DataSource := Value;
end;

end.
Gracias de antemano por toda la colaboración que me puedan brindar.
Responder Con Cita
  #7  
Antiguo 07-03-2013
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.289
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 cd.rafael Ver Mensaje
La idea es que el componente se base en un TDateTimePicker y que tenga dentro de sus propiedades un TDBEdit. Le agrego al nuevo componente dos pripiedades: DataField y DataSource, las cuales se asignan a las mismas del TDBEdit y hago que cuando cambie la propiedad Date de mi nuevo componente, se la asigne a la propiedad Text del TDBEdit, lo que no sé cómo hacer es cuando el dato cambie al cambiar de registro, se actualice la propiedad date de mi componente.
Antes de continuar estaría bien saber qué quieres hacer y porqué.
Según lo que comentas, quieres hacer un componente que haga lo siguiente:

"...hacer un componente que me permita mostrar una fecha, opcional con hora, que se guarde en la BD".

Eso es casi exactamente lo que hace un DBdateTimePicker, salvo que este muestra o la fecha o la hora, pero no ambas (imagino que ahí está el problema).
¿Es por esto último que quieres crear un componente nuevo?
¿Porqué quieres añadir un DBEdit dentro del DBDateTimePicker?

¿Porqué no intentas variar el componente TDBDateTimePicker para que haga lo que necesitas?
__________________
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
  #8  
Antiguo 07-03-2013
cd.rafael cd.rafael is offline
Miembro
 
Registrado: abr 2012
Posts: 59
Poder: 13
cd.rafael Va por buen camino
Cordial Saludo,

Como tú dices:

"Eso es casi exactamente lo que hace un DBdateTimePicker, salvo que este muestra o la fecha o la hora, pero no ambas (imagino que ahí está el problema)."

Ese es el detalle.

"¿Porqué no intentas variar el componente TDBDateTimePicker para que haga lo que necesitas?"

No tengo idea de cómo hacerlo. (De pronto colocando objetos datasource y datafield?)

Algún consejo?
Responder Con Cita
  #9  
Antiguo 07-03-2013
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.289
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
Si ya tienes un componente que muestra la fecha o la hora, es bastante probable que derivando del componente y "modificando" el comportamiento puedas conseguir que pinte fecha y hora, si es lo que necesitas.

Si te fijas en la propiedad Kind que "manda lo que se pinta" en el componente, verás que esta se encuentra directamente en TDateTimePicker.
Si miras el código verás esto:

Código Delphi [-]
  if FKind <> Value then
  begin
    FKind := Value;
    RecreateWnd;
  end;

Por lo tanto si vas al código del procedimiento de la clase TDateTimePicker, que se encarga de la creación, verás que ahí está lo necesario para que se "pinte" una cosa u otra.

Código Delphi [-]
  procedure TDateTimePicker.CreateParams(var Params: TCreateParams);

Ese procedimiento tiene un override, por lo tanto puedes sobreescribirlo en tu componente y decidir qué se debe pintar y en qué formato.
__________________
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
  #10  
Antiguo 07-03-2013
cd.rafael cd.rafael is offline
Miembro
 
Registrado: abr 2012
Posts: 59
Poder: 13
cd.rafael Va por buen camino
Cordial Saludo,

Muchas Gracias, revisando y aprendiendo...
Responder Con Cita
  #11  
Antiguo 07-03-2013
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
Cita:
Empezado por Neftali Ver Mensaje
Eso es casi exactamente lo que hace un DBdateTimePicker
¿Existe un TDBDateTimePicker? ¿En qué versión?

// Saludos
Responder Con Cita
  #12  
Antiguo 07-03-2013
cd.rafael cd.rafael is offline
Miembro
 
Registrado: abr 2012
Posts: 59
Poder: 13
cd.rafael Va por buen camino
Cordial Saludo,

http://www.downloadcollection.com/tdbdatetimepicker.htm
http://cc.embarcadero.com/Item/15224
http://www.delphipages.com/comp/tdbd...ker-18558.html
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
componente datetimepicker donpedro Conexión con bases de datos 4 20-07-2011 09:17:38
Componente DBEdit!!! Sole_l Conexión con bases de datos 2 31-03-2009 23:45:37
como grabar un DateTimePicker a un DBEdit Goyo OOP 5 06-06-2007 12:17:07
Componente DBEdit Rogersito Plus Firebird e Interbase 2 04-09-2006 21:08:36
Como puedo hacer consultas de fecha con el componente Datetimepicker Julio César Varios 2 06-07-2003 05:24:51


La franja horaria es GMT +2. Ahora son las 13:42: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