如题

解决方案 »

  1.   

    你可以参考DBEdit是如何实现的?
      

  2.   

    才发布的:
    http://www.2ccc.com/article.asp?articleid=3399
      

  3.   

    我在大富翁上拷了一个:
    来自:GZCYP, 时间:2001-11-13 11:14:00, ID:726872 
    DBDateTimePicker的源代码,安装就行了。别忘记给分。Ha!Ha!
    /////////////////////////////////////////////////
    unit DBDateTimePicker;{TDBDateTimePicker - v1.0}
    interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      ComCtrls, DB, DBCtrls;type
      TDBDateTimePicker = class(TDateTimePicker)
      private
        { Private declarations }
        FAllowChange: Boolean;
        FDataLink: TFieldDataLink;
        function GetDataField: string;
        function GetDataSource: TDataSource;
        procedure SetDataField(const Value: string);
        procedure SetDataSource(Value: TDataSource);
        procedure DataChange(Sender: TObject);
        procedure Change(Sender: TObject);
        procedure CMExit(var Message: TWMNoParams); message CM_EXIT;
      protected
        { Protected declarations }
      public
        { Public declarations }
        constructor Create(Aowner: TComponent); override;
        destructor Destroy; override;
      published
        { Published declarations }
        property DataField: string read GetDataField write SetDataField;
        property DataSource: TDataSource read GetDataSource write SetDataSource;
      end;procedure Register;implementationconstructor TDBDateTimePicker.Create(AOwner: TComponent);
    begin
       inherited Create(AOwner);
       FDataLink:=TFieldDataLink.Create;
       FDataLink.OnDataChange:=DataChange;
       OnChange:=Change;
       FAllowChange:=True;
    end;destructor TDBDateTimePicker.Destroy;
    begin
       FDataLink.OnDataChange:=nil;
       FDataLink.Free;
       inherited Destroy;
    end;procedure TDBDateTimePicker.DataChange(Sender: TObject);
    begin
       if FDataLink.Field=nil then Self.Date:=0
       else
          if FAllowChange then Self.Date:=FDataLink.Field.AsDateTime;
    end;procedure TDBDateTimePicker.Change(Sender: TObject);
    begin
       with FDataLink do begin
          FAllowChange:=False;
          if not editing then Edit;
       end;
       FDatalink.Field.AsDateTime:=self.Date;
       FAllowChange:=True;
    end;procedure TDBDateTimePicker.CMExit(var Message: TWMNoParams);
    begin
       try
          FDataLink.UpdateRecord;
       except
          on Exception do SetFocus;
       end;
       inherited;
    end;function TDBDateTimePicker.GetDataField: string;
    begin
       Result:=FDataLink.FieldName;
    end;function TDBDateTimePicker.GetDataSource: TDataSource;
    begin
       Result:=FDataLink.DataSource;
    end;procedure TDBDateTimePicker.SetDataField(const Value: string);
    begin
       FDataLink.FieldName:=Value;
    end;procedure TDBDateTimePicker.SetDataSource(Value: TDataSource);
    begin
       FDataLink.DataSource:=Value;
    end;procedure Register;
    begin
      RegisterComponents('Data Controls', [TDBDateTimePicker]);
    end;end.