名前 題名 ▼ Mr.XRAYさん > 毎度のことで,またまたスミマセン. > ボケやってしまいました. > > http://mrxray.on.coocan.jp/Delphi/zip/plDateEditPicker.zip > (690 KB テストプログラムの EXE 同梱.ソースコード同梱) > (2014年11月10日削除) > > これ,祝祭日の描画等を実装するためには,DrawCell メソッド等が必要です. > 修正しました.TCalendar の部分を別クラスにしました. > > interface 部です. > > TplDateEditCalendar = class(TCalendar) > private > FDateEditPicker : TpldateEditPicker; > protected > procedure DrawCell(ACol: Integer; ARow: Integer; ARect: TRect; > AState: TGridDrawState); override; > procedure KeyDown(var Key: Word; Shift: TShiftState); override; > procedure Click; override; > procedure Change; override; > public > constructor Create(AOwner: TComponent); override; > end; > > 実装部は以下です. > このぐらいあればなんとか,いろいろ実装できると思います. > でも,まだボケがあるかも (^^; > > { TplDateEditCalendar } > > //----------------------------------------------------------------------------- > // フォームに表示するTCalenderクラスのcontructor > //----------------------------------------------------------------------------- > constructor TplDateEditCalendar.Create(AOwner: TComponent); > begin > inherited; > FDateEditPicker := TplDateEditPicker(AOwner); > end; > > //----------------------------------------------------------------------------- > // フォームに表示するTCalenderクラスのChangeメソッド > //----------------------------------------------------------------------------- > procedure TplDateEditCalendar.Change; > var > ADate : TDate; > begin > FDateEditPicker.FlagCanClose := True; > ADate := CalendarDate; > FDateEditPicker.Date := ADate; > FDateEditPicker.lblDate.Caption := FormatDateTime('YYYY年MM月', ADate); > > inherited; > end; > > //----------------------------------------------------------------------------- > // フォームに表示するTCalenderクラスのClickメソッド > //----------------------------------------------------------------------------- > procedure TplDateEditCalendar.Click; > begin > inherited; > end; > > //----------------------------------------------------------------------------- > // フォームに表示するTCalenderクラスのKeyDownメソッド > // 矢印キーではKeyPressは発生しない > // KeyDownの後にClickが発生する > // > // VK_ESCAPEの時は,元に値に戻すような仕様の方がいいのか? > //----------------------------------------------------------------------------- > procedure TplDateEditCalendar.KeyDown(var Key: Word; Shift: TShiftState); > begin > if Key = VK_RETURN then begin > FDateEditPicker.CalendarForm.Close; > end else > if Key = VK_ESCAPE then begin > FDateEditPicker.CalendarForm.Close; > end else begin > if Key in [VK_LEFT, VK_UP, VK_RIGHT, VK_DOWN] then begin > FDateEditPicker.FlagCanClose := False; > end else begin > FDateEditPicker.FlagCanClose := True; > end; > end; > inherited; > end; > > //----------------------------------------------------------------------------- > // フォームに表示するTCalenderクラスのDrawCellメソッド > // ここで日付の文字をTCalendarに描画している > // このコードがないと,カレンダーのグリッドには何も表示しない > //----------------------------------------------------------------------------- > procedure TplDateEditCalendar.DrawCell(ACol, ARow: Integer; ARect: TRect; > AState: TGridDrawState); > var > TheText: string; > begin > if ACol = 0 then Canvas.Font.Color := clRed; > if ACol = 6 then Canvas.Font.Color := clBlue; > > TheText := CellText[ACol, ARow]; > with ARect, Canvas do > TextRect(ARect, Left + (Right - Left - TextWidth(TheText)) div 2, > Top + (Bottom - Top - TextHeight(TheText)) div 2, TheText); > end; > > GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link