You've already forked lazarus-ccr
tvplanit: Replace TVpMonthView's updown control by 4 speedbuttons for navigation to prev/next month/year, issue #39035.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@8387 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -42,7 +42,7 @@ uses
|
|||||||
{$ELSE}
|
{$ELSE}
|
||||||
Windows, Messages,
|
Windows, Messages,
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
Classes, Graphics, Controls, ComCtrls, ExtCtrls, Forms, Menus,
|
Classes, Graphics, Controls, ComCtrls, ExtCtrls, Buttons, Forms, Menus,
|
||||||
VpConst, VpBase, VpBaseDS, VpMisc, VpData, VpSR, VpCanvasUtils;
|
VpConst, VpBase, VpBaseDS, VpMisc, VpData, VpSR, VpCanvasUtils;
|
||||||
|
|
||||||
type
|
type
|
||||||
@ -179,6 +179,10 @@ type
|
|||||||
FDefaultPopup: TPopupMenu;
|
FDefaultPopup: TPopupMenu;
|
||||||
FRightClickChangeDate: Boolean;
|
FRightClickChangeDate: Boolean;
|
||||||
FMouseDate: TDateTime;
|
FMouseDate: TDateTime;
|
||||||
|
FPrevYearBtn: TSpeedButton;
|
||||||
|
FPrevMonthBtn: TSpeedButton;
|
||||||
|
FNextMonthBtn: TSpeedButton;
|
||||||
|
FNextYearBtn: TSpeedButton;
|
||||||
|
|
||||||
{ event variables }
|
{ event variables }
|
||||||
FOnAddEvent: TVpOnAddNewEvent;
|
FOnAddEvent: TVpOnAddNewEvent;
|
||||||
@ -191,7 +195,6 @@ type
|
|||||||
{ internal variables }
|
{ internal variables }
|
||||||
mvLoaded: Boolean;
|
mvLoaded: Boolean;
|
||||||
mvDayHeadHeight: Integer;
|
mvDayHeadHeight: Integer;
|
||||||
mvSpinButtons: TUpDown;
|
|
||||||
mvEventArray: TVpEventArray;
|
mvEventArray: TVpEventArray;
|
||||||
mvMonthDayArray: TVpMonthdayArray;
|
mvMonthDayArray: TVpMonthdayArray;
|
||||||
mvActiveEvent: TVpEvent;
|
mvActiveEvent: TVpEvent;
|
||||||
@ -224,11 +227,11 @@ type
|
|||||||
function GetDateAtCoord(APoint: TPoint): TDateTime;
|
function GetDateAtCoord(APoint: TPoint): TDateTime;
|
||||||
procedure mvPopulate;
|
procedure mvPopulate;
|
||||||
procedure mvSpawnEventEditDialog(IsNewEvent: Boolean);
|
procedure mvSpawnEventEditDialog(IsNewEvent: Boolean);
|
||||||
procedure mvSpinButtonClick(Sender: TObject; Button: TUDBtnType);
|
|
||||||
procedure mvSetDateByCoord(APoint: TPoint);
|
procedure mvSetDateByCoord(APoint: TPoint);
|
||||||
procedure mvHookUp;
|
procedure mvHookUp;
|
||||||
procedure mvPenChanged(Sender: TObject);
|
procedure mvPenChanged(Sender: TObject);
|
||||||
function SelectEventAtCoord(Point: TPoint): Boolean;
|
function SelectEventAtCoord(Point: TPoint): Boolean;
|
||||||
|
procedure SpinButtonClick(Sender: TObject);
|
||||||
|
|
||||||
{ inherited methods }
|
{ inherited methods }
|
||||||
procedure CreateParams(var Params: TCreateParams); override;
|
procedure CreateParams(var Params: TCreateParams); override;
|
||||||
@ -457,15 +460,39 @@ begin
|
|||||||
FHolidayAttr := TVpMvHolidayAttr.Create(self);
|
FHolidayAttr := TVpMvHolidayAttr.Create(self);
|
||||||
FWeekendAttr := TVpMvWeekendAttr.Create(self);
|
FWeekendAttr := TVpMvWeekendAttr.Create(self);
|
||||||
FTodayAttr := TVpMvTodayAttr.Create(Self);
|
FTodayAttr := TVpMvTodayAttr.Create(Self);
|
||||||
mvSpinButtons := TUpDown.Create(self);
|
|
||||||
|
FPrevYearBtn := TSpeedButton.Create(self);
|
||||||
|
FPrevYearBtn.Hint := RSPrevYear;
|
||||||
|
FPrevYearBtn.OnClick := SpinButtonClick;
|
||||||
|
FPrevMonthBtn := TSpeedButton.Create(self);
|
||||||
|
FPrevMonthBtn.Hint := RSPrevMonth;
|
||||||
|
FPrevMonthBtn.OnClick := SpinButtonClick;
|
||||||
|
FNextMonthBtn := TSpeedButton.Create(self);
|
||||||
|
FNextMonthBtn.Hint := RSNextMonth;
|
||||||
|
FNextMonthBtn.OnClick := SpinButtonClick;
|
||||||
|
FNextYearBtn := TSpeedButton.Create(self);
|
||||||
|
FNextYearBtn.Hint := RSNextYear;
|
||||||
|
FNextYearBtn.OnClick := SpinButtonClick;
|
||||||
|
|
||||||
|
// Speedbutton glyphs
|
||||||
|
{$IFDEF NEW_ICONS}
|
||||||
|
LoadGlyphFromRCDATA(FPrevYearBtn.Glyph, 'VpLArrows', 16, 24, 32);
|
||||||
|
LoadGlyphFromRCDATA(FPrevMonthBtn.Glyph, 'VpLArrow', 16, 24, 32);
|
||||||
|
LoadGlyphFromRCDATA(FNextMonthBtn.Glyph, 'VpRArrow', 16, 24, 32);
|
||||||
|
LoadGlyphFromRCDATA(FNextYearBtn.Glyph, 'VpRArrows', 16, 24, 32);
|
||||||
|
{$ELSE}
|
||||||
|
FPrevYearBtn.Glyph.LoadFromResourceName(HINSTANCE, 'VPLEFTARROWS');
|
||||||
|
FPrevMonthBtn.Glyph.LoadFromResourceName(HINSTANCE, 'VPLEFTARROW');
|
||||||
|
FNextMonthBtn.Glyph.LoadFromResourceName(HINSTANCE, 'VPRIGHTARROW');
|
||||||
|
FNextYearUpBtn.Glyph.LoadFromResourceName(HINSTANCE, 'VPRIGHTARROWS');
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
{
|
{
|
||||||
FHeadAttr := TVpMvHeadAttr.Create(self);
|
FHeadAttr := TVpMvHeadAttr.Create(self);
|
||||||
FDayHeadAttr := TVpDayHeadAttr.Create(self);
|
FDayHeadAttr := TVpDayHeadAttr.Create(self);
|
||||||
FTodayAttr := TVpMvTodayAttr.Create(self);
|
FTodayAttr := TVpMvTodayAttr.Create(self);
|
||||||
FHolidayAttr := TvpMvHolidayAttr.Create(self);
|
FHolidayAttr := TvpMvHolidayAttr.Create(self);
|
||||||
mvSpinButtons := TUpDown.Create(self);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
{ Set styles and initialize internal variables }
|
{ Set styles and initialize internal variables }
|
||||||
{$IFDEF VERSION4}
|
{$IFDEF VERSION4}
|
||||||
@ -476,10 +503,6 @@ begin
|
|||||||
FShowEventTime := false;
|
FShowEventTime := false;
|
||||||
FDayNameStyle :=dsShort;
|
FDayNameStyle :=dsShort;
|
||||||
FKBNavigate := true;
|
FKBNavigate := true;
|
||||||
mvSpinButtons.OnClick := mvSpinButtonClick;
|
|
||||||
mvSpinButtons.Orientation := udHorizontal;
|
|
||||||
mvSpinButtons.Min := -32768;
|
|
||||||
mvSpinButtons.Max := 32767;
|
|
||||||
|
|
||||||
mvDragging := false;
|
mvDragging := false;
|
||||||
mvMouseDownPoint := Point(0, 0);
|
mvMouseDownPoint := Point(0, 0);
|
||||||
@ -544,7 +567,6 @@ begin
|
|||||||
FWeekendAttr.Free;
|
FWeekendAttr.Free;
|
||||||
FDayNumberFont.Free;
|
FDayNumberFont.Free;
|
||||||
FEventFont.Free;
|
FEventFont.Free;
|
||||||
// mvSpinButtons.Free;
|
|
||||||
// FDefaultPopup.Free;
|
// FDefaultPopup.Free;
|
||||||
inherited;
|
inherited;
|
||||||
end;
|
end;
|
||||||
@ -746,28 +768,16 @@ begin
|
|||||||
Invalidate;
|
Invalidate;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TVpMonthView.mvSpinButtonClick(Sender: TObject; Button: TUDBtnType);
|
procedure TVpMonthView.SpinButtonClick(Sender: TObject);
|
||||||
var
|
|
||||||
M, D, Y: Word;
|
|
||||||
begin
|
begin
|
||||||
DecodeDate(Date, Y, M, D);
|
if Sender = FPrevYearBtn then
|
||||||
if Button = btNext then begin
|
Date := IncYear(Date, -1)
|
||||||
if M = 12 then begin
|
else if Sender = FNextYearBtn then
|
||||||
M := 1;
|
Date := IncYear(Date, +1)
|
||||||
Y := Y + 1;
|
else if Sender = FPrevMonthBtn then
|
||||||
end else
|
Date := IncMonth(Date, -1)
|
||||||
M := M + 1;
|
else if Sender = FNextMonthBtn then
|
||||||
end else begin
|
Date := IncMonth(Date, +1);
|
||||||
if M = 1 then begin
|
|
||||||
M := 12;
|
|
||||||
Y := Y - 1;
|
|
||||||
end else
|
|
||||||
M := M - 1;
|
|
||||||
end;
|
|
||||||
if (D > DaysInAMonth(Y, M)) then
|
|
||||||
D := DaysInAMonth(Y, M);
|
|
||||||
|
|
||||||
Date := EncodeDate(Y, M, D);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TVpMonthView.SetApplyCategoryInfos(AValue: Boolean);
|
procedure TVpMonthView.SetApplyCategoryInfos(AValue: Boolean);
|
||||||
@ -935,7 +945,10 @@ end;
|
|||||||
procedure TVpMonthView.CreateWnd;
|
procedure TVpMonthView.CreateWnd;
|
||||||
begin
|
begin
|
||||||
inherited;
|
inherited;
|
||||||
mvSpinButtons.Parent := self;
|
FPrevYearBtn.Parent := self;
|
||||||
|
FPrevMonthBtn.Parent := self;
|
||||||
|
FNextMonthBtn.Parent := self;
|
||||||
|
FNextYearBtn.Parent := self;
|
||||||
end;
|
end;
|
||||||
{=====}
|
{=====}
|
||||||
|
|
||||||
@ -1286,28 +1299,30 @@ end;
|
|||||||
|
|
||||||
procedure TVpMonthView.PopupNextMonth(Sender: TObject);
|
procedure TVpMonthView.PopupNextMonth(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
mvSpinButtonClick(self, btNext);
|
SpinButtonClick(FNextMonthBtn);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TVpMonthView.PopupPrevMonth(Sender: TObject);
|
procedure TVpMonthView.PopupPrevMonth(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
mvSpinButtonClick(self, btPrev);
|
SpinButtonClick(FPrevMonthBtn);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TVpMonthView.PopupNextYear(Sender: TObject);
|
procedure TVpMonthView.PopupNextYear(Sender: TObject);
|
||||||
var
|
//var
|
||||||
M, D, Y: Word;
|
// M, D, Y: Word;
|
||||||
begin
|
begin
|
||||||
DecodeDate(Date, Y, M, D);
|
SpinButtonClick(FNextYearBtn);
|
||||||
Date := EncodeDate(Y + 1, M, 1);
|
// DecodeDate(Date, Y, M, D);
|
||||||
|
// Date := EncodeDate(Y + 1, M, 1);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TVpMonthView.PopupPrevYear(Sender: TObject);
|
procedure TVpMonthView.PopupPrevYear(Sender: TObject);
|
||||||
var
|
//var
|
||||||
M, D, Y: Word;
|
// M, D, Y: Word;
|
||||||
begin
|
begin
|
||||||
DecodeDate(Date, Y, M, D);
|
SpinButtonClick(FPrevYearBtn);
|
||||||
Date := EncodeDate(Y - 1, M, 1);
|
// DecodeDate(Date, Y, M, D);
|
||||||
|
// Date := EncodeDate(Y - 1, M, 1);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TVpMonthView.PopupCustomDate(Sender: TObject);
|
procedure TVpMonthView.PopupCustomDate(Sender: TObject);
|
||||||
@ -1394,24 +1409,24 @@ begin
|
|||||||
end else
|
end else
|
||||||
Date := Date + 7;
|
Date := Date + 7;
|
||||||
VK_NEXT:
|
VK_NEXT:
|
||||||
mvSpinButtonClick(self, btNext);
|
SpinButtonClick(FNextMonthBtn);
|
||||||
VK_PRIOR:
|
VK_PRIOR:
|
||||||
mvSpinButtonClick(self, btPrev);
|
SpinButtonClick(FPrevMonthBtn);
|
||||||
VK_LEFT:
|
VK_LEFT:
|
||||||
if ssCtrl in Shift then
|
if ssCtrl in Shift then
|
||||||
mvSpinButtonClick(self, btPrev)
|
SpinButtonClick(FPrevMonthBtn)
|
||||||
else
|
else
|
||||||
Date := Date - 1;
|
Date := Date - 1;
|
||||||
VK_RIGHT:
|
VK_RIGHT:
|
||||||
if ssCtrl in Shift then
|
if ssCtrl in Shift then
|
||||||
mvSpinButtonClick(self, btNext)
|
SpinButtonClick(FNextMonthBtn)
|
||||||
else
|
else
|
||||||
Date := Date + 1;
|
Date := Date + 1;
|
||||||
VK_HOME:
|
VK_HOME:
|
||||||
begin
|
begin
|
||||||
DecodeDate(Date, Y, M, D);
|
DecodeDate(Date, Y, M, D);
|
||||||
if D = 1 then
|
if D = 1 then
|
||||||
mvSpinButtonClick(self, btPrev)
|
SpinButtonClick(FPrevMonthBtn)
|
||||||
else
|
else
|
||||||
Date := EncodeDate(Y, M, 1);
|
Date := EncodeDate(Y, M, 1);
|
||||||
end;
|
end;
|
||||||
|
@ -633,6 +633,7 @@ var
|
|||||||
HeadStrLen : Integer;
|
HeadStrLen : Integer;
|
||||||
dayHeadHeight: Integer;
|
dayHeadHeight: Integer;
|
||||||
R: TRect;
|
R: TRect;
|
||||||
|
txtstart: Integer;
|
||||||
begin
|
begin
|
||||||
RenderCanvas.Brush.Color := HeadAttrColor;
|
RenderCanvas.Brush.Color := HeadAttrColor;
|
||||||
dayHeadHeight := TVpMonthViewOpener(FMonthView).mvDayHeadHeight;
|
dayHeadHeight := TVpMonthViewOpener(FMonthView).mvDayHeadHeight;
|
||||||
@ -659,10 +660,27 @@ begin
|
|||||||
|
|
||||||
{ Position the spinner }
|
{ Position the spinner }
|
||||||
with TVpMonthViewOpener(FMonthView) do begin
|
with TVpMonthViewOpener(FMonthView) do begin
|
||||||
mvSpinButtons.Height := dayHeadHeight - 3;
|
FPrevYearBtn.Height := dayHeadHeight - 3;
|
||||||
mvSpinButtons.Width := mvSpinButtons.Height * 2;
|
FPrevYearBtn.Width := FPrevYearBtn.Height;
|
||||||
mvSpinButtons.Left := TextMargin;
|
FPrevYearBtn.Left := TextMargin;
|
||||||
mvSpinButtons.Top := HeadRect.Top + (dayHeadHeight - mvSpinButtons.Height) div 2 + 1;
|
FPrevYearBtn.Top := HeadRect.Top + (dayHeadHeight - FPrevYearBtn.Height) div 2 + 1;
|
||||||
|
|
||||||
|
FPrevMonthBtn.Height := FPrevYearBtn.Height;
|
||||||
|
FPrevMonthBtn.Width := FPrevYearBtn.Height;
|
||||||
|
FPrevMonthBtn.Left := FPrevYearBtn.Left + FPrevYearBtn.Width;
|
||||||
|
FPrevMonthBtn.Top := FPrevYearBtn.Top;
|
||||||
|
|
||||||
|
FNextMonthBtn.Height := FPrevYearBtn.Height;
|
||||||
|
FNextMonthBtn.Width := FPrevYearBtn.Height;
|
||||||
|
FNextMonthBtn.Left := FPrevMonthBtn.Left + FPrevMonthBtn.Width;
|
||||||
|
FNextMonthBtn.Top := FPrevYearBtn.Top;
|
||||||
|
|
||||||
|
FNextYearBtn.Height := FPrevYearBtn.Height;
|
||||||
|
FNextYearBtn.Width := FPrevYearBtn.Height;
|
||||||
|
FNextYearBtn.Left := FNextMonthBtn.Left + FNextMonthBtn.Width;
|
||||||
|
FNextYearBtn.Top := FPrevYearBtn.Top;
|
||||||
|
|
||||||
|
txtStart := FNextYearBtn.Left + FNextYearBtn.Width + TextMargin;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ Acquire startdate and end date }
|
{ Acquire startdate and end date }
|
||||||
@ -706,8 +724,8 @@ begin
|
|||||||
TPSTextOut(
|
TPSTextOut(
|
||||||
RenderCanvas,
|
RenderCanvas,
|
||||||
Angle,
|
Angle,
|
||||||
RenderIn,
|
RenderIn, // Viewport
|
||||||
RealLeft + TVpMonthViewOpener(FMonthView).mvSpinButtons.Width + TextMargin * 2,
|
txtstart, // Horizontal text position, after the spin buttons
|
||||||
HeadTextRect.Top, // this vertical position is already centered
|
HeadTextRect.Top, // this vertical position is already centered
|
||||||
HeadStr
|
HeadStr
|
||||||
);
|
);
|
||||||
|
Reference in New Issue
Block a user