You've already forked lazarus-ccr
Initial commit v0.0.1
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3519 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
624
components/longtimer/aboutlongtimerunit.pas
Normal file
624
components/longtimer/aboutlongtimerunit.pas
Normal file
@ -0,0 +1,624 @@
|
||||
{ TAboutComponent and TAboutBox Component License
|
||||
|
||||
Copyright (C) 2014 Gordon Bamber minesadorada@charcodelvalle.com
|
||||
|
||||
This library is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU Library General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public License
|
||||
along with this library; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
}
|
||||
|
||||
// Change the name of this unit and its PAS file to be unique to your component
|
||||
// Unit About<yourcomponentname>unit
|
||||
unit AboutLongTimerunit;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, Controls, Dialogs, Forms, Graphics, LResources, SysUtils,
|
||||
ExtCtrls, StdCtrls, StrUtils,Buttons,PropEdits;
|
||||
const
|
||||
C_DEFAULTLICENSEFORMWIDTH = 500;
|
||||
C_DEFAULTLICENSEFORMWIDTH_LINUX = C_DEFAULTLICENSEFORMWIDTH + 100;
|
||||
C_DEFAULTLICENSEFORMHEIGHT = 400;
|
||||
C_DEFAULTLICENSEFORMHEIGHT_LINUX = C_DEFAULTLICENSEFORMHEIGHT + 50;
|
||||
|
||||
type
|
||||
TLicenseType = (abNone, abGPL, abLGPL, abMIT, abModifiedGPL, abProprietry);
|
||||
tAboutBox=Class; // Forward declaration
|
||||
// Do Search/Replace to change all instances of TAboutComonent
|
||||
// to TAbout<yourcomponentname>
|
||||
TAboutLongTimer = class(TCustomIdleTimer)
|
||||
// This class can descend from any component class (TGraphicControl etc
|
||||
private
|
||||
{ Private declarations }
|
||||
fAboutBox: tAboutBox;
|
||||
procedure SetMyComponentName(Const Avalue:String);
|
||||
procedure SetAboutBoxWidth(Const AValue:Integer);
|
||||
procedure SetAboutBoxHeight(Const AValue:Integer);
|
||||
procedure SetAboutBoxDescription(Const AValue:String);
|
||||
procedure SetAboutBoxFontName(Const AValue:String);
|
||||
procedure SetAboutBoxFontSize(Const AValue:Integer);
|
||||
procedure SetAboutBoxBitmap(Const AValue:TBitmap);
|
||||
procedure SetAboutBoxBackgroundColor(Const AValue:TColor);
|
||||
procedure SetAboutBoxTitle(Const AValue:String);
|
||||
|
||||
procedure SetAboutBoxVersion(Const AValue:String);
|
||||
procedure SetAboutBoxAuthorname(Const AValue:String);
|
||||
procedure SetAboutBoxOrganisation(Const AValue:String);
|
||||
procedure SetAboutBoxAuthorEmail(Const AValue:String);
|
||||
procedure SetAboutBoxBackgroundResourceName(Const AValue:String);
|
||||
procedure SetAboutBoxLicenseType(Const AValue:String);
|
||||
procedure SetAboutBoxStretchBackgroundImage(Const AValue:Boolean);
|
||||
protected
|
||||
{ Protected declarations }
|
||||
public
|
||||
{ Public declarations }
|
||||
constructor Create(AOwner: TComponent); override; // Constructor must be public
|
||||
destructor Destroy; override; // Destructor must be public
|
||||
|
||||
// Set these (hidden) properties in your inherited component's Create procedure
|
||||
property AboutBoxComponentName:String write SetMyComponentName;
|
||||
property AboutBoxWidth:Integer write SetAboutBoxWidth;
|
||||
property AboutBoxHeight:Integer write SetAboutBoxHeight;
|
||||
property AboutBoxDescription:String write SetAboutBoxDescription;
|
||||
property AboutBoxFontName:String write SetAboutBoxFontName;
|
||||
property AboutBoxFontSize:Integer write SetAboutBoxFontSize;
|
||||
property AboutBoxBackgroundColor:TColor write SetAboutBoxBackgroundColor;
|
||||
property AboutBoxTitle:String write SetAboutBoxTitle;
|
||||
|
||||
property AboutBoxVersion:String write SetAboutBoxVersion;
|
||||
property AboutBoxAuthorname:String write SetAboutBoxAuthorname;
|
||||
property AboutBoxOrganisation:String write SetAboutBoxOrganisation;
|
||||
property AboutBoxAuthorEmail:String write SetAboutBoxAuthorEmail;
|
||||
property AboutBoxLicenseType:String write SetAboutBoxLicenseType;
|
||||
property AboutBoxBackgroundResourceName:String write SetAboutBoxBackgroundResourceName;
|
||||
property AboutBoxStretchBackgroundImage:Boolean write SetAboutBoxStretchBackgroundImage;
|
||||
published
|
||||
// The clickable 'About' property will automaticcally appear in any component
|
||||
// descended from TAboutLongTimer
|
||||
|
||||
// About this component...
|
||||
property About: tAboutBox read fAboutBox write fAboutBox;
|
||||
end;
|
||||
TAboutbox = class(TComponent)
|
||||
private
|
||||
{ Private declarations }
|
||||
fDialog: TForm;
|
||||
fBackgroundbitmap: TBitMap;
|
||||
fBackgroundResourceName:String;
|
||||
fDescription: TStrings;
|
||||
fDialogTitle, fVersion, fAuthorname, fAuthorEmail, fOrganisation,
|
||||
fComponentName: string;
|
||||
fDialogHeight, fDialogWidth: integer;
|
||||
fStretchBackground: boolean;
|
||||
fFont: TFont;
|
||||
fColor: TColor;
|
||||
fLicenseType: TLicenseType;
|
||||
procedure SetBackgroundBitmap(const AValue: TBitMap);
|
||||
procedure SetDescriptionStrings(const AValue: TStrings);
|
||||
procedure SetFont(const AValue: TFont);
|
||||
procedure ShowLicense(Sender: TObject);
|
||||
procedure SetDialogTitle(Const AValue:String);
|
||||
protected
|
||||
{ Protected declarations }
|
||||
public
|
||||
{ Public declarations }
|
||||
procedure ShowDialog;
|
||||
constructor Create(AOwner: TComponent); override;
|
||||
destructor Destroy; override;
|
||||
published
|
||||
{ Published declarations }
|
||||
// Set these properties in your component Constructor method
|
||||
property BackGround: TBitMap read fBackgroundbitmap write SetBackgroundBitmap;
|
||||
property BackgroundResourceName:String read fBackgroundResourceName write fBackgroundResourceName;
|
||||
property Description: TStrings read fDescription write SetDescriptionStrings;
|
||||
property Title: string read fDialogTitle write SetDialogTitle;
|
||||
property Height: integer read fDialogHeight write fDialogHeight;
|
||||
property Width: integer read fDialogWidth write fDialogWidth;
|
||||
property Font: TFont read fFont write SetFont;
|
||||
property BackGroundColor: TColor read fColor write fColor;
|
||||
property StretchBackground: boolean read fStretchBackground
|
||||
write fStretchBackground default False;
|
||||
property Version: string read fVersion write fVersion;
|
||||
property Authorname: string read fAuthorname write fAuthorname;
|
||||
property Organisation: string read fOrganisation write fOrganisation;
|
||||
property AuthorEmail: string read fAuthorEmail write fAuthorEmail;
|
||||
property ComponentName: string read fComponentName write fComponentName;
|
||||
property LicenseType: TLicenseType read fLicenseType write fLicenseType;
|
||||
end;
|
||||
|
||||
// Declaration for the 'About' property editor
|
||||
TAboutPropertyEditor = class(TClassPropertyEditor)
|
||||
public
|
||||
procedure Edit; override;
|
||||
function GetAttributes: TPropertyAttributes; override;
|
||||
end;
|
||||
|
||||
procedure Register;
|
||||
|
||||
{For i8n if required}
|
||||
resourcestring
|
||||
rs_Componentname='Component name';
|
||||
rs_About='About';
|
||||
rs_License='License';
|
||||
rs_By='By';
|
||||
rs_For='For';
|
||||
rs_DatafileMissing='Resource datafile license.lrs is missing';
|
||||
rs_LicenseTextError='There is something wrong with the Licence text';
|
||||
rs_AboutBoxError = 'Subcomponent TAboutBox Error';
|
||||
|
||||
|
||||
implementation
|
||||
|
||||
{ TABoutBox}
|
||||
|
||||
constructor TAboutbox.Create(AOwner: TComponent);
|
||||
begin
|
||||
inherited Create(AOwner);
|
||||
fBackgroundbitmap := TBitMap.Create;
|
||||
fDescription := TStringList.Create;
|
||||
fFont := TFont.Create;
|
||||
fColor := clDefault;
|
||||
fLicenseType := abNone;
|
||||
fComponentName:=rs_Componentname;
|
||||
fDialogTitle:=rs_About + ' ' + fComponentName;
|
||||
|
||||
fDialogWidth:=320;
|
||||
fDialogHeight:=280;
|
||||
fVersion:='1.0.0.0';
|
||||
fLicenseType:=abNone;
|
||||
end;
|
||||
|
||||
destructor TAboutbox.Destroy;
|
||||
begin
|
||||
FreeAndNil(fFont);
|
||||
FreeAndNil(fDescription);
|
||||
FreeAndNil(fBackgroundbitmap);
|
||||
inherited Destroy;
|
||||
end;
|
||||
procedure TAboutbox.SetDialogTitle(Const AValue:String);
|
||||
begin
|
||||
if AnsiContainsText(fDialogTitle, rs_About) then
|
||||
fDialogTitle := AValue
|
||||
else
|
||||
fDialogTitle := rs_About + ' ' + Avalue;
|
||||
end;
|
||||
|
||||
procedure TAboutbox.ShowDialog;
|
||||
var
|
||||
OKbutton, LicenseButton: TBitBtn;
|
||||
lbl_Description: TLabel;
|
||||
img_BackGround: TImage;
|
||||
sz: string;
|
||||
iCount: integer;
|
||||
r:TLResource;
|
||||
begin
|
||||
fDialog := TForm.CreateNew(nil);
|
||||
try //.. finally FreeAndNil everything
|
||||
with fDialog do
|
||||
begin
|
||||
// Set Dialog properties
|
||||
position := poScreenCenter;
|
||||
borderstyle := bsToolWindow;
|
||||
Caption := fDialogTitle;
|
||||
formstyle := fsSystemStayOnTop;
|
||||
color := fColor;
|
||||
font := fFont;
|
||||
if (fDialogHeight > 0) then
|
||||
Height := fDialogHeight
|
||||
else
|
||||
Height := 240;
|
||||
if (fDialogWidth > 0) then
|
||||
Width := fDialogWidth
|
||||
else
|
||||
Width := 320;
|
||||
|
||||
// Create a background image
|
||||
img_BackGround := Timage.Create(fDialog);
|
||||
with img_BackGround do
|
||||
// Set img_BackGround properties
|
||||
begin
|
||||
Align := alClient;
|
||||
Stretch := fStretchBackground;
|
||||
// Bitmap assigned?
|
||||
if Assigned(fBackgroundbitmap) then
|
||||
Picture.Assign(fBackgroundbitmap);
|
||||
// Resource file?
|
||||
r := LazarusResources.Find(fBackgroundResourceName);
|
||||
if r <> nil then
|
||||
img_BackGround.Picture.LoadFromLazarusResource(fBackgroundResourceName);
|
||||
SendToBack;
|
||||
parent := fDialog;
|
||||
end;
|
||||
|
||||
// Create a BitBtn button
|
||||
okbutton := TBitBtn.Create(fDialog);
|
||||
// Set BitBtn properties
|
||||
with okButton do
|
||||
begin
|
||||
Kind := bkClose;
|
||||
left := (fDialog.Width div 2) - Width div 2;
|
||||
top := fDialog.Height - Height - 10;
|
||||
ParentFont:=False;
|
||||
parent := fDialog;
|
||||
end;
|
||||
|
||||
// Create a License Button
|
||||
LicenseButton := TBitBtn.Create(fDialog);
|
||||
if (fLicenseType <> abNone) then
|
||||
// Put it on the right
|
||||
begin
|
||||
LicenseButton.Top := OKButton.Top;
|
||||
LicenseButton.Caption := rs_License + '...';
|
||||
LicenseButton.left := Width - LicenseButton.Width - 10;
|
||||
LicenseButton.OnClick := @ShowLicense;
|
||||
LicenseButton.ParentFont:=False;
|
||||
LicenseButton.Parent := fDialog;
|
||||
end;
|
||||
|
||||
|
||||
// Create a label control
|
||||
lbl_Description := Tlabel.Create(fDialog);
|
||||
// Set label properties
|
||||
with lbl_Description do
|
||||
begin
|
||||
left := 8;
|
||||
Top := 30;
|
||||
Width := fDialog.Width - 8;
|
||||
Height := fDialog.Height - 30;
|
||||
Autosize := False;
|
||||
ParentFont := True;
|
||||
Alignment := taCenter;
|
||||
end;
|
||||
|
||||
// Build up Label text
|
||||
sz := '';
|
||||
// Component name
|
||||
if fComponentName <> '' then
|
||||
sz += fComponentName + LineEnding;
|
||||
// Author name (+Email)
|
||||
if fAuthorname <> '' then
|
||||
sz += rs_By + ': ' + fAuthorname + LineEnding;
|
||||
if fAuthorEmail <> '' then
|
||||
sz += ' (' + fAuthorEmail + ')' + LineEnding
|
||||
else
|
||||
sz += LineEnding;
|
||||
|
||||
sz += LineEnding;
|
||||
|
||||
// Version
|
||||
if fVersion <> '' then
|
||||
sz += 'Version: ' + fVersion + LineEnding;
|
||||
// License
|
||||
case fLicenseType of
|
||||
abGPL: sz += rs_License + ': GPL' + LineEnding;
|
||||
abLGPL: sz += rs_License + ': LGPL' + LineEnding;
|
||||
abMIT: sz += rs_License + ': M.I.T.' + LineEnding;
|
||||
abModifiedGPL: sz += rs_License + ': Modified GPL' + LineEnding;
|
||||
abProprietry: sz += rs_License + ': Proprietry' + LineEnding;
|
||||
end;
|
||||
if fOrganisation <> '' then
|
||||
sz += rs_For + ': ' + fOrganisation + LineEnding;
|
||||
if fDescription.Count > 0 then
|
||||
begin
|
||||
sz += LineEnding;
|
||||
for iCount := 1 to fDescription.Count do
|
||||
sz += fDescription[iCount - 1] + LineEnding;
|
||||
end;
|
||||
|
||||
lbl_Description.Caption := sz;
|
||||
lbl_Description.parent := fDialog;
|
||||
// Display the dialog modally
|
||||
ShowModal;
|
||||
end;
|
||||
finally
|
||||
// Free all resources
|
||||
FreeAndNil(img_BackGround);
|
||||
FreeAndNil(lbl_Description);
|
||||
FreeAndNil(LicenseButton);
|
||||
FreeAndNil(okbutton);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TAboutbox.ShowLicense(Sender: TObject);
|
||||
// Triggered by License button Click
|
||||
var
|
||||
sLicenseString: string;
|
||||
theList: TStringList;
|
||||
f: integer;
|
||||
LicenceForm: TForm;
|
||||
lblText: TLabel;
|
||||
closebuttton: TBitBtn;
|
||||
r: TLResource;
|
||||
szLicenseFile: string;
|
||||
begin
|
||||
// Quit early?
|
||||
if fLicenseType = abNone then
|
||||
Exit;
|
||||
|
||||
// Set to resource name in license.lrs
|
||||
case fLicenseType of
|
||||
abNone: szLicenseFile := '';
|
||||
abGPL: szLicenseFile := 'gpl.txt';
|
||||
abLGPL: szLicenseFile := 'lgpl.txt';
|
||||
abMIT: szLicenseFile := 'mit.txt';
|
||||
abModifiedgpl: szLicenseFile := 'modifiedgpl.txt';
|
||||
end;
|
||||
|
||||
|
||||
// Use a string list to split the text file into lines
|
||||
theList := TStringList.Create;
|
||||
// Create a window, label and close button on-the-fly
|
||||
LicenceForm := TForm.Create(nil);
|
||||
lblText := TLabel.Create(LicenceForm);
|
||||
closebuttton := TBitBtn.Create(LicenceForm);
|
||||
// Load up the text into variable 'sLicenseString'
|
||||
sLicenseString := LineEnding + LineEnding + fComponentName + LineEnding;
|
||||
try
|
||||
try
|
||||
begin
|
||||
// Load license text from resource string
|
||||
r := LazarusResources.Find(szLicenseFile);
|
||||
if r = nil then
|
||||
raise Exception.Create(rs_DatafileMissing);
|
||||
thelist.Add(r.Value);
|
||||
for f := 0 to TheList.Count - 1 do
|
||||
sLicenseString += TheList[f] + LineEnding;
|
||||
end;
|
||||
except
|
||||
On e: Exception do
|
||||
MessageDlg(rs_AboutBoxError,
|
||||
rs_LicenseTextError, mtError, [mbOK], 0);
|
||||
end;
|
||||
|
||||
// Replace boilerplate text if possible
|
||||
sLicenseString := AnsiReplaceText(sLicenseString, '<year>',
|
||||
{$I %DATE%}
|
||||
);
|
||||
sLicenseString := AnsiReplaceText(sLicenseString, '<name of author>', fAuthorname);
|
||||
sLicenseString := AnsiReplaceText(sLicenseString, '<contact>',
|
||||
'(' + fAuthorEmail + ')');
|
||||
sLicenseString := AnsiReplaceText(sLicenseString, '<copyright holders>',
|
||||
fOrganisation);
|
||||
|
||||
// Make up the form window and controls
|
||||
with LicenceForm do
|
||||
begin
|
||||
// Form
|
||||
{$IFDEF WINDOWS}
|
||||
// More compact GUI?
|
||||
Width := C_DEFAULTLICENSEFORMWIDTH;
|
||||
Height := C_DEFAULTLICENSEFORMHEIGHT;
|
||||
{$ELSE WINDOWS}
|
||||
Width := C_DEFAULTLICENSEFORMWIDTH_LINUX;
|
||||
Height := C_DEFAULTLICENSEFORMHEIGHT_LINUX;
|
||||
{$ENDIF}
|
||||
// autosize:=true;
|
||||
// If you enable autosize, the button placement goes awry!
|
||||
|
||||
// The Modified GPL has an extra clause
|
||||
if (szLicenseFile = 'modifiedgpl.txt') or
|
||||
(Pos('As a special exception', sLicenseString) > 0) then
|
||||
Height := Height + 100;
|
||||
position := poScreenCenter;
|
||||
borderstyle := bsToolWindow;
|
||||
Caption := fComponentName + ': Licensing';
|
||||
formstyle := fsSystemStayOnTop;
|
||||
|
||||
// Label
|
||||
lblText.Align := alClient;
|
||||
lblText.Alignment := taCenter;
|
||||
lblText.Caption := sLicenseString;
|
||||
lblText.Parent := LicenceForm;
|
||||
|
||||
// Close Button
|
||||
closebuttton.Kind := bkClose;
|
||||
closebuttton.left := (Width div 2) - closebuttton.Width div 2;
|
||||
closebuttton.top := Height - closebuttton.Height - 10;
|
||||
closebuttton.parent := LicenceForm;
|
||||
// Show modally over the existing modal form
|
||||
PopupParent := TForm(Sender);
|
||||
ShowModal;
|
||||
end;
|
||||
finally
|
||||
// Free up all component created resources from memory
|
||||
FreeAndNil(theList);
|
||||
FreeAndNil(lblText);
|
||||
FreeAndNil(closebuttton);
|
||||
FreeAndNil(LicenceForm);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TAboutbox.SetBackgroundBitmap(const AValue: TBitMap);
|
||||
begin
|
||||
if Assigned(AValue) then
|
||||
fBackgroundbitmap.Assign(AValue);
|
||||
end;
|
||||
|
||||
procedure TAboutbox.SetDescriptionStrings(const AValue: TStrings);
|
||||
begin
|
||||
if Assigned(AValue) then
|
||||
fDescription.Assign(Avalue);
|
||||
end;
|
||||
|
||||
procedure TAboutbox.SetFont(const AValue: TFont);
|
||||
begin
|
||||
if Assigned(AValue) then
|
||||
fFont.Assign(AValue);
|
||||
end;
|
||||
|
||||
{ TAboutLongTimer }
|
||||
|
||||
procedure Register;
|
||||
begin
|
||||
RegisterPropertyEditor(TypeInfo(TAboutbox),
|
||||
TAboutLongTimer, 'About', TAboutPropertyEditor);
|
||||
end;
|
||||
|
||||
procedure TAboutPropertyEditor.Edit;
|
||||
// Communicate with the component properties
|
||||
Var
|
||||
AAboutBox:TAboutBox;
|
||||
begin
|
||||
AAboutBox:=TAboutBox(GetObjectValue(TAboutBox));
|
||||
AABoutBox.ShowDialog;
|
||||
end;
|
||||
|
||||
function TAboutPropertyEditor.GetAttributes: TPropertyAttributes;
|
||||
// Show the ellipsis
|
||||
begin
|
||||
Result := [paDialog, paReadOnly];
|
||||
end;
|
||||
|
||||
// Sets for AboutBox dialog properties
|
||||
procedure TAboutLongTimer.SetMyComponentName(Const Avalue:String);
|
||||
begin
|
||||
fAboutBox.ComponentName:=AValue;
|
||||
fAboutBox.Title:=AValue;
|
||||
end;
|
||||
procedure TAboutLongTimer.SetAboutBoxWidth(Const AValue:Integer);
|
||||
begin
|
||||
fAboutBox.Width:=Avalue;
|
||||
end;
|
||||
procedure TAboutLongTimer.SetAboutBoxHeight(Const AValue:Integer);
|
||||
begin
|
||||
fAboutBox.Height:=Avalue;
|
||||
end;
|
||||
procedure TAboutLongTimer.SetAboutBoxDescription(Const AValue:String);
|
||||
begin
|
||||
fAboutBox.Description.Clear;
|
||||
fAboutBox.Description.Add(AValue);
|
||||
end;
|
||||
procedure TAboutLongTimer.SetAboutBoxFontName(Const AValue:String);
|
||||
begin
|
||||
fAboutBox.Font.Name:=AValue;
|
||||
end;
|
||||
procedure TAboutLongTimer.SetAboutBoxFontSize(Const AValue:Integer);
|
||||
begin
|
||||
if (AValue > 6) then fAboutBox.Font.Size:=AValue;
|
||||
end;
|
||||
procedure TAboutLongTimer.SetAboutBoxTitle(Const AValue:String);
|
||||
begin
|
||||
fAboutBox.Title:=AValue;
|
||||
end;
|
||||
procedure TAboutLongTimer.SetAboutBoxBitmap(Const AValue:TBitmap);
|
||||
begin
|
||||
If Assigned(Avalue) then fAboutBox.Assign(AValue);
|
||||
end;
|
||||
procedure TAboutLongTimer.SetAboutBoxBackgroundColor(Const AValue:TColor);
|
||||
begin
|
||||
fAboutBox.BackGroundColor:=AValue;;
|
||||
end;
|
||||
procedure TAboutLongTimer.SetAboutBoxVersion(Const AValue:String);
|
||||
begin
|
||||
fAboutBox.Version:=AValue;
|
||||
end;
|
||||
procedure TAboutLongTimer.SetAboutBoxAuthorname(Const AValue:String);
|
||||
begin
|
||||
fAboutBox.Authorname:=AValue;
|
||||
end;
|
||||
procedure TAboutLongTimer.SetAboutBoxOrganisation(Const AValue:String);
|
||||
begin
|
||||
fAboutBox.Organisation:=AValue;
|
||||
end;
|
||||
procedure TAboutLongTimer.SetAboutBoxAuthorEmail(Const AValue:String);
|
||||
begin
|
||||
fAboutBox.AuthorEmail:=AValue;
|
||||
end;
|
||||
procedure TAboutLongTimer.SetAboutBoxBackgroundResourceName(Const AValue:String);
|
||||
begin
|
||||
fAboutBox.BackgroundResourceName:=AValue;
|
||||
end;
|
||||
procedure TAboutLongTimer.SetAboutBoxLicenseType(Const AValue:string);
|
||||
begin
|
||||
Case Upcase(AValue) of
|
||||
'GPL':fAboutBox.LicenseType:=abGPL;
|
||||
'LGPL':fAboutBox.LicenseType:=abLGPL;
|
||||
'MIT':fAboutBox.LicenseType:=abMIT;
|
||||
'MODIFIEDGPL':fAboutBox.LicenseType:=abModifiedGPL;
|
||||
'PROPRIETRY':fAboutBox.LicenseType:=abProprietry;
|
||||
else
|
||||
fAboutBox.LicenseType:=abNone;
|
||||
end;
|
||||
end;
|
||||
procedure TAboutLongTimer.SetAboutBoxStretchBackgroundImage(Const AValue:Boolean);
|
||||
begin
|
||||
fAboutBox.StretchBackground:=AValue;
|
||||
end;
|
||||
|
||||
// End Sets
|
||||
|
||||
constructor TAboutLongTimer.Create(AOwner: TComponent);
|
||||
var
|
||||
TempImage: TPicture;
|
||||
r:TLResource;
|
||||
begin
|
||||
// Inherit default properties
|
||||
inherited Create(AOwner);
|
||||
// Use tAboutBox as a subcomponent
|
||||
fAboutBox := tAboutBox.Create(nil);
|
||||
with fAboutBox do
|
||||
begin
|
||||
SetSubComponent(True); // Tell the IDE to store the modified properties
|
||||
// Default of TAboutLongTimer values override TAbouBox.Create defaults
|
||||
ComponentName := 'TAboutLongTimer';
|
||||
Description.Add('This is to demonstrate'); //TStrings
|
||||
Description.Add('the use of TAboutLongTimer'); //TStrings
|
||||
Description.Add('Set its properties in your Constructor'); //TStrings
|
||||
Width := 320; //Integer
|
||||
Height := 280; //Integer
|
||||
// Set any Font properties or subproperties here
|
||||
// Font.Name := 'Arial';
|
||||
Font.Color := clNavy;
|
||||
Font.Size:=10;
|
||||
// BackGroundColor shows if no BackGround image is set
|
||||
BackGroundColor := clWindow;
|
||||
Version := '1.0.0.0';
|
||||
AuthorName := 'Gordon Bamber';
|
||||
AuthorEmail := 'minesadorada@charcodelvalle.com';
|
||||
Organisation := 'Public Domain';
|
||||
|
||||
//Types available: abNone, abGPL, abLGPL, abMIT, abModifiedGPL, abProprietry
|
||||
LicenseType := abLGPL;
|
||||
|
||||
// BackGround image is optional
|
||||
// It must be in a resouce file in the initialization section
|
||||
|
||||
//== How to set a background image to your About dialog --
|
||||
// The BackGround property is a TBitmap
|
||||
// Use a Temporary TPicture to load a JPG.
|
||||
// NOTE a PNG file will create an error when your component is used in an application!
|
||||
r := LazarusResources.Find(fAboutBox.BackgroundResourceName);
|
||||
if r <> nil then
|
||||
begin
|
||||
TempImage := TPicture.Create;
|
||||
// .lrs file is in the initialization section
|
||||
TempImage.LoadFromLazarusResource(fAboutBox.BackgroundResourceName);
|
||||
BackGround.Assign(TempImage.Bitmap);
|
||||
TempImage.Free;
|
||||
StretchBackground := fAboutBox.StretchBackground; //Boolean
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
destructor TAboutLongTimer.Destroy;
|
||||
begin
|
||||
FreeAndNil(fAboutBox);
|
||||
inherited Destroy;
|
||||
end;
|
||||
initialization
|
||||
{$I license.lrs}
|
||||
|
||||
end.
|
BIN
components/longtimer/demo/longtimerdemo.ico
Normal file
BIN
components/longtimer/demo/longtimerdemo.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 134 KiB |
174
components/longtimer/demo/longtimerdemo.lpi
Normal file
174
components/longtimer/demo/longtimerdemo.lpi
Normal file
@ -0,0 +1,174 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="9"/>
|
||||
<PathDelim Value="\"/>
|
||||
<General>
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
<MainUnit Value="0"/>
|
||||
<Title Value="LongTimer Demo"/>
|
||||
<ResourceType Value="res"/>
|
||||
<UseXPManifest Value="True"/>
|
||||
<Icon Value="0"/>
|
||||
</General>
|
||||
<i18n>
|
||||
<EnableI18N LFM="False"/>
|
||||
</i18n>
|
||||
<VersionInfo>
|
||||
<StringTable ProductVersion=""/>
|
||||
</VersionInfo>
|
||||
<BuildModes Count="3">
|
||||
<Item1 Name="Default" Default="True"/>
|
||||
<Item2 Name="Debug">
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="project1"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<Parsing>
|
||||
<SyntaxOptions>
|
||||
<IncludeAssertionCode Value="True"/>
|
||||
</SyntaxOptions>
|
||||
</Parsing>
|
||||
<CodeGeneration>
|
||||
<Checks>
|
||||
<IOChecks Value="True"/>
|
||||
<RangeChecks Value="True"/>
|
||||
<OverflowChecks Value="True"/>
|
||||
<StackChecks Value="True"/>
|
||||
</Checks>
|
||||
</CodeGeneration>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<DebugInfoType Value="dsDwarf2Set"/>
|
||||
<UseHeaptrc Value="True"/>
|
||||
<UseExternalDbgSyms Value="True"/>
|
||||
</Debugging>
|
||||
<Options>
|
||||
<Win32>
|
||||
<GraphicApplication Value="True"/>
|
||||
</Win32>
|
||||
</Options>
|
||||
</Linking>
|
||||
<Other>
|
||||
<CompilerMessages>
|
||||
<MsgFileName Value=""/>
|
||||
</CompilerMessages>
|
||||
<CompilerPath Value="$(CompPath)"/>
|
||||
</Other>
|
||||
</CompilerOptions>
|
||||
</Item2>
|
||||
<Item3 Name="Release">
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="longtimerdemo"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<OtherUnitFiles Value="."/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<CodeGeneration>
|
||||
<SmartLinkUnit Value="True"/>
|
||||
<Optimizations>
|
||||
<OptimizationLevel Value="3"/>
|
||||
</Optimizations>
|
||||
</CodeGeneration>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<GenerateDebugInfo Value="False"/>
|
||||
</Debugging>
|
||||
<LinkSmart Value="True"/>
|
||||
<Options>
|
||||
<Win32>
|
||||
<GraphicApplication Value="True"/>
|
||||
</Win32>
|
||||
</Options>
|
||||
</Linking>
|
||||
<Other>
|
||||
<CompilerMessages>
|
||||
<MsgFileName Value=""/>
|
||||
</CompilerMessages>
|
||||
<CompilerPath Value="$(CompPath)"/>
|
||||
</Other>
|
||||
</CompilerOptions>
|
||||
</Item3>
|
||||
</BuildModes>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<local>
|
||||
<FormatVersion Value="1"/>
|
||||
</local>
|
||||
</RunParams>
|
||||
<RequiredPackages Count="2">
|
||||
<Item1>
|
||||
<PackageName Value="longtimerpackage"/>
|
||||
<MinVersion Release="1" Valid="True"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<PackageName Value="LCL"/>
|
||||
</Item2>
|
||||
</RequiredPackages>
|
||||
<Units Count="2">
|
||||
<Unit0>
|
||||
<Filename Value="longtimerdemo.lpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<UnitName Value="longtimerdemo"/>
|
||||
</Unit0>
|
||||
<Unit1>
|
||||
<Filename Value="umainform.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<ComponentName Value="mainform"/>
|
||||
<HasResources Value="True"/>
|
||||
<ResourceBaseClass Value="Form"/>
|
||||
<UnitName Value="umainform"/>
|
||||
</Unit1>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="project1"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<Linking>
|
||||
<Options>
|
||||
<Win32>
|
||||
<GraphicApplication Value="True"/>
|
||||
</Win32>
|
||||
</Options>
|
||||
</Linking>
|
||||
<Other>
|
||||
<CompilerMessages>
|
||||
<MsgFileName Value=""/>
|
||||
</CompilerMessages>
|
||||
<CompilerPath Value="$(CompPath)"/>
|
||||
</Other>
|
||||
</CompilerOptions>
|
||||
<Debugging>
|
||||
<Exceptions Count="3">
|
||||
<Item1>
|
||||
<Name Value="EAbort"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<Name Value="ECodetoolError"/>
|
||||
</Item2>
|
||||
<Item3>
|
||||
<Name Value="EFOpenError"/>
|
||||
</Item3>
|
||||
</Exceptions>
|
||||
</Debugging>
|
||||
</CONFIG>
|
21
components/longtimer/demo/longtimerdemo.lpr
Normal file
21
components/longtimer/demo/longtimerdemo.lpr
Normal file
@ -0,0 +1,21 @@
|
||||
program longtimerdemo;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
uses
|
||||
{$IFDEF UNIX}{$IFDEF UseCThreads}
|
||||
cthreads,
|
||||
{$ENDIF}{$ENDIF}
|
||||
Interfaces, // this includes the LCL widgetset
|
||||
Forms, umainform;
|
||||
|
||||
{$R *.res}
|
||||
|
||||
begin
|
||||
Application.Title:='LongTimer Demo';
|
||||
RequireDerivedFormResource := True;
|
||||
Application.Initialize;
|
||||
Application.CreateForm(Tmainform, mainform);
|
||||
Application.Run;
|
||||
end.
|
||||
|
BIN
components/longtimer/demo/longtimerdemo.res
Normal file
BIN
components/longtimer/demo/longtimerdemo.res
Normal file
Binary file not shown.
159
components/longtimer/demo/umainform.lfm
Normal file
159
components/longtimer/demo/umainform.lfm
Normal file
@ -0,0 +1,159 @@
|
||||
object mainform: Tmainform
|
||||
Left = 1162
|
||||
Height = 264
|
||||
Top = 272
|
||||
Width = 437
|
||||
BorderIcons = [biSystemMenu, biMinimize]
|
||||
BorderStyle = bsSingle
|
||||
Caption = 'Application Title'
|
||||
ClientHeight = 264
|
||||
ClientWidth = 437
|
||||
DefaultMonitor = dmPrimary
|
||||
OnCreate = FormCreate
|
||||
Position = poScreenCenter
|
||||
LCLVersion = '1.2.4.0'
|
||||
object cmd_Close: TBitBtn
|
||||
Left = 104
|
||||
Height = 30
|
||||
Top = 224
|
||||
Width = 75
|
||||
DefaultCaption = True
|
||||
Kind = bkClose
|
||||
ModalResult = 11
|
||||
TabOrder = 0
|
||||
end
|
||||
object memo_ReportTimerEvent: TMemo
|
||||
Left = 192
|
||||
Height = 240
|
||||
Top = 8
|
||||
Width = 232
|
||||
Lines.Strings = (
|
||||
'Memo1'
|
||||
)
|
||||
TabOrder = 1
|
||||
end
|
||||
object cmd_StopTimer: TButton
|
||||
Left = 16
|
||||
Height = 25
|
||||
Top = 197
|
||||
Width = 75
|
||||
Caption = 'Stop Timer'
|
||||
OnClick = cmd_StopTimerClick
|
||||
TabOrder = 2
|
||||
end
|
||||
object cmd_StartTimer: TButton
|
||||
Left = 104
|
||||
Height = 25
|
||||
Top = 197
|
||||
Width = 75
|
||||
Caption = 'Start Timer'
|
||||
OnClick = cmd_StartTimerClick
|
||||
TabOrder = 3
|
||||
end
|
||||
object crp_SetTimer: TGroupBox
|
||||
Left = 8
|
||||
Height = 176
|
||||
Top = 8
|
||||
Width = 184
|
||||
Caption = 'Set up LongTimer'
|
||||
ClientHeight = 158
|
||||
ClientWidth = 180
|
||||
TabOrder = 4
|
||||
object Label1: TLabel
|
||||
Left = 16
|
||||
Height = 15
|
||||
Top = 16
|
||||
Width = 28
|
||||
Caption = 'Every'
|
||||
ParentColor = False
|
||||
end
|
||||
object cmb_IntervalType: TComboBox
|
||||
Left = 72
|
||||
Height = 23
|
||||
Top = 16
|
||||
Width = 100
|
||||
ItemHeight = 15
|
||||
ItemIndex = 0
|
||||
Items.Strings = (
|
||||
'Day'
|
||||
'Week'
|
||||
'Month'
|
||||
)
|
||||
OnChange = cmb_IntervalTypeChange
|
||||
Style = csDropDownList
|
||||
TabOrder = 0
|
||||
Text = 'Day'
|
||||
end
|
||||
object Label3: TLabel
|
||||
Left = 0
|
||||
Height = 15
|
||||
Top = 48
|
||||
Width = 61
|
||||
Caption = 'Day or Date'
|
||||
ParentColor = False
|
||||
end
|
||||
object cmb_weekordate: TComboBox
|
||||
Left = 72
|
||||
Height = 23
|
||||
Top = 44
|
||||
Width = 100
|
||||
Enabled = False
|
||||
ItemHeight = 15
|
||||
OnChange = cmb_weekordateChange
|
||||
Style = csDropDownList
|
||||
TabOrder = 1
|
||||
end
|
||||
object Label2: TLabel
|
||||
Left = 0
|
||||
Height = 15
|
||||
Top = 88
|
||||
Width = 61
|
||||
Caption = 'Time (24hr)'
|
||||
ParentColor = False
|
||||
end
|
||||
object cmb_Daily24Hour: TComboBox
|
||||
Left = 72
|
||||
Height = 23
|
||||
Top = 88
|
||||
Width = 100
|
||||
ItemHeight = 15
|
||||
ItemIndex = 0
|
||||
Items.Strings = (
|
||||
'Midnight'
|
||||
)
|
||||
OnChange = cmb_Daily24HourChange
|
||||
Style = csDropDownList
|
||||
TabOrder = 2
|
||||
Text = 'Midnight'
|
||||
end
|
||||
object cmb_SampleInterval: TComboBox
|
||||
Left = 48
|
||||
Height = 23
|
||||
Top = 128
|
||||
Width = 124
|
||||
ItemHeight = 15
|
||||
OnChange = cmb_SampleIntervalChange
|
||||
Style = csDropDownList
|
||||
TabOrder = 3
|
||||
end
|
||||
object Label4: TLabel
|
||||
Left = 0
|
||||
Height = 15
|
||||
Top = 128
|
||||
Width = 39
|
||||
Caption = 'Sample'
|
||||
ParentColor = False
|
||||
end
|
||||
end
|
||||
object LongTimer1: TLongTimer
|
||||
Enabled = False
|
||||
OnTimer = LongTimer1Timer
|
||||
OnStartTimer = LongTimer1StartTimer
|
||||
OnStopTimer = LongTimer1StopTimer
|
||||
IntervalType = lt3Monthly
|
||||
Daily24Hour = 10
|
||||
WeeklyDay = lt3Wednesday
|
||||
left = 8
|
||||
top = 8
|
||||
end
|
||||
end
|
174
components/longtimer/demo/umainform.pas
Normal file
174
components/longtimer/demo/umainform.pas
Normal file
@ -0,0 +1,174 @@
|
||||
unit umainform;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, Forms,
|
||||
Buttons, StdCtrls, uLongTimer;
|
||||
|
||||
{ Tmainform }
|
||||
type
|
||||
Tmainform = class(TForm)
|
||||
cmb_Daily24Hour: TComboBox;
|
||||
cmb_IntervalType: TComboBox;
|
||||
cmb_weekordate: TComboBox;
|
||||
cmd_Close: TBitBtn;
|
||||
cmd_StopTimer: TButton;
|
||||
cmd_StartTimer: TButton;
|
||||
cmb_SampleInterval: TComboBox;
|
||||
crp_SetTimer: TGroupBox;
|
||||
Label1: TLabel;
|
||||
Label2: TLabel;
|
||||
Label3: TLabel;
|
||||
Label4: TLabel;
|
||||
LongTimer1: TLongTimer;
|
||||
memo_ReportTimerEvent: TMemo;
|
||||
procedure cmb_SampleIntervalChange(Sender: TObject);
|
||||
procedure cmd_StopTimerClick(Sender: TObject);
|
||||
procedure cmd_StartTimerClick(Sender: TObject);
|
||||
procedure cmb_Daily24HourChange(Sender: TObject);
|
||||
procedure cmb_IntervalTypeChange(Sender: TObject);
|
||||
procedure cmb_weekordateChange(Sender: TObject);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure LongTimer1StartTimer(Sender: TObject);
|
||||
procedure LongTimer1StopTimer(Sender: TObject);
|
||||
procedure LongTimer1Timer(Sender: TObject);
|
||||
private
|
||||
{ private declarations }
|
||||
procedure PopulateWeekOrDate(Const i:Integer);
|
||||
|
||||
public
|
||||
{ public declarations }
|
||||
end;
|
||||
|
||||
var
|
||||
mainform: Tmainform;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.lfm}
|
||||
|
||||
{ Tmainform }
|
||||
|
||||
procedure Tmainform.LongTimer1Timer(Sender: TObject);
|
||||
begin
|
||||
// memo_ReportTimerEvent.Lines.Add('LastFired at ' + FormatDateTime('hh:nn:ss', LongTimer1.LastFired));
|
||||
memo_ReportTimerEvent.Lines.Add('Fired at ' + FormatDateTime('hh:nn:ss', Now));
|
||||
end;
|
||||
|
||||
procedure Tmainform.FormCreate(Sender: TObject);
|
||||
Var i:Integer;
|
||||
begin
|
||||
Caption:=Application.Title;
|
||||
memo_ReportTimerEvent.Clear;
|
||||
cmb_Daily24Hour.Clear;
|
||||
cmb_Daily24Hour.Items.Add('Midnight');
|
||||
For i:=1 to 23 do
|
||||
cmb_Daily24Hour.Items.Add(Format('%2.d:00',[i]));
|
||||
LongTimer1.IntervalType:=lt1Daily;
|
||||
LongTimer1.Daily24Hour:=0;
|
||||
LongTimer1.Enabled:=FALSE;
|
||||
cmb_Daily24Hour.ItemIndex:=0;
|
||||
cmb_SampleInterval.Clear;
|
||||
cmb_SampleInterval.Items.Add('Every minute');
|
||||
cmb_SampleInterval.Items.Add('Every 5 minutes');
|
||||
cmb_SampleInterval.Items.Add('Every 10 minutes');
|
||||
cmb_SampleInterval.Items.Add('Every 30 minutes');
|
||||
cmb_SampleInterval.Items.Add('Every 45 minutes');
|
||||
memo_ReportTimerEvent.Lines.Add('Timer initially disabled');
|
||||
cmb_SampleInterval.ItemIndex:=2;
|
||||
end;
|
||||
|
||||
procedure Tmainform.LongTimer1StartTimer(Sender: TObject);
|
||||
begin
|
||||
// memo_ReportTimerEvent.Lines.Add('Timer running');
|
||||
end;
|
||||
|
||||
procedure Tmainform.LongTimer1StopTimer(Sender: TObject);
|
||||
begin
|
||||
// memo_ReportTimerEvent.Lines.Add('Timer stopped');
|
||||
|
||||
end;
|
||||
|
||||
procedure Tmainform.cmd_StopTimerClick(Sender: TObject);
|
||||
begin
|
||||
LongTimer1.Enabled:=FALSE;
|
||||
memo_ReportTimerEvent.Lines.Add('Timer disabled');
|
||||
end;
|
||||
|
||||
procedure Tmainform.cmb_SampleIntervalChange(Sender: TObject);
|
||||
begin
|
||||
LongTimer1.SampleInterval:=TSampleInterval(cmb_SampleInterval.ItemIndex);
|
||||
end;
|
||||
|
||||
procedure Tmainform.cmd_StartTimerClick(Sender: TObject);
|
||||
begin
|
||||
LongTimer1.Enabled:=TRUE;
|
||||
memo_ReportTimerEvent.Lines.Add('Timer enabled');
|
||||
|
||||
end;
|
||||
|
||||
procedure Tmainform.cmb_Daily24HourChange(Sender: TObject);
|
||||
begin
|
||||
LongTimer1.Daily24Hour:=cmb_Daily24Hour.ItemIndex;
|
||||
end;
|
||||
procedure Tmainform.PopulateWeekOrDate(Const i:Integer);
|
||||
// 0=Weekly, 1=Monthly
|
||||
Var iMonthDay:Integer;
|
||||
|
||||
begin
|
||||
cmb_weekordate.Clear;
|
||||
Case i of
|
||||
0:begin
|
||||
cmb_weekordate.Items.Add('Monday');
|
||||
cmb_weekordate.Items.Add('Tuesday');
|
||||
cmb_weekordate.Items.Add('Wednesday');
|
||||
cmb_weekordate.Items.Add('Thursday');
|
||||
cmb_weekordate.Items.Add('Friday');
|
||||
cmb_weekordate.Items.Add('Saturday');
|
||||
cmb_weekordate.Items.Add('Sunday');
|
||||
end;
|
||||
1:begin
|
||||
For iMonthDay := 1 to 31 do
|
||||
cmb_weekordate.Items.Add(Format('%2.d',[iMonthDay]));
|
||||
end;
|
||||
end;
|
||||
cmb_weekordate.ItemIndex:=0;
|
||||
end;
|
||||
|
||||
procedure Tmainform.cmb_IntervalTypeChange(Sender: TObject);
|
||||
begin
|
||||
cmd_StopTimer.Click;
|
||||
Case cmb_IntervalType.ItemIndex of
|
||||
0:
|
||||
begin
|
||||
LongTimer1.IntervalType:=lt1Daily;
|
||||
cmb_weekordate.Enabled:=FALSE;
|
||||
end;
|
||||
1:
|
||||
begin
|
||||
LongTimer1.IntervalType:=lt2Weekly;
|
||||
PopulateWeekOrDate(0);
|
||||
cmb_weekordate.Enabled:=TRUE;
|
||||
end;
|
||||
2:
|
||||
begin
|
||||
LongTimer1.IntervalType:=lt3Monthly;
|
||||
PopulateWeekOrDate(1);
|
||||
cmb_weekordate.Enabled:=TRUE;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure Tmainform.cmb_weekordateChange(Sender: TObject);
|
||||
begin
|
||||
Case LongTimer1.IntervalType of
|
||||
lt2Weekly:LongTimer1.WeeklyDay:=TDay(cmb_weekordate.ItemIndex);
|
||||
lt3Monthly:LongTimer1.MonthlyDate:=(cmb_weekordate.ItemIndex+1);
|
||||
end;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
35
components/longtimer/lang_longtimer/aboutlongtimerunit.po
Normal file
35
components/longtimer/lang_longtimer/aboutlongtimerunit.po
Normal file
@ -0,0 +1,35 @@
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=UTF-8"
|
||||
|
||||
#: aboutlongtimerunit.rs_about
|
||||
msgid "About"
|
||||
msgstr ""
|
||||
|
||||
#: aboutlongtimerunit.rs_aboutboxerror
|
||||
msgid "Subcomponent TAboutBox Error"
|
||||
msgstr ""
|
||||
|
||||
#: aboutlongtimerunit.rs_by
|
||||
msgid "By"
|
||||
msgstr ""
|
||||
|
||||
#: aboutlongtimerunit.rs_componentname
|
||||
msgid "Component name"
|
||||
msgstr ""
|
||||
|
||||
#: aboutlongtimerunit.rs_datafilemissing
|
||||
msgid "Resource datafile license.lrs is missing"
|
||||
msgstr ""
|
||||
|
||||
#: aboutlongtimerunit.rs_for
|
||||
msgid "For"
|
||||
msgstr ""
|
||||
|
||||
#: aboutlongtimerunit.rs_license
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
|
||||
#: aboutlongtimerunit.rs_licensetexterror
|
||||
msgid "There is something wrong with the Licence text"
|
||||
msgstr ""
|
||||
|
72
components/longtimer/license.lrs
Normal file
72
components/longtimer/license.lrs
Normal file
@ -0,0 +1,72 @@
|
||||
LazarusResources.Add('gpl.txt','TXT',[
|
||||
' Copyright (C) <year> <name of author> <contact>'#13#10#13#10' This source'
|
||||
+' is free software; you can redistribute it and/or modify it under'#13#10' '
|
||||
+'the terms of the GNU General Public License as published by the Free'#13#10
|
||||
+' Software Foundation; either version 2 of the License, or (at your option)'
|
||||
+#13#10' any later version.'#13#10#13#10' This code is distributed in the h'
|
||||
+'ope that it will be useful, but WITHOUT ANY'#13#10' WARRANTY; without even'
|
||||
+' the implied warranty of MERCHANTABILITY or FITNESS'#13#10' FOR A PARTICUL'
|
||||
+'AR PURPOSE. See the GNU General Public License for more'#13#10' details.'
|
||||
+#13#10#13#10' A copy of the GNU General Public License is available on the '
|
||||
+'World Wide Web'#13#10' at <http://www.gnu.org/copyleft/gpl.html>. You can '
|
||||
+'also obtain it by writing'#13#10' to the Free Software Foundation, Inc., 5'
|
||||
+'9 Temple Place - Suite 330, Boston,'#13#10' MA 02111-1307, USA.'
|
||||
]);
|
||||
LazarusResources.Add('lgpl.txt','TXT',[
|
||||
' Copyright (C) <year> <name of author> <contact>'#13#10#13#10' This librar'
|
||||
+'y is free software; you can redistribute it and/or modify it'#13#10' under'
|
||||
+' the terms of the GNU Library General Public License as published by'#13#10
|
||||
+' the Free Software Foundation; either version 2 of the License, or (at you'
|
||||
+'r'#13#10' option) any later version.'#13#10#13#10' This program is distri'
|
||||
+'buted in the hope that it will be useful, but WITHOUT'#13#10' ANY WARRANTY'
|
||||
+'; without even the implied warranty of MERCHANTABILITY or'#13#10' FITNESS '
|
||||
+'FOR A PARTICULAR PURPOSE. See the GNU Library General Public License'#13#10
|
||||
+' for more details.'#13#10#13#10' You should have received a copy of the G'
|
||||
+'NU Library General Public License'#13#10' along with this library; if not,'
|
||||
+' write to the Free Software Foundation,'#13#10' Inc., 59 Temple Place - Su'
|
||||
+'ite 330, Boston, MA 02111-1307, USA.'
|
||||
]);
|
||||
LazarusResources.Add('mit.txt','TXT',[
|
||||
' Copyright (c) <year> <copyright holders>'#13#10#13#10' Permission is here'
|
||||
+'by granted, free of charge, to any person obtaining a copy'#13#10' of this'
|
||||
+' software and associated documentation files (the "Software"), to'#13#10' '
|
||||
+'deal in the Software without restriction, including without limitation the'
|
||||
+#13#10' rights to use, copy, modify, merge, publish, distribute, sublicense'
|
||||
+', and/or'#13#10' sell copies of the Software, and to permit persons to who'
|
||||
+'m the Software is'#13#10' furnished to do so, subject to the following con'
|
||||
+'ditions:'#13#10#13#10' The above copyright notice and this permission noti'
|
||||
+'ce shall be included in'#13#10' all copies or substantial portions of the '
|
||||
+'Software.'#13#10#13#10' THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY'
|
||||
+' OF ANY KIND, EXPRESS OR'#13#10' IMPLIED, INCLUDING BUT NOT LIMITED TO THE'
|
||||
+' WARRANTIES OF MERCHANTABILITY,'#13#10' FITNESS FOR A PARTICULAR PURPOSE A'
|
||||
+'ND NONINFRINGEMENT. IN NO EVENT SHALL THE'#13#10' AUTHORS OR COPYRIGHT HOL'
|
||||
+'DERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER'#13#10' LIABILITY, WHETHER '
|
||||
+'IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING'#13#10' FROM, OUT OF '
|
||||
+'OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS'#13#10' IN'
|
||||
+' THE SOFTWARE.'
|
||||
]);
|
||||
LazarusResources.Add('modifiedgpl.txt','TXT',[
|
||||
' Copyright (C) <year> <name of author> <contact>'#13#10#13#10' This librar'
|
||||
+'y is free software; you can redistribute it and/or modify it'#13#10' under'
|
||||
+' the terms of the GNU Library General Public License as published by'#13#10
|
||||
+' the Free Software Foundation; either version 2 of the License, or (at you'
|
||||
+'r'#13#10' option) any later version with the following modification:'#13#10
|
||||
+#13#10' As a special exception, the copyright holders of this library give '
|
||||
+'you'#13#10' permission to link this library with independent modules to pr'
|
||||
+'oduce an'#13#10' executable, regardless of the license terms of these inde'
|
||||
+'pendent modules,and'#13#10' to copy and distribute the resulting executabl'
|
||||
+'e under terms of your choice,'#13#10' provided that you also meet, for eac'
|
||||
+'h linked independent module, the terms'#13#10' and conditions of the licen'
|
||||
+'se of that module. An independent module is a'#13#10' module which is not '
|
||||
+'derived from or based on this library. If you modify'#13#10' this library,'
|
||||
+' you may extend this exception to your version of the library,'#13#10' but'
|
||||
+' you are not obligated to do so. If you do not wish to do so, delete this'
|
||||
+#13#10' exception statement from your version.'#13#10#13#10' This program '
|
||||
+'is distributed in the hope that it will be useful, but WITHOUT'#13#10' ANY'
|
||||
+' WARRANTY; without even the implied warranty of MERCHANTABILITY or'#13#10' '
|
||||
+' FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public Licen'
|
||||
+'se'#13#10' for more details.'#13#10#13#10' You should have received a cop'
|
||||
+'y of the GNU Library General Public License'#13#10' along with this librar'
|
||||
+'y; if not, write to the Free Software Foundation,'#13#10' Inc., 59 Temple '
|
||||
+'Place - Suite 330, Boston, MA 02111-1307, USA.'
|
||||
]);
|
54
components/longtimer/longtimerpackage.lpk
Normal file
54
components/longtimer/longtimerpackage.lpk
Normal file
@ -0,0 +1,54 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CONFIG>
|
||||
<Package Version="4">
|
||||
<PathDelim Value="\"/>
|
||||
<Name Value="longtimerpackage"/>
|
||||
<Author Value="minesadorada@charcodelvalle.com"/>
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<SearchPaths>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<Other>
|
||||
<CompilerMessages>
|
||||
<MsgFileName Value=""/>
|
||||
</CompilerMessages>
|
||||
<CompilerPath Value="$(CompPath)"/>
|
||||
</Other>
|
||||
</CompilerOptions>
|
||||
<Description Value="TLongTimer is a descendant of TIdleTimer that samples every 30minutes when idle.
|
||||
It is intended for TTrayIcon applications. DailyHour is a 24-hour clock (16 = 4pm) and MonthlyDate is best < 29 "/>
|
||||
<License Value="LGPLv2"/>
|
||||
<Version Release="1"/>
|
||||
<Files Count="2">
|
||||
<Item1>
|
||||
<Filename Value="ulongtimer.pas"/>
|
||||
<HasRegisterProc Value="True"/>
|
||||
<UnitName Value="uLongTimer"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<Filename Value="aboutlongtimerunit.pas"/>
|
||||
<HasRegisterProc Value="True"/>
|
||||
<UnitName Value="AboutLongTimerunit"/>
|
||||
</Item2>
|
||||
</Files>
|
||||
<i18n>
|
||||
<EnableI18N Value="True"/>
|
||||
<OutDir Value="lang_longtimer"/>
|
||||
<EnableI18NForLFM Value="True"/>
|
||||
</i18n>
|
||||
<Type Value="RunAndDesignTime"/>
|
||||
<RequiredPkgs Count="1">
|
||||
<Item1>
|
||||
<PackageName Value="IDEIntf"/>
|
||||
</Item1>
|
||||
</RequiredPkgs>
|
||||
<UsageOptions>
|
||||
<UnitPath Value="$(PkgOutDir)"/>
|
||||
</UsageOptions>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
</PublishOptions>
|
||||
</Package>
|
||||
</CONFIG>
|
22
components/longtimer/longtimerpackage.pas
Normal file
22
components/longtimer/longtimerpackage.pas
Normal file
@ -0,0 +1,22 @@
|
||||
{ This file was automatically created by Lazarus. Do not edit!
|
||||
This source is only used to compile and install the package.
|
||||
}
|
||||
|
||||
unit longtimerpackage;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
uLongTimer, AboutLongTimerunit, LazarusPackageIntf;
|
||||
|
||||
implementation
|
||||
|
||||
procedure Register;
|
||||
begin
|
||||
RegisterUnit('uLongTimer', @uLongTimer.Register);
|
||||
RegisterUnit('AboutLongTimerunit', @AboutLongTimerunit.Register);
|
||||
end;
|
||||
|
||||
initialization
|
||||
RegisterPackage('longtimerpackage', @Register);
|
||||
end.
|
288
components/longtimer/ulongtimer.pas
Normal file
288
components/longtimer/ulongtimer.pas
Normal file
@ -0,0 +1,288 @@
|
||||
unit uLongTimer;
|
||||
{ TlongTimer
|
||||
|
||||
Based on TIdleTimer component
|
||||
1. Set the Interval type
|
||||
2. For all Interval Types, you can set the Hour
|
||||
3. The OnTimer event will only be fired at the specified intervals
|
||||
4. The underlying interval is 30 minutes (when idle)
|
||||
|
||||
Copyright (C)2014 minesadorada@charcodelvalle.com
|
||||
|
||||
This library is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU Library General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public License
|
||||
along with this library; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
}
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, LResources, ExtCtrls,DateUtils,Dialogs,AboutLongTimerunit;
|
||||
|
||||
type
|
||||
TIntervalType = (lt1Daily,lt2Weekly,lt3Monthly);
|
||||
TSampleInterval = (lt1Everyminute,lt2Every5minutes,lt3Every10Minutes,lt4Every30Minutes,lt5Every45Minutes);
|
||||
TDay = (lt1Monday,lt2Tuesday,lt3Wednesday,lt4Thursday,lt5Friday,lt6Saturday,lt7Sunday);
|
||||
TLongTimer = class(TAboutLongTimer)
|
||||
private
|
||||
{ Private declarations }
|
||||
fCurrentDateTime,fLastFiredDateTime:TDateTime;
|
||||
fIntervalType:TIntervalType;
|
||||
fHour,fDay,fDate:Word;
|
||||
fTday:TDay;
|
||||
fHourDone,fDayDone,fDateDone:Boolean;
|
||||
fSampleInterval:TSampleInterval;
|
||||
protected
|
||||
{ Protected declarations }
|
||||
procedure DoOnIdle(Sender: TObject; var Done: Boolean); override;
|
||||
procedure DoOnIdleEnd(Sender: TObject); override;
|
||||
procedure DoOnTimer;override;
|
||||
Procedure SetDay(aDay:TDay);
|
||||
Procedure SetDailyHour(aHour:Word);
|
||||
Procedure SetMonthlyDate(ADate:Word);
|
||||
procedure SetSampleInterval(ASampleInterval:TSampleInterval);
|
||||
public
|
||||
{ Public declarations }
|
||||
constructor Create(TheOwner: TComponent); override;
|
||||
published
|
||||
{ Published declarations }
|
||||
// Default=false
|
||||
property AutoEnabled;
|
||||
// Same as TIdleTimer
|
||||
property AutoStartEvent;
|
||||
// Same as TIdleTimer
|
||||
property AutoEndEvent;
|
||||
// Same as TIdleTimer
|
||||
property Enabled;
|
||||
// This is fired only at the Long Intervals you set
|
||||
property OnTimer;
|
||||
// Same as TIdleTimer
|
||||
property OnStartTimer;
|
||||
// Same as TIdleTimer
|
||||
property OnStopTimer;
|
||||
// If Weekly or Monthly you can also set the Daily24Hour property
|
||||
property IntervalType:TIntervalType read fIntervalType write fIntervalType default lt1Daily;
|
||||
// Smaller = more accurate, larger = less CPU time
|
||||
property SampleInterval:TSampleInterval read fSampleInterval write SetSampleInterval default lt3Every10Minutes;
|
||||
// 0=Midnight, 4=4am, 16=4pm etc.
|
||||
Property Daily24Hour:Word read fHour write SetDailyHour;
|
||||
// You can also set the Hour as well as the Weekday
|
||||
Property WeeklyDay:TDay read fTDay write SetDay;
|
||||
// You can also set the hour as well as the date
|
||||
property MonthlyDate:Word read fDate write SetMonthlyDate default 1;
|
||||
// Until the first Timer event, this will be the component's creation time
|
||||
Property LastFired:TDateTime read fLastFiredDateTime;
|
||||
end;
|
||||
|
||||
procedure Register;
|
||||
|
||||
implementation
|
||||
CONST
|
||||
C_OneMinute = 60000;
|
||||
procedure Register;
|
||||
begin
|
||||
RegisterComponents('System',[TLongTimer]);
|
||||
end;
|
||||
constructor TLongTimer.Create(TheOwner: TComponent);
|
||||
Var sz:String;
|
||||
begin
|
||||
inherited;
|
||||
// Set About dialog properties
|
||||
AboutBoxComponentName:='TLongTimer';
|
||||
AboutBoxTitle:='TLongTimer Component';
|
||||
// AboutBoxWidth (integer)
|
||||
AboutBoxHeight:=380;
|
||||
sz:='LongTimer is a descendent of TIdleTimer' + LineEnding;
|
||||
sz+='and shares its properties and methods.' + LineEnding + LineEnding;
|
||||
sz+='Additional properties affect when the' + LineEnding;
|
||||
sz+='OnTimer event is fired.' + LineEnding + LineEnding;
|
||||
sz+='With LongTimer, the OnTimer event' + LineEnding;
|
||||
sz+='will be fired only ONCE - every time' + LineEnding;
|
||||
sz+='the interval that you set is reached.';
|
||||
AboutBoxDescription:=sz;
|
||||
// AboutBoxBackgroundColor (TColor, like clWhite)
|
||||
// AboutBoxFontName (string)
|
||||
// AboutBoxFontSize (integer)
|
||||
AboutBoxVersion:='0.0.1';
|
||||
AboutBoxAuthorname:='Gordon Bamber';
|
||||
// AboutBoxOrganisation (string)
|
||||
AboutBoxAuthorEmail:='minesadorada@charcodelvalle.com';
|
||||
AboutBoxLicenseType:='LGPL';// (string e.g. 'GPL', ModifiedGPL' etc
|
||||
|
||||
fHourDone:=false;
|
||||
fDayDone:=False;
|
||||
fDateDone:=False;
|
||||
fCurrentDateTime:=Now;
|
||||
fLastFiredDateTime:=Now;
|
||||
fDate:=1;
|
||||
fSampleInterval:=lt3Every10Minutes;
|
||||
Interval:=10 * C_OneMinute;
|
||||
fIntervalType:=lt1Daily;
|
||||
end;
|
||||
procedure TLongTimer.DoOnIdle(Sender: TObject; var Done: Boolean);
|
||||
begin
|
||||
// Do nothing special here
|
||||
inherited;
|
||||
end;
|
||||
procedure TLongTimer.DoOnIdleEnd(Sender: TObject);
|
||||
begin
|
||||
// Do nothing special here
|
||||
inherited;
|
||||
end;
|
||||
procedure TLongTimer.DoOnTimer;
|
||||
// Only allow this event to fire ONCE if datetime matches the interval set
|
||||
Var
|
||||
cDay,cD,cM,cY,cH,cMi,cS,cms:Word;
|
||||
lDay,lD,lM,lY,lH,lMi,lS,lms:Word;
|
||||
fTempDate:Word;
|
||||
begin
|
||||
// Split Current date into parts
|
||||
fCurrentDateTime:=Now;
|
||||
DecodeDate(fCurrentDateTime,cY,cM,cD);
|
||||
DecodeTime(fCurrentDateTime,cH,cMi,cS,cmS);
|
||||
cDay:=DayOfTheMonth(fCurrentDateTime);
|
||||
|
||||
DecodeDate(fLastFiredDateTime,lY,lM,lD);
|
||||
DecodeTime(fLastFiredDateTime,lH,lMi,lS,lmS);
|
||||
lDay:=DayOfTheMonth(fLastFiredDateTime);
|
||||
|
||||
// New hour?
|
||||
If (fIntervalType = lt1Daily) then
|
||||
If (cH <> lH) then fHourDone:=FALSE;
|
||||
// New Day?
|
||||
If (fIntervalType = lt2Weekly) then
|
||||
If (cDay <> lDay) then
|
||||
begin
|
||||
fDayDone:=FALSE;
|
||||
fHourDone:=FALSE;
|
||||
end;
|
||||
// New Date?
|
||||
If (fIntervalType = lt3Monthly) then
|
||||
If (cD <> lD) then
|
||||
begin
|
||||
fDateDone:=FALSE;
|
||||
fHourDone:=FALSE;
|
||||
end;
|
||||
|
||||
|
||||
// Only proceed further at specified interval in specified hour - else exit
|
||||
If (fIntervalType = lt1Daily) and ((fHourDone = TRUE) OR (cH <> fHour)) then Exit;
|
||||
If (fIntervalType = lt2Weekly) and ((fDayDone = TRUE) OR (cH <> fHour)) then Exit;
|
||||
If (fIntervalType = lt3Monthly) and ((fDateDone = TRUE) OR (cH <> fHour)) then Exit;
|
||||
|
||||
// Fire the OnTimer event for the user
|
||||
inherited; // Do whatever the user wants done
|
||||
fLastFiredDateTime:=Now;// Record the DateTime the OnTimer was fired
|
||||
|
||||
// Now make sure it doesn't fire more than once when resampled
|
||||
|
||||
// Deal with Months where fDate has been set to an invalid date
|
||||
// (i.e. 31st February)
|
||||
// Simply temporarily decrement the fDate until it is valid
|
||||
fTempDate:=fDate;
|
||||
If (fIntervalType = lt3Monthly) then
|
||||
While NOT IsValidDate(cY,cM,fTempDate) do Dec(fTempDate);
|
||||
|
||||
// If ltDaily, then fDayDone and fDateDone are always FALSE
|
||||
If (fIntervalType = lt1Daily) and (cH = fHour) then
|
||||
begin
|
||||
fHourDone := TRUE;
|
||||
end;
|
||||
|
||||
// If ltWeekly, then fHourDone and fDateDone are always FALSE
|
||||
// Set only if on Correct Weekday and at specified hour
|
||||
If (fIntervalType = lt2Weekly)
|
||||
and ((cDay = fDay)
|
||||
and (ch = fHour))
|
||||
then
|
||||
begin
|
||||
fDayDone := TRUE;
|
||||
fHourDone := TRUE;
|
||||
end;
|
||||
|
||||
// If ltMonthly, then fDayDone and fHourDone are always FALSE
|
||||
// Set only if Correct day of month and at specified hour
|
||||
If (fIntervalType = lt3Monthly) and
|
||||
((cD = fTempDate)
|
||||
and (ch = fHour))
|
||||
then
|
||||
begin
|
||||
fDateDone := TRUE;
|
||||
fHourDone := TRUE;
|
||||
end;
|
||||
end;
|
||||
procedure TLongTimer.SetSampleInterval(ASampleInterval:TSampleInterval);
|
||||
Var TimerEnabled:Boolean;
|
||||
Begin
|
||||
If ASampleInterval = fSampleInterval then exit;
|
||||
// Temporarily disable running timer?
|
||||
TimerEnabled:=Enabled;
|
||||
Enabled:=False;
|
||||
Case ASampleInterval of
|
||||
lt1Everyminute:Interval:=C_OneMinute;
|
||||
lt2Every5minutes:Interval:=5 * C_OneMinute;
|
||||
lt3Every10Minutes:Interval:=10 * C_OneMinute;
|
||||
lt4Every30Minutes:Interval:=30 * C_OneMinute;
|
||||
lt5Every45Minutes:Interval:=45 * C_OneMinute;
|
||||
end;
|
||||
Enabled:=TimerEnabled;
|
||||
end;
|
||||
|
||||
Procedure TLongTimer.SetDay(aDay:TDay);
|
||||
Var TimerEnabled:Boolean;
|
||||
begin
|
||||
If ADay = fTDay then Exit;
|
||||
// Temporarily disable running timer?
|
||||
TimerEnabled:=Enabled;
|
||||
Enabled:=False;
|
||||
fTDay:=aDay;
|
||||
fDay:=Ord(aDay)+1;
|
||||
Enabled:=TimerEnabled;
|
||||
{
|
||||
// ISO day numbers.
|
||||
DayMonday = 1;
|
||||
DayTuesday = 2;
|
||||
DayWednesday = 3;
|
||||
DayThursday = 4;
|
||||
DayFriday = 5;
|
||||
DaySaturday = 6;
|
||||
DaySunday = 7;
|
||||
}
|
||||
end;
|
||||
Procedure TLongTimer.SetDailyHour(aHour:Word);
|
||||
Var TimerEnabled:Boolean;
|
||||
begin
|
||||
If fHour=aHour then Exit;
|
||||
// Temporarily disable running timer?
|
||||
TimerEnabled:=Enabled;
|
||||
Enabled:=False;
|
||||
If (aHour >= 0) AND (aHour <=24) then fHour:=aHour;
|
||||
Enabled:=TimerEnabled;
|
||||
end;
|
||||
|
||||
Procedure TLongTimer.SetMonthlyDate(ADate:Word);
|
||||
Var TimerEnabled:Boolean;
|
||||
begin
|
||||
If ADate=fDate then Exit;
|
||||
// Temporarily disable running timer?
|
||||
TimerEnabled:=Enabled;
|
||||
Enabled:=False;
|
||||
If (fDate > 0) and (fDate < 32) then fDate:=ADate;
|
||||
// Invalid dates like 31st Feb are dealt with in DoOnTimer
|
||||
// e.g. 31 stands for the last day in any month (inc Feb in a Leap Year)
|
||||
Enabled:=TimerEnabled;
|
||||
end;
|
||||
|
||||
end.
|
Reference in New Issue
Block a user