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}
|
||||
Windows, Messages,
|
||||
{$ENDIF}
|
||||
Classes, Graphics, Controls, ComCtrls, ExtCtrls, Forms, Menus,
|
||||
Classes, Graphics, Controls, ComCtrls, ExtCtrls, Buttons, Forms, Menus,
|
||||
VpConst, VpBase, VpBaseDS, VpMisc, VpData, VpSR, VpCanvasUtils;
|
||||
|
||||
type
|
||||
@ -179,6 +179,10 @@ type
|
||||
FDefaultPopup: TPopupMenu;
|
||||
FRightClickChangeDate: Boolean;
|
||||
FMouseDate: TDateTime;
|
||||
FPrevYearBtn: TSpeedButton;
|
||||
FPrevMonthBtn: TSpeedButton;
|
||||
FNextMonthBtn: TSpeedButton;
|
||||
FNextYearBtn: TSpeedButton;
|
||||
|
||||
{ event variables }
|
||||
FOnAddEvent: TVpOnAddNewEvent;
|
||||
@ -191,7 +195,6 @@ type
|
||||
{ internal variables }
|
||||
mvLoaded: Boolean;
|
||||
mvDayHeadHeight: Integer;
|
||||
mvSpinButtons: TUpDown;
|
||||
mvEventArray: TVpEventArray;
|
||||
mvMonthDayArray: TVpMonthdayArray;
|
||||
mvActiveEvent: TVpEvent;
|
||||
@ -224,11 +227,11 @@ type
|
||||
function GetDateAtCoord(APoint: TPoint): TDateTime;
|
||||
procedure mvPopulate;
|
||||
procedure mvSpawnEventEditDialog(IsNewEvent: Boolean);
|
||||
procedure mvSpinButtonClick(Sender: TObject; Button: TUDBtnType);
|
||||
procedure mvSetDateByCoord(APoint: TPoint);
|
||||
procedure mvHookUp;
|
||||
procedure mvPenChanged(Sender: TObject);
|
||||
function SelectEventAtCoord(Point: TPoint): Boolean;
|
||||
procedure SpinButtonClick(Sender: TObject);
|
||||
|
||||
{ inherited methods }
|
||||
procedure CreateParams(var Params: TCreateParams); override;
|
||||
@ -457,14 +460,38 @@ begin
|
||||
FHolidayAttr := TVpMvHolidayAttr.Create(self);
|
||||
FWeekendAttr := TVpMvWeekendAttr.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);
|
||||
FDayHeadAttr := TVpDayHeadAttr.Create(self);
|
||||
FTodayAttr := TVpMvTodayAttr.Create(self);
|
||||
FHolidayAttr := TvpMvHolidayAttr.Create(self);
|
||||
mvSpinButtons := TUpDown.Create(self);
|
||||
}
|
||||
|
||||
{ Set styles and initialize internal variables }
|
||||
@ -476,10 +503,6 @@ begin
|
||||
FShowEventTime := false;
|
||||
FDayNameStyle :=dsShort;
|
||||
FKBNavigate := true;
|
||||
mvSpinButtons.OnClick := mvSpinButtonClick;
|
||||
mvSpinButtons.Orientation := udHorizontal;
|
||||
mvSpinButtons.Min := -32768;
|
||||
mvSpinButtons.Max := 32767;
|
||||
|
||||
mvDragging := false;
|
||||
mvMouseDownPoint := Point(0, 0);
|
||||
@ -544,7 +567,6 @@ begin
|
||||
FWeekendAttr.Free;
|
||||
FDayNumberFont.Free;
|
||||
FEventFont.Free;
|
||||
// mvSpinButtons.Free;
|
||||
// FDefaultPopup.Free;
|
||||
inherited;
|
||||
end;
|
||||
@ -746,28 +768,16 @@ begin
|
||||
Invalidate;
|
||||
end;
|
||||
|
||||
procedure TVpMonthView.mvSpinButtonClick(Sender: TObject; Button: TUDBtnType);
|
||||
var
|
||||
M, D, Y: Word;
|
||||
procedure TVpMonthView.SpinButtonClick(Sender: TObject);
|
||||
begin
|
||||
DecodeDate(Date, Y, M, D);
|
||||
if Button = btNext then begin
|
||||
if M = 12 then begin
|
||||
M := 1;
|
||||
Y := Y + 1;
|
||||
end else
|
||||
M := M + 1;
|
||||
end else begin
|
||||
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);
|
||||
if Sender = FPrevYearBtn then
|
||||
Date := IncYear(Date, -1)
|
||||
else if Sender = FNextYearBtn then
|
||||
Date := IncYear(Date, +1)
|
||||
else if Sender = FPrevMonthBtn then
|
||||
Date := IncMonth(Date, -1)
|
||||
else if Sender = FNextMonthBtn then
|
||||
Date := IncMonth(Date, +1);
|
||||
end;
|
||||
|
||||
procedure TVpMonthView.SetApplyCategoryInfos(AValue: Boolean);
|
||||
@ -935,7 +945,10 @@ end;
|
||||
procedure TVpMonthView.CreateWnd;
|
||||
begin
|
||||
inherited;
|
||||
mvSpinButtons.Parent := self;
|
||||
FPrevYearBtn.Parent := self;
|
||||
FPrevMonthBtn.Parent := self;
|
||||
FNextMonthBtn.Parent := self;
|
||||
FNextYearBtn.Parent := self;
|
||||
end;
|
||||
{=====}
|
||||
|
||||
@ -1286,28 +1299,30 @@ end;
|
||||
|
||||
procedure TVpMonthView.PopupNextMonth(Sender: TObject);
|
||||
begin
|
||||
mvSpinButtonClick(self, btNext);
|
||||
SpinButtonClick(FNextMonthBtn);
|
||||
end;
|
||||
|
||||
procedure TVpMonthView.PopupPrevMonth(Sender: TObject);
|
||||
begin
|
||||
mvSpinButtonClick(self, btPrev);
|
||||
SpinButtonClick(FPrevMonthBtn);
|
||||
end;
|
||||
|
||||
procedure TVpMonthView.PopupNextYear(Sender: TObject);
|
||||
var
|
||||
M, D, Y: Word;
|
||||
//var
|
||||
// M, D, Y: Word;
|
||||
begin
|
||||
DecodeDate(Date, Y, M, D);
|
||||
Date := EncodeDate(Y + 1, M, 1);
|
||||
SpinButtonClick(FNextYearBtn);
|
||||
// DecodeDate(Date, Y, M, D);
|
||||
// Date := EncodeDate(Y + 1, M, 1);
|
||||
end;
|
||||
|
||||
procedure TVpMonthView.PopupPrevYear(Sender: TObject);
|
||||
var
|
||||
M, D, Y: Word;
|
||||
//var
|
||||
// M, D, Y: Word;
|
||||
begin
|
||||
DecodeDate(Date, Y, M, D);
|
||||
Date := EncodeDate(Y - 1, M, 1);
|
||||
SpinButtonClick(FPrevYearBtn);
|
||||
// DecodeDate(Date, Y, M, D);
|
||||
// Date := EncodeDate(Y - 1, M, 1);
|
||||
end;
|
||||
|
||||
procedure TVpMonthView.PopupCustomDate(Sender: TObject);
|
||||
@ -1394,24 +1409,24 @@ begin
|
||||
end else
|
||||
Date := Date + 7;
|
||||
VK_NEXT:
|
||||
mvSpinButtonClick(self, btNext);
|
||||
SpinButtonClick(FNextMonthBtn);
|
||||
VK_PRIOR:
|
||||
mvSpinButtonClick(self, btPrev);
|
||||
SpinButtonClick(FPrevMonthBtn);
|
||||
VK_LEFT:
|
||||
if ssCtrl in Shift then
|
||||
mvSpinButtonClick(self, btPrev)
|
||||
SpinButtonClick(FPrevMonthBtn)
|
||||
else
|
||||
Date := Date - 1;
|
||||
VK_RIGHT:
|
||||
if ssCtrl in Shift then
|
||||
mvSpinButtonClick(self, btNext)
|
||||
SpinButtonClick(FNextMonthBtn)
|
||||
else
|
||||
Date := Date + 1;
|
||||
VK_HOME:
|
||||
begin
|
||||
DecodeDate(Date, Y, M, D);
|
||||
if D = 1 then
|
||||
mvSpinButtonClick(self, btPrev)
|
||||
SpinButtonClick(FPrevMonthBtn)
|
||||
else
|
||||
Date := EncodeDate(Y, M, 1);
|
||||
end;
|
||||
|
@ -633,6 +633,7 @@ var
|
||||
HeadStrLen : Integer;
|
||||
dayHeadHeight: Integer;
|
||||
R: TRect;
|
||||
txtstart: Integer;
|
||||
begin
|
||||
RenderCanvas.Brush.Color := HeadAttrColor;
|
||||
dayHeadHeight := TVpMonthViewOpener(FMonthView).mvDayHeadHeight;
|
||||
@ -659,10 +660,27 @@ begin
|
||||
|
||||
{ Position the spinner }
|
||||
with TVpMonthViewOpener(FMonthView) do begin
|
||||
mvSpinButtons.Height := dayHeadHeight - 3;
|
||||
mvSpinButtons.Width := mvSpinButtons.Height * 2;
|
||||
mvSpinButtons.Left := TextMargin;
|
||||
mvSpinButtons.Top := HeadRect.Top + (dayHeadHeight - mvSpinButtons.Height) div 2 + 1;
|
||||
FPrevYearBtn.Height := dayHeadHeight - 3;
|
||||
FPrevYearBtn.Width := FPrevYearBtn.Height;
|
||||
FPrevYearBtn.Left := TextMargin;
|
||||
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;
|
||||
|
||||
{ Acquire startdate and end date }
|
||||
@ -706,8 +724,8 @@ begin
|
||||
TPSTextOut(
|
||||
RenderCanvas,
|
||||
Angle,
|
||||
RenderIn,
|
||||
RealLeft + TVpMonthViewOpener(FMonthView).mvSpinButtons.Width + TextMargin * 2,
|
||||
RenderIn, // Viewport
|
||||
txtstart, // Horizontal text position, after the spin buttons
|
||||
HeadTextRect.Top, // this vertical position is already centered
|
||||
HeadStr
|
||||
);
|
||||
|
Reference in New Issue
Block a user