By adding a ReadOnly property, you will provide a way to make the control read-only at design time. When that property is set to True, you can make all cells in the control unable to be selected.
type TDBCalendar = class(TSampleCalendar) private FReadOnly: Boolean; { field for internal storage } public constructor Create(AOwner: TComponent); override; { must override to set default } published property ReadOnly: Boolean read FReadOnly write FReadOnly default True; end; . . . constructor TDBCalendar.Create(AOwner: TComponent); begin inherited Create(AOwner); { always call the inherited constructor! } FReadOnly := True; { set the default value } end;
//header file class PACKAGE TDBCalendar : public TSampleCalendar { private: bool FReadOnly; // field for internal storage protected: public: virtual __fastcall TDBCalendar(TComponent* Owner); __published: __property ReadOnly = {read=FReadOnly, write=FReadOnly, default=true}; };
//implementation file: virtual __fastcall TDBCalendar::TDBCalendar(TComponent* Owner) : TSampleCalendar(Owner) { FReadOnly = true; // sets the default value }
function TDBCalendar.SelectCell(ACol, ARow: Longint): Boolean; begin if FReadOnly then Result := False { cannot select if read only } else Result := inherited SelectCell(ACol, ARow); { otherwise, use inherited method } end;
bool __fastcall TDBCalendar::SelectCell(long ACol, long ARow) { if (FReadOnly) return false; // can't select if read only return TSampleCalendar::SelectCell(ACol, ARow); // otherwise, use inherited method }
Remember to add the declaration of SelectCell to the type declaration of TDBCalendar, and append the override directive.
If you now add the calendar to a form, you will find that the component ignores clicks and keystrokes. It also fails to update the selection position when you change the date.
Copyright(C) 2009 Embarcadero Technologies, Inc. All Rights Reserved.
|
What do you think about this topic? Send feedback!
|