Note: This is not the complete source code--just the main source file.
You can download the full source (with include files) from our sample code archive by clicking on the diskette icons.


unit HexGadgetsLic;


  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, HexValidEmailLib, HexDnsLib, HexTcpQueryLib, HexLookupLib,
  HexIcmpLib, ComCtrls;

  TForm1 = class(TForm)
    Button1: TButton;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    TabSheet3: TTabSheet;
    TabSheet4: TTabSheet;
    TabSheet5: TTabSheet;
    Label20: TLabel;
    lblHicmpLicense: TLabel;
    Label19: TLabel;
    lblHicmpError: TLabel;
    Label21: TLabel;
    memoHicmpKey: TMemo;
    memoHveKey: TMemo;
    Label3: TLabel;
    Label2: TLabel;
    lblHveLicense: TLabel;
    Label1: TLabel;
    lblHveError: TLabel;
    Label4: TLabel;
    lblHdnsLicense: TLabel;
    Label6: TLabel;
    lblHdnsError: TLabel;
    Label8: TLabel;
    memoHdnsKey: TMemo;
    Label9: TLabel;
    lblHtcpqLicense: TLabel;
    Label11: TLabel;
    lblHtcpqError: TLabel;
    Label13: TLabel;
    memoHtcpqKey: TMemo;
    Label14: TLabel;
    lblHlkupLicense: TLabel;
    Label16: TLabel;
    lblHlkupError: TLabel;
    Label18: TLabel;
    memoHlkupKey: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    { Private declarations }
    { Public declarations }

  Form1: TForm1;


{$R *.dfm}

function GetLicenseErrorString( error: Integer ) : String;
  case error of
    0: Result := 'Success';
    2: Result := 'License file not found';
    3: Result := 'Could not open license file';
    4: Result := 'License file is corrupt';
    5: Result := 'License is for wrong product';
    6: Result := 'License is for wrong version';
    7: Result := 'License does not cover all processors in the machine';
    Result := Format( 'Other error: %d', [error] );

function GetLicenseTypeString( licensedProcs: Integer; error: Integer ) : String;
  if (licensedProcs > 0) then
    Result := Format( '%d-processor', [licensedProcs] )
  else if ( licensedProcs = -1 ) then
    Result := 'Site'
  else if ( licensedProcs = -2 ) then
    Result := 'Enterprise'
  else if ( error <> 0 ) then
    Result := 'None'
    Result := 'Runtime';

procedure TForm1.Button1Click(Sender: TObject);

procedure TForm1.FormCreate(Sender: TObject);
  hve : HexValidEmailLib.IConnectionSync;
  hdns : HexDnsLib.IConnectionSync;
  htcpq : HexTcpQueryLib.IHexTcpQuerySync;
  hlkup : HexLookupLib.IHexLookupSync;
  hicmp : HexIcmpLib.IHexIcmpSync;
  When you're creating your Delphi application using HexGadgets for COM...

  1. Add the relevant .PAS file to your project. For example, if you're using
     HexValidEmail, add HexValidEmail.pas.

  2. Add ComLicensing.pas to your project.

  3. Add the relevant Unit name to the uses clause of your code. Add
     HexValidEmailLib to use HexValidEmail, for instance.

  4. Use the CreateLicensed function to create an instance as shown below.
     Initially you can use any string as a license key. The evaluation period
     will remain in force. You can use the Expires property to find out when
     the eval period ends.

  After you've purchased a license...

  1. Put the license file in the same directory as the currently registered
     HexGadget DLL. For example, put HexValidEmail.lic in the same directory
     as HexValidEmail.dll.

  2. Run your application (or this sample application) and use the GetLicenseKey
     function to retrieve the runtime license key string. You only need to do
     this once, and your license file must be installed correctly for this to

  3. Store the license key string in your application and pass it to the
     CreateLicensed function when you call it. When you have a valid runtime
     license key, the Error and LicensedProcessors properties will both be 0
     immediately after you call CreateLicensed.

  4. Now you can distribute your application. Because the HexGadget is using
     your embedded runtime key, your application will work without your license

  // HexValidEmail license information
  // We have to specify HexValidEmailLib here because both HexValidEmail
  // and HexDns have Connection classes. If you're just using one or the other,
  // you don't have to specify the unit name.
  hve := HexValidEmailLib.CoConnection.CreateLicensed( 'Put your key here' );
  lblHveError.Caption := GetLicenseErrorString( hve.Error );
  lblHveLicense.Caption := GetLicenseTypeString( hve.LicensedProcessors, hve.Error );
  memoHveKey.Text := HexValidEmailLib.CoConnection.GetLicenseKey();

  // HexDns license information
  hdns := HexDnsLib.CoConnection.CreateLicensed( 'Put your key here' );
  lblHdnsError.Caption := GetLicenseErrorString( hdns.Error );
  lblHdnsLicense.Caption := GetLicenseTypeString( hdns.LicensedProcessors, hdns.Error );
  memoHdnsKey.Text := HexDnsLib.CoConnection.GetLicenseKey();

  // HexTcpQuery license information
  htcpq := CoHexTcpQuery.CreateLicensed( 'Put your key here' );
  lblHtcpqError.Caption := GetLicenseErrorString( htcpq.Error );
  lblHtcpqLicense.Caption := GetLicenseTypeString( htcpq.LicensedProcessors, htcpq.Error );
  memoHtcpqKey.Text := CoHexTcpQuery.GetLicenseKey();

  // HexLookupLib license information
  hlkup := CoHexLookup.CreateLicensed( 'Put your key here' );
  lblHlkupError.Caption := GetLicenseErrorString( hlkup.Error );
  lblHlkupLicense.Caption := GetLicenseTypeString( hlkup.LicensedProcessors, hlkup.Error );
  memoHlkupKey.Text := CoHexLookup.GetLicenseKey();

  // HexIcmpLib license information
  hicmp := CoHexIcmp.CreateLicensed( 'Put your key here' );
  lblHicmpError.Caption := GetLicenseErrorString( hicmp.Error );
  lblHicmpLicense.Caption := GetLicenseTypeString( hicmp.LicensedProcessors, hicmp.Error );
  memoHicmpKey.Text := CoHexIcmp.GetLicenseKey();