Die Eigenschaft ReadOnly hinzufügen
Nach oben zu Den Kalender als Nur-Lesen-Steuerelement definieren
Durch das Hinzufügen der Eigenschaft ReadOnly kann das Steuerelement zur Entwurfszeit als Nur-Lesen-Element definiert werden. Wenn die Eigenschaft auf True gesetzt ist, können Sie alle Zellen im Steuerelement als nicht auswählbar definieren.
Um die Eigenschaft ReadOnly hinzuzufügen, führen Sie folgende Arbeitsschritte aus.
- Fügen Sie die Eigenschaftsdeklaration und ein als private deklariertes Feld für das Speichern des Wertes hinzu:
Delphi:
type TDBCalendar = class(TSampleCalendar) private FReadOnly: Boolean; { Feld für interne Speicherung } public constructor Create(AOwner: TComponent); override; { Überschreiben, um Vorgabe zu setzen } published property ReadOnly: Boolean read FReadOnly write FReadOnly default True; end; // … constructor TDBCalendar.Create(AOwner: TComponent); begin inherited Create(AOwner); { Immer den geerbten Konstruktor aufrufen! } FReadOnly := True; { Vorgabewert setzen } end;
C++:// Header-Datei class PACKAGE TDBCalendar : public TSampleCalendar { private: bool FReadOnly; // Feld für interne Speicherung protected: public: virtual __fastcall TDBCalendar(TComponent* Owner); __published: __property ReadOnly = {read=FReadOnly, write=FReadOnly, default=true}; };
Überschreiben Sie die Methode SelectCell, um eine Auswahl zu unterbinden, wenn das Steuerelement das Attribut Nur-Lesen aufweist. Die Verwendung von SelectCell wird unter Bewegung zu leeren Zellen verhindern beschrieben.
Delphi:
function TDBCalendar.SelectCell(ACol, ARow: Longint): Boolean; begin if FReadOnly then Result := False { Keine Auswahl möglich, wenn schreibgeschützt } else Result := inherited SelectCell(ACol, ARow); { Ansonsten geerbte Methode verwenden } end;
C++:
bool __fastcall TDBCalendar::SelectCell(long ACol, long ARow) { if (FReadOnly) return false; // Keine Auswahl möglich, wenn schreibgeschützt return TSampleCalendar::SelectCell(ACol, ARow); // Andernfalls geerbte Methode verwenden }
Vergessen Sie nicht, die Deklaration von SelectCell in die Typdeklaration von TDBCalendar aufzunehmen und die Direktive override anzufügen.
Wenn Sie nun den Kalender in ein Formular integrieren, werden Sie bemerken, dass die Komponente Mausklicks und Tastenanschläge ignoriert. Außerdem schlägt die Aktualisierung der Auswahlposition fehl, wenn das Datum geändert wird.