初期値の変更
グリッドのカスタマイズ:インデックス への移動
カレンダーは基本的に,行と列の数が固定されているグリッドです(ただし,常にすべての行に日付が表示されるとは限りません)。カレンダーは常に 1 週間を 7 日で表示するからです。そのため,グリッドのプロパティ ColCount と RowCount は,パブリッシュには設定してありません。ただし,1 週間を 7 日にするためには,プロパティの初期値をそのように設定しなければなりません。
コンポーネントプロパティの初期値を変更するには,コンストラクタをオーバーライドして値を設定します。コンストラクタは仮想でなければなりません。
コンポーネントのオブジェクト宣言の public 部にコンストラクタの宣言を追加し,ユニットの implementation 部に新しいコンストラクタを記述します。新しいコンストラクタでは,最初の文で継承コンストラクタを呼び出します。StdCtrls ユニットを uses 節に追加します。
type
TSampleCalendar = class(TCustomGrid)
public
constructor Create(AOwner: TComponent); override;
.
.
.
end;
.
.
.
constructor TSampleCalendar.Create(AOwner: TComponent);
begin
inherited Create(AOwner); { 継承コンストラクタを呼び出す }
ColCount := 7; { 常に 1 週は 7 日 }
RowCount := 7; { 常に 6 週間+見出し }
FixedCols := 0; { 見出しを付けない }
FixedRows := 1; { 1 行の見出しに曜日を表示 }
ScrollBars := ssNone; { スクロールは使用しない }
Options := Options - [goRangeSelect] + [goDrawFocusSelected]; {範囲選択は使用しない}
end;
//ヘッダーファイル
class PACKAGE TSampleCalendar : public TCustomGrid
{
protected:
virtual void __fastcall DrawCell(int ACol, int ARow, const Windows::TRect &Rect,
TGridDrawState AState);
.
.
.
public:
__fastcall TSampleCalendar(TComponent *Owner); // 追加されたコンストラクタ
.
.
.
};
//実装ファイル
__fastcall TSampleCalendar::TSampleCalendar(TComponent *Owner) : TCustomGrid(Owner)
{
ColCount = 7;
RowCount = 7;
FixedCols = 0;
FixedRows = 1;
ScrollBars = ssNone;
Options = (Options >> goRangeSelect) << goDrawFocusSelected;
}
void __fastcall TSampleCalendar::DrawCell(int ACol, int ARow, const Windows::TRect
&ARect, TGridDrawState AState)
{
}
これで,7 行 7 列で最初の行が固定行つまり非スクロールのカレンダーになりました。