Contributor: SWAG SUPPORT TEAM

unit App_prop;

interface

uses
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  Forms, Dialogs;

type
  TDuplicateError = class(Exception);
  TMainFormError = class(Exception);
  TApplicationProperties = class(TComponent)
  private
    { Private declarations }
    fHint : String;
    fHintColor : TColor;
    fHintPause : Integer;
    fShowHint : Boolean;

    fOnActivate : TNotifyEvent;
    fOnDeactivate : TNotifyEvent;
    fOnException : TExceptionEvent;
    fOnHelp : THelpEvent;
    fOnHint : TNotifyEvent;
    fOnIdle : TIdleEvent;
    fOnMessage : TMessageEvent;
  protected
    { Protected declarations }
  public
    { Public declarations }
    constructor Create(AOwner: TComponent);
      override;
    destructor Destroy;
      override;
    procedure Loaded;
      override;
  published
    { Published declarations }
    property Hint : String
      read fHint write fHint;
    property HintColor : TColor
      read fHintColor write fHintColor;
    property HintPause : Integer
      read fHintPause write fHintPause;
    property ShowHint : Boolean
      read fShowHint write fShowHint;

    property OnActivate : TNotifyEvent
      read fOnActivate write fOnActivate;
    property OnDeactivate : TNotifyEvent
      read fOnDeactivate write fOnDeactivate;
    property OnException : TExceptionEvent
      read fOnException write fOnException;
    property OnHelp : THelpEvent
      read fOnHelp write fOnHelp;
    property OnHint : TNotifyEvent
      read fOnHint write fOnHint;
    property OnIdle : TIdleEvent
      read fOnIdle write fOnIdle;
    property OnMessage : TMessageEvent
      read fOnMessage write fOnMessage;
  end;

procedure Register;

implementation

var
  ComponentCounter : Integer;

constructor TApplicationProperties.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Inc(ComponentCounter);
  if ComponentCounter > 1 then
    raise TDuplicateError.Create('You can have only ' +
      'one ApplicationProperties component in a project');

  fHintColor := Application.HintColor;
  fHintPause := Application.HintPause;
  fShowHint := Application.ShowHint;
end;

destructor TApplicationProperties.Destroy;
begin
  inherited Destroy;
  Dec(ComponentCounter);
end;

procedure TApplicationProperties.Loaded;
begin
  if fHint <> '' then
    Application.Hint := fHint;
  if fHintColor <> Application.HintColor then
    Application.HintColor := fHintColor;
  if fHintPause <> Application.HintPause then
    Application.HintPause := fHintPause;
  if fShowHint <> Application.ShowHint then
    Application.ShowHint := fShowHint;

  if Assigned(fOnActivate) then
    Application.OnActivate := fOnActivate;
  if Assigned(fOnDeactivate) then
    Application.OnDeactivate := fOnDeactivate;
  if Assigned(fOnException) then
    Application.OnException := fOnException;
  if Assigned(fOnHelp) then
    Application.OnHelp := fOnHelp;
  if Assigned(fOnHint) then
    Application.OnHint := fOnHint;
  if Assigned(fOnIdle) then
    Application.OnIdle := fOnIdle;
  if Assigned(fOnMessage) then
    Application.OnMessage := fOnMessage;
end;

procedure Register;
begin
  RegisterComponents('Samples', [TApplicationProperties]);
end;

initialization
  ComponentCounter := 0;
end.