Browse Source

* System.UITypes for delphi/fpc compatibility

Michael Van Canneyt 4 months ago
parent
commit
6909bd9f3e
1 changed files with 1145 additions and 0 deletions
  1. 1145 0
      packages/rtl/src/system.uitypes.pp

+ 1145 - 0
packages/rtl/src/system.uitypes.pp

@@ -0,0 +1,1145 @@
+{
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 1999-2019 by Marco van de Voort
+        member of the Free Pascal development team.
+
+    Delphi compatibility unit with GUI/imaging related types.
+
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ **********************************************************************}
+unit System.UITypes;
+
+{$mode delphi}
+
+// LCL defined all sets with SizeOf()=4
+{$PACKSET FIXED}
+
+interface
+
+Type  
+    RTLString   = String;
+    TColor      = NativeInt; // -$7FFFFFFF-1..$7FFFFFFF; not handled correctly by pas2js
+    TColorRef   = Type Cardinal;
+    TAlphaColor = Type Cardinal;
+    TImageIndex = type Integer;
+
+    { TColorRec }
+
+    TColorRec = record
+      class var ColorToRGB: function (Color: TColor): Longint;
+      function GetColor : TColor;
+      procedure SetColor(aColor : TColor);
+      function ToString : RTLString;
+      const
+      // 140 HTML colors.
+      AliceBlue          = TColor($FFF8F0);
+      AntiqueWhite       = TColor($D7EBFA);
+      Aqua               = TColor($FFFF00);
+      Aquamarine         = TColor($D4FF7F);
+      Azure              = TColor($FFFFF0);
+      Beige              = TColor($DCF5F5);
+      Bisque             = TColor($C4E4FF);
+      Black              = TColor($000000);
+      BlanchedAlmond     = TColor($CDEBFF);
+      Blue               = TColor($FF0000);
+      BlueViolet         = TColor($E22B8A);
+      Brown              = TColor($2A2AA5);
+      BurlyWood          = TColor($87B8DE);
+      CadetBlue          = TColor($A09E5F);
+      Chartreuse         = TColor($00FF7F);
+      Chocolate          = TColor($1E69D2);
+      Coral              = TColor($507FFF);
+      CornflowerBlue     = TColor($ED9564);
+      Cornsilk           = TColor($DCF8FF);
+      Crimson            = TColor($3C14DC);
+      Cyan               = TColor($FFFF00);
+      DarkBlue           = TColor($8B0000);
+      DarkCyan           = TColor($8B8B00);
+      DarkGoldenRod      = TColor($0B86B8);
+      DarkGray           = TColor($A9A9A9);
+      DarkGreen          = TColor($006400);
+      DarkGrey           = TColor($A9A9A9);
+      DarkKhaki          = TColor($6BB7BD);
+      DarkMagenta        = TColor($8B008B);
+      DarkOliveGreen     = TColor($2F6B55);
+      DarkOrange         = TColor($008CFF);
+      DarkOrchid         = TColor($CC3299);
+      DarkRed            = TColor($00008B);
+      DarkSalmon         = TColor($7A96E9);
+      DarkSeaGreen       = TColor($8FBC8F);
+      DarkSlateBlue      = TColor($8B3D48);
+      DarkSlateGray      = TColor($4F4F2F);
+      DarkSlateGrey      = TColor($4F4F2F);
+      DarkTurquoise      = TColor($D1CE00);
+      DarkViolet         = TColor($D30094);
+      DeepPink           = TColor($9314FF);
+      DeepSkyBlue        = TColor($FFBF00);
+      DimGray            = TColor($696969);
+      DimGrey            = TColor($696969);
+      DodgerBlue         = TColor($FF901E);
+      FireBrick          = TColor($2222B2);
+      FloralWhite        = TColor($F0FAFF);
+      ForestGreen        = TColor($228B22);
+      Fuchsia            = TColor($FF00FF);
+      Gainsboro          = TColor($DCDCDC);
+      GhostWhite         = TColor($FFF8F8);
+      Gold               = TColor($00D7FF);
+      GoldenRod          = TColor($20A5DA);
+      Gray               = TColor($808080);
+      Green              = TColor($008000);
+      GreenYellow        = TColor($2FFFAD);
+      Grey               = TColor($808080);
+      HoneyDew           = TColor($F0FFF0);
+      HotPink            = TColor($B469FF);
+      IndianRed          = TColor($5C5CCD);
+      Indigo             = TColor($82004B);
+      Ivory              = TColor($F0FFFF);
+      Khaki              = TColor($8CE6F0);
+      Lavender           = TColor($FAE6E6);
+      LavenderBlush      = TColor($F5F0FF);
+      LawnGreen          = TColor($00FC7C);
+      LemonChiffon       = TColor($CDFAFF);
+      LightBlue          = TColor($E6D8AD);
+      LightCoral         = TColor($8080F0);
+      LightCyan          = TColor($FFFFE0);
+      LightGoldenRodYellow    = TColor($D2FAFA);
+      LightGray          = TColor($D3D3D3);
+      LightGreen         = TColor($90EE90);
+      LightGrey          = TColor($D3D3D3);
+      LightPink          = TColor($C1B6FF);
+      LightSalmon        = TColor($7AA0FF);
+      LightSeaGreen      = TColor($AAB220);
+      LightSkyBlue       = TColor($FACE87);
+      LightSlateGray     = TColor($998877);
+      LightSlateGrey     = TColor($998877);
+      LightSteelBlue     = TColor($DEC4B0);
+      LightYellow        = TColor($E0FFFF);
+      Lime               = TColor($00FF00);
+      LimeGreen          = TColor($32CD32);
+      Linen              = TColor($E6F0FA);
+      Magenta            = TColor($FF00FF);
+      Maroon             = TColor($000080);
+      MediumAquaMarine   = TColor($AACD66);
+      MediumBlue         = TColor($CD0000);
+      MediumOrchid       = TColor($D355BA);
+      MediumPurple       = TColor($DB7093);
+      MediumSeaGreen     = TColor($71B33C);
+      MediumSlateBlue    = TColor($EE687B);
+      MediumSpringGreen  = TColor($9AFA00);
+      MediumTurquoise    = TColor($CCD148);
+      MediumVioletRed    = TColor($8515C7);
+      MidnightBlue       = TColor($701919);
+      MintCream          = TColor($FAFFF5);
+      MistyRose          = TColor($E1E4FF);
+      Moccasin           = TColor($B5E4FF);
+      NavajoWhite        = TColor($ADDEFF);
+      Navy               = TColor($800000);
+      OldLace            = TColor($E6F5FD);
+      Olive              = TColor($008080);
+      OliveDrab          = TColor($238E6B);
+      Orange             = TColor($00A5FF);
+      OrangeRed          = TColor($0045FF);
+      Orchid             = TColor($D670DA);
+      PaleGoldenRod      = TColor($AAE8EE);
+      PaleGreen          = TColor($98FB98);
+      PaleTurquoise      = TColor($EEEEAF);
+      PaleVioletRed      = TColor($9370DB);
+      PapayaWhip         = TColor($D5EFFF);
+      PeachPuff          = TColor($B9DAFF);
+      Peru               = TColor($3F85CD);
+      Pink               = TColor($CBC0FF);
+      Plum               = TColor($DDA0DD);
+      PowderBlue         = TColor($E6E0B0);
+      Purple             = TColor($800080);
+      RebeccaPurple      = TColor($993366);
+      Red                = TColor($0000FF);
+      RosyBrown          = TColor($8F8FBC);
+      RoyalBlue          = TColor($E16941);
+      SaddleBrown        = TColor($13458B);
+      Salmon             = TColor($7280FA);
+      SandyBrown         = TColor($60A4F4);
+      SeaGreen           = TColor($578B2E);
+      SeaShell           = TColor($EEF5FF);
+      Sienna             = TColor($2D52A0);
+      Silver             = TColor($C0C0C0);
+      SkyBlue            = TColor($EBCE87);
+      SlateBlue          = TColor($CD5A6A);
+      SlateGray          = TColor($908070);
+      SlateGrey          = TColor($908070);
+      Snow               = TColor($FAFAFF);
+      SpringGreen        = TColor($7FFF00);
+      SteelBlue          = TColor($B48246);
+      Tan                = TColor($8CB4D2);
+      Teal               = TColor($808000);
+      Thistle            = TColor($D8BFD8);
+      Tomato             = TColor($4763FF);
+      Turquoise          = TColor($D0E040);
+      Violet             = TColor($EE82EE);
+      Wheat              = TColor($B3DEF5);
+      White              = TColor($FFFFFF);
+      WhiteSmoke         = TColor($F5F5F5);
+      Yellow             = TColor($00FFFF);
+      YellowGreen        = TColor($32CD9A);
+      // extended colors (from lazarus Graphics)
+      MoneyGreen         = TColor($C0DCC0);
+      Cream              = TColor($F0FBFF);
+      MedGray            = TColor($A4A0A0);
+      // aliases
+      LtGray             = TColor($C0C0C0); // clSilver alias
+      DkGray             = TColor($808080); // clGray alias
+      // Windows system colors
+      SysScrollBar               = TColor($FF000000) platform;
+      SysBackground              = TColor($FF000001) platform;
+      SysActiveCaption           = TColor($FF000002) platform;
+      SysInactiveCaption         = TColor($FF000003) platform;
+      SysMenu                    = TColor($FF000004) platform;
+      SysWindow                  = TColor($FF000005) platform;
+      SysWindowFrame             = TColor($FF000006) platform;
+      SysMenuText                = TColor($FF000007) platform;
+      SysWindowText              = TColor($FF000008) platform;
+      SysCaptionText             = TColor($FF000009) platform;
+      SysActiveBorder            = TColor($FF00000A) platform;
+      SysInactiveBorder          = TColor($FF00000B) platform;
+      SysAppWorkSpace            = TColor($FF00000C) platform;
+      SysHighlight               = TColor($FF00000D) platform;
+      SysHighlightText           = TColor($FF00000E) platform;
+      SysBtnFace                 = TColor($FF00000F) platform;
+      SysBtnShadow               = TColor($FF000010) platform;
+      SysGrayText                = TColor($FF000011) platform;
+      SysBtnText                 = TColor($FF000012) platform;
+      SysInactiveCaptionText     = TColor($FF000013) platform;
+      SysBtnHighlight            = TColor($FF000014) platform;
+      Sys3DDkShadow              = TColor($FF000015) platform;
+      Sys3DLight                 = TColor($FF000016) platform;
+      SysInfoText                = TColor($FF000017) platform;
+      SysInfoBk                  = TColor($FF000018) platform;
+      SysHotLight                = TColor($FF00001A) platform;
+      SysGradientActiveCaption   = TColor($FF00001B) platform;
+      SysGradientInactiveCaption = TColor($FF00001C) platform;
+      SysMenuHighlight           = TColor($FF00001D) platform;
+      SysMenuBar                 = TColor($FF00001E) platform;
+      SysNone                    = TColor($1FFFFFFF) platform;
+      Null                       = TColor($00000000);
+      SysDefault                 = TColor($20000000) platform;
+      var
+          R,G,B,A : Byte;
+          property Color : TColor read GetColor Write SetColor;
+      end;
+
+      TColors = TColorRec;
+
+
+  { TAlphaColors }
+
+  TAlphaColors = record
+    const
+      Null                 = TAlphaColor(0);
+      Alpha                = TAlphaColor($ff000000);
+      Black                = Alpha;
+      Blue                 = TAlphaColor($ff0000ff);
+      Green                = TAlphaColor($ff008000);
+      Lime                 = TAlphaColor($ff00ff00);
+      Red                  = TAlphaColor($ffff0000);
+      White                = TAlphaColor($ffffffff);
+      AliceBlue            = TAlphaColor($ffF0F8FF);
+      AntiqueWhite         = TAlphaColor($ffFAEBD7);
+      Aqua                 = TAlphaColor($ff00FFFF);
+      AquaMarine           = TAlphaColor($ff7FFFD4);
+      Azure                = TAlphaColor($ffF0FFFF);
+      Beige                = TAlphaColor($ffF5F5DC);
+      Bisque               = TAlphaColor($ffFFE4C4);
+      BlanchedAlmond       = TAlphaColor($ffFFEBCD);
+      BlueViolet           = TAlphaColor($ff8A2BE2);
+      Brown                = TAlphaColor($ffA52A2A);
+      BurlyWood            = TAlphaColor($ffDEB887);
+      CadetBlue            = TAlphaColor($ff5F9EA0);
+      Chartreuse           = TAlphaColor($ff7FFF00);
+      Chocolate            = TAlphaColor($ffD2691E);
+      Coral                = TAlphaColor($ffFF7F50);
+      CornflowerBlue       = TAlphaColor($ff6495ED);
+      CornSilk             = TAlphaColor($ffFFF8DC);
+      Crimson              = TAlphaColor($ffDC143C);
+      Cyan                 = TAlphaColor($ff00FFFF);
+      DarkBlue             = TAlphaColor($ff00008B);
+      DarkCyan             = TAlphaColor($ff008B8B);
+      DarkGoldenRod        = TAlphaColor($ffB8860B);
+      DarkGray             = TAlphaColor($ffA9A9A9);
+      DarkGreen            = TAlphaColor($ff006400);
+      DarkGrey             = TAlphaColor($ffA9A9A9);
+      DarkKhaki            = TAlphaColor($ffBDB76B);
+      DarkMagenta          = TAlphaColor($ff8B008B);
+      DarkOliveGreen       = TAlphaColor($ff556B2F);
+      DarkOrange           = TAlphaColor($ffFF8C00);
+      DarkOrchid           = TAlphaColor($ff9932CC);
+      DarkRed              = TAlphaColor($ff8B0000);
+      DarkSalmon           = TAlphaColor($ffE9967A);
+      DarkSeaGreen         = TAlphaColor($ff8FBC8F);
+      DarkSlateBlue        = TAlphaColor($ff483D8B);
+      DarkSlateGray        = TAlphaColor($ff2F4F4F);
+      DarkSlateGrey        = TAlphaColor($ff2F4F4F);
+      DarkTurquoise        = TAlphaColor($ff00CED1);
+      DarkViolet           = TAlphaColor($ff9400D3);
+      DeepPink             = TAlphaColor($ffFF1493);
+      DeepSkyBlue          = TAlphaColor($ff00BFFF);
+      DimGray              = TAlphaColor($ff696969);
+      DimGrey              = TAlphaColor($ff696969);
+      DodgerBlue           = TAlphaColor($ff1E90FF);
+      Firebrick            = TAlphaColor($ffB22222);
+      FloralWhite          = TAlphaColor($ffFFFAF0);
+      ForestGreen          = TAlphaColor($ff228B22);
+      Fuchsia              = TAlphaColor($ffFF00FF);
+      Gainsboro            = TAlphaColor($ffDCDCDC);
+      GhostWhite           = TAlphaColor($ffF8F8FF);
+      Gold                 = TAlphaColor($ffFFD700);
+      GoldenRod            = TAlphaColor($ffDAA520);
+      Gray                 = TAlphaColor($ff808080);
+      GreenYellow          = TAlphaColor($ffADFF2F);
+      Grey                 = TAlphaColor($ff808080);
+      HoneyDew             = TAlphaColor($ffF0FFF0);
+      HotPink              = TAlphaColor($ffFF69B4);
+      IndianRed            = TAlphaColor($ffCD5C5C);
+      Indigo               = TAlphaColor($ff4B0082);
+      Ivory                = TAlphaColor($ffFFFFF0);
+      Khaki                = TAlphaColor($ffF0E68C);
+      Lavender             = TAlphaColor($ffE6E6FA);
+      LavenderBlush        = TAlphaColor($ffFFF0F5);
+      LawnGreen            = TAlphaColor($ff7CFC00);
+      LemonChiffon         = TAlphaColor($ffFFFACD);
+      LightBlue            = TAlphaColor($ffADD8E6);
+      LightCoral           = TAlphaColor($ffF08080);
+      LightCyan            = TAlphaColor($ffE0FFFF);
+      LightGoldenRodYellow = TAlphaColor($ffFAFAD2);
+      LightGray            = TAlphaColor($ffD3D3D3);
+      LightGreen           = TAlphaColor($ff90EE90);
+      LightGrey            = TAlphaColor($ffD3D3D3);
+      LightPink            = TAlphaColor($ffFFB6C1);
+      LightSalmon          = TAlphaColor($ffFFA07A);
+      LightSeaGreen        = TAlphaColor($ff20B2AA);
+      LightSkyBlue         = TAlphaColor($ff87CEFA);
+      LightSlateGray       = TAlphaColor($ff778899);
+      LightSlateGrey       = TAlphaColor($ff778899);
+      LightSteelBlue       = TAlphaColor($ffB0C4DE);
+      LightYellow          = TAlphaColor($ffFFFFE0);
+      LtGray               = TAlphaColor($ffC0C0C0);
+      MedGray              = TAlphaColor($ffA0A0A0);
+      DkGray               = TAlphaColor($ff808080);
+      MoneyGreen           = TAlphaColor($ffC0DCC0);
+      LegacySkyBlue        = TAlphaColor($ffF0CAA6);
+      Cream                = TAlphaColor($ffF0FBFF);
+      LimeGreen            = TAlphaColor($ff32CD32);
+      Linen                = TAlphaColor($ffFAF0E6);
+      Magenta              = TAlphaColor($ffFF00FF);
+      Maroon               = TAlphaColor($ff800000);
+      MediumAquaMarine     = TAlphaColor($ff66CDAA);
+      MediumBlue           = TAlphaColor($ff0000CD);
+      MediumOrchid         = TAlphaColor($ffBA55D3);
+      MediumPurple         = TAlphaColor($ff9370DB);
+      MediumSeaGreen       = TAlphaColor($ff3CB371);
+      MediumSlateBlue      = TAlphaColor($ff7B68EE);
+      MediumSpringGreen    = TAlphaColor($ff00FA9A);
+      MediumTurquoise      = TAlphaColor($ff48D1CC);
+      MediumVioletRed      = TAlphaColor($ffC71585);
+      MidnightBlue         = TAlphaColor($ff191970);
+      MintCream            = TAlphaColor($ffF5FFFA);
+      MistyRose            = TAlphaColor($ffFFE4E1);
+      Moccasin             = TAlphaColor($ffFFE4B5);
+      NavajoWhite          = TAlphaColor($ffFFDEAD);
+      Navy                 = TAlphaColor($ff000080);
+      OldLace              = TAlphaColor($ffFDF5E6);
+      Olive                = TAlphaColor($ff808000);
+      OliveDrab            = TAlphaColor($ff6B8E23);
+      Orange               = TAlphaColor($ffFFA500);
+      OrangeRed            = TAlphaColor($ffFF4500);
+      Orchid               = TAlphaColor($ffDA70D6);
+      PaleGoldenRod        = TAlphaColor($ffEEE8AA);
+      PaleGreen            = TAlphaColor($ff98FB98);
+      PaleTurquoise        = TAlphaColor($ffAFEEEE);
+      PaleVioletRed        = TAlphaColor($ffDB7093);
+      PapayaWhip           = TAlphaColor($ffFFEFD5);
+      PeachPuff            = TAlphaColor($ffFFDAB9);
+      Peru                 = TAlphaColor($ffCD853F);
+      Pink                 = TAlphaColor($ffFFC0CB);
+      Plum                 = TAlphaColor($ffDDA0DD);
+      PowderBlue           = TAlphaColor($ffB0E0E6);
+      Purple               = TAlphaColor($ff800080);
+      RosyBrown            = TAlphaColor($ffBC8F8F);
+      RoyalBlue            = TAlphaColor($ff4169E1);
+      SaddleBrown          = TAlphaColor($ff8B4513);
+      Salmon               = TAlphaColor($ffFA8072);
+      SandyBrown           = TAlphaColor($ffF4A460);
+      SeaGreen             = TAlphaColor($ff2E8B57);
+      SeaShell             = TAlphaColor($ffFFF5EE);
+      Sienna               = TAlphaColor($ffA0522D);
+      Silver               = TAlphaColor($ffC0C0C0);
+      SkyBlue              = TAlphaColor($ff87CEEB);
+      SlateBlue            = TAlphaColor($ff6A5ACD);
+      SlateGray            = TAlphaColor($ff708090);
+      SlateGrey            = TAlphaColor($ff708090);
+      Snow                 = TAlphaColor($ffFFFAFA);
+      SpringGreen          = TAlphaColor($ff00FF7F);
+      SteelBlue            = TAlphaColor($ff4682B4);
+      Tan                  = TAlphaColor($ffD2B48C);
+      Teal                 = TAlphaColor($ff008080);
+      Thistle              = TAlphaColor($ffD8BFD8);
+      Tomato               = TAlphaColor($ffFF6347);
+      Turquoise            = TAlphaColor($ff40E0D0);
+      Violet               = TAlphaColor($ffEE82EE);
+      Wheat                = TAlphaColor($ffF5DEB3);
+      WhiteSmoke           = TAlphaColor($ffF5F5F5);
+      Yellow               = TAlphaColor($ffFFFF00);
+      YellowGreen          = TAlphaColor($ff9ACD32);
+  private
+    function GetColor : TAlphaColor;
+    procedure SetColor(aColor : TAlphaColor);
+    function GetHiWord : Word;    
+    function GetLoWord : Word;    
+    procedure SetHiWord(aValue : Word);    
+    procedure SetLoWord(aValue : Word);    
+  public
+    B, G, R, A: Byte;
+    constructor Create(const aColor: TAlphaColor);
+    class var ColorToRGB: function (Color: TAlphaColor): Longint;
+    function ToString : RTLString;
+    property Color: TAlphaColor read GetColor Write SetColor;
+    property HiWord: Word Read GetHiWord Write SetHiWord;
+    property LoWord: Word Read GetLoWord Write SetLoword;
+  end;
+  TAlphaColorRec = TAlphaColors;
+  PAlphaColorRec = ^TAlphaColorRec;
+
+  PAlphaColorF = ^TAlphaColorF;
+  TAlphaColorF = record
+  Public
+    R, G, B, A: Single;
+  const
+    Epsilon = 1.5259E-05; // 1 / 65535, minimal value for TPixelFormat.RGBA16 components
+
+    class function Create(const R, G, B: Single; const A: Single = 1): TAlphaColorF; overload; static; inline;
+    class function Create(const aColor: TAlphaColor): TAlphaColorF; overload; static; inline;
+
+    function PremultipliedAlpha: TAlphaColorF;
+    function UnpremultipliedAlpha: TAlphaColorF;
+
+    function Clamp: TAlphaColorF;
+    function ToAlphaColor: TAlphaColor;
+  end;
+
+  { TColorHelper }
+
+  TColorHelper = record helper for TColor
+    Function ToString : RTLString;
+  end;
+
+
+// copied from Lazutils version
+///////////////////////////////
+
+type
+  // Message dialog related
+  TMsgDlgType    = (mtWarning, mtError, mtInformation, mtConfirmation, mtCustom);
+  TMsgDlgBtn     = (mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbIgnore,
+                    mbAll, mbNoToAll, mbYesToAll, mbHelp, mbClose);
+  TMsgDlgButtons = set of TMsgDlgBtn;
+
+  // ModalResult
+  TModalResult = low(Integer)..high(Integer);
+
+const
+  // Used for ModalResult
+  mrNone = 0;
+  mrOK = mrNone + 1;
+  mrCancel = mrNone + 2;
+  mrAbort = mrNone + 3;
+  mrRetry = mrNone + 4;
+  mrIgnore = mrNone + 5;
+  mrYes = mrNone + 6;
+  mrNo = mrNone + 7;
+  mrAll = mrNone + 8;
+  mrNoToAll = mrNone + 9;
+  mrYesToAll = mrNone + 10;
+  mrClose = mrNone + 11;
+  mrContinue = mrNone + 12;
+  mrTryAgain = mrNone + 13;
+  mrLast = mrTryAgain;
+  
+  // String representation of ModalResult values
+  ModalResultStr: array[mrNone..mrLast] of string = (
+    'mrNone',
+    'mrOk',
+    'mrCancel',
+    'mrAbort',
+    'mrRetry',
+    'mrIgnore',
+    'mrYes',
+    'mrNo',
+    'mrAll',
+    'mrNoToAll',
+    'mrYesToAll',
+    'mrClose',
+    'mrContinue',
+    'mrTryAgain');
+
+// CONTROLS
+type
+  TCloseAction = (caNone, caHide, caFree, caMinimize);
+  TCloseActions = set of  TCloseAction;
+  
+  TMouseButton = (mbLeft, mbRight, mbMiddle, mbExtra1, mbExtra2);
+  TMouseButtons = set of TMouseButton;
+  
+  TTabOrder = -1..32767;
+  
+  TDragKind = (dkDrag, dkDock);
+  TDragKinds = set of TDragKind;
+  
+  TDragMode = (dmManual , dmAutomatic);
+  TDragModes = set of TDragMode;
+  
+  TDragState = (dsDragEnter, dsDragLeave, dsDragMove);
+  TDragStates = set of TDragState;
+  
+  TDragMessage = (dmDragEnter, dmDragLeave, dmDragMove, dmDragDrop,
+                  dmDragCancel,dmFindTarget);
+  TDragMessages = set of TDragMessage;
+
+  TAnchorKind = (akTop, akLeft, akRight, akBottom);
+  TAnchors = set of TAnchorKind;
+  TAnchorKinds = TAnchors;
+
+  TAnchorSideReference = (asrTop, asrBottom, asrCenter);
+  TAnchorSideReferences = set of TAnchorSideReference;
+
+  TScrollCode = (scLineUp, scLineDown, scPageUp, scPageDown, scPosition,
+                scTrack, scTop, scBottom, scEndScroll);
+  TScrollCodes = set of TScrollCode;
+  
+  TCursor = SmallInt; // -32768..32767;
+
+const
+  // Cursor constants
+  crHigh        = TCursor(0);
+  crDefault     = TCursor(0);
+  crNone        = TCursor(-1);
+  crArrow       = TCursor(-2);
+  crCross       = TCursor(-3);
+  crIBeam       = TCursor(-4);
+  crSize        = TCursor(-22);
+  crSizeNESW    = TCursor(-6); // diagonal north east - south west
+  crSizeNS      = TCursor(-7);
+  crSizeNWSE    = TCursor(-8);
+  crSizeWE      = TCursor(-9);
+  crSizeNW      = TCursor(-23);
+  crSizeN       = TCursor(-24);
+  crSizeNE      = TCursor(-25);
+  crSizeW       = TCursor(-26);
+  crSizeE       = TCursor(-27);
+  crSizeSW      = TCursor(-28);
+  crSizeS       = TCursor(-29);
+  crSizeSE      = TCursor(-30);
+  crUpArrow     = TCursor(-10);
+  crHourGlass   = TCursor(-11);
+  crDrag        = TCursor(-12);
+  crNoDrop      = TCursor(-13);
+  crHSplit      = TCursor(-14);
+  crVSplit      = TCursor(-15);
+  crMultiDrag   = TCursor(-16);
+  crSQLWait     = TCursor(-17);
+  crNo          = TCursor(-18);
+  crAppStart    = TCursor(-19);
+  crHelp        = TCursor(-20);
+  crHandPoint   = TCursor(-21);
+  crSizeAll     = TCursor(-22);
+  crLow         = TCursor(-30);
+
+
+  // font types&styles
+  LF_FULLFACESIZE = 64;
+  LF_FACESIZE = 32;
+
+type
+  TFontPitch = (fpDefault, fpVariable, fpFixed);
+  TFontName = string;
+  TFontDataName = string; // [LF_FACESIZE -1];
+  TFontStyle = (fsBold, fsItalic, fsUnderline, fsStrikeOut);
+  TFontStyles = set of TFontStyle;
+  TFontStylesBase = set of TFontStyle;
+  TFontCharSet = 0..255;
+  TFontQuality = (fqDefault, fqDraft, fqProof, fqNonAntialiased, fqAntialiased,
+    fqCleartype, fqCleartypeNatural);
+
+// PRINTERS
+  TPrinterOrientation = (poPortrait,poLandscape,poReverseLandscape,poReversePortrait);
+  TPrinterOrientations = set of TPrinterOrientation;
+  
+  TPrinterCapability  = (pcCopies, pcOrientation, pcCollation);
+  TPrinterCapabilities= Set of TPrinterCapability;
+  
+  TPrinterState = (psNoHandle, psHandleIC, psHandleDC);
+  TPrinterStates = set of TPrinterState;
+  
+
+// Gestures
+const
+  sgiNoGesture       =  0;
+  sgiLeft            =  1;
+  sgiRight           =  2;
+  sgiUp              =  3;
+  sgiDown            =  4;
+  sgiUpLeft          =  5;
+  sgiUpRight         =  6;
+  sgiDownLeft        =  7;
+  sgiDownRight       =  8;
+  sgiLeftUp          =  9;
+  sgiLeftDown        = 10;
+  sgiRightUp         = 11;
+  sgiRightDown       = 12;
+  sgiUpDown          = 13;
+  sgiDownUp          = 14;
+  sgiLeftRight       = 15;
+  sgiRightLeft       = 16;
+  sgiUpLeftLong      = 17;
+  sgiUpRightLong     = 18;
+  sgiDownLeftLong    = 19;
+  sgiDownRightLong   = 20;
+  sgiScratchout      = 21;
+  sgiTriangle        = 22;
+  sgiSquare          = 23;
+  sgiCheck           = 24;
+  sgiCurlicue        = 25;
+  sgiDoubleCurlicue  = 26;
+  sgiCircle          = 27;
+  sgiDoubleCircle    = 28;
+  sgiSemiCircleLeft  = 29;
+  sgiSemiCircleRight = 30;
+  sgiChevronUp       = 31;
+  sgiChevronDown     = 32;
+  sgiChevronLeft     = 33;
+  sgiChevronRight    = 34;
+  
+  sgiFirst           = sgiLeft;
+  sgiLast            = sgiChevronRight;
+
+  // ID range for custom gestures 
+ 
+  cgiFirst = -512;
+  cgiLast  = -1;
+
+  // Range for registered custom gestures
+  rgiFirst = -1024;
+  rgiLast  = -513;
+
+  // Interactive gesture ID range.
+  igiFirst = 256;
+  igiLast  = 511;
+
+const
+  // Interactive gesture IDs
+  igiBegin         = igiFirst + 1;
+  igiEnd           = igiFirst + 2;
+  igiZoom          = igiFirst + 3;
+  igiPan           = igiFirst + 4;
+  igiRotate        = igiFirst + 5;
+  igiTwoFingerTap  = igiFirst + 6;
+  igiPressAndTap   = igiFirst + 7;
+  igiLongTap       = igiFirst + 8;
+  igiDoubleTap     = igiFirst + 9;
+
+const
+  { Virtual keys }
+  vkLButton          = $01;  
+  vkRButton          = $02;  
+  vkCancel           = $03;  
+  vkMButton          = $04;  
+  vkXButton1         = $05;  
+  vkXButton2         = $06;  
+  vkBack             = $08;  
+  vkTab              = $09;  
+  vkLineFeed         = $0A;  
+  vkClear            = $0C;  
+  vkReturn           = $0D;  
+  vkShift            = $10;  
+  vkControl          = $11;  
+  vkMenu             = $12;  
+  vkPause            = $13;  
+  vkCapital          = $14;  
+  vkKana             = $15;  
+  vkHangul           = $15;  
+  vkJunja            = $17;  
+  vkFinal            = $18;  
+  vkHanja            = $19;  
+  vkKanji            = $19;  
+  vkConvert          = $1C;  
+  vkNonConvert       = $1D;  
+  vkAccept           = $1E;  
+  vkModeChange       = $1F;  
+  vkEscape           = $1B;  
+  vkSpace            = $20;  
+  vkPrior            = $21;  
+  vkNext             = $22;  
+  vkEnd              = $23;  
+  vkHome             = $24;  
+  vkLeft             = $25;  
+  vkUp               = $26;  
+  vkRight            = $27;  
+  vkDown             = $28;  
+  vkSelect           = $29;  
+  vkPrint            = $2A;  
+  vkExecute          = $2B;  
+  vkSnapshot         = $2C;  
+  vkInsert           = $2D;  
+  vkDelete           = $2E;  
+  vkHelp             = $2F;  
+
+  vk0                = $30;  
+  vk1                = $31;  
+  vk2                = $32;  
+  vk3                = $33;  
+  vk4                = $34;  
+  vk5                = $35;  
+  vk6                = $36;  
+  vk7                = $37;  
+  vk8                = $38;  
+  vk9                = $39;  
+  vkLCommand         = $3D;  
+  vkRCommand         = $3E;  
+  vkFunction         = $3F;  
+
+  vkA                = $41;  
+  vkB                = $42;  
+  vkC                = $43;  
+  vkD                = $44;  
+  vkE                = $45;  
+  vkF                = $46;  
+  vkG                = $47;  
+  vkH                = $48;  
+  vkI                = $49;  
+  vkJ                = $4A;  
+  vkK                = $4B;  
+  vkL                = $4C;  
+  vkM                = $4D;  
+  vkN                = $4E;  
+  vkO                = $4F;  
+  vkP                = $50;  
+  vkQ                = $51;  
+  vkR                = $52;  
+  vkS                = $53;  
+  vkT                = $54;  
+  vkU                = $55;  
+  vkV                = $56;  
+  vkW                = $57;  
+  vkX                = $58;  
+  vkY                = $59;  
+  vkZ                = $5A;  
+  vkLWin             = $5B;  
+  vkRWin             = $5C;  
+  vkApps             = $5D;  
+  vkSleep            = $5F;  
+  vkNumpad0          = $60;  
+  vkNumpad1          = $61;  
+  vkNumpad2          = $62;  
+  vkNumpad3          = $63;  
+  vkNumpad4          = $64;  
+  vkNumpad5          = $65;  
+  vkNumpad6          = $66;  
+  vkNumpad7          = $67;  
+  vkNumpad8          = $68;  
+  vkNumpad9          = $69;  
+  vkMultiply         = $6A;  
+  vkAdd              = $6B;  
+  vkSeparator        = $6C;  
+  vkSubtract         = $6D;  
+  vkDecimal          = $6E;  
+  vkDivide           = $6F;  
+  vkF1               = $70;  
+  vkF2               = $71;  
+  vkF3               = $72;  
+  vkF4               = $73;  
+  vkF5               = $74;  
+  vkF6               = $75;  
+  vkF7               = $76;  
+  vkF8               = $77;  
+  vkF9               = $78;  
+  vkF10              = $79;  
+  vkF11              = $7A;  
+  vkF12              = $7B;  
+  vkF13              = $7C;  
+  vkF14              = $7D;  
+  vkF15              = $7E;  
+  vkF16              = $7F;  
+  vkF17              = $80;  
+  vkF18              = $81;  
+  vkF19              = $82;  
+  vkF20              = $83;  
+  vkF21              = $84;  
+  vkF22              = $85;  
+  vkF23              = $86;  
+  vkF24              = $87;  
+
+  vkCamera           = $88;  
+  vkHardwareBack     = $89;  
+
+  vkNumLock          = $90;  
+  vkScroll           = $91;  
+  vkLShift           = $A0;  
+  vkRShift           = $A1;  
+  vkLControl         = $A2;  
+  vkRControl         = $A3;  
+  vkLMenu            = $A4;  
+  vkRMenu            = $A5;  
+
+  vkBrowserBack      = $A6;  
+  vkBrowserForward   = $A7;  
+  vkBrowserRefresh   = $A8;  
+  vkBrowserStop      = $A9;  
+  vkBrowserSearch    = $AA;  
+  vkBrowserFavorites = $AB;  
+  vkBrowserHome      = $AC;  
+  vkVolumeMute       = $AD;  
+  vkVolumeDown       = $AE;  
+  vkVolumeUp         = $AF;  
+  vkMediaNextTrack   = $B0;  
+  vkMediaPrevTrack   = $B1;  
+  vkMediaStop        = $B2;  
+  vkMediaPlayPause   = $B3;  
+  vkLaunchMail       = $B4;  
+  vkLaunchMediaSelect= $B5;  
+  vkLaunchApp1       = $B6;  
+  vkLaunchApp2       = $B7;  
+
+  vkSemicolon        = $BA;  
+  vkEqual            = $BB;  
+  vkComma            = $BC;  
+  vkMinus            = $BD;  
+  vkPeriod           = $BE;  
+  vkSlash            = $BF;  
+  vkTilde            = $C0;  
+  vkLeftBracket      = $DB;  
+  vkBackslash        = $DC;  
+  vkRightBracket     = $DD;  
+  vkQuote            = $DE;  
+  vkPara             = $DF;  
+
+  vkOem102           = $E2;  
+  vkIcoHelp          = $E3;  
+  vkIco00            = $E4;  
+  vkProcessKey       = $E5;  
+  vkIcoClear         = $E6;  
+  vkPacket           = $E7;  
+  vkAttn             = $F6;  
+  vkCrsel            = $F7;  
+  vkExsel            = $F8;  
+  vkErEof            = $F9;  
+  vkPlay             = $FA;  
+  vkZoom             = $FB;  
+  vkNoname           = $FC;  
+  vkPA1              = $FD;  
+  vkOemClear         = $FE;  
+  vkNone             = $FF;  
+
+// Edit controls
+
+Type
+  TEditCharCase = (ecNormal, ecUpperCase, ecLowerCase);
+  
+  TTouchTracking = set of (ttVertical, ttHorizontal);
+  
+  // Forms
+  
+  TWindowState = (wsNormal, wsMinimized, wsMaximized, wsFullScreen);
+  TWindowStates = Set of TWindowState;
+  
+  TBorderIcon = (biSystemMenu, biMinimize, biMaximize, biHelp);
+  TBorderIcons = set of TBorderIcon;
+    
+  // Dialogs
+  TOpenOption = (ofReadOnly, ofOverwritePrompt, ofHideReadOnly,
+    ofNoChangeDir, ofShowHelp, ofNoValidate, ofAllowMultiSelect,
+    ofExtensionDifferent, ofPathMustExist, ofFileMustExist, ofCreatePrompt,
+    ofShareAware, ofNoReadOnlyReturn, ofNoTestFileCreate, ofNoNetworkButton,
+    ofNoLongNames, ofOldStyleDialog, ofNoDereferenceLinks, ofEnableIncludeNotify,
+    ofEnableSizing, ofDontAddToRecent, ofForceShowHidden);
+  TOpenOptions = set of TOpenOption;
+
+  TOpenOptionEx = (ofExNoPlacesBar);
+  TOpenOptionsEx = set of TOpenOptionEx;
+
+  TDialogType = (Standard, Directory);
+
+  TPrintRange = (prAllPages, prSelection, prPageNums);
+  TPrintDialogOption = (poPrintToFile, poPageNums, poSelection, poWarning,
+    poHelp, poDisablePrintToFile);
+  TPrintDialogOptions = set of TPrintDialogOption;
+  TPageType = (ptEnvelope, ptPaper);
+  TPageTypes = set of TPageType;
+
+  TPageSetupDialogOption = (psoDefaultMinMargins, psoDisableMargins,
+      psoDisableOrientation, psoDisablePagePainting, psoDisablePaper, psoDisablePrinter,
+      psoMargins, psoMinMargins, psoShowHelp, psoWarning, psoNoNetworkButton);
+    TPageSetupDialogOptions = set of TPageSetupDialogOption;
+
+  TPageMeasureUnits = (pmDefault, pmMillimeters, pmInches);
+
+  TCalDayOfWeek = (dowMonday, dowTuesday, dowWednesday, dowThursday,
+    dowFriday, dowSaturday, dowSunday, dowLocaleDefault);
+
+function IsPositiveResult(const AModalResult: TModalResult): Boolean;
+function IsNegativeResult(const AModalResult: TModalResult): Boolean;
+function IsAbortResult(const AModalResult: TModalResult): Boolean;
+function IsAnAllResult(const AModalResult: TModalResult): Boolean;
+function StripAllFromResult(const AModalResult: TModalResult): TModalResult;
+
+
+implementation
+
+function IsPositiveResult(const AModalResult: TModalResult): Boolean;
+
+begin
+  Result:=aModalResult in [mrOk,mrYes,mrAll,mrYesToAll,mrContinue]
+end;
+
+
+function IsNegativeResult(const AModalResult: TModalResult): Boolean;
+
+begin
+  Result:=aModalResult in [mrNo,mrNoToAll,mrTryAgain]
+end;
+
+
+function IsAbortResult(const AModalResult: TModalResult): Boolean;
+
+begin
+   Result:=aModalResult in [mrCancel,mrAbort]
+end;
+
+
+function IsAnAllResult(const AModalResult: TModalResult): Boolean;
+
+begin
+  Result:=aModalResult in [mrAll,mrNoToAll,mrYesToAll]
+end;
+
+
+function StripAllFromResult(const AModalResult: TModalResult): TModalResult;
+
+begin
+  case aModalResult of
+  mrAll:
+    Result:=mrOk;
+  mrNoToAll:
+    Result:=mrNo;
+  mrYesToAll: 
+    Result:=mrYes;
+  else
+    Result:=aModalResult;
+  end;
+end;
+
+
+function TColorRec.ToString: RTLString;
+
+var
+  S : string;
+
+begin
+  if (Self.Color and $FF000000)=$FF then
+    Result:='SYS '+HexStr(Self.Color and $00FFFFFF,6)
+  else
+    Result:='#'+HexStr(R,2)+HexStr(G,2)+HexStr(B,2)
+end;
+
+constructor TAlphaColors.Create(const aColor: TAlphaColor);
+begin
+  color:=aColor;
+end;
+
+function TAlphaColors.ToString: RTLString;
+begin
+  Result:='#'+HexStr(R,2)+HexStr(G,2)+HexStr(B,2)+HexStr(A,2)
+end;
+
+
+class function TAlphaColorF.Create(const R, G, B: Single; const A: Single = 1): TAlphaColorF; overload; static; 
+
+begin
+  Result.A:=A;
+  Result.R:=R;
+  Result.G:=G;
+  Result.B:=B;
+end;
+
+
+class function TAlphaColorF.Create(const aColor: TAlphaColor): TAlphaColorF; overload; static; 
+
+  function ToSingle(aCom : Byte) : single; inline;
+  begin
+    Result:=aCom/255;
+  end;
+  
+var
+  CR : TAlphaColorRec absolute aColor;  
+
+begin
+  Result.A:=ToSingle(CR.A);
+  Result.R:=ToSingle(CR.R);
+  Result.G:=ToSingle(CR.G);
+  Result.B:=ToSingle(CR.B);
+end;
+
+
+function TAlphaColorF.PremultipliedAlpha: TAlphaColorF;
+
+begin
+  Result.A:=A;
+  Result.R:=A*R;
+  Result.G:=A*G;
+  Result.B:=A*B;
+end;
+
+
+function TAlphaColorF.UnpremultipliedAlpha: TAlphaColorF;
+
+var
+  F : Single;
+  
+begin
+  Result.A:=A;
+  if A<Epsilon then
+    F:=0
+  else if Abs(A-1)<Epsilon then
+    F:=1
+  else
+    F:=1/A;
+  Result.R:=F*R;
+  Result.G:=F*G;
+  Result.B:=F*B;
+end;
+
+
+
+function TAlphaColorF.Clamp: TAlphaColorF;
+
+  function Limit(C :Single) : Single; inline;
+  
+  begin
+    if C>1 then
+      Result:=1
+    else if C<0 then
+      Result:=0
+    else
+      Result:=C;
+  end;    
+
+begin
+  Result.A:=Limit(A);  
+  Result.R:=Limit(R);  
+  Result.G:=Limit(G);  
+  Result.B:=Limit(B);  
+end;
+
+
+function TAlphaColorF.ToAlphaColor: TAlphaColor;
+
+  Function CC(C : Single) : Byte; inline;
+  
+  begin
+    Result:=Round(C*255);
+  end;
+
+var
+  CR : TAlphaColorRec absolute Result;
+
+begin
+  CR.A:=CC(A);
+  CR.R:=CC(R);
+  CR.G:=CC(G);
+  CR.B:=CC(B);
+end;
+
+{ TColorHelper }
+
+function TColorHelper.ToString: RTLString;
+var
+  c : TColorRec;
+begin
+  C.color:=Self;
+  Result:=C.ToString;
+end;
+
+function DefaultColorToRGB(Color: TColor): Longint;
+begin
+  Result:=Color;
+end;
+
+function TColorRec.GetColor : TColor;
+begin
+  Result:=(B shl 16) or (G shl 8) or R;
+end;
+
+procedure TColorRec.SetColor(aColor : TColor);
+begin
+  R := aColor and $FF;
+  aColor:=aColor shr 8;
+  G := (aColor and $FF);
+  aColor:=aColor shr 8;
+  B := (aColor and $FF);
+  aColor:=aColor shr 8;
+  A := 0;
+end;
+
+function TAlphaColors.GetColor : TAlphaColor;
+
+begin
+//      B, G, R, A: Byte;
+  Result:=(B shl 24) or (G shl 16) or (R shl 8) or A;
+  
+end;
+
+procedure TAlphaColors.SetColor(aColor : TAlphaColor);
+
+begin
+  B := (aColor and $FF);
+  aColor:=aColor shr 8;
+  G := (aColor and $FF);
+  aColor:=aColor shr 8;
+  R := (aColor and $FF);
+  aColor:=aColor shr 8;
+  A := (aColor and $FF);
+end;
+
+function TAlphaColors.GetHiWord : Word;    
+
+begin
+  Result:=(B shl 8) or G;
+end;
+
+function TAlphaColors.GetLoWord : Word;    
+
+begin
+  Result:=(R shl 8) or A
+end;
+
+procedure TAlphaColors.SetHiWord(aValue : Word);    
+
+begin
+  G:=(aValue or $FF);
+  aValue:=aValue shr 8;
+  B:=(aValue or $FF);
+end;
+
+procedure TAlphaColors.SetLoWord(aValue : Word);    
+
+begin
+  R:=(aValue or $FF);
+  aValue:=aValue shr 8;
+  A:=(aValue or $FF);
+end;
+
+initialization
+  TColorRec.ColorToRGB:=@DefaultColorToRGB;
+end.