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.