From 6fec96e71d13d225813b4000d8ea785842088a2e Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Fri, 11 Nov 2016 16:45:49 +0000 Subject: [PATCH] CalLite: Add event OnMonthChange. git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@5340 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- components/callite/demo2/umaintestcallite.lfm | 8 +++++ components/callite/demo2/umaintestcallite.pp | 11 ++++++- components/callite/source/calendarlite.pas | 29 +++++++++++++++---- 3 files changed, 42 insertions(+), 6 deletions(-) diff --git a/components/callite/demo2/umaintestcallite.lfm b/components/callite/demo2/umaintestcallite.lfm index fe3a01f1c..93cdfbbeb 100644 --- a/components/callite/demo2/umaintestcallite.lfm +++ b/components/callite/demo2/umaintestcallite.lfm @@ -495,6 +495,14 @@ object Form1: TForm1 TabOrder = 13 end end + object Label1: TLabel + Left = 15 + Height = 15 + Top = 818 + Width = 34 + Caption = 'Label1' + ParentColor = False + end object FontDialog: TFontDialog MinFontSize = 0 MaxFontSize = 0 diff --git a/components/callite/demo2/umaintestcallite.pp b/components/callite/demo2/umaintestcallite.pp index 034633264..eaf66e68a 100644 --- a/components/callite/demo2/umaintestcallite.pp +++ b/components/callite/demo2/umaintestcallite.pp @@ -37,6 +37,7 @@ type FontDialog: TFontDialog; GroupBox1: TGroupBox; ImageList1: TImageList; + Label1: TLabel; Label10: TLabel; Label11: TLabel; Label12: TLabel; @@ -76,7 +77,8 @@ type private copyCal, demoCal: TCalendarLite; FNoHolidays: boolean; - procedure RespondToDateChange(Sender: tObject); + procedure RespondToDateChange(Sender: TObject); + procedure RespondToMonthChange(Sender: TObject); procedure GetDayText(Sender: TObject; AYear, AMonth, ADay: Word; var AText: String); procedure GetHintText(Sender: TObject; AYear, AMonth, ADay: Word; var AText: String); procedure GetHolidays(Sender: TObject; AMonth, AYear: Integer; // wp @@ -96,6 +98,8 @@ implementation {$R *.lfm} +uses + DateUtils; function Easter(year:integer) : TDateTime; // wp var @@ -139,6 +143,7 @@ begin demoCal.Height := seHeight.Value; demoCal.OnGetHolidays := @GetHolidays; demoCal.OnDateChange:= @RespondToDateChange; + demoCal.OnMonthChange := @RespondToMonthChange; demoCal.OnHint := @GetHintText; demoCal.ShowHint := true; demoCal.Hint := 'Calendar'; @@ -306,7 +311,11 @@ begin SelDateListbox.Clear; for i:=0 to High(s) do SelDateListbox.Items.Add(DateToStr(s[i])); +end; +procedure TForm1.RespondToMonthChange(Sender: TObject); +begin + Label1.Caption := 'Month changed to ' + demoCal.GetMonthName(MonthOf(democal.Date)); end; procedure TForm1.GetDayText(Sender: TObject; AYear, AMonth, ADay: Word; diff --git a/components/callite/source/calendarlite.pas b/components/callite/source/calendarlite.pas index e7a0443d4..9a44db748 100644 --- a/components/callite/source/calendarlite.pas +++ b/components/callite/source/calendarlite.pas @@ -249,6 +249,7 @@ type FDisplayTexts: TStringList; FMonthNames: TStringList; FOnDateChange: TNotifyEvent; + FOnMonthChange: TNotifyEvent; FOnGetDayText: TCalGetDayTextEvent; FOnDrawCell: TCalDrawCellEvent; FOnGetHolidays: TGetHolidaysEvent; @@ -264,9 +265,9 @@ type FMultiSelect: Boolean; FSelDates: TCalDateList; FLanguage: TLanguage; //Ariel Rodriguez 12/09/2013 - procedure DateChange; function GetDayNames: String; - function GetDisplaytexts: String; + function GetDisplayText(aTextIndex: TDisplayText): String; + function GetDisplayTexts: String; function GetMonthNames: String; procedure HolidayMenuItemClicked(Sender: TObject); procedure MonthMenuItemClicked(Sender: TObject); @@ -287,11 +288,10 @@ type protected procedure ChangeDateTo(ADate: TDate; ASelMode: TCalSelMode); + procedure DateChange; virtual; class function GetControlClassDefaultSize: TSize; override; - function GetDayName(ADayOfWeek: TDayOfWeek): String; - function GetDisplayText(aTextIndex: TDisplayText): String; - function GetMonthName(AMonth: Integer): String; procedure KeyDown(var Key: Word; Shift: TShiftState); override; + procedure MonthChange; virtual; procedure MouseDown(Button: TMouseButton; Shift:TShiftState; X,Y:Integer); override; procedure MouseEnter; override; procedure MouseLeave; override; @@ -308,6 +308,9 @@ type constructor Create(anOwner: TComponent); override; destructor Destroy; override; + function GetDayName(ADayOfWeek: TDayOfWeek): String; + function GetMonthName(AMonth: Integer): String; + function IsSelected(ADate: TDate): Boolean; function SelectedDates: TCalDateArray; @@ -378,6 +381,7 @@ type property OnGetDayText: TCalGetDayTextEvent read FOnGetDayText write FOnGetDayText; property OnGetHolidays: TGetHolidaysEvent read FOnGetHolidays write FOnGetHolidays; property OnHint: TCalGetDayTextEvent read FOnHint write FOnHint; + property OnMonthChange: TNotifyEvent read FOnMonthChange write FOnMonthChange; property OnPrepareCanvas: TCalPrepareCanvasEvent read FOnPrepareCanvas write FOnPrepareCanvas; end; @@ -1308,7 +1312,9 @@ end; procedure TCalendarLite.ChangeDateTo(ADate: TDate; ASelMode: TCalSelMode); var d, d1, d2: TDate; + oldMonth: Integer; begin + oldMonth := MonthOf(FDate); FDate := ADate; case ASelMode of @@ -1351,6 +1357,8 @@ begin FPrevDate := ADate; DateChange; + if MonthOf(FDate) <> oldMonth then + MonthChange; with FCalDrawer do begin FCanvas.Brush.Color := Colors.BackgroundColor; FCanvas.FillRect(FBoundsRect); @@ -1449,6 +1457,12 @@ begin inherited; end; +procedure TCalendarLite.MonthChange; +begin + if Assigned(FOnMonthChange) then + FOnMonthChange(Self); +end; + procedure TCalendarLite.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin @@ -1657,12 +1671,17 @@ end; procedure TCalendarLite.SetDate(AValue: TDateTime); +var + oldMonth: Integer; begin if FDate = AValue then Exit; + oldMonth := MonthOf(FDate); FDate := AValue; FPrevDate := AValue; FSelDates.Clear; DateChange; + if MonthOf(FDate) <> oldMonth then + MonthChange; Invalidate; end;