使用 IntraWeb (22) - 基本控件之 TIWCalendar
TIWCalendar: 日历控件, 继承于 TIWCustomGrid, 所以它和 TIWGrid 共同属性特多.
它的 Cell 是 TIWCalendarCell 对象, 直接从 TIWGridCell 继承.
TIWCalendar 所在单元及继承链:
IWCompCalendar.TIWCalendar < TIWCustomGrid < TIWCustomControl < TIWBaseHTMLControl < TIWBaseControl < TIWVCLBaseControl < TControl < TComponent < TPersistent < TObject
主要成员:
property Cell[const ARow: Integer, const AColumn: Integer]: TIWCalendarCell // property CurrentDayImage: TIWFileReference //显示在当前日期的图片 property CaptionToday: string //当前日期的附加标题 property PreviousMonthImage: TIWFileReference //"后退"图片 property NextMonthImage: TIWFileReference //"前进"图片 property CaptionPrevious: string //"后退"标题 property CaptionNext: string //"前进"标题 property CalendarHeaderColor: TIWColor //标题背景色 property CalendarColor: TIWColor //背景色 property AlternateCalendarColor: TIWColor //用于交替的背景色 property CheckerBoard: Boolean //是否使用交替背景 property CalendarHeaderFont: TIWFont //标题字体 property CalendarFont: TIWFont //字体 property StartDate: TDateTime //默认当前日期 property SelectedDate: TDateTime //就是刚刚点过的日期 property DisplayYear: Boolean //是否显示"年" property LocaleID: Integer //本地语言 ID property CellRenderOptions: TIWCellRenderOptions // property BorderColors: TIWGridBorderColors // property BGColor: TIWColor // property BorderSize: Integer // property BorderStyle: TIWGridBorderStyle // property Caption: TCaption // property CellPadding: Integer // property CellSpacing: Integer // property Font: TIWFont // property Lines: TIWGridLines // property Summary: string // property UseFrame: Boolean // property UseSize: Boolean // property HiddenColumns: TStringList // property OnDateChange: TIWCalendarDateChange // property OnGetDateInformation: TIWCalendarGetDateInformation // property OnGetDayNames: TIWCalendarGetDayNames // property OnGetMonthName: TIWCalendarGetMonthName // property OnRenderCell: TIWOnRenderCell // property OnRender: TNotifyEvent // property OnGetCellRenderOptions: TIWGetCellRenderOptionsEvent // procedure SetHeaderCells; // function IsRowVisible(ARow: Integer): Boolean // procedure SetColumnVisibility(AColumn: Integer; AVisible: Boolean) //
TIWCalendarCell:
{IWCompCalendar.TIWCalendarCell < TIWGridCell < TCollectionItem < TPersistent < TObject} property CellDate: TDateTime // property DateInformation: TStringList //与日期关联的备注信息 property ImageFile: TIWImageFile //看来每个 Cell 都可以使用图像; 这应该是为当前日期准备的 {还包括和 TIWGridCell 相同的一些}
改控件拖到窗体上就能用, 如果要写一行代码的话应该是: IWCalendar1.StartDate := Date;
下面是个比较全面的测试:
var gInfoList: TStrings; //用于记录自定义的备忘信息 procedure TIWForm1.IWAppFormCreate(Sender: TObject); begin gInfoList := TStringList.Create; //如果是长期保存, 它应该是从服务器上读取某个文件 IWCalendar1.Caption := ''; //标题无用 IWCalendar1.CaptionPrevious := '<<'; //其实给它图像(PreviousMonthImage)更好看 IWCalendar1.CaptionNext := '>>'; IWCalendar1.CalendarHeaderColor := $88aaaa; IWCalendar1.CalendarColor := $eeffff; IWCalendar1.AlternateCalendarColor := $ccdddd; //交替颜色 IWCalendar1.CheckerBoard := True; //确认使用指定的 "交替颜色" 与背景色交替使用 IWCalendar1.CalendarFont.Size := 12; LinkColor := $0033dd; //Cell 中的文本其实成了链接了, 如果要改变 Cell 中文本的显示, 最好使用 Css IWCalendar1.CaptionToday := '★'; //突出标示当前日期, 或使用图像(CurrentDayImage) IWCalendar1.StartDate := Date; //显然使用 Date 比 Now 更合理; 这句还能起到刷新的作用 end; {通过 OnGetDayNames 事件调整周标题显示} procedure TIWForm1.IWCalendar1GetDayNames(var Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday: string); begin Sunday := '周末'; end; {通过 OnGetMonthName 事件调整月份显示} procedure TIWForm1.IWCalendar1GetMonthName(MonthNumber: Integer; var MonthName: string); begin MonthName := MonthNumber.ToString + '月'; end; {通过 OnRenderCell 事件调整更多显示细节} procedure TIWForm1.IWCalendar1RenderCell(ACell: TIWGridCell; const ARow, AColumn: Integer); begin {让当前选定的日期在字号上有所区别} if TIWCalendarCell(ACell).CellDate = TIWCalendar(ACell.Grid).SelectedDate then ACell.Font.Size := 14 else ACell.Font.Size := ACell.Grid.Font.Size; {ARow = 0 是最上面一行, 也就是带月导航的那行} if ARow = 0 then ACell.Font.Size := 13; {Arow = 1 是周标题} if ARow = 1 then ACell.Height := '20'; //Height 是 字符串在 Html 中不难理解 end; {添加和日期关联的备注信息} procedure TIWForm1.IWButton1AsyncClick(Sender: TObject; EventParams: TStringList); begin gInfoList.Values[FormatDateTime('ddmmyyyy', IWCalendar1.SelectedDate)] := IWMemo1.Text; end; {选择不同日期时再取回备注信息} procedure TIWForm1.IWCalendar1DateChange(ADate: TDateTime); begin IWMemo1.Text := gInfoList.Values[FormatDateTime('ddmmyyyy', ADate)]; end; {通过切换月份, 可以看到刚添加的与日期关联的备注信息} procedure TIWForm1.IWCalendar1GetDateInformation(ADate: TDateTime; VInformation: TStrings); begin VInformation.Text := gInfoList.Values[FormatDateTime('ddmmyyyy', ADate)]; end; procedure TIWForm1.IWAppFormDestroy(Sender: TObject); begin gInfoList.Free; end;
效果图: