2008-02-03 12:05:55 +00:00
|
|
|
{*********************************************************}
|
|
|
|
{* VPMONTHVIEW.PAS 1.03 *}
|
|
|
|
{*********************************************************}
|
|
|
|
|
|
|
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
|
|
|
{* Version: MPL 1.1 *}
|
|
|
|
{* *}
|
|
|
|
{* The contents of this file are subject to the Mozilla Public License *}
|
|
|
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
|
|
|
{* compliance with the License. You may obtain a copy of the License at *}
|
|
|
|
{* http://www.mozilla.org/MPL/ *}
|
|
|
|
{* *}
|
|
|
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
|
|
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
|
|
|
{* for the specific language governing rights and limitations under the *}
|
|
|
|
{* License. *}
|
|
|
|
{* *}
|
|
|
|
{* The Original Code is TurboPower Visual PlanIt *}
|
|
|
|
{* *}
|
|
|
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
|
|
|
{* *}
|
|
|
|
{* Portions created by TurboPower Software Inc. are Copyright (C) 2002 *}
|
|
|
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
|
|
|
{* *}
|
|
|
|
{* Contributor(s): *}
|
|
|
|
{* *}
|
|
|
|
{* ***** END LICENSE BLOCK ***** *}
|
|
|
|
|
2016-06-22 07:59:17 +00:00
|
|
|
{$I vp.inc}
|
2008-02-03 12:05:55 +00:00
|
|
|
|
|
|
|
unit VpMonthView;
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
|
|
|
uses
|
|
|
|
{$IFDEF LCL}
|
2016-06-22 07:59:17 +00:00
|
|
|
LMessages, LCLProc, LCLType, LCLIntf, FileUtil,
|
2008-02-03 12:05:55 +00:00
|
|
|
{$ELSE}
|
2016-06-22 07:59:17 +00:00
|
|
|
Windows, Messages,
|
2008-02-03 12:05:55 +00:00
|
|
|
{$ENDIF}
|
2016-07-12 09:26:14 +00:00
|
|
|
Classes, Graphics, Controls, ComCtrls, ExtCtrls,
|
2008-02-03 12:05:55 +00:00
|
|
|
VpBase, VpBaseDS, VpMisc, VpData, VpSR, VpConst, VpCanvasUtils, Menus;
|
|
|
|
|
|
|
|
type
|
|
|
|
TVpMonthdayRec = packed record
|
|
|
|
Rec : TRect;
|
|
|
|
Date : TDateTime;
|
|
|
|
OffDay : Boolean;
|
|
|
|
end;
|
|
|
|
|
|
|
|
type
|
|
|
|
TVpMonthdayArray = array of TVpMonthdayRec;
|
|
|
|
|
|
|
|
{ Forward Declarations }
|
|
|
|
TVpMonthView = class;
|
|
|
|
|
|
|
|
TVpMVDayNameStyle = (dsLong, dsShort, dsLetter);
|
|
|
|
|
2016-07-30 11:45:12 +00:00
|
|
|
TVpOnEventClick = procedure(Sender: TObject; Event: TVpEvent) of object;
|
2008-02-03 12:05:55 +00:00
|
|
|
|
2016-07-15 20:30:36 +00:00
|
|
|
TVpMvHeadAttr = class(TPersistent)
|
2016-07-15 19:13:00 +00:00
|
|
|
protected{ private }
|
|
|
|
FOwner: TVpMonthView;
|
|
|
|
FColor: TColor;
|
|
|
|
FFont: TVpFont;
|
|
|
|
procedure SetColor(const Value: TColor);
|
|
|
|
procedure SetFont(Value: TVpFont);
|
|
|
|
public
|
|
|
|
constructor Create(AOwner: TVpMonthView);
|
|
|
|
destructor Destroy; override;
|
|
|
|
property Owner: TVpMonthView read FOwner;
|
|
|
|
published
|
|
|
|
property Font: TVpFont read FFont write SetFont;
|
|
|
|
property Color: TColor read FColor write SetColor;
|
|
|
|
end;
|
|
|
|
|
2008-02-03 12:05:55 +00:00
|
|
|
TVpDayHeadAttr = class(TPersistent)
|
|
|
|
protected{private}
|
|
|
|
FMonthView: TVpMonthView;
|
2016-07-15 11:52:21 +00:00
|
|
|
FFont: TVpFont;
|
2008-02-03 12:05:55 +00:00
|
|
|
FColor: TColor;
|
2016-07-15 11:52:21 +00:00
|
|
|
procedure SetColor(Value: TColor);
|
|
|
|
procedure SetFont(Value: TVpFont);
|
2008-02-03 12:05:55 +00:00
|
|
|
public
|
|
|
|
constructor Create(AOwner: TVpMonthView);
|
|
|
|
destructor Destroy; override;
|
|
|
|
property MonthView: TVpMonthView read FMonthView;
|
|
|
|
published
|
|
|
|
property Color: TColor read FColor write SetColor;
|
2016-07-15 11:52:21 +00:00
|
|
|
property Font: TVpFont read FFont write SetFont;
|
2008-02-03 12:05:55 +00:00
|
|
|
end;
|
|
|
|
|
2016-07-15 20:30:36 +00:00
|
|
|
TVpMvTodayAttr = class(TPersistent)
|
|
|
|
protected
|
|
|
|
FMonthView: TVpMonthView;
|
|
|
|
FFont: TVpFont;
|
|
|
|
FColor: TColor;
|
|
|
|
FBorderPen: TPen;
|
|
|
|
procedure SetColor(Value: TColor);
|
|
|
|
procedure SetFont(Value: TVpFont);
|
|
|
|
procedure SetBorderPen(Value: TPen);
|
|
|
|
public
|
|
|
|
constructor Create(AOwner: TVpMonthView);
|
|
|
|
destructor Destroy; override;
|
|
|
|
property MonthView: TVpMonthView read FMonthView;
|
|
|
|
published
|
|
|
|
property Color: TColor read FColor write SetColor;
|
|
|
|
property Font: TVpFont read FFont write FFont;
|
|
|
|
property BorderPen: TPen read FBorderPen write SetBorderPen;
|
|
|
|
end;
|
|
|
|
|
2008-11-10 13:54:49 +00:00
|
|
|
{ TVpMonthView }
|
|
|
|
|
2008-02-03 12:05:55 +00:00
|
|
|
TVpMonthView = class(TVpLinkableControl)
|
|
|
|
protected{ private }
|
2016-07-30 11:45:12 +00:00
|
|
|
FKBNavigate: Boolean;
|
|
|
|
FColumnWidth: Integer;
|
|
|
|
FColor: TColor;
|
|
|
|
FLineColor: TColor;
|
|
|
|
FLineCount: Integer;
|
|
|
|
FVisibleLines: Integer;
|
|
|
|
FDayNameStyle: TVpMVDayNameStyle;
|
|
|
|
FOffDayColor: TColor;
|
|
|
|
FOffDayFontColor: TColor;
|
|
|
|
FSelectedDayColor: TColor;
|
|
|
|
FWeekStartsOn: TVpDayType;
|
|
|
|
FShowEvents: Boolean;
|
|
|
|
FEventDayStyle: TFontStyles;
|
|
|
|
FDateLabelFormat: string;
|
|
|
|
FShowEventTime: Boolean;
|
|
|
|
FTopLine: Integer;
|
|
|
|
FDayHeadAttr: TVpDayHeadAttr;
|
|
|
|
FHeadAttr: TVpMvHeadAttr;
|
|
|
|
FTodayAttr: TVpMvTodayAttr;
|
|
|
|
FDayNumberFont: TVpFont;
|
|
|
|
FEventFont: TVpFont;
|
|
|
|
FTimeFormat: TVpTimeFormat;
|
|
|
|
FDrawingStyle: TVpDrawingStyle;
|
|
|
|
FDate: TDateTime;
|
|
|
|
FDefaultPopup: TPopupMenu;
|
|
|
|
FRightClickChangeDate: Boolean;
|
2008-02-03 12:05:55 +00:00
|
|
|
{ event variables }
|
2016-07-30 11:45:12 +00:00
|
|
|
FOwnerDrawCells: TVpOwnerDrawDayEvent;
|
|
|
|
FOnEventClick: TVpOnEventClick;
|
|
|
|
FOnEventDblClick: TVpOnEventClick;
|
2008-02-03 12:05:55 +00:00
|
|
|
{ internal variables }
|
2016-07-30 11:24:43 +00:00
|
|
|
// mvDayNumberHeight : Integer;
|
|
|
|
// mvEventTextHeight : Integer;
|
2016-07-30 11:45:12 +00:00
|
|
|
mvLoaded: Boolean;
|
2016-07-30 11:24:43 +00:00
|
|
|
// mvInLinkHandler : Boolean;
|
|
|
|
// mvRowHeight : Integer;
|
|
|
|
// mvLineHeight : Integer;
|
|
|
|
// mvColWidth : Integer;
|
2016-07-30 11:45:12 +00:00
|
|
|
mvDayHeadHeight: Integer;
|
|
|
|
mvSpinButtons: TUpDown;
|
|
|
|
mvEventArray: TVpEventArray;
|
|
|
|
mvMonthDayArray: TVpMonthdayArray;
|
|
|
|
mvActiveEvent: TVpEvent;
|
|
|
|
mvActiveEventRec: TRect;
|
2016-07-30 11:24:43 +00:00
|
|
|
// mvEventList : TList;
|
|
|
|
// mvCreatingEditor : Boolean;
|
|
|
|
// mvPainting : Boolean;
|
|
|
|
// mvVScrollDelta : Integer;
|
|
|
|
// mvHotPoint : TPoint;
|
|
|
|
// mvVisibleEvents : Integer;
|
2008-02-03 12:05:55 +00:00
|
|
|
|
|
|
|
{ property methods }
|
|
|
|
procedure SetDrawingStyle(Value: TVpDrawingStyle);
|
|
|
|
procedure SetColor(Value: TColor);
|
|
|
|
procedure SetLineColor(Value: TColor);
|
|
|
|
procedure SetOffDayColor(Value: TColor);
|
2016-06-09 22:27:58 +00:00
|
|
|
procedure SetOffDayFontColor(Value: TColor);
|
2008-02-03 12:05:55 +00:00
|
|
|
procedure SetDateLabelFormat(Value: string);
|
|
|
|
procedure SetShowEvents(Value: Boolean);
|
|
|
|
procedure SetEventDayStyle(Value: TFontStyles);
|
|
|
|
procedure SetDayNameStyle(Value: TVpMVDayNameStyle);
|
2016-07-15 11:52:21 +00:00
|
|
|
procedure SetDayNumberFont(Value: TVpFont);
|
|
|
|
procedure SetEventFont(Value: TVpFont);
|
2008-02-03 12:05:55 +00:00
|
|
|
procedure SetSelectedDayColor(Value: TColor);
|
|
|
|
procedure SetShowEventTime(Value: Boolean);
|
|
|
|
procedure SetTimeFormat(Value: TVpTimeFormat);
|
|
|
|
procedure SetDate(Value: TDateTime);
|
2016-07-15 19:13:00 +00:00
|
|
|
procedure SetRightClickChangeDate(const v: Boolean);
|
2008-02-03 12:05:55 +00:00
|
|
|
procedure SetWeekStartsOn(Value: TVpDayType);
|
|
|
|
{ internal methods }
|
|
|
|
procedure mvHookUp;
|
2016-07-15 20:30:36 +00:00
|
|
|
procedure mvPenChanged(Sender: TObject);
|
2016-07-15 11:52:21 +00:00
|
|
|
// procedure mvFontChanged(Sender: TObject);
|
2008-02-03 12:05:55 +00:00
|
|
|
|
|
|
|
procedure Paint; override;
|
|
|
|
procedure Loaded; override;
|
|
|
|
procedure InitializeDefaultPopup;
|
|
|
|
procedure mvPopulate;
|
|
|
|
procedure mvSpinButtonClick(Sender: TObject; Button: TUDBtnType);
|
|
|
|
procedure CreateParams(var Params: TCreateParams); override;
|
|
|
|
procedure CreateWnd; override;
|
|
|
|
{$IFNDEF LCL}
|
2016-07-30 11:45:12 +00:00
|
|
|
procedure WMLButtonDown(var Msg: TWMLButtonDown); message WM_LBUTTONDOWN;
|
2016-07-30 11:24:43 +00:00
|
|
|
procedure WMLButtonDblClick(var Msg: TWMLButtonDblClk);message WM_LBUTTONDBLCLK;
|
2008-02-03 12:05:55 +00:00
|
|
|
{$ELSE}
|
2016-07-30 11:24:43 +00:00
|
|
|
procedure WMLButtonDown(var Msg: TLMLButtonDown); message LM_LBUTTONDOWN;
|
|
|
|
procedure WMLButtonDblClick(var Msg: TLMLButtonDblClk); message LM_LBUTTONDBLCLK;
|
2008-02-03 12:05:55 +00:00
|
|
|
{$ENDIF}
|
|
|
|
{ - renamed from EditEventAtCoord and re-written}
|
|
|
|
function SelectEventAtCoord(Point: TPoint): Boolean;
|
|
|
|
procedure mvSetDateByCoord(Point: TPoint);
|
|
|
|
procedure KeyDown(var Key: Word; Shift: TShiftState); override;
|
|
|
|
{ message handlers }
|
|
|
|
{$IFNDEF LCL}
|
|
|
|
procedure WMSize(var Msg: TWMSize); message WM_SIZE;
|
2016-07-15 19:13:00 +00:00
|
|
|
procedure WMSetFocus(var Msg: TWMSetFocus); message WM_SETFOCUS;
|
|
|
|
procedure WMRButtonDown(var Msg: TWMRButtonDown); message WM_RBUTTONDOWN;
|
2008-02-03 12:05:55 +00:00
|
|
|
procedure CMWantSpecialKey(var Msg: TCMWantSpecialKey);
|
|
|
|
message CM_WANTSPECIALKEY;
|
|
|
|
{$ELSE}
|
|
|
|
procedure WMSize(var Msg: TLMSize); message LM_SIZE;
|
2016-07-12 09:26:14 +00:00
|
|
|
procedure WMSetFocus(var Msg: TLMSetFocus); message LM_SETFOCUS;
|
|
|
|
procedure WMRButtonDown(var Msg: TLMRButtonDown); message LM_RBUTTONDOWN;
|
2008-02-03 12:05:55 +00:00
|
|
|
{$ENDIF}
|
2016-07-15 19:13:00 +00:00
|
|
|
procedure PopupToday(Sender: TObject);
|
|
|
|
procedure PopupNextMonth(Sender: TObject);
|
|
|
|
procedure PopupPrevMonth(Sender: TObject);
|
|
|
|
procedure PopupNextYear(Sender: TObject);
|
|
|
|
procedure PopupPrevYear(Sender: TObject);
|
|
|
|
|
2008-02-03 12:05:55 +00:00
|
|
|
public
|
|
|
|
constructor Create(AOwner: TComponent); override;
|
|
|
|
destructor Destroy; override;
|
2008-11-10 13:54:49 +00:00
|
|
|
procedure LoadLanguage;
|
2008-02-03 12:05:55 +00:00
|
|
|
procedure Invalidate; override;
|
|
|
|
procedure LinkHandler(Sender: TComponent;
|
2016-07-30 11:45:12 +00:00
|
|
|
NotificationType: TVpNotificationType; const Value: Variant); override;
|
|
|
|
function GetControlType: TVpItemType; override;
|
|
|
|
procedure PaintToCanvas(ACanvas: TCanvas; ARect: TRect; Angle: TVpRotationAngle;
|
|
|
|
ADate: TDateTime);
|
|
|
|
procedure RenderToCanvas(RenderCanvas: TCanvas; RenderIn: TRect;
|
|
|
|
Angle: TVpRotationAngle; Scale: Extended; RenderDate: TDateTime;
|
|
|
|
StartLine, StopLine: Integer; UseGran: TVpGranularity;
|
|
|
|
DisplayOnly: Boolean); override;
|
2008-02-03 12:05:55 +00:00
|
|
|
|
|
|
|
property Date: TDateTime read FDate write SetDate;
|
2016-07-15 19:13:00 +00:00
|
|
|
|
2008-02-03 12:05:55 +00:00
|
|
|
published
|
|
|
|
{ inherited properties }
|
|
|
|
property Align;
|
|
|
|
property Anchors;
|
|
|
|
property TabStop;
|
|
|
|
property TabOrder;
|
2016-07-30 11:45:12 +00:00
|
|
|
property KBNavigation: Boolean read FKBNavigate write FKBNavigate;
|
|
|
|
property Color: TColor read FColor write SetColor;
|
|
|
|
property DateLabelFormat: string read FDateLabelFormat write SetDateLabelFormat;
|
|
|
|
property DayHeadAttributes: TVpDayHeadAttr read FDayHeadAttr write FDayHeadAttr;
|
|
|
|
property DayNameStyle: TVpMVDayNameStyle read FDayNameStyle write SetDayNameStyle;
|
|
|
|
property DayNumberFont: TVpFont read FDayNumberFont write SetDayNumberFont;
|
|
|
|
property DrawingStyle: TVpDrawingStyle read FDrawingStyle write SetDrawingStyle stored True;
|
|
|
|
property EventDayStyle: TFontStyles read FEventDayStyle write SetEventDayStyle;
|
|
|
|
property EventFont: TVpFont read FEventFont write SetEventFont;
|
|
|
|
property HeadAttributes: TVpMvHeadAttr read FHeadAttr write FHeadAttr;
|
|
|
|
property LineColor: TColor read FLineColor write SetLineColor;
|
|
|
|
property TimeFormat: TVpTimeFormat read FTimeFormat write SetTimeFormat;
|
|
|
|
property TodayAttributes: TVpMvTodayAttr read FTodayAttr write FTodayAttr;
|
|
|
|
property OffDayColor: TColor read FOffDayColor write SetOffDayColor;
|
|
|
|
property OffDayFontColor: TColor read FOffDayFontColor write SetOffDayFontColor default clGray;
|
|
|
|
property OwnerDrawCells: TVpOwnerDrawDayEvent read FOwnerDrawCells write FOwnerDrawCells;
|
|
|
|
property RightClickChangeDate: Boolean
|
|
|
|
read FRightClickChangeDate write SetRightClickChangeDate default vpDefWVRClickChangeDate;
|
|
|
|
property SelectedDayColor: TColor read FSelectedDayColor write SetSelectedDayColor;
|
|
|
|
property ShowEvents: Boolean read FShowEvents write SetShowEvents;
|
|
|
|
property ShowEventTime: Boolean read FShowEventTime write SetShowEventTime;
|
|
|
|
property WeekStartsOn: TVpDayType read FWeekStartsOn write SetWeekStartsOn;
|
2008-02-03 12:05:55 +00:00
|
|
|
{events}
|
2016-07-30 11:45:12 +00:00
|
|
|
property OnEventClick: TVpOnEventClick read FOnEventClick write FOnEventClick;
|
|
|
|
property OnEventDblClick: TVpOnEventClick read FOnEventDblClick write FOnEventDblClick;
|
2008-02-03 12:05:55 +00:00
|
|
|
end;
|
|
|
|
|
2016-07-30 11:45:12 +00:00
|
|
|
|
2008-02-03 12:05:55 +00:00
|
|
|
implementation
|
|
|
|
|
|
|
|
uses
|
2016-07-12 09:26:14 +00:00
|
|
|
SysUtils, LazUTF8, Forms, Dialogs, VpMonthViewPainter;
|
2008-02-03 12:05:55 +00:00
|
|
|
|
2016-07-15 19:13:00 +00:00
|
|
|
|
|
|
|
(*****************************************************************************)
|
2016-07-15 20:30:36 +00:00
|
|
|
{ TVpMvHeadAttr }
|
2016-07-15 19:13:00 +00:00
|
|
|
|
2016-07-15 20:30:36 +00:00
|
|
|
constructor TVpMvHeadAttr.Create(AOwner: TVpMonthView);
|
2016-07-15 19:13:00 +00:00
|
|
|
begin
|
|
|
|
inherited Create;
|
|
|
|
FOwner := AOwner;
|
|
|
|
FColor := clBtnFace;
|
|
|
|
FFont := TVpFont.Create(AOwner);
|
|
|
|
end;
|
|
|
|
|
2016-07-15 20:30:36 +00:00
|
|
|
destructor TVpMvHeadAttr.Destroy;
|
2016-07-15 19:13:00 +00:00
|
|
|
begin
|
|
|
|
FFont.Free;
|
|
|
|
inherited;
|
|
|
|
end;
|
|
|
|
|
2016-07-15 20:30:36 +00:00
|
|
|
procedure TVpMvHeadAttr.SetColor(const Value: TColor);
|
2016-07-15 19:13:00 +00:00
|
|
|
begin
|
|
|
|
if FColor <> Value then begin
|
|
|
|
FColor := Value;
|
|
|
|
FOwner.Invalidate;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
|
2016-07-15 20:30:36 +00:00
|
|
|
procedure TVpMvHeadAttr.SetFont(Value: TVpFont);
|
2016-07-15 19:13:00 +00:00
|
|
|
begin
|
|
|
|
FFont.Assign(Value);
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
2008-02-03 12:05:55 +00:00
|
|
|
(*****************************************************************************)
|
|
|
|
{ TVpContactHeadAttr }
|
|
|
|
constructor TVpDayHeadAttr.Create(AOwner: TVpMonthView);
|
|
|
|
begin
|
|
|
|
inherited Create;
|
|
|
|
FMonthView := AOwner;
|
2016-07-15 11:52:21 +00:00
|
|
|
FFont := TVpFont.Create(AOwner);
|
2008-02-03 12:05:55 +00:00
|
|
|
FFont.Assign(FMonthView.Font);
|
|
|
|
FColor := clSilver;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
destructor TVpDayHeadAttr.Destroy;
|
|
|
|
begin
|
|
|
|
FFont.Free;
|
2016-07-15 11:52:21 +00:00
|
|
|
inherited;
|
2008-02-03 12:05:55 +00:00
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
procedure TVpDayHeadAttr.SetColor(Value: TColor);
|
|
|
|
begin
|
|
|
|
if Value <> FColor then begin
|
|
|
|
FColor := Value;
|
|
|
|
MonthView.Invalidate;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
2016-07-15 11:52:21 +00:00
|
|
|
procedure TVpDayHeadAttr.SetFont(Value: TVpFont);
|
2008-02-03 12:05:55 +00:00
|
|
|
begin
|
|
|
|
if Value <> FFont then begin
|
|
|
|
FFont.Assign(Value);
|
|
|
|
MonthView.Invalidate;
|
|
|
|
end;
|
|
|
|
end;
|
2016-07-15 20:30:36 +00:00
|
|
|
|
|
|
|
|
|
|
|
(*****************************************************************************)
|
|
|
|
{ TVpMvTodayAttr }
|
|
|
|
|
|
|
|
constructor TVpMvTodayAttr.Create(AOwner: TVpMonthView);
|
|
|
|
begin
|
|
|
|
inherited Create;
|
|
|
|
FMonthView := AOwner;
|
|
|
|
FFont := TVpFont.Create(AOwner);
|
|
|
|
FFont.Assign(FMonthView.Font);
|
|
|
|
FColor := clSilver;
|
|
|
|
FBorderPen := TPen.Create;
|
|
|
|
FBorderPen.Color := clRed;
|
|
|
|
FBorderPen.Width := 3;
|
|
|
|
FBorderPen.OnChange := FMonthView.mvPenChanged;
|
|
|
|
end;
|
|
|
|
|
|
|
|
destructor TVpMvTodayAttr.Destroy;
|
|
|
|
begin
|
|
|
|
FBorderPen.Free;
|
2016-07-29 22:19:07 +00:00
|
|
|
FFont.Free;
|
2016-07-15 20:30:36 +00:00
|
|
|
inherited;
|
|
|
|
end;
|
|
|
|
|
|
|
|
procedure TVpMvTodayAttr.SetColor(Value: TColor);
|
|
|
|
begin
|
|
|
|
if Value <> FColor then begin
|
|
|
|
FColor := Value;
|
|
|
|
MonthView.Invalidate;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
|
|
|
|
procedure TVpMvTodayAttr.SetFont(Value: TVpFont);
|
|
|
|
begin
|
|
|
|
if Value <> FFont then begin
|
|
|
|
FFont.Assign(Value);
|
|
|
|
MonthView.Invalidate;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
|
|
|
|
procedure TVpMvTodayAttr.SetBorderPen(Value: TPen);
|
|
|
|
begin
|
|
|
|
if Value <> FBorderPen then begin
|
|
|
|
FBorderPen.Assign(Value);
|
|
|
|
MonthView.Invalidate;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
|
2008-02-03 12:05:55 +00:00
|
|
|
|
|
|
|
(*****************************************************************************)
|
|
|
|
{ TVpMonthView }
|
|
|
|
|
|
|
|
constructor TVpMonthView.Create(AOwner: TComponent);
|
|
|
|
begin
|
|
|
|
inherited;
|
|
|
|
ControlStyle := [csCaptureMouse, csOpaque, csDoubleClicks];
|
|
|
|
|
|
|
|
{ Create internal classes and stuff }
|
2016-07-15 20:30:36 +00:00
|
|
|
FHeadAttr := TVpMvHeadAttr.Create(self);
|
|
|
|
FDayHeadAttr := TVpDayHeadAttr.Create(self);
|
|
|
|
FTodayAttr := TVpMvTodayAttr.Create(self);
|
2016-07-30 11:24:43 +00:00
|
|
|
// mvEventList := TList.Create;
|
2008-02-03 12:05:55 +00:00
|
|
|
mvSpinButtons := TUpDown.Create(self);
|
|
|
|
|
|
|
|
{ Set styles and initialize internal variables }
|
|
|
|
{$IFDEF VERSION4}
|
|
|
|
DoubleBuffered := true;
|
|
|
|
{$ENDIF}
|
|
|
|
FShowEvents := true;
|
|
|
|
FEventDayStyle := [];
|
|
|
|
FShowEventTime := false;
|
|
|
|
FDayNameStyle :=dsShort;
|
|
|
|
FKBNavigate := true;
|
2016-07-30 11:24:43 +00:00
|
|
|
// mvInLinkHandler := false;
|
2008-02-03 12:05:55 +00:00
|
|
|
mvSpinButtons.OnClick := mvSpinButtonClick;
|
|
|
|
mvSpinButtons.Orientation := udHorizontal;
|
|
|
|
mvSpinButtons.Min := -32768;
|
|
|
|
mvSpinButtons.Max := 32767;
|
2016-07-30 11:24:43 +00:00
|
|
|
// mvCreatingEditor := false;
|
2008-02-03 12:05:55 +00:00
|
|
|
FSelectedDayColor := clRed;
|
|
|
|
FDrawingStyle := ds3d;
|
2016-07-30 11:24:43 +00:00
|
|
|
// mvPainting := false;
|
2008-02-03 12:05:55 +00:00
|
|
|
FColor := clWindow;
|
|
|
|
FOffDayColor := clSilver;
|
|
|
|
FLineColor := clGray;
|
|
|
|
FDate := Trunc(Now);
|
|
|
|
FTimeFormat := tf12Hour;
|
|
|
|
FDateLabelFormat := 'mmmm yyyy';
|
|
|
|
FColumnWidth := 200;
|
|
|
|
FRightClickChangeDate := vpDefWVRClickChangeDate;
|
2016-07-30 11:24:43 +00:00
|
|
|
// mvVisibleEvents := 0;
|
2008-02-03 12:05:55 +00:00
|
|
|
|
|
|
|
{ set up fonts and colors }
|
2016-07-01 21:22:34 +00:00
|
|
|
// FDayHeadAttributes.Font.Name := 'Tahoma'; wp: better use defaults
|
|
|
|
// FDayHeadAttributes.Font.Size := 10;
|
|
|
|
// FDayHeadAttributes.Font.Style := [];
|
2016-07-15 20:30:36 +00:00
|
|
|
FDayHeadAttr.Color := clBtnFace;
|
2008-02-03 12:05:55 +00:00
|
|
|
|
|
|
|
{ Assign default font to DayNumberFont and EventFont }
|
2016-07-15 11:52:21 +00:00
|
|
|
FDayNumberFont := TVpFont.Create(AOwner);
|
2008-02-03 12:05:55 +00:00
|
|
|
FDayNumberFont.Assign(Font);
|
2016-07-15 11:52:21 +00:00
|
|
|
FEventFont := TVpFont.Create(AOwner);
|
2008-02-03 12:05:55 +00:00
|
|
|
FEventFont.Assign(Font);
|
2016-06-09 22:27:58 +00:00
|
|
|
FOffDayFontColor := clGray;
|
2008-02-03 12:05:55 +00:00
|
|
|
|
|
|
|
SetLength(mvEventArray, MaxVisibleEvents);
|
|
|
|
SetLength(mvMonthdayArray, 45);
|
|
|
|
|
|
|
|
{ size }
|
|
|
|
Height := 225;
|
|
|
|
Width := 300;
|
|
|
|
|
2016-07-30 11:45:12 +00:00
|
|
|
FDefaultPopup := TPopupMenu.Create(Self);
|
2012-09-24 19:30:17 +00:00
|
|
|
Self.PopupMenu := FDefaultPopup;
|
2008-11-10 13:54:49 +00:00
|
|
|
LoadLanguage;
|
2008-02-03 12:05:55 +00:00
|
|
|
|
|
|
|
mvHookUp;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
destructor TVpMonthView.Destroy;
|
|
|
|
begin
|
2016-07-30 12:08:11 +00:00
|
|
|
FHeadAttr.Free;
|
2016-07-15 20:30:36 +00:00
|
|
|
FTodayAttr.Free;
|
|
|
|
FDayHeadAttr.Free;
|
2008-02-03 12:05:55 +00:00
|
|
|
FDayNumberFont.Free;
|
|
|
|
FEventFont.Free;
|
|
|
|
mvSpinButtons.Free;
|
2016-07-30 11:24:43 +00:00
|
|
|
// mvEventList.Free;
|
2008-02-03 12:05:55 +00:00
|
|
|
FDefaultPopup.Free;
|
|
|
|
inherited;
|
|
|
|
end;
|
2008-11-10 13:54:49 +00:00
|
|
|
|
|
|
|
procedure TVpMonthView.LoadLanguage;
|
|
|
|
begin
|
|
|
|
FDefaultPopup.Items.Clear;
|
|
|
|
InitializeDefaultPopup;
|
|
|
|
end;
|
|
|
|
|
2008-02-03 12:05:55 +00:00
|
|
|
{=====}
|
|
|
|
|
|
|
|
procedure TVpMonthView.Invalidate;
|
|
|
|
begin
|
|
|
|
inherited;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
procedure TVpMonthView.LinkHandler(Sender: TComponent;
|
|
|
|
NotificationType: TVpNotificationType; const Value: Variant);
|
|
|
|
begin
|
2016-07-30 11:24:43 +00:00
|
|
|
// mvInLinkHandler := true;
|
|
|
|
// try
|
2008-02-03 12:05:55 +00:00
|
|
|
case NotificationType of
|
2016-07-30 11:24:43 +00:00
|
|
|
neDateChange : Date := Value;
|
|
|
|
neDataStoreChange : Invalidate;
|
|
|
|
neInvalidate : Invalidate;
|
2008-02-03 12:05:55 +00:00
|
|
|
end;
|
2016-07-30 11:24:43 +00:00
|
|
|
// finally
|
|
|
|
// mvInLinkHandler := false;
|
|
|
|
// end;
|
2008-02-03 12:05:55 +00:00
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
procedure TVpMonthView.mvHookUp;
|
|
|
|
var
|
|
|
|
I: Integer;
|
|
|
|
begin
|
|
|
|
{ If the component is being dropped on a form at designtime, then }
|
|
|
|
{ automatically hook up to the first datastore component found }
|
|
|
|
if csDesigning in ComponentState then
|
|
|
|
for I := 0 to pred(Owner.ComponentCount) do begin
|
|
|
|
if (Owner.Components[I] is TVpCustomDataStore) then begin
|
|
|
|
DataStore := TVpCustomDataStore(Owner.Components[I]);
|
|
|
|
Exit;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
end;
|
2016-07-15 20:30:36 +00:00
|
|
|
|
|
|
|
procedure TVpMonthView.mvPenChanged(Sender: TObject);
|
2008-02-03 12:05:55 +00:00
|
|
|
begin
|
|
|
|
Invalidate;
|
2016-07-15 20:30:36 +00:00
|
|
|
end;
|
2008-02-03 12:05:55 +00:00
|
|
|
|
|
|
|
procedure TVpMonthView.Loaded;
|
|
|
|
begin
|
|
|
|
inherited;
|
|
|
|
mvLoaded := true;
|
|
|
|
mvPopulate;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
2016-07-30 11:45:12 +00:00
|
|
|
function TVpMonthView.GetControlType: TVpItemType;
|
2008-02-03 12:05:55 +00:00
|
|
|
begin
|
|
|
|
Result := itMonthView;
|
|
|
|
end;
|
|
|
|
|
|
|
|
procedure TVpMonthView.Paint;
|
|
|
|
begin
|
2016-07-30 11:45:12 +00:00
|
|
|
RenderToCanvas(Canvas, Rect (0, 0, Width, Height), ra0, 1, Self.Date,
|
|
|
|
-1, -1, gr30Min, False);
|
2008-02-03 12:05:55 +00:00
|
|
|
end;
|
2016-07-30 11:45:12 +00:00
|
|
|
|
|
|
|
procedure TVpMonthView.PaintToCanvas(ACanvas: TCanvas; ARect: TRect;
|
|
|
|
Angle: TVpRotationAngle; ADate: TDateTime);
|
2008-02-03 12:05:55 +00:00
|
|
|
begin
|
2016-07-30 11:45:12 +00:00
|
|
|
RenderToCanvas(ACanvas, ARect, Angle, 1, ADate, -1, -1, gr30Min, True);
|
2008-02-03 12:05:55 +00:00
|
|
|
end;
|
2016-07-30 11:45:12 +00:00
|
|
|
|
|
|
|
procedure TVpMonthView.RenderToCanvas(RenderCanvas: TCanvas; RenderIn: TRect;
|
|
|
|
Angle: TVpRotationAngle; Scale: Extended; RenderDate: TDateTime;
|
|
|
|
StartLine, StopLine: Integer; UseGran: TVpGranularity; DisplayOnly: Boolean);
|
2008-02-03 12:05:55 +00:00
|
|
|
var
|
2016-06-22 22:37:44 +00:00
|
|
|
painter: TVpMonthViewPainter;
|
2008-02-03 12:05:55 +00:00
|
|
|
begin
|
2016-07-30 11:24:43 +00:00
|
|
|
// mvPainting := true;
|
2016-06-22 22:37:44 +00:00
|
|
|
painter := TVpMonthViewPainter.Create(Self, RenderCanvas);
|
2008-02-03 12:05:55 +00:00
|
|
|
try
|
2016-06-22 22:37:44 +00:00
|
|
|
painter.RenderToCanvas(RenderIn, Angle, Scale, RenderDate, StartLine,
|
|
|
|
StopLine, UseGran, DisplayOnly);
|
2008-02-03 12:05:55 +00:00
|
|
|
finally
|
2016-06-22 22:37:44 +00:00
|
|
|
painter.Free;
|
2016-07-30 11:24:43 +00:00
|
|
|
// mvPainting := false;
|
2008-02-03 12:05:55 +00:00
|
|
|
end;
|
|
|
|
end;
|
|
|
|
|
|
|
|
procedure TVpMonthView.mvPopulate;
|
|
|
|
begin
|
|
|
|
if DataStore <> nil then
|
|
|
|
DataStore.Date := FDate;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
procedure TVpMonthView.mvSpinButtonClick(Sender: TObject; Button: TUDBtnType);
|
|
|
|
var
|
2016-07-30 11:45:12 +00:00
|
|
|
M, D, Y: Word;
|
2008-02-03 12:05:55 +00:00
|
|
|
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 > DaysInMonth(Y, M)) then
|
|
|
|
D := DaysInMonth(Y, M);
|
|
|
|
|
|
|
|
Date := EncodeDate(Y, M, D);
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
procedure TVpMonthView.SetColor(Value: TColor);
|
|
|
|
begin
|
|
|
|
if FColor <> Value then begin
|
|
|
|
FColor := Value;
|
|
|
|
Invalidate;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
procedure TVpMonthView.SetDrawingStyle(Value: TVpDrawingStyle);
|
|
|
|
begin
|
|
|
|
if FDrawingStyle <> Value then begin
|
|
|
|
FDrawingStyle := Value;
|
|
|
|
Repaint;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
procedure TVpMonthView.SetLineColor(Value: TColor);
|
|
|
|
begin
|
|
|
|
if FLineColor <> Value then begin
|
|
|
|
FLineColor := Value;
|
|
|
|
Repaint;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
procedure TVpMonthView.SetOffDayColor(Value: TColor);
|
|
|
|
begin
|
|
|
|
if Value <> FOffDayColor then begin
|
|
|
|
FOffDayColor := Value;
|
|
|
|
Invalidate;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
2016-06-09 22:27:58 +00:00
|
|
|
procedure TVpMonthView.SetOffDayFontColor(Value: TColor);
|
|
|
|
begin
|
|
|
|
FOffDayFontColor := Value;
|
|
|
|
Invalidate;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
2008-02-03 12:05:55 +00:00
|
|
|
procedure TVpMonthView.SetDateLabelFormat(Value: string);
|
|
|
|
begin
|
|
|
|
if Value <> FDateLabelFormat then begin
|
|
|
|
FDateLabelFormat := Value;
|
|
|
|
Invalidate;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
procedure TVpMonthView.SetShowEvents(Value: Boolean);
|
|
|
|
begin
|
|
|
|
if FShowEvents <> Value then begin
|
|
|
|
FShowEvents := Value;
|
|
|
|
Invalidate;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
procedure TVpMonthView.SetEventDayStyle(Value: TFontStyles);
|
|
|
|
begin
|
|
|
|
if FEventDayStyle <> Value then begin
|
|
|
|
FEventDayStyle := Value;
|
|
|
|
Invalidate;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
procedure TVpMonthView.SetDayNameStyle(Value: TVpMVDayNameStyle);
|
|
|
|
begin
|
|
|
|
if FDayNameStyle <> Value then begin
|
|
|
|
FDayNameStyle := Value;
|
|
|
|
Invalidate;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
2016-07-15 11:52:21 +00:00
|
|
|
procedure TVpMonthView.SetDayNumberFont(Value: TVpFont);
|
2008-02-03 12:05:55 +00:00
|
|
|
begin
|
|
|
|
FDayNumberFont.Assign(Value);
|
|
|
|
Invalidate;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
2016-07-15 11:52:21 +00:00
|
|
|
procedure TVpMonthView.SetEventFont(Value: TVpFont);
|
2008-02-03 12:05:55 +00:00
|
|
|
begin
|
|
|
|
FEventFont.Assign(Value);
|
|
|
|
Invalidate;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
procedure TVpMonthView.SetSelectedDayColor(Value: TColor);
|
|
|
|
begin
|
|
|
|
if Value <> FSelectedDayColor then begin
|
|
|
|
FSelectedDayColor := Value;
|
|
|
|
Invalidate;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
procedure TVpMonthView.SetShowEventTime(Value: Boolean);
|
|
|
|
begin
|
|
|
|
if Value <> FShowEventTime then begin
|
|
|
|
FShowEventTime := Value;
|
|
|
|
Invalidate;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
procedure TVpMonthView.SetTimeFormat(Value: TVpTimeFormat);
|
|
|
|
begin
|
|
|
|
if Value <> FTimeFormat then begin
|
|
|
|
FTimeFormat := Value;
|
|
|
|
Invalidate;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
procedure TVpMonthView.SetDate(Value: TDateTime);
|
|
|
|
begin
|
|
|
|
if FDate <> Trunc(Value) then begin
|
|
|
|
FDate := Trunc(Value);
|
|
|
|
|
|
|
|
if DataStore <> nil then
|
|
|
|
DataStore.Date := FDate;
|
|
|
|
|
|
|
|
if mvLoaded then
|
|
|
|
mvPopulate;
|
|
|
|
Invalidate;
|
|
|
|
|
|
|
|
if ControlLink <> nil then
|
|
|
|
ControlLink.Notify(self, neDateChange, FDate);
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
{$IFNDEF LCL}
|
|
|
|
procedure TVpMonthView.WMSize(var Msg: TWMSize);
|
|
|
|
{$ELSE}
|
|
|
|
procedure TVpMonthView.WMSize(var Msg: TLMSize);
|
|
|
|
{$ENDIF}
|
|
|
|
begin
|
|
|
|
inherited;
|
|
|
|
{ force a repaint on resize }
|
|
|
|
Invalidate;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
procedure TVpMonthView.CreateParams(var Params: TCreateParams);
|
|
|
|
begin
|
|
|
|
inherited CreateParams(Params);
|
|
|
|
with Params do
|
|
|
|
begin
|
|
|
|
Style := Style or WS_TABSTOP;
|
|
|
|
{$IFNDEF LCL}
|
|
|
|
WindowClass.style := CS_DBLCLKS;
|
|
|
|
{$ENDIF}
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
procedure TVpMonthView.CreateWnd;
|
|
|
|
begin
|
|
|
|
inherited;
|
|
|
|
mvSpinButtons.Parent := self;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
{$IFNDEF LCL}
|
2016-07-30 11:45:12 +00:00
|
|
|
procedure TVpMonthView.WMLButtonDown(var Msg: TWMLButtonDown);
|
2008-02-03 12:05:55 +00:00
|
|
|
{$ELSE}
|
2016-07-30 11:45:12 +00:00
|
|
|
procedure TVpMonthView.WMLButtonDown(var Msg: TLMLButtonDown);
|
2008-02-03 12:05:55 +00:00
|
|
|
{$ENDIF}
|
|
|
|
begin
|
|
|
|
inherited;
|
|
|
|
// if the mouse was pressed down in the client area, then select the cell.
|
|
|
|
if not focused then SetFocus;
|
|
|
|
|
|
|
|
if (Msg.YPos > mvDayHeadHeight) then
|
|
|
|
begin
|
|
|
|
{ The mouse click landed inside the client area }
|
|
|
|
MvSetDateByCoord(Point(Msg.XPos, Msg.YPos));
|
|
|
|
{ Did the mouse click land on an event? }
|
|
|
|
if SelectEventAtCoord(Point(Msg.XPos, Msg.YPos))
|
|
|
|
and (Assigned(FOnEventClick)) then
|
|
|
|
FOnEventClick(self, mvActiveEvent);
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
{$IFNDEF LCL}
|
|
|
|
procedure TVpMonthView.WMLButtonDblClick(var Msg: TWMLButtonDblClk);
|
|
|
|
{$ELSE}
|
|
|
|
procedure TVpMonthView.WMLButtonDblClick(var Msg: TLMLButtonDblClk);
|
|
|
|
{$ENDIF}
|
|
|
|
begin
|
|
|
|
inherited;
|
|
|
|
// if the mouse was pressed down in the client area, then select the
|
|
|
|
// cell.
|
|
|
|
if not focused then SetFocus;
|
|
|
|
|
|
|
|
if (Msg.YPos > mvDayHeadHeight) then
|
|
|
|
begin
|
|
|
|
{ The mouse click landed inside the client area }
|
|
|
|
MvSetDateByCoord(Point(Msg.XPos, Msg.YPos));
|
|
|
|
{ Did the mouse click land on an event? }
|
|
|
|
if SelectEventAtCoord(Point(Msg.XPos, Msg.YPos))
|
|
|
|
and (Assigned(FOnEventDblClick)) then
|
|
|
|
FOnEventDblClick(self, mvActiveEvent);
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
{$IFNDEF LCL}
|
2016-07-12 09:26:14 +00:00
|
|
|
procedure TVpMonthView.WMSetFocus(var Msg: TWMSetFocus);
|
2008-02-03 12:05:55 +00:00
|
|
|
{$ELSE}
|
2016-07-12 09:26:14 +00:00
|
|
|
procedure TVpMonthView.WMSetFocus(var Msg: TLMSetFocus);
|
2008-02-03 12:05:55 +00:00
|
|
|
{$ENDIF}
|
|
|
|
begin
|
2016-07-12 09:26:14 +00:00
|
|
|
Unused(Msg);
|
2008-02-03 12:05:55 +00:00
|
|
|
// if active event is nil then set active event to the first diaplsyed one.
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
{$IFNDEF LCL}
|
|
|
|
procedure TVpMonthView.CMWantSpecialKey(var Msg: TCMWantSpecialKey);
|
|
|
|
begin
|
|
|
|
inherited;
|
|
|
|
Msg.Result := 1;
|
|
|
|
end;
|
|
|
|
{$ENDIF}
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
{$IFNDEF LCL}
|
2016-07-30 11:45:12 +00:00
|
|
|
procedure TVpMonthView.WMRButtonDown(var Msg: TWMRButtonDown);
|
2008-02-03 12:05:55 +00:00
|
|
|
{$ELSE}
|
2016-07-30 11:45:12 +00:00
|
|
|
procedure TVpMonthView.WMRButtonDown(var Msg: TLMRButtonDown);
|
2008-02-03 12:05:55 +00:00
|
|
|
{$ENDIF}
|
|
|
|
begin
|
|
|
|
inherited;
|
|
|
|
if not Assigned (PopupMenu) then begin
|
|
|
|
if not focused then
|
|
|
|
SetFocus;
|
|
|
|
if FRightClickChangeDate then
|
|
|
|
mvSetDateByCoord (Point (Msg.XPos, Msg.YPos));
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
procedure TVpMonthView.InitializeDefaultPopup;
|
|
|
|
var
|
|
|
|
NewItem : TMenuItem;
|
|
|
|
begin
|
2016-09-10 20:08:06 +00:00
|
|
|
if RSToday <> '' then begin
|
2016-07-30 11:45:12 +00:00
|
|
|
NewItem := TMenuItem.Create(Self);
|
2016-09-10 20:08:06 +00:00
|
|
|
NewItem.Caption := RSToday;
|
2008-02-03 12:05:55 +00:00
|
|
|
NewItem.OnClick := PopupToday;
|
|
|
|
FDefaultPopup.Items.Add (NewItem);
|
|
|
|
end;
|
|
|
|
|
2016-09-10 20:08:06 +00:00
|
|
|
NewItem := TMenuItem.Create(Self);
|
|
|
|
NewItem.Caption := '-';
|
|
|
|
FDefaultPopup.Items.Add(NewItem);
|
|
|
|
|
|
|
|
if RSNextMonth <> '' then begin
|
2016-07-30 11:45:12 +00:00
|
|
|
NewItem := TMenuItem.Create(Self);
|
2016-09-10 20:08:06 +00:00
|
|
|
NewItem.Caption := RSNextMonth;
|
2008-02-03 12:05:55 +00:00
|
|
|
NewItem.OnClick := PopupNextMonth;
|
|
|
|
FDefaultPopup.Items.Add (NewItem);
|
|
|
|
end;
|
|
|
|
|
2016-09-10 20:08:06 +00:00
|
|
|
if RSPrevMonth <> '' then begin
|
2016-07-30 11:45:12 +00:00
|
|
|
NewItem := TMenuItem.Create(Self);
|
2016-09-10 20:08:06 +00:00
|
|
|
NewItem.Caption := RSPrevMonth;
|
2008-02-03 12:05:55 +00:00
|
|
|
NewItem.OnClick := PopupPrevMonth;
|
|
|
|
FDefaultPopup.Items.Add (NewItem);
|
|
|
|
end;
|
|
|
|
|
2016-09-10 20:08:06 +00:00
|
|
|
NewItem := TMenuItem.Create(Self);
|
|
|
|
NewItem.Caption := '-';
|
|
|
|
FDefaultPopup.Items.Add(NewItem);
|
|
|
|
|
|
|
|
if RSNextYear <> '' then begin
|
2016-07-30 11:45:12 +00:00
|
|
|
NewItem := TMenuItem.Create(Self);
|
2016-09-10 20:08:06 +00:00
|
|
|
NewItem.Caption := RSNextYear;
|
2008-02-03 12:05:55 +00:00
|
|
|
NewItem.OnClick := PopupNextYear;
|
|
|
|
FDefaultPopup.Items.Add (NewItem);
|
|
|
|
end;
|
|
|
|
|
2016-09-10 20:08:06 +00:00
|
|
|
if RSPrevYear <> '' then begin
|
2016-07-30 11:45:12 +00:00
|
|
|
NewItem := TMenuItem.Create(Self);
|
2016-09-10 20:08:06 +00:00
|
|
|
NewItem.Caption := RSPrevYear;
|
2008-02-03 12:05:55 +00:00
|
|
|
NewItem.OnClick := PopupPrevYear;
|
|
|
|
FDefaultPopup.Items.Add (NewItem);
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
2016-07-30 11:45:12 +00:00
|
|
|
procedure TVpMonthView.PopupToday(Sender: TObject);
|
2008-02-03 12:05:55 +00:00
|
|
|
begin
|
|
|
|
Date := Now;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
2016-07-30 11:45:12 +00:00
|
|
|
procedure TVpMonthView.PopupNextMonth(Sender: TObject);
|
2008-02-03 12:05:55 +00:00
|
|
|
begin
|
2016-07-30 11:45:12 +00:00
|
|
|
mvSpinButtonClick(self, btNext);
|
2008-02-03 12:05:55 +00:00
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
2016-07-30 11:45:12 +00:00
|
|
|
procedure TVpMonthView.PopupPrevMonth(Sender: TObject);
|
2008-02-03 12:05:55 +00:00
|
|
|
begin
|
2016-07-30 11:45:12 +00:00
|
|
|
mvSpinButtonClick(self, btPrev);
|
2008-02-03 12:05:55 +00:00
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
2016-07-30 11:45:12 +00:00
|
|
|
procedure TVpMonthView.PopupNextYear(Sender: TObject);
|
2008-02-03 12:05:55 +00:00
|
|
|
var
|
2016-07-30 11:45:12 +00:00
|
|
|
M, D, Y: Word;
|
2008-02-03 12:05:55 +00:00
|
|
|
begin
|
2016-07-30 11:45:12 +00:00
|
|
|
DecodeDate(Date, Y, M, D);
|
|
|
|
Date := EncodeDate(Y + 1, M, 1);
|
2008-02-03 12:05:55 +00:00
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
2016-07-30 11:45:12 +00:00
|
|
|
procedure TVpMonthView.PopupPrevYear(Sender: TObject);
|
2008-02-03 12:05:55 +00:00
|
|
|
var
|
2016-07-30 11:45:12 +00:00
|
|
|
M, D, Y: Word;
|
2008-02-03 12:05:55 +00:00
|
|
|
begin
|
2016-07-30 11:45:12 +00:00
|
|
|
DecodeDate(Date, Y, M, D);
|
|
|
|
Date := EncodeDate(Y - 1, M, 1);
|
2008-02-03 12:05:55 +00:00
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
{ - renamed from EditEventAtCoord and re-written}
|
|
|
|
function TVpMonthView.SelectEventAtCoord(Point: TPoint): Boolean;
|
|
|
|
var
|
|
|
|
I: Integer;
|
|
|
|
begin
|
|
|
|
result := false;
|
|
|
|
I := 0;
|
|
|
|
while I < Length(mvEventArray) do begin
|
|
|
|
if mvEventArray[I].Event = nil then begin
|
|
|
|
Inc(I);
|
|
|
|
Break;
|
|
|
|
end else begin
|
|
|
|
if (Point.X > mvEventArray[I].Rec.Left)
|
|
|
|
and (Point.X < mvEventArray[I].Rec.Right)
|
|
|
|
and (Point.Y > mvEventArray[I].Rec.Top)
|
|
|
|
and (Point.Y < mvEventArray[I].Rec.Bottom) then begin
|
|
|
|
result := true;
|
|
|
|
Break;
|
|
|
|
end else
|
|
|
|
Inc(I);
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
|
|
|
|
if result then begin
|
|
|
|
mvActiveEvent := TVpEvent(mvEventArray[I].Event);
|
|
|
|
mvActiveEventRec := mvEventArray[I].Rec;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
procedure TVpMonthView.mvSetDateByCoord(Point: TPoint);
|
|
|
|
var
|
|
|
|
I: Integer;
|
|
|
|
begin
|
2016-07-30 11:45:12 +00:00
|
|
|
for I := 0 to pred(Length(mvMonthdayArray)) do
|
|
|
|
if PointInRect(Point, mvMonthdayArray[I].Rec) then begin
|
2008-02-03 12:05:55 +00:00
|
|
|
Date := mvMonthdayArray[I].Date;
|
2016-07-30 11:45:12 +00:00
|
|
|
break;
|
|
|
|
end;
|
2008-02-03 12:05:55 +00:00
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
procedure TVpMonthView.KeyDown(var Key: Word; Shift: TShiftState);
|
|
|
|
var
|
2016-07-30 11:45:12 +00:00
|
|
|
M, D, Y: Word;
|
|
|
|
PopupPoint: TPoint;
|
2008-02-03 12:05:55 +00:00
|
|
|
begin
|
|
|
|
if FKBNavigate then
|
|
|
|
case Key of
|
2016-07-30 11:45:12 +00:00
|
|
|
VK_UP :
|
2008-02-03 12:05:55 +00:00
|
|
|
if ssCtrl in Shift then begin
|
|
|
|
DecodeDate(Date, Y, M, D);
|
|
|
|
Date := EncodeDate(Y - 1, M, 1);
|
|
|
|
end else
|
|
|
|
Date := Date - 7;
|
2016-07-30 11:45:12 +00:00
|
|
|
VK_DOWN:
|
2008-02-03 12:05:55 +00:00
|
|
|
if ssCtrl in Shift then begin
|
|
|
|
DecodeDate(Date, Y, M, D);
|
|
|
|
Date := EncodeDate(Y + 1, M, 1);
|
|
|
|
end else
|
|
|
|
Date := Date + 7;
|
2016-07-30 11:45:12 +00:00
|
|
|
VK_NEXT:
|
|
|
|
mvSpinButtonClick(self, btNext);
|
|
|
|
VK_PRIOR:
|
|
|
|
mvSpinButtonClick(self, btPrev);
|
|
|
|
VK_LEFT:
|
2008-02-03 12:05:55 +00:00
|
|
|
if ssCtrl in Shift then
|
|
|
|
mvSpinButtonClick(self, btPrev)
|
|
|
|
else
|
|
|
|
Date := Date - 1;
|
2016-07-30 11:45:12 +00:00
|
|
|
VK_RIGHT:
|
2008-02-03 12:05:55 +00:00
|
|
|
if ssCtrl in Shift then
|
|
|
|
mvSpinButtonClick(self, btNext)
|
|
|
|
else
|
|
|
|
Date := Date + 1;
|
2016-07-30 11:45:12 +00:00
|
|
|
VK_HOME:
|
|
|
|
begin
|
|
|
|
DecodeDate(Date, Y, M, D);
|
|
|
|
if D = 1 then
|
|
|
|
mvSpinButtonClick(self, btPrev)
|
|
|
|
else
|
|
|
|
Date := EncodeDate(Y, M, 1);
|
|
|
|
end;
|
|
|
|
VK_END:
|
|
|
|
begin
|
|
|
|
DecodeDate(Date, Y, M, D);
|
|
|
|
if D = DaysInMonth(Y, M) then begin
|
|
|
|
if M = 12 then begin
|
|
|
|
M := 1;
|
|
|
|
Inc(Y);
|
|
|
|
end else
|
|
|
|
Inc(M);
|
|
|
|
end;
|
|
|
|
Date := EncodeDate(Y, M, DaysInMonth(Y, M));
|
2008-02-03 12:05:55 +00:00
|
|
|
end;
|
|
|
|
{$IFNDEF LCL}
|
2016-07-30 11:45:12 +00:00
|
|
|
VK_TAB:
|
2008-02-03 12:05:55 +00:00
|
|
|
if ssShift in Shift then
|
2016-07-30 11:45:12 +00:00
|
|
|
Windows.SetFocus(GetNextDlgTabItem(GetParent(Handle), Handle, False))
|
2008-02-03 12:05:55 +00:00
|
|
|
else
|
2016-07-30 11:45:12 +00:00
|
|
|
Windows.SetFocus(GetNextDlgTabItem(GetParent(Handle), Handle, True));
|
2008-02-03 12:05:55 +00:00
|
|
|
{$ENDIF}
|
2016-07-30 11:45:12 +00:00
|
|
|
VK_F10:
|
|
|
|
if (ssShift in Shift) and not Assigned(PopupMenu) then begin
|
2008-02-03 12:05:55 +00:00
|
|
|
PopupPoint := GetClientOrigin;
|
2016-07-30 11:45:12 +00:00
|
|
|
FDefaultPopup.Popup(PopupPoint.x + 10, PopupPoint.y + 10);
|
2008-02-03 12:05:55 +00:00
|
|
|
end;
|
2016-07-30 11:45:12 +00:00
|
|
|
VK_APPS:
|
|
|
|
if not Assigned(PopupMenu) then begin
|
2008-02-03 12:05:55 +00:00
|
|
|
PopupPoint := GetClientOrigin;
|
2016-07-30 11:45:12 +00:00
|
|
|
FDefaultPopup.Popup(PopupPoint.x + 10, PopupPoint.y + 10);
|
2008-02-03 12:05:55 +00:00
|
|
|
end;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
{=====}
|
2016-07-30 11:45:12 +00:00
|
|
|
procedure TVpMonthView.SetRightClickChangeDate(const v: Boolean);
|
2008-02-03 12:05:55 +00:00
|
|
|
begin
|
|
|
|
if v <> FRightClickChangeDate then
|
|
|
|
FRightClickChangeDate := v;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
procedure TVpMonthView.SetWeekStartsOn(Value: TVpDayType);
|
|
|
|
begin
|
|
|
|
if Value <> FWeekStartsOn then begin
|
|
|
|
FWeekStartsOn := Value;
|
|
|
|
Invalidate;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
{=====}
|
|
|
|
|
|
|
|
end.
|