Die Eigenschaft ReadOnly hinzufügen

Aus RAD Studio
Wechseln zu: Navigation, Suche

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.

  1. 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};
    };
    
  2. Ü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.

Siehe auch