mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-08 09:52:42 +02:00
104 lines
3.0 KiB
ObjectPascal
104 lines
3.0 KiB
ObjectPascal
{
|
|
CalControlWrapper
|
|
- - - - - - - - - - - - - - - - -
|
|
Author: Zoran Vučenović
|
|
Зоран Вученовић
|
|
|
|
This unit is part of DateTimeCtrls package for Lazarus.
|
|
|
|
By default, TDateTimePicker uses LCL's TCalendar to represent the
|
|
drop-down calendar, but you can use some other calendar control instead.
|
|
|
|
In order to use another calendar control, you should "wrap" that control with
|
|
a CalendarControlWrapper.
|
|
|
|
To be used by DateTimePicker, the calendar control must at least provide
|
|
a way to determine whether the coordinates are on the date (when this control
|
|
gets clicked, we must decide if the date has just been chosen - then we should
|
|
respond by closing the drop-down form and setting the date from calendar to
|
|
DateTimePicker - for example in LCL's TCalendar we will respond when the
|
|
calendar is clicked on date, but not when the user clicks in title area changing
|
|
months or years, then we let the user keep browsing the calendar).
|
|
|
|
When creating new wrapper, there are four abstract methods which need to be
|
|
overriden. Please see the coments in code below.
|
|
|
|
-----------------------------------------------------------
|
|
LICENCE
|
|
- - - -
|
|
Modified LGPL -- see the file COPYING.modifiedLGPL.
|
|
|
|
-----------------------------------------------------------
|
|
NO WARRANTY
|
|
- - - - - -
|
|
There is no warranty whatsoever.
|
|
|
|
-----------------------------------------------------------
|
|
BEST REGARDS TO LAZARUS COMMUNITY!
|
|
- - - - - - - - - - - - - - - - - -
|
|
I do hope the DateTimeCtrls package will be useful.
|
|
}
|
|
unit calcontrolwrapper;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Controls;
|
|
|
|
type
|
|
|
|
{ TCalendarControlWrapper }
|
|
|
|
TCalendarControlWrapper = class
|
|
private
|
|
FCalendarControl: TControl;
|
|
public
|
|
{ There are four methods that derived classes should override: }
|
|
|
|
{ Should be overriden to just return the class of the calendar control. }
|
|
class function GetCalendarControlClass: TControlClass; virtual abstract;
|
|
|
|
{ Should be overriden to set the date in the calendar control. }
|
|
procedure SetDate(Date: TDate); virtual abstract;
|
|
|
|
{ Should be overriden to get the date from the calendar control. }
|
|
function GetDate: TDate; virtual abstract;
|
|
|
|
{ This function should return True if coordinates (X, Y) are on the date in
|
|
the calendar control (DateTimePicker calls this function when the calendar
|
|
is clicked, to determine whether the drop-down calendar should return the
|
|
date or not). }
|
|
function AreCoordinatesOnDate(X, Y: Integer): Boolean; virtual abstract;
|
|
|
|
function GetCalendarControl: TControl;
|
|
constructor Create; virtual;
|
|
destructor Destroy; override;
|
|
end;
|
|
|
|
TCalendarControlWrapperClass = class of TCalendarControlWrapper;
|
|
|
|
implementation
|
|
|
|
{ TCalendarControlWrapper }
|
|
|
|
function TCalendarControlWrapper.GetCalendarControl: TControl;
|
|
begin
|
|
Result := FCalendarControl;
|
|
end;
|
|
|
|
constructor TCalendarControlWrapper.Create;
|
|
begin
|
|
FCalendarControl := GetCalendarControlClass.Create(nil);
|
|
end;
|
|
|
|
destructor TCalendarControlWrapper.Destroy;
|
|
begin
|
|
FCalendarControl.Free;
|
|
inherited Destroy;
|
|
end;
|
|
|
|
end.
|
|
|