DELPHIX PACK EXTENDS HISTORY

 *  Copyright (c) 2004-2023 Jaro Benes
 *  All Rights Reserved
 *  Version 1.22.x
 *  D2D Hardware module
 *  web site: www.micrel.cz/Dx 
 *  e-mail: delphix_d2d@micrel.cz 

 * DISCLAIMER:
   This software is provided "as is" and is without warranty of any kind. The author of this software does not warrant, guarantee or make any representations regarding the use or results of use of this software in terms of reliability, accuracy or fitness for purpose. You assume the entire risk of direct or indirect, consequential or inconsequential results from the correct or incorrect usage of this software even if the author has been informed of the possibilities of such damage. Neither the author nor anybody connected to this software in any way can assume any responsibility.

Sorry for any future errors, I first saw DelphiX in 17-3-2004 and DirectX began learn some month later.
First work started at 13.9.2004. All units in this pack contain last changes and was added very interesting units (for study or inspiration).
Tested in Delphi 4, 5, 6, 7 and Delphi 2005, 2006 (fine works in Turbo too), 2007, 2009, 2010 and XE/XE2/XE3/XE4/XE5/XE6/XE7/XE8/Seattle/Berlin/Tokyo/Rio/Sydney/Alexandri/Athens. Delphi 3 is very old and is not support now. Some limitations can be for Delpi 4, 5 and 6 too, because Embarcadero unsuported it now (but not Delphi 2005 and 2006/Turbo).

NOTE FOR RETAINED MODE:
Retained mode is stil present in all source code, but exists more limitations under operation system Vista and Windows 7 - there is not include this part of DirectX and it is deprecated. Unofficial pack of DelphiX include limited support for this feature but without any warranty.

 * FEATURES:
   a) Implement Hardware acceleration for critical function like DrawAlpha {Blend}, DrawSub and DrawAdd for both way DXIMAGELIST and DIRECTDRAWSURFACE with rotation too.
   b) Automatic adjustement for texture size different 2^n.
   c) Minimum current source code change, all accelerated code added into:
      DXDraw.BeginScene;
      //code here
      DXDraw.EndScene;
   d) DelphiX facade continues using still.

 * HOW TO USE
   a) Design code like as DelphiX and drawing routine put into
      DXDraw.BeginScene;
      //code here
      DXDraw.EndScene;
   b) setup options in code or property for turn-on acceleration like:
      DXDraw.Finalize; {done DXDraw}
      If HardwareSwitch Then
      {hardware}
      Begin
        if NOT (doDirectX7Mode in DXDraw.Options) then
          DXDraw.Options := DXDraw.Options + [doDirectX7Mode];
        if NOT (doHardware in DXDraw.Options) then
          DXDraw.Options := DXDraw.Options + [doHardware];
        if NOT (do3D in DXDraw.Options) then
          DXDraw.Options := DXDraw.Options + [do3D];
        if doSystemMemory in DXDraw.Options then
          DXDraw.Options := DXDraw.Options - [doSystemMemory];
      End
      Else
      {software}
      Begin
        if doDirectX7Mode in DXDraw.Options then
          DXDraw.Options := DXDraw.Options - [doDirectX7Mode];
        if do3D in DXDraw.Options then
          DXDraw.Options := DXDraw.Options - [do3D];
        if doHardware in DXDraw.Options then
          DXDraw.Options := DXDraw.Options - [doHardware];
        if NOT (doSystemMemory in DXDraw.Options) then
          DXDraw.Options := DXDraw.Options + [doSystemMemory];
      End;
      {to fullscreen}
      if doFullScreen in DXDraw.Options then
      begin
        RestoreWindow;
        DXDraw.Cursor := crDefault;
        BorderStyle := bsSingle;
        DXDraw.Options := DXDraw.Options - [doFullScreen];
        DXDraw.Options := DXDraw.Options + [doFlip];
      end else
      begin
        StoreWindow;
        DXDraw.Cursor := crNone;
        BorderStyle := bsNone;
        DXDraw.Options := DXDraw.Options + [doFullScreen];
        DXDraw.Options := DXDraw.Options - [doFlip];
      end;
      DXDraw1.Initialize; {up DXDraw now}
 * NOTE When full screen no works properly, please add [doSelectedDriver]  into DXDraws.Options
 * NOTE Main form has to declare like: TForm1 = class(TDXForm)

 * KNOWN BUGS OR RESTRICTION:
   1/ Cannot be use DirectDrawSurface other from DXDraw.Surface in HW mode.
   2/ New functions was not tested for two and more DXDraws on form. Sorry.

 *INSTALATION
   Before installation new version please remove all files from Source directory and copy new files into.
   Open DelphiXx0.dpk for your Delphi IDE:

	DelphiX30.dpk for Delphi 3
	DelphiX40.dpk for Delphi 4
	DelphiX50.dpk for Delphi 5
	DelphiX60.dpk for Delphi 6
	DelphiX70.dpk for Delphi 7
	DelphiX90.dpk for Delphi 2005
	DelphiX100.dpk for Delphi 2006
	DelphiX110.dpk for Delphi 2007
	DelphiX120.dpk for Delphi 2009
	DelphiX140.dpk for Delphi 2010
	DelphiX150.dpk for Delphi XE
	DelphiX160.dpk for Delphi XE2
	DelphiX170.dpk for Delphi XE3
	DelphiX180.dpk for Delphi XE4
	DelphiX190.dpk for Delphi XE5
	DelphiX200.dpk for Delphi XE6
	DelphiX210.dpk for Delphi XE7
	DelphiX220.dpk for Delphi XE8
	DelphiX230.dpk for Delphi 10.0 Seattle
	DelphiX240.dpk for Delphi 10.1 Berlin
	DelphiX250.dpk for Delphi 10.2 Tokyo
	DelphiX260.dpk for Delphi 10.3 Rio
	DelphiX270.dpk for Delphi 10.4 Sydney
	DelphiX280.dpk for Delphi 11 Alexandria
	DelphiX290.dpk for Delphi 12 Athens

   Open Project options and check "Assignable typed constant" option when isn't checked (typically for Delphi 6 up).
or
you can use our installation program as helper for installation into IDE Delphi. Installation program is my small project with special features as my small direct support for beginners, cannot be perfect all.

 * HISTORY
   All released versions 
 1.00 11.02.2005 JB.
   *Initial release of hardware accelerated unDelphiX
 1.01 28.03.2005 JB.
   *Fix bug in Restore image procedure, when is picture change under HW mode.
 1.02 29.05.2005 Takanori Kawasaki
   *Fix bug in TD2D.D2DFreeTextures memory leak.
 1.03 03.06.2005 JB.
   *Transparent color area was partially corrected when display on 16 bit screen.
  +Added full support for Delphi3 (overrides removed, dynarray supplement).
 1.04 11.06.2005 JB.
   *Fix bug in bitmap mapping (8, 16, 32 bit) to DIB 24 bit.
   *Fix bug in test transparent color from changed DIB.
  +Added D3D support for Draw() routine.
 1.05 19.06.2005 JB.
  +Function for D3D Draw() conditional switch off/on added, because not work properly on some adapters (Draw() accelerated in DirectDrawSurface yet).
   Can be turn on please uncomment {$Define DrawHWAcc} in DelphiXcfg.inc
      23.11.2005 JB.
   +DXSpriteEngine improvement
   Isn't necessary derive classes sprite and BackgroundSprite can use DrawAdd, DrawAlpha and DrawSub also. New property editor can able edit of sprite in collection (like that in DXImageList or DXWaveList), and can be use simple Events for Collision, Move or Draw. 
  How to use:
Examples by Events:

1a/ Initialize image of sprite

procedure TForm1.DXSpriteEngine1Items0GetImage(Sender: TObject;
  var Image: TPictureCollectionItem);
begin
  {initialize image is indispensable}
  {other way is TForm.OnCreate}
  Image := DXImageList1.Items.Find('SpriteToRight');
end;

1b/ Move event

procedure TForm1.DXSpriteEngine1Items0Move(Sender: TObject;
  var MoveCount: Integer);
begin
  {can be searched in multi move event}
  {or selected from a sender}
  With Sender as TImageSpriteEx Do Begin
    If isUp in DXInput1.States Then Y := Y - 10;
    If isDown in DXInput1.States  Then Y := Y + 10;

    If isLeft in Form1.DXInput1.States  Then
    Begin
      If Image = DXImageList1.Items.Find('SpriteToRight') Then
        Image := DXImageList1.Items.Find('SpriteToLeft');
      Width := Image.Width;
      Height := Image.Height;
      X := X - 10; //move left
    End;

    If isRight in Form1.DXInput1.States  Then
    begin
      If Image = DXImageList1.Items.Find('SpriteToLeft') Then
        Image := DXImageList1.Items.Find('SpriteToRight');
      Width := Image.Width;
      Height := Image.Height;
      X := X + 10; //move right
    end;
    {reanimate() is move animation procedure from TImageSprite}
    {other way have to rewrite here youself}
    Reanimate(MoveCount) //indispensable
  End;
end;

2a/ How create multiple sprite

procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  //Create 50 sprites here
  //MyEnemySprite - sprite have to exist and has all events
  For i := 1 To 50 Do
  Begin
    With DXSpriteEngine1.Items.Add Do Begin
      KindSprite := stImageSprite;
      Sprite.AsSign(DXSpriteEngine1.Items.Find('MyEnemySprite').Sprite);
      Sprite.X := Random(DXDraw1.SurfaceWidth); //Set the Position Randomly
      Sprite.Y := Random(DXDraw1.SurfaceHeight);
      Name := Format('EnemySprite%d',[I]); //simple name for sprite
      Sprite.Tag := 0; //for sprite you can use Tag property as well
    End;
  End;
end;

2b/ How detect collision

procedure TForm1.DXSpriteEngine1Items0Collision(Sender: TObject;
  var Done: Boolean);
begin
  //MySprite exists too once
  //For collision have to different sprite
  If Sender <> DXSpriteEngine1.Items.Find('MySprite') Then
  With Sender as TImageSprite Do
  Begin
    {this features no use Dead, better is hide only}
    {NOTE: USE HIDE INSTEAD OF DEAD, SYSTEM USE STATIC SPRITE DEFINED IN DESIGN}
    Dead; //Kill MyEnemySprite here
    DXWaveList1.Items.Find('TaDa').Play(False); //Tada
  End;
end;

2c/ My sprite movement 

procedure TForm1.DXSpriteEngine1Items0Move(Sender: TObject;
  var MoveCount: Integer);
begin
  //movement
  With Sender as TImageSprite Do Begin
    If isUp in Form1.DXInput1.States Then Y := Y - 15;
    If isDown in Form1.DXInput1.States Then Y := Y + 15;
    If isLeft in Form1.DXInput1.States Then X := X - 15;
    If isRight in Form1.DXInput1.States Then X := X + 15;

    //detect limits of border
    If X > Form1.DXDraw1.SurfaceWidth Then X := 1;
    If Y > Form1.DXDraw1.SurfaceHeight Then Y := 1;
    If X <= 0 Then X := Form1.DXDraw1.SurfaceWidth - 1;
    If Y <= 0 Then Y := Form1.DXDraw1.SurfaceHeight - 1;

    //execute collision through sprites
    Collision;
  End;
end;

2d/ Chaotic move of EnemySprites

procedure TForm1.DXSpriteEngine1Items1Move(Sender: TObject;
  var MoveCount: Integer);
begin
  If Sender <> DXSpriteEngine1.Items.Find('MySprite') Then
  With Sender as TImageSprite do
  Begin
    //Choose a random new direction at a random time
    If (Random(30) = 15) Or (Tag = 0) Then
       Tag := Random(5);

    //Do the movement
    Case Tag of
     1: X := X + 15;
     2: X := X - 15;
     3: Y := Y + 15;
     4: Y := Y - 15;
    end;

    //If we're out of the screen we want to pop up at the other side again
    If X > Form1.DXDraw1.SurfaceWidth Then X := 1;
    If Y > Form1.DXDraw1.SurfaceHeight Then Y := 1;
    If X <= 0 Then X := Form1.DXDraw1.SurfaceWidth - 1;
    If Y <= 0 Then Y := Form1.DXDraw1.SurfaceHeight - 1;
  End
end;

2d/ Images initialization

procedure TForm1.DXSpriteEngine1Items0GetImage(Sender: TObject;
  var Image: TPictureCollectionItem);
begin
  Image := DXImageList1.Items.Find('MyEnemySprite');
end;

procedure TForm1.DXSpriteEngine1Items1GetImage(Sender: TObject;
  var Image: TPictureCollectionItem);
begin
  Image := DXImageList1.Items.Find('MySprite');
end;

3a/ Backgroudsprite initialization of all

procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  Blend := 128;
  //Create background layer 1
  with DXSpriteEngine1.Items.Find('Back').Sprite as TBackgroundSprite do begin
    //Since we use only one tile we set the map to 1 x 1
    SetMapSize(1, 1);
    //Now we set the image
    Image := DXImageList1.Items.Find('Back');
    //And now the depth, this is indicated by the Z property
    //The lower the number, the deeper the layer 
    //(this can also be used with normal TImageSprite Sprites)
    Z := -2;
    //We say the map has to be tiled, The image has to repeat over and over
    Tile := True;
  end;

  //Now we create layer 2
  with DXSpriteEngine1.Items.Find('Back2').Sprite as TBackgroundSprite do begin
    SetMapSize(1, 1);
    Image := DXImageList1.Items.Find('Back2');
    Z := -5; //A lower Z number 'cos Layer 2 has to be under Layer 1
    Tile := True;
  end;

  //Sprites front of layers
  for i := 1 to 6 do
  begin
    //Now we create the first row of balls
    with DXSpriteEngine1.Items.Add do begin
      Name := Format('PlayerE%d', [I]);
      KindSprite := stImageSprite;
      with Sprite as TImageSprite do begin
        Image := DXImageList1.Items.Find('Player');
        Width := Image.Width;
        Height := Image.Height;
        X := 160;
        Y := i * 80;
        Tag := 1;
        OnMove := DXSpriteEngine1Items2Move;
      end;
    end;
    //And we create the 2nd row of ships
    with DXSpriteEngine1.Items.Add do begin
      Name := Format('PlayerL%d', [I]);
      KindSprite := stImageSprite;
      with Sprite as TImageSprite do begin
        Image := DXImageList1.Items.Find('Player');
        Width := Image.Width;
        Height := Image.Height;
        X := 240;
        Y := i * 80;
        Tag := 1;
        OnMove := DXSpriteEngine1Items2Move;
      end;
    end;
    //And the third and last row of ships
    with DXSpriteEngine1.Items.Add do begin
      Name := Format('PalyerR%d', [I]);
      KindSprite := stImageSprite;
      with Sprite as TImageSprite do begin
        Image := DXImageList1.Items.Find('Player');
        Width := Image.Width;
        Height := Image.Height;
        X := 320;
        Y := i * 80;
        Tag := 1;
        OnMove := DXSpriteEngine1Items2Move;
      end;
    end;
  end;
end;

3b/ Move of layers automatically

procedure TForm1.DXSpriteEngine1Items0Move(Sender: TObject;
  var MoveCount: Integer);
begin
  //Automatically move the 1st layer with a speed of 5 to the right
  with Sender as TBackgroundSprite do 
    X := X + 5;
end;

procedure TForm1.DXSpriteEngine1Items1Move(Sender: TObject;
  var MoveCount: Integer);
begin
  //Automatically move the 2nd layer with a speed of 1 to the right
  // this gives a nice parralax effect since the first layer goes faster than the second, now we get the illusion of depth...
  with Sender as TBackgroundSprite do 
    X := X + 1;
end;

3c/ Move a cluster of sprites

procedure TForm1.DXSpriteEngine1Items2Move(Sender: TObject;
  var MoveCount: Integer);
begin
  //Proccess Input
  with Sender as TImageSprite do begin
    if isLeft in DXInput1.States then Y := Y + 10;
    if isRight in DXInput1.States then Y := Y - 10;
    if isUp in DXInput1.States then X := X - 10;
    if isDown in DXInput1.States then X := X + 10;
  end;
end;

3d/ Own drawing background with alpha

procedure TForm1.DXSpriteEngine1Items1Draw(Sender: TObject);
begin
  {enhacement for drawing tile, can be use blend or other techniques}
  {for drawing different to Draw() have to set HW turn on for better speed}
  With TBackgroundSprite(Sender) Do
    {there can be use DrawAlpha, DrawAdd or DrawSub }
    Image.DrawAlpha(DXDraw1.Surface, ChipsRect, ChipsPatternIndex, Blend);
end;

How move it in DXTimer

  DXDraw1.BeginScene;

  DXDraw1.Surface.Fill(DXDraw.Surface.ColorMatch(clBlack));
  //Update DXInputcomponent so we can receive new input
  DXInput1.Update;
  //Now move the sprites, this method will execute the DoMove method of all it's sprites
  DXSpriteEngine1.Move(1); //or use LagCount
  //Draw the sprites on the screen
  DXSpriteEngine1.Draw;

  DXDraw1.EndScene;

  //Flip the buffers so the player can actually see what's happening
  DXDraw1.Flip;

 1.06 13.01.2006 user137, JB., Takanori Kawasaki
      16.01.2006 user137
  +{$Define DrawHWAcc} is enabled by default on DelphiXcfg.inc
  +D2D variable is moved to interface so it is public
  +New variable RenderError that denies Flip if errors
  +Some functions of D2D made public
  +All rotate functions have angle as single type (thanks User137)
  +New rotate function
  +Fixed access violation and texture bug in TD2D.D2DTexturedOn
  +Rewrote all D2D effects (using most old code but split differently)
  +Added Quad and Triangle drawing for D2D
      16.01.2006 JB.
  -D2D variable moved back, better use DXDraw.D2D1 pointer to TD2D structure.
  +Asm for fast sin/cos function as single in rotation.
  *Code revised, low level routines encapsulated again.
  +Better initializing for DXDraw.Display, there is some AV or initialization error for D3D interface; Is advice in fullscreen initialize disable all GDI function (no wincontrol or form visible).
      24.01.2006 JB.
  +Low level routines for bump-mapping added.
  *Bug fix resize windows.
      24.02.2005 JB.
  *Bug fix for transparent color when background color is not black.
  +New effect for DrawAddCol(), DrawAlphaCol() and DrawSubCol() etc.
  +New effect for DrawRotateAddCol(),DrawRotateSubCol and DrawRotateAlphaCol()
  +Move TexImag into DXDraw, move DXFusion effect into DIB file.
  +Move DIBeffect into DIB file as part TDIB.
  +Add new function into DXClass file (very thanks Mr. Takanori Kawasaki).
      07.03.2006 JB.
  +Split uses sections in units for better compatibility with DX8 or DX9 DirectX headers.
      10.03.2006 JB.
  *Enhanced DIB effect (FadeIn, FadeOut, Ink etc.).
  +Add property BlendMode into TImageSpriteEx and change draw routine for this feature (+ property editor).
  -Remove deprecated TD3D class from unDelphiX pack
      15.03.2006 JB.
  +Added fast routines for pixel drawing into TDirectDrawSurface, Surface must be locked like
      DXDraw.Surface.Lock;
      DXDraw.Surface.Pixel[X, Y] := TheColor;
      TheColor := DXDraw.Surface.Pixel[X+1, Y+1];
      DXDraw.Surface.Unlock;
NOTE DON'T FORGET: The Pixel property required lock surface, againist Pixels property of Canvas required Release canvas only!
  +Aded routines for drawing Poke*() into TDirectDrawSurface, Surface has to locked. like PokeLine(), PokeLinePolar(), PokeBox(), PokeBlendPixel(), PokeWuLine(), Noise(), Blur(), PokeCircle(), PokeEllipse(), PokeFilledEllipse() and etc.
  +Added special drawing routine DrawCol() into DXImageList with special SubPattern parameter (idea by User137)
 1.06a 19.03.2006 JB.
  *Bug fix in assembler for fast ploting routine through DDS Pixel[].
      28.03.2006 JB.
  +Added routine LoadRGB(), SaveRGB depend by BitCount and repair procedure Blur().
  +Added DDS fade routine like Fade2White(), Fade2Color() and Fade2Black() etc.
      09.04.2006 JB.
  +Added routine for grab and paste DDS like GrabImage(), PasteImage().
      15.04.2006 JB.
  +Added flip DDS routine by MKost like DrawFlipH(), DrawFlipHV() and DrawFlipV() - untested.
  1.06b 18.04.2006 JB., user137
  +Added overload routine D2DRenderDrawDDSXYby user137.
      21.04.2006 JB.
  *Synchronize drawing function in Images and DDS
  +Add drawing routine DrawWaveY* like DrawWaveX but horizontally
  1.06c 1.05.2006 JB.
  +Add class for native working with DXT and native work with DIB32 (RGBA) with Alphachannel
  1.07 4.05.2006 JB., Speeder
  *Restructure new code and get out redundant functions in TD2D
  *Change routine into DDS like DrawAddCol(), DrawAlphaCol(), DrawSubCol(), DrawRotateAddCol(), DrawRotateSubCol(), DrawRotateAlphaCol() (thanks Speeder)
  *Make better compatibility with Delphi 3
  +Enhanced DIB unit for AlphaChannel compatibility
  *Change routine DIB2DXT() for make DXT from DIB32 file in one line, primary use for load DIB 32 with Alphachannel.
      10.05.2006 JB.
  +New component TDXMusic for play midi files from resource like TDXWave + property editor for load midis.
  *Better assembler for DDS Pixel property.
      14.05.2006 JB.
  *Fix bug in WaveX/WaveY function, remapping function for animated image from DXImageList.
  *Accepted DIB32 for DDS
  *Move D2DWhite, D2DAlphaVertex and D2DFade from procedure into function for better using.
      18.05.2006 JB.
  +Add ColoredLine() and AntialiasLine() into DIB units with demo project.
  1.07a 21.05.2006 JB.
  *Correct mistake in DelphiXcfg.ini file (wrong version of file included into packs).
  1.07b 21.09.2006 JB.
  *Add missing correction from Speeeder and interface ClearStack for force clear textures.
  *Correct DXInput unit by Paul van Dinther (twice initialization).
  1.07c 21.12.2006 JB.
  *Fix bug function AssignAlphaChannel() in DIB unit.
  1.07d 22.02.2007 JB.
  *Fix bug procedure ReAnimate() in DXSprite unit. Flickering corrected - very thanks for demo by seiferalmasy.
  1.07e 1.03.2007 JB.
  *Fix bug in texturing procedure in DXDraws unit. Correction of the texture size.
  1.07f 18.06.2007 JB.
  *Correct for turn-off RM mode on VISTA, it is set up in DelphiXcfg.inc now.
  *Support for Delphi 2007.
      10.07.2007 JB.
  *Fix bug in temporary DIB for alpha channel assign in function TDIB.AssignAlphaChannel().
  *Fix bug in size for texture with alpha channel, see conditional define FORCE_SQUARE in DXDraws unit.
  *Correct uses some units for separate compiling (see conditional define STANDARDDX for using split files from DirextX unit).
  *Correct inline functions for Delphi 2005 and up.
  1.08 31.10.2007 JB.
  +New texture managing, new properties.
  +Support JPG for DIB unit.
  +New Hot Spot Effect DoNovaEffect() (like Supernova Effect) in DIB unit with own editor.
  +New effect in DIB unit for direct Mandelbrot set drawing.
  +Simple graphical cryptic function in DIB.
  +New DXSpriteEngine and Sprite specifications for static creating of a complex sprite with directly attach image.
  +New component editors for DXBackgroundSprite map, define map by mouse only.
  +New MIDI stream storing like DXImageList.
  +New functions in DXClass unit like CircumCenter3Pt() or InCenter()or adopted class for parceled image.
  +New function for texture mirroring/flipping via procedure DXDraw.MirrorFlip() for each drawing texture.
      20.12.2007 JB.
  +Add glue-it editor for managing images and font editor for mask create.
  +Add new trace editor for simple creating drawing path with effect like blurring, rotating, flipping, mirroring, waving and more.
  +Add three new complex drawing routines for all supported effect in (un)DelphiX.
      21.12.2007 JB.
  -Get out support for Delphi 3, sorry. There is not conform array supported.
      14.4.2008 JB.
  -New version of installation program, new version of pack all-in-one (it will be supported still), new actualization web.
  1.08.1 15.4.2008 JB.
  +Add forgotten functionality flip/mirror for WaveX/WaveY procedure.
  1.08.2 5.5.2008 Takanori Kawasaki
  *The application (with hardware accelerated (Un)DelphiX) causes the error or the frieze under the situation:
    1-1. When application (with H.A.) executes full-screen mode, push "Alt"+"Tab"(Change window).
    1-2. When application (with H.A.) executes full-screen mode, push "Ctrl"+"Alt"+"Del"(Call Task Manager).
    1-3. When application (with H.A.) executes window mode, another application executes full-screen mode.
  *Fix memory leak. It occurred in "TDIB.GetAlphaChannel".
  *Fix exception 'DXT file is invalid' when application is executed.
  1.08.3 28.10.2008 JB.
  +Delphi 2009 support added (conditional UNICODE is default used now) as first version.
      23.11.2008 Mariusz Bulkowski 
  *Fix Delphi 2009 bug in DXCommon in "IsNTandDelphiRunning".
      8.2.2009 Gilberto Rocha da Silva
  +added two procedures (UpdateTag, InitializeImages) for "fix the image in execution time, imagelist no initialize new images take for HD in execution time", more directly to Gilberto Rocha da Silva by mail to xybersportgames@gmail.com.
  1.08.4 28.2.2009 JB.
  *Fix some conditionals in source code.
  1.08.5 25.9.2009 JB.
  *Fix size of background sprite editor - for large image and maps > 128x128 cell size.
  *Fix some forgotten conditionals in source code DXDraws.pas.
      29.9.2008 Pásztor Károly [fenistil@hu.hu] 
  *Fix conditional for "Glue it..." item of component editor (item always invisible).
      30.9.2008 JB. 
  *Fix drawing of bitmaps with alpha channel - DIB32 in scheme RGBA - low level fix in hardware acceleration and very important for all users.
      26.10.2008 JB. 
  *Delphi 2010 support added, strict Unicode names check.
  1.09.0 17.5.2010 JB.
  *Fix bug in sprite unit function Collision_GetSpriteAt(). Very thanks Sergey.
  +Improvement rendering any size in image (background feature).
  +Better works with videotexture (and for save memory can be removed from project).
  +Better support pure interfaces from Delphi 2010.
  +New function for drawing DrawRect(), can be draw rectangle image to rectange surface.
  +Better rendering DIB32.
  +Add support PNG (directly in Delphi 2010).
  *Corrected problem use ZLib for texture compression (Note: in Delphi 4/5 problems still occurred).
  *Better assign PNG to DIB32 (in Delphi 2010 directly, but lower version must be added manually).
  *Corrected many small bugs + comment lines in cfg file for better settings of options.
  *Correct installation program too.
      2.9.2010 JB.
  +Support for Delphi XE added.
  1.09.1 1.9.2011 JB.
  +Support for Delphi XE2 added.
  1.09.2 6.9.2011 JB.
  +Conditionals revision.
  +Improvement function for future quaternion support and more D2/D3 expressions
  *Inline optimization for all possible functions.
  +Better support 3D Sound support and improvements.
  *Convert some DFM files into text form as more comparable format.
  *Better color match speed optimization.
  +Function for set default sprite chip.
  1.10.0 4.9.2012 JB.
  +Support for Delphi XE3 added.
  1.11.0 6.5.2013 JB.
  +Support for Delphi XE4 added.
  1.12.0 20.9.2013 JB.
  +Support for Delphi XE5 added.
  1.13.0 2.5.2014 JB.
  +Support for Delphi XE6 added.
  1.14.0 4.9.2014 JB.
  +Support for Delphi XE7 added.
  1.15.0 10.4.2015 JB.
  +Support for Delphi XE8 added.
  +Enhaced flip/flop.
  1.16.0 10.12.2015 JB.
  +Support for Delphi 10 Seattle added.
  1.17.0 27.4.2016 JB.
  +Support for Delphi 10.1 Berlin added.
  1.18.0 19.11.2017 JB.
  +Support for Delphi 10.2 Tokyo added.
  1.19.0 4.12.2018 JB.
  +Support for Delphi 10.3 Rio added.
  1.20.0 15.6.2020 JB.
  +Support for Delphi 10.4 Sydney added.
  1.21.0 18.9.2022 JB.
  +Support for Delphi 11 Alexandria added.
  1.22.0 19.11.2023 JB.
  +Support for Delphi 12 Athens added.
  +Optimize some assembler and rewrite into pure Pascal code.