2008-10-31 21:18:20 +00:00
|
|
|
(*
|
|
|
|
This example uses the TOgDateCode component. The beginning of the
|
|
|
|
allowed date range is automatically set to the date the program
|
|
|
|
is first run and the expiration date 21 days thereafter
|
|
|
|
*)
|
|
|
|
unit Exdtp21u;
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
|
|
|
uses
|
|
|
|
SysUtils,Classes,Controls,
|
|
|
|
Forms, Dialogs, StdCtrls, Buttons,LResources, OnGuard,
|
|
|
|
OgUtil,
|
|
|
|
IniFiles;
|
|
|
|
|
|
|
|
const
|
|
|
|
CKey : TKey = ($E5,$8F,$84,$D6,$92,$C9,$A4,$D8,
|
|
|
|
$1A,$FA,$6F,$8D,$AB,$FC,$DF,$B4);
|
|
|
|
|
|
|
|
type
|
|
|
|
|
|
|
|
{ TForm1 }
|
|
|
|
|
|
|
|
TForm1 = class(TForm)
|
|
|
|
Memo1: TMemo;
|
|
|
|
CloseBtn: TBitBtn;
|
|
|
|
OgDateCode1: TOgDateCode;
|
|
|
|
Label1: TLabel;
|
|
|
|
procedure FormActivate(Sender: TObject);
|
2009-07-28 13:17:46 +00:00
|
|
|
procedure Memo1DblClick(Sender: TObject);
|
2008-10-31 21:18:20 +00:00
|
|
|
procedure OgDateCode1GetKey(Sender: TObject; var Key: TKey);
|
|
|
|
procedure OgDateCode1GetCode(Sender: TObject; var Code: TCode);
|
|
|
|
procedure OgDateCode1Checked(Sender: TObject; Status: TCodeStatus);
|
|
|
|
private
|
|
|
|
FExpired : Boolean;
|
|
|
|
public
|
|
|
|
TheDir : string;
|
|
|
|
end;
|
|
|
|
|
|
|
|
var
|
|
|
|
Form1: TForm1;
|
|
|
|
|
|
|
|
implementation
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{==========================================================================}
|
|
|
|
|
|
|
|
procedure TForm1.OgDateCode1GetKey(Sender: TObject; var Key: TKey);
|
|
|
|
begin
|
|
|
|
Key := CKey;
|
|
|
|
end;
|
|
|
|
|
|
|
|
procedure TForm1.FormActivate(Sender: TObject);
|
|
|
|
begin
|
|
|
|
if FExpired then Application.Terminate;
|
|
|
|
end;
|
|
|
|
|
2009-07-28 13:17:46 +00:00
|
|
|
procedure TForm1.Memo1DblClick(Sender: TObject);
|
2008-10-31 21:18:20 +00:00
|
|
|
begin
|
2009-07-28 13:17:46 +00:00
|
|
|
ShowMessage(Inttostr(OgDateCode1.GetInvalidCount));
|
2008-10-31 21:18:20 +00:00
|
|
|
end;
|
|
|
|
|
|
|
|
{==========================================================================}
|
|
|
|
|
|
|
|
procedure TForm1.OgDateCode1GetCode(Sender: TObject; var Code: TCode);
|
|
|
|
var
|
|
|
|
IniFile : TIniFile;
|
|
|
|
S : string;
|
|
|
|
SD,
|
|
|
|
ED : TDateTime;
|
|
|
|
L : integer;
|
|
|
|
begin
|
|
|
|
{force the INI file to be in the same directory as the application}
|
|
|
|
TheDir := ExtractFilePath(ParamStr(0));
|
|
|
|
|
|
|
|
{open Ini File}
|
|
|
|
IniFile := TIniFile.Create(TheDir + 'datep21.ini');
|
|
|
|
try
|
|
|
|
{try to read release code}
|
|
|
|
S := IniFile.ReadString('Codes', 'DateCode', '');
|
|
|
|
|
|
|
|
{If default string returned, create code on the fly}
|
|
|
|
if (S = '') then begin
|
|
|
|
SD := Date;
|
|
|
|
ED := SD + 21.0;
|
2009-07-28 13:17:46 +00:00
|
|
|
InitDateCode(CKey, SD, ED, Code,1);
|
2008-10-31 21:18:20 +00:00
|
|
|
|
|
|
|
{save string representation of release code to Ini File}
|
|
|
|
S := BufferToHex(Code, SizeOf(Code));
|
|
|
|
IniFile.WriteString('Codes', 'DateCode', S);
|
|
|
|
end else
|
|
|
|
{convert retrieved string to a code}
|
|
|
|
HexToBuffer(S, Code, SizeOf(Code))
|
|
|
|
finally
|
|
|
|
IniFile.Free;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
|
|
|
|
{==========================================================================}
|
|
|
|
|
|
|
|
procedure TForm1.OgDateCode1Checked(Sender: TObject; Status: TCodeStatus);
|
|
|
|
var
|
|
|
|
S : string;
|
|
|
|
begin
|
|
|
|
FExpired := false;
|
|
|
|
ShortDateFormat := 'yyy-mm-dd';
|
|
|
|
case Status of
|
|
|
|
ogValidCode : begin
|
|
|
|
Label1.Caption := 'Expires: '
|
|
|
|
+ DateToStr(OgDateCode1.GetValue);
|
|
|
|
Exit;
|
|
|
|
end;
|
|
|
|
|
|
|
|
ogPastEndDate : S := 'Past 21 days - please register';
|
|
|
|
|
|
|
|
ogInvalidCode : S := 'Invalid Code';
|
|
|
|
end;
|
|
|
|
ShowMessage(S);
|
|
|
|
FExpired := true;
|
|
|
|
end;
|
|
|
|
|
|
|
|
initialization
|
|
|
|
{$i exdtp21u.lrs}
|
|
|
|
|
|
|
|
end.
|