unit uBase;

//////////////////////////////////////
///  Lina Base Unit                ///
///  ****************************  ///
///  (c) 2014 Dennis Göhlert a.o.  ///
//////////////////////////////////////

  {$IF CompilerVersion < 18.5}
    { Unter früheren Delphi-Versionen als 2007 gab es (offiziell) noch keine
      Unterstützung für Windows-Vista-spezifische funktionen wie die TaskDialog-
      Komponente oder einige Funktionen.
      Damit dies nicht zu Problemen führt, geht der Compiler darauf mithilfe
      dieser Direktive ein. }
    {$DEFINE NO_VISTA}
  {$IFEND}
  {$IF CompilerVersion < 21.0}
    { Unter früheren Delphi-Versionen als 2010 gab es ein Problem mit dem
      "crHandPoint" cursor, sodass dieser nicht korrekt unter Windows Vista oder
      höher dargestellt wurde, sondern stattdessen im alten Windows-Look.
      Bei älteren Delphi-Versionen als 2010 steht deswegen eine Pseudo-
      Komponente zur Behebung dieses Problems zur Verfügung. }
      {$DEFINE NO_HANDPOINT}
  {$IFEND}
  {$IF CompilerVersion < 20.0}
    { Unter früheren Delphi-Versionen als 2009 war die Nutzung generischer
      Datentypen (Generics) nicht möglich. Da es ohne diese nahezu unmöglich
      scheint, typisierte Objekte, wie zum Beispiel typisierte TObjectList's
      zu deklarieren, fallen diese Deklarationen unter früheren Delphi-Versionen
      weg. Dies kann eventuell zu kompatibilitätsproblemen zwischen
      unterschiedlichen Nutzern dieser Komponenten führen, lässt sich aber nicht
      vermeiden. }
    {$DEFINE NO_GENERIC}
  {$IFEND}
  {$IF CompilerVersion < 20.0}
    { Unter früheren Delphi-Versionen als 2009 entsprach der String-Typenalias
      dem AnsiString-Typen. Da es gegebenfalls bei manchen externen (zB. OS-
      Spezifischen) Klassen zu Kompatibilitätsproblemen kommmen könnte, wird
      hier eine Überprüfung der Unicode-Unterstützung durchgeführt.
      Zu beachten ist jedoch, dass Delphi 2009 und höher AnsiStrings implizit
      in UnicodeStrings umwandelt und umgekehrt (sofern möglich). }
    {$DEFINE NO_UNICODE}
  {$IFEND}
  {$DEFINE ADDSPLASHENTRY}
  {$DEFINE ADDABOUTENTRY}


interface

  { Dies ist die Basis-Unit für die Lina-Komponenten bzw. Methoden und Klassen }

uses
  { Standard-Units }
  SysUtils, Classes, Dialogs, Graphics, ToolsAPI;

type
  TComponentAbout = class
  private
    { Private-Deklarationen }
    FComponent: ShortString;
    FVersion: Single;
    FAuthor: ShortString;
    FCopyright: ShortString;
    FHomepage: ShortString;
  protected
    { Protected-Deklarationen }
  published
    property Component: ShortString read FComponent;
    property Version: Single read FVersion;
    property Copyright: ShortString read FCopyright;
    property Author: ShortString read FAuthor;
    property Homepage: ShortString read FHomepage;
  public
    { Public-Deklarationen }
    constructor Create(Comp: ShortString = ''; Ver: Single = 1.0;
      Copy: ShortString = ''; Auth: ShortString = ''; Home: ShortString = '');
    { Über-Dialog }
    procedure AboutDlg;
  end;

  procedure RegisterPackageOnSplash;
  procedure RegisterPackageOnAbout;

const
  ComponentsPage = 'Lina';
  About_Title = 'About...';
  Package_Name = 'Lina Components';
  Package_Description = 'Components and source library for Delphi';
  Package_License = 'Mozilla Public License (MPL) 2.0';
  Package_SKU = '(Dev-Preview)';

implementation

procedure RegisterPackageOnSplash;
var
  SplashBitmap: TBitmap;
begin
  SplashBitmap := TBitmap.Create;
  try
    SplashBitmap.LoadFromFile('..\..\Resource\Lina.bmp');
    (ToolsAPI.SplashScreenServices as IOTASplashScreenServices).AddPluginBitmap(
     Package_Name,SplashBitmap.Handle,False,Package_License,Package_SKU);
  finally
    SplashBitmap.Free;
  end;
end;

procedure RegisterPackageOnAbout;
begin

end;

constructor TComponentAbout.Create(Comp: ShortString = ''; Ver: Single = 1.0;
  Copy: ShortString = ''; Auth: ShortString = ''; Home: ShortString = '');
begin
  FComponent := Comp;
  FVersion := Ver;
  FCopyright := Copy;
  FAuthor := Auth;
  FHomepage := Homepage;
end;

procedure TComponentAbout.AboutDlg;
begin
  {$IFDEF NO_VISTA}
    { MessageDlg, falls der Compiler KEINE Vista-Dialoge unterstützt }
    MessageDlg(
  {$ELSE}
    { TaskMessageDlg, falls der Compiler Vista-Dialoge unterstützt }
    TaskMessageDlg(
  {$ENDIF}
                   About_Title,
                 { ---------------------------------- }
                   Component + ' v'
                 + FloatToStr(Version) + #10#13
                 + Copyright + ' ' + Author + #10#13
                 + Homepage,
                 { ---------------------------------- }
                   mtInformation,
                 { ---------------------------------- }
                   [mbClose],0)
end;

initialization
  {$IFDEF ADDSPLASHENTRY}
    RegisterPackageOnSplash;
  {$ENDIF}

end.
