Excluding Blank Cells
Go Up to Navigating Days
As the calendar is written, the user can select a blank cell, but the date does not change. It makes sense, then, to disallow selection of the blank cells.
To control whether a given cell is selectable, override the SelectCell method of the grid.
SelectCell is a function that takes a column and row as parameters, and returns a Boolean value indicating whether the specified cell is selectable.
You can override SelectCell to return False if the cell does not contain a valid date:
function TSampleCalendar.SelectCell(ACol, ARow: Longint): Boolean; begin if DayNum(ACol, ARow) = -1 then Result := False { -1 indicates invalid date } else Result := inherited SelectCell(ACol, ARow); { otherwise, use inherited value } end;
bool __fastcall TSampleCalendar::SelectCell(int ACol, int ARow) { if (DayNum(ACol,ARow) == -1) return false; // -1 indicates invalid date else return TCustomGrid::SelectCell(ACol, ARow); // otherwise, use inherited value }
Now if the user clicks a blank cell or tries to move to one with an arrow key, the calendar leaves the current cell selected.