home *** CD-ROM | disk | FTP | other *** search
- unit DBCal;
-
- interface
-
- uses
- SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
- Forms, Dialogs, Grids, CalSamp, DB, DBTables;
-
- type
- TDBCalendar = class(TSampleCalendar)
- private
- { Private declarations }
- FReadOnly: Boolean;
- FUpdating: Boolean;
- FDataLink: TFieldDataLink;
- procedure DataChange(Sender: TObject);
- function GetDataField: string;
- function GetDataSource: TDataSource;
- procedure SetDataField(const Value: string);
- procedure SetDataSource(Value: TDataSource);
- protected
- { Protected declarations }
- function SelectCell(ACol, ARow: Longint): Boolean; override;
- public
- { Public declarations }
- constructor Create(AOwner: TComponent); override;
- destructor Destroy; override;
- procedure UpdateCalendar; override;
- published
- { Published declarations }
- property DataField: string read GetDataField write SetDataField;
- property DataSource: TDataSource read GetDataSource write SetDataSource;
- property ReadOnly: Boolean read FReadOnly write FReadOnly default True;
- end;
-
- procedure Register;
-
- implementation
-
- procedure Register;
- begin
- RegisterComponents('Samples', [TDBCalendar]);
- end;
-
- constructor TDBCalendar.Create(AOwner: TComponent);
- begin
- inherited Create(AOwner);
- FReadOnly := True;
- FDataLink := TFieldDataLink.Create;
- FDataLink.OnDataChange := DataChange;
- end;
-
- destructor TDBCalendar.Destroy;
- begin
- FDataLink.OnDataChange := nil;
- FDataLink.Free;
- inherited Destroy;
- end;
-
- procedure TDBCalendar.DataChange(Sender: TObject);
- begin
- if FDataLink.FIeld = nil then
- CalendarDate := 0
- else CalendarDate := FDataLink.Field.AsDateTime;
- end;
-
- function TDBCalendar.GetDataField: string;
- begin
- Result := FDataLink.FieldName;
- end;
-
- function TDBCalendar.GetDataSource: TDataSource;
- begin
- Result := FDataLink.DataSource;
- end;
-
- function TDBCalendar.SelectCell(ACol, ARow: Longint): Boolean;
- begin
- if (not FUpdating) and FReadOnly then Result := False
- else Result := inherited SelectCell(ACol, ARow);
- end;
-
- procedure TDBCalendar.SetDataField(const Value: string);
- begin
- FDataLink.FieldName := Value;
- end;
-
- procedure TDBCalendar.SetDataSource(Value: TDataSource);
- begin
- FDataLink.DataSource := Value;
- end;
-
- procedure TDBCalendar.UpdateCalendar;
- begin
- FUpdating := True;
- try
- inherited UpdateCalendar;
- finally
- FUpdating := False;
- end;
- end;
-
- end.
-