
- initial support for InvalidCount , which allow to run program even if trial rules are broken (but only exactly set count) - IDE serial number used instead of volume serial git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@921 8e941d3f-bd1b-0410-a28a-d453659cc2b4
148 lines
3.7 KiB
ObjectPascal
148 lines
3.7 KiB
ObjectPascal
(*
|
|
This example uses the TOgUsageCode component. This is the most basic
|
|
example in that on first run, the INI file entries and component
|
|
properties are set to allow 5 runs of the program with a "drop dead"
|
|
date
|
|
*)
|
|
|
|
unit Exusg1u;
|
|
|
|
interface
|
|
|
|
uses
|
|
SysUtils,Classes,Controls,
|
|
Forms, Dialogs, StdCtrls, Buttons, OnGuard,
|
|
LResources,
|
|
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;
|
|
OgUsageCode1: TOgUsageCode;
|
|
Label1: TLabel;
|
|
procedure OgUsageCode1GetKey(Sender: TObject; var Key: TKey);
|
|
procedure OgUsageCode1GetCode(Sender: TObject; var Code: TCode);
|
|
procedure OgUsageCode1Checked(Sender: TObject; Status: TCodeStatus);
|
|
procedure OgUsageCode1ChangeCode(Sender: TObject; Code: TCode);
|
|
private
|
|
{ Private declarations }
|
|
public
|
|
{ Public declarations }
|
|
TheDir : string;
|
|
IniFile : TIniFile;
|
|
end;
|
|
|
|
var
|
|
Form1: TForm1;
|
|
|
|
implementation
|
|
|
|
|
|
|
|
{==========================================================================}
|
|
|
|
procedure TForm1.OgUsageCode1GetKey(Sender: TObject; var Key: TKey);
|
|
begin
|
|
Key := CKey;
|
|
end;
|
|
|
|
{==========================================================================}
|
|
|
|
procedure TForm1.OgUsageCode1GetCode(Sender: TObject; var Code: TCode);
|
|
var
|
|
S : string;
|
|
L : integer;
|
|
begin
|
|
TheDir := ExtractFilePath(ParamStr(0));
|
|
|
|
|
|
if (FileExists(TheDir + 'Usage1.ini')) then begin
|
|
{open Ini File}
|
|
IniFile := TIniFile.Create(TheDir + 'Usage1.ini');
|
|
try
|
|
{try to read release code}
|
|
S := IniFile.ReadString('Codes', 'Uses', '');
|
|
|
|
{convert retrieved string to a code}
|
|
HexToBuffer(S, Code, SizeOf(Code));
|
|
finally
|
|
IniFile.Free;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
{==========================================================================}
|
|
|
|
procedure TForm1.OgUsageCode1Checked(Sender: TObject; Status: TCodeStatus);
|
|
var
|
|
S : string;
|
|
Code : TCode;
|
|
begin
|
|
case Status of
|
|
ogValidCode : begin
|
|
Label1.Caption := 'Available Runs: '
|
|
+ IntToStr(OgUsageCode1.GetValue);
|
|
Exit;
|
|
end;
|
|
|
|
ogRunCountUsed : S := 'No more runs allowed' + #13
|
|
+ ' Register NOW ';
|
|
|
|
ogInvalidCode : begin
|
|
if not (FileExists(TheDir + 'Usage1.ini')) then begin
|
|
IniFile := TIniFile.Create(TheDir + 'Usage1.ini');
|
|
try
|
|
{hard coded release code for 5 users}
|
|
{and drop dead date of 2009 Dec. 31}
|
|
S := 'AECCA5B793AD56155D13';
|
|
HexToBuffer(S, Code, SizeOf(Code));
|
|
IniFile.WriteString('Codes', 'Uses', S);
|
|
finally
|
|
IniFile.Free;
|
|
end;
|
|
OgUsageCode1.CheckCode(True);
|
|
Exit;
|
|
end else
|
|
S := 'Invalid Code';
|
|
end;
|
|
|
|
ogCodeExpired : S := 'Trial Run period expired' + #13
|
|
+ ' Register NOW ';
|
|
end;
|
|
ShowMessage(S);
|
|
Application.Terminate;
|
|
end;
|
|
|
|
{==========================================================================}
|
|
|
|
procedure TForm1.OgUsageCode1ChangeCode(Sender: TObject; Code: TCode);
|
|
var
|
|
S : string;
|
|
begin
|
|
{open Ini File}
|
|
IniFile := TIniFile.Create(TheDir + 'Usage1.ini');
|
|
try
|
|
{convert code to string}
|
|
S := BufferToHex(Code, SizeOf(Code));
|
|
IniFile.WriteString('Codes', 'Uses', S);
|
|
finally
|
|
IniFile.Free;
|
|
end;
|
|
end;
|
|
|
|
|
|
initialization
|
|
{$i exusg1u.lrs}
|
|
|
|
end.
|
|
|