home *** CD-ROM | disk | FTP | other *** search
/ PC World Plus! (NZ) 2001 June / HDC50.iso / Runimage / Delphi50 / Source / Rtl / Win / COMMCTRL.PAS < prev    next >
Pascal/Delphi Source File  |  1999-08-11  |  276KB  |  8,723 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       Borland Delphi Run-time Library                 }
  5. {       Win32 common controls interface unit            }
  6. {                                                       }
  7. {       Copyright (c) 1985-1999, Microsoft Corporation  }
  8. {                                                       }
  9. {       Translator: Inprise Corporation                 }
  10. {                                                       }
  11. {*******************************************************}
  12.  
  13. unit Commctrl;
  14.  
  15. {$WEAKPACKAGEUNIT}
  16.  
  17. interface
  18.  
  19. (*$HPPEMIT '' *)
  20. (*$HPPEMIT '#include <CommCtrl.h>' *)
  21. (*$HPPEMIT '' *)
  22.  
  23. { Although the COMMCTRL unit requires the ActiveX unit, COMMCTRL.HPP does }
  24. { not require ActiveX.hpp to compile. Hence the $NOINCLUDE directive.     }
  25. (*$NOINCLUDE ActiveX *)
  26.  
  27. uses Messages, Windows, ActiveX;
  28.  
  29. { From prsht.h -- Interface for the Windows Property Sheet Pages }
  30.  
  31. const
  32.   {$EXTERNALSYM MAXPROPPAGES}
  33.   MAXPROPPAGES = 100;
  34.  
  35.   {$EXTERNALSYM PSP_DEFAULT}
  36.   PSP_DEFAULT             = $00000000;
  37.   {$EXTERNALSYM PSP_DLGINDIRECT}
  38.   PSP_DLGINDIRECT         = $00000001;
  39.   {$EXTERNALSYM PSP_USEHICON}
  40.   PSP_USEHICON            = $00000002;
  41.   {$EXTERNALSYM PSP_USEICONID}
  42.   PSP_USEICONID           = $00000004;
  43.   {$EXTERNALSYM PSP_USETITLE}
  44.   PSP_USETITLE            = $00000008;
  45.   {$EXTERNALSYM PSP_RTLREADING}
  46.   PSP_RTLREADING          = $00000010;
  47.   {$EXTERNALSYM PSP_HASHELP}
  48.   PSP_HASHELP             = $00000020;
  49.   {$EXTERNALSYM PSP_USEREFPARENT}
  50.   PSP_USEREFPARENT        = $00000040;
  51.   {$EXTERNALSYM PSP_USECALLBACK}
  52.   PSP_USECALLBACK         = $00000080;
  53.   {$EXTERNALSYM PSP_PREMATURE}
  54.   PSP_PREMATURE           = $00000400;
  55.   {$EXTERNALSYM PSP_HIDEHEADER}
  56.   PSP_HIDEHEADER          = $00000800;
  57.   {$EXTERNALSYM PSP_USEHEADERTITLE}
  58.   PSP_USEHEADERTITLE      = $00001000;
  59.   {$EXTERNALSYM PSP_USEHEADERSUBTITLE}
  60.   PSP_USEHEADERSUBTITLE   = $00002000;
  61.  
  62.   {$EXTERNALSYM PSPCB_RELEASE}
  63.   PSPCB_RELEASE           = 1;
  64.   {$EXTERNALSYM PSPCB_CREATE}
  65.   PSPCB_CREATE            = 2;
  66.  
  67.   {$EXTERNALSYM PSH_DEFAULT}
  68.   PSH_DEFAULT             = $00000000;
  69.   {$EXTERNALSYM PSH_PROPTITLE}
  70.   PSH_PROPTITLE           = $00000001;
  71.   {$EXTERNALSYM PSH_USEHICON}
  72.   PSH_USEHICON            = $00000002;
  73.   {$EXTERNALSYM PSH_USEICONID}
  74.   PSH_USEICONID           = $00000004;
  75.   {$EXTERNALSYM PSH_PROPSHEETPAGE}
  76.   PSH_PROPSHEETPAGE       = $00000008;
  77.   {$EXTERNALSYM PSH_WIZARDHASFINISH}
  78.   PSH_WIZARDHASFINISH     = $00000010;
  79.   PSH_MULTILINETABS       = $00000010;
  80.   {$EXTERNALSYM PSH_WIZARD}
  81.   PSH_WIZARD              = $00000020;
  82.   {$EXTERNALSYM PSH_USEPSTARTPAGE}
  83.   PSH_USEPSTARTPAGE       = $00000040;
  84.   {$EXTERNALSYM PSH_NOAPPLYNOW}
  85.   PSH_NOAPPLYNOW          = $00000080;
  86.   {$EXTERNALSYM PSH_USECALLBACK}
  87.   PSH_USECALLBACK         = $00000100;
  88.   {$EXTERNALSYM PSH_HASHELP}
  89.   PSH_HASHELP             = $00000200;
  90.   {$EXTERNALSYM PSH_MODELESS}
  91.   PSH_MODELESS            = $00000400;
  92.   {$EXTERNALSYM PSH_RTLREADING}
  93.   PSH_RTLREADING          = $00000800;
  94.   {$EXTERNALSYM PSH_WIZARDCONTEXTHELP}
  95.   PSH_WIZARDCONTEXTHELP   = $00001000;
  96.   {$EXTERNALSYM PSH_WIZARD97}
  97.   PSH_WIZARD97            = $00002000;
  98.   {$EXTERNALSYM PSH_WATERMARK}
  99.   PSH_WATERMARK           = $00008000;
  100.   {$EXTERNALSYM PSH_USEHBMWATERMARK}
  101.   PSH_USEHBMWATERMARK     = $00010000;  // user pass in a hbmWatermark instead of pszbmWatermark
  102.   {$EXTERNALSYM PSH_USEHPLWATERMARK}
  103.   PSH_USEHPLWATERMARK     = $00020000;  //
  104.   {$EXTERNALSYM PSH_STRETCHWATERMARK}
  105.   PSH_STRETCHWATERMARK    = $00040000;  // stretchwatermark also applies for the header
  106.   {$EXTERNALSYM PSH_HEADER}
  107.   PSH_HEADER              = $00080000;
  108.   {$EXTERNALSYM PSH_USEHBMHEADER}
  109.   PSH_USEHBMHEADER        = $00100000;
  110.   {$EXTERNALSYM PSH_USEPAGELANG}
  111.   PSH_USEPAGELANG         = $00200000;  // use frame dialog template matched to page
  112.  
  113.   {$EXTERNALSYM PSCB_INITIALIZED}
  114.   PSCB_INITIALIZED  = 1;
  115.   {$EXTERNALSYM PSCB_PRECREATE}
  116.   PSCB_PRECREATE    = 2;
  117.  
  118.   {$EXTERNALSYM PSN_FIRST}
  119.   PSN_FIRST               = -200;
  120.   {$EXTERNALSYM PSN_LAST}
  121.   PSN_LAST                = -299;
  122.  
  123.   {$EXTERNALSYM PSN_SETACTIVE}
  124.   PSN_SETACTIVE           = PSN_FIRST - 0;
  125.   {$EXTERNALSYM PSN_KILLACTIVE}
  126.   PSN_KILLACTIVE          = PSN_FIRST - 1;
  127.   {$EXTERNALSYM PSN_APPLY}
  128.   PSN_APPLY               = PSN_FIRST - 2;
  129.   {$EXTERNALSYM PSN_RESET}
  130.   PSN_RESET               = PSN_FIRST - 3;
  131.   {$EXTERNALSYM PSN_HELP}
  132.   PSN_HELP                = PSN_FIRST - 5;
  133.   {$EXTERNALSYM PSN_WIZBACK}
  134.   PSN_WIZBACK             = PSN_FIRST - 6;
  135.   {$EXTERNALSYM PSN_WIZNEXT}
  136.   PSN_WIZNEXT             = PSN_FIRST - 7;
  137.   {$EXTERNALSYM PSN_WIZFINISH}
  138.   PSN_WIZFINISH           = PSN_FIRST - 8;
  139.   {$EXTERNALSYM PSN_QUERYCANCEL}
  140.   PSN_QUERYCANCEL         = PSN_FIRST - 9;
  141.   {$EXTERNALSYM PSN_GETOBJECT}
  142.   PSN_GETOBJECT           = PSN_FIRST - 10;
  143.  
  144.   {$EXTERNALSYM PSNRET_NOERROR}
  145.   PSNRET_NOERROR              = 0;
  146.   {$EXTERNALSYM PSNRET_INVALID}
  147.   PSNRET_INVALID              = 1;
  148.   {$EXTERNALSYM PSNRET_INVALID_NOCHANGEPAGE}
  149.   PSNRET_INVALID_NOCHANGEPAGE = 2;
  150.  
  151.   {$EXTERNALSYM PSM_SETCURSEL}
  152.   PSM_SETCURSEL           = WM_USER + 101;
  153.   {$EXTERNALSYM PSM_REMOVEPAGE}
  154.   PSM_REMOVEPAGE          = WM_USER + 102;
  155.   {$EXTERNALSYM PSM_ADDPAGE}
  156.   PSM_ADDPAGE             = WM_USER + 103;
  157.   {$EXTERNALSYM PSM_CHANGED}
  158.   PSM_CHANGED             = WM_USER + 104;
  159.   {$EXTERNALSYM PSM_RESTARTWINDOWS}
  160.   PSM_RESTARTWINDOWS      = WM_USER + 105;
  161.   {$EXTERNALSYM PSM_REBOOTSYSTEM}
  162.   PSM_REBOOTSYSTEM        = WM_USER + 106;
  163.   {$EXTERNALSYM PSM_CANCELTOCLOSE}
  164.   PSM_CANCELTOCLOSE       = WM_USER + 107;
  165.   {$EXTERNALSYM PSM_QUERYSIBLINGS}
  166.   PSM_QUERYSIBLINGS       = WM_USER + 108;
  167.   {$EXTERNALSYM PSM_UNCHANGED}
  168.   PSM_UNCHANGED           = WM_USER + 109;
  169.   {$EXTERNALSYM PSM_APPLY}
  170.   PSM_APPLY               = WM_USER + 110;
  171.   {$EXTERNALSYM PSM_SETTITLE}
  172.   PSM_SETTITLE            = WM_USER + 111;
  173.   {$EXTERNALSYM PSM_SETTITLEW}
  174.   PSM_SETTITLEW           = WM_USER + 120;
  175.   {$EXTERNALSYM PSM_SETWIZBUTTONS}
  176.   PSM_SETWIZBUTTONS       = WM_USER + 112;
  177.   {$EXTERNALSYM PSM_PRESSBUTTON}
  178.   PSM_PRESSBUTTON         = WM_USER + 113;
  179.   {$EXTERNALSYM PSM_SETCURSELID}
  180.   PSM_SETCURSELID         = WM_USER + 114;
  181.   {$EXTERNALSYM PSM_SETFINISHTEXT}
  182.   PSM_SETFINISHTEXT       = WM_USER + 115;
  183.   {$EXTERNALSYM PSM_SETFINISHTEXTW}
  184.   PSM_SETFINISHTEXTW      = WM_USER + 121;
  185.   {$EXTERNALSYM PSM_GETTABCONTROL}
  186.   PSM_GETTABCONTROL       = WM_USER + 116;
  187.   {$EXTERNALSYM PSM_ISDIALOGMESSAGE}
  188.   PSM_ISDIALOGMESSAGE     = WM_USER + 117;
  189.  
  190.   {$EXTERNALSYM PSWIZB_BACK}
  191.   PSWIZB_BACK             = $00000001;
  192.   {$EXTERNALSYM PSWIZB_NEXT}
  193.   PSWIZB_NEXT             = $00000002;
  194.   {$EXTERNALSYM PSWIZB_FINISH}
  195.   PSWIZB_FINISH           = $00000004;
  196.   {$EXTERNALSYM PSWIZB_DISABLEDFINISH}
  197.   PSWIZB_DISABLEDFINISH   = $00000008;
  198.  
  199.   {$EXTERNALSYM PSBTN_BACK}
  200.   PSBTN_BACK              = 0;
  201.   {$EXTERNALSYM PSBTN_NEXT}
  202.   PSBTN_NEXT              = 1;
  203.   {$EXTERNALSYM PSBTN_FINISH}
  204.   PSBTN_FINISH            = 2;
  205.   {$EXTERNALSYM PSBTN_OK}
  206.   PSBTN_OK                = 3;
  207.   {$EXTERNALSYM PSBTN_APPLYNOW}
  208.   PSBTN_APPLYNOW          = 4;
  209.   {$EXTERNALSYM PSBTN_CANCEL}
  210.   PSBTN_CANCEL            = 5;
  211.   {$EXTERNALSYM PSBTN_HELP}
  212.   PSBTN_HELP              = 6;
  213.   {$EXTERNALSYM PSBTN_MAX}
  214.   PSBTN_MAX               = 6;
  215.  
  216.   {$EXTERNALSYM ID_PSRESTARTWINDOWS}
  217.   ID_PSRESTARTWINDOWS     = 2;
  218.   {$EXTERNALSYM ID_PSREBOOTSYSTEM}
  219.   ID_PSREBOOTSYSTEM       = ID_PSRESTARTWINDOWS or 1;
  220.  
  221.   {$EXTERNALSYM WIZ_CXDLG}
  222.   WIZ_CXDLG               = 276;
  223.   {$EXTERNALSYM WIZ_CYDLG}
  224.   WIZ_CYDLG               = 140;
  225.  
  226.   {$EXTERNALSYM WIZ_CXBMP}
  227.   WIZ_CXBMP               = 80;
  228.  
  229.   {$EXTERNALSYM WIZ_BODYX}
  230.   WIZ_BODYX               = 92;
  231.   {$EXTERNALSYM WIZ_BODYCX}
  232.   WIZ_BODYCX              = 184;
  233.  
  234.   {$EXTERNALSYM PROP_SM_CXDLG}
  235.   PROP_SM_CXDLG           = 212;
  236.   {$EXTERNALSYM PROP_SM_CYDLG}
  237.   PROP_SM_CYDLG           = 188;
  238.  
  239.   {$EXTERNALSYM PROP_MED_CXDLG}
  240.   PROP_MED_CXDLG          = 227;
  241.   {$EXTERNALSYM PROP_MED_CYDLG}
  242.   PROP_MED_CYDLG          = 215;
  243.  
  244.   {$EXTERNALSYM PROP_LG_CXDLG}
  245.   PROP_LG_CXDLG           = 252;
  246.   {$EXTERNALSYM PROP_LG_CYDLG}
  247.   PROP_LG_CYDLG           = 218;
  248.  
  249. type
  250.   HPropSheetPage = Pointer;
  251.  
  252.   PPropSheetPageA = ^TPropSheetPageA;
  253.   PPropSheetPageW = ^TPropSheetPageW;
  254.   PPropSheetPage = PPropSheetPageA;
  255.  
  256.   {$EXTERNALSYM LPFNPSPCALLBACKA}
  257.   LPFNPSPCALLBACKA = function(Wnd: HWnd; Msg: Integer;
  258.     PPSP: PPropSheetPageA): Integer stdcall;
  259.   {$EXTERNALSYM LPFNPSPCALLBACKW}
  260.   LPFNPSPCALLBACKW = function(Wnd: HWnd; Msg: Integer;
  261.     PPSP: PPropSheetPageW): Integer stdcall;
  262.   {$EXTERNALSYM LPFNPSPCALLBACK}
  263.   LPFNPSPCALLBACK = LPFNPSPCALLBACKA;
  264.   TFNPSPCallbackA = LPFNPSPCALLBACKA;
  265.   TFNPSPCallbackW = LPFNPSPCALLBACKW;
  266.   TFNPSPCallback = TFNPSPCallbackA;
  267.  
  268.   {$EXTERNALSYM _PROPSHEETPAGEA}
  269.   _PROPSHEETPAGEA = record
  270.     dwSize: Longint;
  271.     dwFlags: Longint;
  272.     hInstance: THandle;
  273.     case Integer of
  274.       0: (
  275.         pszTemplate: PAnsiChar);
  276.       1: (
  277.         pResource: Pointer;
  278.         case Integer of
  279.           0: (
  280.             hIcon: THandle);
  281.           1: (
  282.             pszIcon: PAnsiChar;
  283.             pszTitle: PAnsiChar;
  284.             pfnDlgProc: Pointer;
  285.             lParam: Longint;
  286.             pfnCallback: TFNPSPCallbackA;
  287.             pcRefParent: PInteger;
  288.             pszHeaderTitle: PAnsiChar;      // this is displayed in the header
  289.             pszHeaderSubTitle: PAnsiChar)); //
  290.   end;
  291.   {$EXTERNALSYM _PROPSHEETPAGEW}
  292.   _PROPSHEETPAGEW = record
  293.     dwSize: Longint;
  294.     dwFlags: Longint;
  295.     hInstance: THandle;
  296.     case Integer of
  297.       0: (
  298.         pszTemplate: PWideChar);
  299.       1: (
  300.         pResource: Pointer;
  301.         case Integer of
  302.           0: (
  303.             hIcon: THandle);
  304.           1: (
  305.             pszIcon: PWideChar;
  306.             pszTitle: PWideChar;
  307.             pfnDlgProc: Pointer;
  308.             lParam: Longint;
  309.             pfnCallback: TFNPSPCallbackW;
  310.             pcRefParent: PInteger;
  311.             pszHeaderTitle: PWideChar;      // this is displayed in the header
  312.             pszHeaderSubTitle: PWideChar)); //
  313.   end;
  314.   {$EXTERNALSYM _PROPSHEETPAGE}
  315.   _PROPSHEETPAGE = _PROPSHEETPAGEA;
  316.   TPropSheetPageA = _PROPSHEETPAGEA;
  317.   TPropSheetPageW = _PROPSHEETPAGEW;
  318.   TPropSheetPage = TPropSheetPageA;
  319.   {$EXTERNALSYM PROPSHEETPAGEA}
  320.   PROPSHEETPAGEA = _PROPSHEETPAGEA;
  321.   {$EXTERNALSYM PROPSHEETPAGEW}
  322.   PROPSHEETPAGEW = _PROPSHEETPAGEW;
  323.   {$EXTERNALSYM PROPSHEETPAGE}
  324.   PROPSHEETPAGE = PROPSHEETPAGEA;
  325.  
  326.  
  327.   {$EXTERNALSYM PFNPROPSHEETCALLBACK}
  328.   PFNPROPSHEETCALLBACK = function(Wnd: HWnd; Msg: Integer;
  329.     LParam: Integer): Integer stdcall;
  330.   TFNPropSheetCallback = PFNPROPSHEETCALLBACK;
  331.  
  332.   PPropSheetHeaderA = ^TPropSheetHeaderA;
  333.   PPropSheetHeaderW = ^TPropSheetHeaderW;
  334.   PPropSheetHeader = PPropSheetHeaderA;
  335.   {$EXTERNALSYM _PROPSHEETHEADERA}
  336.   _PROPSHEETHEADERA = record
  337.     dwSize: Longint;
  338.     dwFlags: Longint;
  339.     hwndParent: HWnd;
  340.     hInstance: THandle;
  341.     case Integer of
  342.       0: (
  343.     hIcon: THandle);
  344.       1: (
  345.     pszIcon: PAnsiChar;
  346.     pszCaption: PAnsiChar;
  347.     nPages: Integer;
  348.     case Integer of
  349.       0: (
  350.         nStartPage: Integer);
  351.       1: (
  352.         pStartPage: PAnsiChar;
  353.         case Integer of
  354.           0: (
  355.         ppsp: PPropSheetPageA);
  356.           1: (
  357.         phpage: Pointer;
  358.         pfnCallback: TFNPropSheetCallback;
  359.                 case Integer of
  360.                   0: (
  361.                     hbmWatermark: HBITMAP);
  362.                   1: (
  363.                     pszbmWatermark: PAnsiChar;
  364.                     hplWatermark: HPALETTE;
  365.                     // Header bitmap shares the palette with watermark
  366.                     case Integer of
  367.                       0: (
  368.                         hbmHeader: HBITMAP);
  369.                       1: (
  370.                         pszbmHeader: PAnsiChar)))));
  371.   end;
  372.   {$EXTERNALSYM _PROPSHEETHEADERW}
  373.   _PROPSHEETHEADERW = record
  374.     dwSize: Longint;
  375.     dwFlags: Longint;
  376.     hwndParent: HWnd;
  377.     hInstance: THandle;
  378.     case Integer of
  379.       0: (
  380.     hIcon: THandle);
  381.       1: (
  382.     pszIcon: PWideChar;
  383.     pszCaption: PWideChar;
  384.     nPages: Integer;
  385.     case Integer of
  386.       0: (
  387.         nStartPage: Integer);
  388.       1: (
  389.         pStartPage: PWideChar;
  390.         case Integer of
  391.           0: (
  392.         ppsp: PPropSheetPageW);
  393.           1: (
  394.         phpage: Pointer;
  395.         pfnCallback: TFNPropSheetCallback;
  396.                 case Integer of
  397.                   0: (
  398.                     hbmWatermark: HBITMAP);
  399.                   1: (
  400.                     pszbmWatermark: PWideChar;
  401.                     hplWatermark: HPALETTE;
  402.                     // Header bitmap shares the palette with watermark
  403.                     case Integer of
  404.                       0: (
  405.                         hbmHeader: HBITMAP);
  406.                       1: (
  407.                         pszbmHeader: PWideChar)))));
  408.   end;
  409.   {$EXTERNALSYM _PROPSHEETHEADER}
  410.   _PROPSHEETHEADER = _PROPSHEETHEADERA;
  411.   TPropSheetHeaderA = _PROPSHEETHEADERA;
  412.   TPropSheetHeaderW = _PROPSHEETHEADERW;
  413.   TPropSheetHeader = TPropSheetHeaderA;
  414.  
  415.   {$EXTERNALSYM LPFNADDPROPSHEETPAGE}
  416.   LPFNADDPROPSHEETPAGE = function(hPSP: HPropSheetPage;
  417.     lParam: Longint): BOOL stdcall;
  418.   TFNAddPropSheetPage = LPFNADDPROPSHEETPAGE;
  419.  
  420.   {$EXTERNALSYM LPFNADDPROPSHEETPAGES}
  421.   LPFNADDPROPSHEETPAGES = function(lpvoid: Pointer; pfn: TFNAddPropSheetPage;
  422.     lParam: Longint): BOOL stdcall;
  423.   TFNAddPropSheetPages = LPFNADDPROPSHEETPAGES;
  424.  
  425. {$EXTERNALSYM CreatePropertySheetPageA}
  426. function CreatePropertySheetPageA(var PSP: TPropSheetPageA): HPropSheetPage; stdcall;
  427. {$EXTERNALSYM CreatePropertySheetPageW}
  428. function CreatePropertySheetPageW(var PSP: TPropSheetPageW): HPropSheetPage; stdcall;
  429. {$EXTERNALSYM CreatePropertySheetPage}
  430. function CreatePropertySheetPage(var PSP: TPropSheetPage): HPropSheetPage; stdcall;
  431. {$EXTERNALSYM DestroyPropertySheetPage}
  432. function DestroyPropertySheetPage(hPSP: HPropSheetPage): BOOL; stdcall;
  433. {$EXTERNALSYM PropertySheetA}
  434. function PropertySheetA(var PSH: TPropSheetHeaderA): Integer; stdcall;
  435. {$EXTERNALSYM PropertySheetW}
  436. function PropertySheetW(var PSH: TPropSheetHeaderW): Integer; stdcall;
  437. {$EXTERNALSYM PropertySheet}
  438. function PropertySheet(var PSH: TPropSheetHeader): Integer; stdcall;
  439.  
  440. { From commctrl.h }
  441.  
  442. type
  443.   {$EXTERNALSYM tagINITCOMMONCONTROLSEX}
  444.   tagINITCOMMONCONTROLSEX = packed record
  445.     dwSize: DWORD;             // size of this structure
  446.     dwICC: DWORD;              // flags indicating which classes to be initialized
  447.   end;
  448.   PInitCommonControlsEx = ^TInitCommonControlsEx;
  449.   TInitCommonControlsEx = tagINITCOMMONCONTROLSEX;
  450.   
  451. const
  452.   {$EXTERNALSYM ICC_LISTVIEW_CLASSES}
  453.   ICC_LISTVIEW_CLASSES   = $00000001; // listview, header
  454.   {$EXTERNALSYM ICC_TREEVIEW_CLASSES}
  455.   ICC_TREEVIEW_CLASSES   = $00000002; // treeview, tooltips
  456.   {$EXTERNALSYM ICC_BAR_CLASSES}
  457.   ICC_BAR_CLASSES        = $00000004; // toolbar, statusbar, trackbar, tooltips
  458.   {$EXTERNALSYM ICC_TAB_CLASSES}
  459.   ICC_TAB_CLASSES        = $00000008; // tab, tooltips
  460.   {$EXTERNALSYM ICC_UPDOWN_CLASS}
  461.   ICC_UPDOWN_CLASS       = $00000010; // updown
  462.   {$EXTERNALSYM ICC_PROGRESS_CLASS}
  463.   ICC_PROGRESS_CLASS     = $00000020; // progress
  464.   {$EXTERNALSYM ICC_HOTKEY_CLASS}
  465.   ICC_HOTKEY_CLASS       = $00000040; // hotkey
  466.   {$EXTERNALSYM ICC_ANIMATE_CLASS}
  467.   ICC_ANIMATE_CLASS      = $00000080; // animate
  468.   {$EXTERNALSYM ICC_WIN95_CLASSES}
  469.   ICC_WIN95_CLASSES      = $000000FF;
  470.   {$EXTERNALSYM ICC_DATE_CLASSES}
  471.   ICC_DATE_CLASSES       = $00000100; // month picker, date picker, time picker, updown
  472.   {$EXTERNALSYM ICC_USEREX_CLASSES}
  473.   ICC_USEREX_CLASSES     = $00000200; // comboex
  474.   {$EXTERNALSYM ICC_COOL_CLASSES}
  475.   ICC_COOL_CLASSES       = $00000400; // rebar (coolbar) control
  476.   {$EXTERNALSYM ICC_INTERNET_CLASSES}
  477.   ICC_INTERNET_CLASSES   = $00000800;
  478.   {$EXTERNALSYM ICC_PAGESCROLLER_CLASS}
  479.   ICC_PAGESCROLLER_CLASS = $00001000; // page scroller
  480.   {$EXTERNALSYM ICC_NATIVEFNTCTL_CLASS}
  481.   ICC_NATIVEFNTCTL_CLASS = $00002000; // native font control
  482.  
  483. {$EXTERNALSYM InitCommonControls}
  484. procedure InitCommonControls; stdcall;
  485. {$EXTERNALSYM InitCommonControlsEx}
  486. function InitCommonControlsEx(var ICC: TInitCommonControlsEx): Bool; { Re-defined below }
  487.  
  488. const
  489.   {$EXTERNALSYM IMAGE_BITMAP}
  490.   IMAGE_BITMAP = 0;
  491.  
  492. const
  493.   {$EXTERNALSYM ODT_HEADER}
  494.   ODT_HEADER              = 100;
  495.   {$EXTERNALSYM ODT_TAB}
  496.   ODT_TAB                 = 101;
  497.   {$EXTERNALSYM ODT_LISTVIEW}
  498.   ODT_LISTVIEW            = 102;
  499.  
  500.  
  501. { ====== Ranges for control message IDs ======================= }
  502.  
  503. const
  504.   {$EXTERNALSYM LVM_FIRST}
  505.   LVM_FIRST               = $1000;      { ListView messages }
  506.   {$EXTERNALSYM TV_FIRST}
  507.   TV_FIRST                = $1100;      { TreeView messages }
  508.   {$EXTERNALSYM HDM_FIRST}
  509.   HDM_FIRST               = $1200;      { Header messages }
  510.   {$EXTERNALSYM TCM_FIRST}
  511.   TCM_FIRST               = $1300;      { Tab control messages }
  512.   {$EXTERNALSYM PGM_FIRST}
  513.   PGM_FIRST               = $1400;      { Pager control messages }
  514.   {$EXTERNALSYM CCM_FIRST}
  515.   CCM_FIRST               = $2000;      { Common control shared messages }
  516.  
  517.   {$EXTERNALSYM CCM_SETBKCOLOR}
  518.   CCM_SETBKCOLOR          = CCM_FIRST + 1; // lParam is bkColor
  519.  
  520. type
  521.   {$EXTERNALSYM tagCOLORSCHEME}
  522.   tagCOLORSCHEME = packed record
  523.     dwSize: DWORD;
  524.     clrBtnHighlight: COLORREF;    // highlight color
  525.     clrBtnShadow: COLORREF;       // shadow color
  526.   end;
  527.   PColorScheme = ^TColorScheme;
  528.   TColorScheme = tagCOLORSCHEME;
  529.  
  530. const
  531.   {$EXTERNALSYM CCM_SETCOLORSCHEME}
  532.   CCM_SETCOLORSCHEME      = CCM_FIRST + 2; // lParam is color scheme
  533.   {$EXTERNALSYM CCM_GETCOLORSCHEME}
  534.   CCM_GETCOLORSCHEME      = CCM_FIRST + 3; // fills in COLORSCHEME pointed to by lParam
  535.   {$EXTERNALSYM CCM_GETDROPTARGET}
  536.   CCM_GETDROPTARGET       = CCM_FIRST + 4;
  537.   {$EXTERNALSYM CCM_SETUNICODEFORMAT}
  538.   CCM_SETUNICODEFORMAT    = CCM_FIRST + 5;
  539.   {$EXTERNALSYM CCM_GETUNICODEFORMAT}
  540.   CCM_GETUNICODEFORMAT    = CCM_FIRST + 6;
  541.  
  542.   {$EXTERNALSYM INFOTIPSIZE}
  543.   INFOTIPSIZE = 1024;  // for tooltips
  544.  
  545. { ====== WM_NOTIFY codes (NMHDR.code values) ================== }
  546.  
  547. const
  548.   {$EXTERNALSYM NM_FIRST}
  549.   NM_FIRST                 = 0-  0;       { generic to all controls }
  550.   {$EXTERNALSYM NM_LAST}
  551.   NM_LAST                  = 0- 99;
  552.  
  553.   {$EXTERNALSYM LVN_FIRST}
  554.   LVN_FIRST                = 0-100;       { listview }
  555.   {$EXTERNALSYM LVN_LAST}
  556.   LVN_LAST                 = 0-199;
  557.  
  558.   {$EXTERNALSYM HDN_FIRST}
  559.   HDN_FIRST                = 0-300;       { header }
  560.   {$EXTERNALSYM HDN_LAST}
  561.   HDN_LAST                 = 0-399;
  562.  
  563.   {$EXTERNALSYM TVN_FIRST}
  564.   TVN_FIRST                = 0-400;       { treeview }
  565.   {$EXTERNALSYM TVN_LAST}
  566.   TVN_LAST                 = 0-499;
  567.  
  568.   {$EXTERNALSYM TTN_FIRST}
  569.   TTN_FIRST                = 0-520;       { tooltips }
  570.   {$EXTERNALSYM TTN_LAST}
  571.   TTN_LAST                 = 0-549;
  572.  
  573.   {$EXTERNALSYM TCN_FIRST}
  574.   TCN_FIRST                = 0-550;       { tab control }
  575.   {$EXTERNALSYM TCN_LAST}
  576.   TCN_LAST                 = 0-580;
  577.  
  578. { Shell reserved           (0-580) -  (0-589) }
  579.  
  580.   {$EXTERNALSYM CDN_FIRST}
  581.   CDN_FIRST                = 0-601;       { common dialog (new) }
  582.   {$EXTERNALSYM CDN_LAST}
  583.   CDN_LAST                 = 0-699;
  584.  
  585.   {$EXTERNALSYM TBN_FIRST}
  586.   TBN_FIRST                = 0-700;       { toolbar }
  587.   {$EXTERNALSYM TBN_LAST}
  588.   TBN_LAST                 = 0-720;
  589.  
  590.   {$EXTERNALSYM UDN_FIRST}
  591.   UDN_FIRST                = 0-721;       { updown }
  592.   {$EXTERNALSYM UDN_LAST}
  593.   UDN_LAST                 = 0-740;
  594.  
  595.   {$EXTERNALSYM MCN_FIRST}
  596.   MCN_FIRST                = 0-750;       { monthcal }
  597.   {$EXTERNALSYM MCN_LAST}
  598.   MCN_LAST                 = 0-759;
  599.  
  600.   {$EXTERNALSYM DTN_FIRST}
  601.   DTN_FIRST                = 0-760;       { datetimepick }
  602.   {$EXTERNALSYM DTN_LAST}
  603.   DTN_LAST                 = 0-799;
  604.  
  605.   {$EXTERNALSYM CBEN_FIRST}
  606.   CBEN_FIRST               = 0-800;       { combo box ex }
  607.   {$EXTERNALSYM CBEN_LAST}
  608.   CBEN_LAST                = 0-830;
  609.  
  610.   {$EXTERNALSYM RBN_FIRST}
  611.   RBN_FIRST                = 0-831;       { coolbar }
  612.   {$EXTERNALSYM RBN_LAST}
  613.   RBN_LAST                 = 0-859;
  614.  
  615.   {$EXTERNALSYM IPN_FIRST}
  616.   IPN_FIRST               = 0-860;       { internet address }
  617.   {$EXTERNALSYM IPN_LAST}
  618.   IPN_LAST                = 0-879;       { internet address }
  619.  
  620.   {$EXTERNALSYM SBN_FIRST}
  621.   SBN_FIRST               = 0-880;       { status bar }
  622.   {$EXTERNALSYM SBN_LAST}
  623.   SBN_LAST                = 0-899;
  624.  
  625.   {$EXTERNALSYM PGN_FIRST}
  626.   PGN_FIRST               = 0-900;       { Pager Control }
  627.   {$EXTERNALSYM PGN_LAST}
  628.   PGN_LAST                = 0-950;
  629.  
  630.   {$EXTERNALSYM MSGF_COMMCTRL_BEGINDRAG}
  631.   MSGF_COMMCTRL_BEGINDRAG     = $4200;
  632.   {$EXTERNALSYM MSGF_COMMCTRL_SIZEHEADER}
  633.   MSGF_COMMCTRL_SIZEHEADER    = $4201;
  634.   {$EXTERNALSYM MSGF_COMMCTRL_DRAGSELECT}
  635.   MSGF_COMMCTRL_DRAGSELECT    = $4202;
  636.   {$EXTERNALSYM MSGF_COMMCTRL_TOOLBARCUST}
  637.   MSGF_COMMCTRL_TOOLBARCUST   = $4203;
  638.  
  639.  
  640. { ====== Generic WM_NOTIFY notification codes ================= }
  641.  
  642. const
  643.   {$EXTERNALSYM NM_OUTOFMEMORY}
  644.   NM_OUTOFMEMORY           = NM_FIRST-1;
  645.   {$EXTERNALSYM NM_CLICK}
  646.   NM_CLICK                 = NM_FIRST-2;
  647.   {$EXTERNALSYM NM_DBLCLK}
  648.   NM_DBLCLK                = NM_FIRST-3;
  649.   {$EXTERNALSYM NM_RETURN}
  650.   NM_RETURN                = NM_FIRST-4;
  651.   {$EXTERNALSYM NM_RCLICK}
  652.   NM_RCLICK                = NM_FIRST-5;
  653.   {$EXTERNALSYM NM_RDBLCLK}
  654.   NM_RDBLCLK               = NM_FIRST-6;
  655.   {$EXTERNALSYM NM_SETFOCUS}
  656.   NM_SETFOCUS              = NM_FIRST-7;
  657.   {$EXTERNALSYM NM_KILLFOCUS}
  658.   NM_KILLFOCUS             = NM_FIRST-8;
  659.   {$EXTERNALSYM NM_CUSTOMDRAW}
  660.   NM_CUSTOMDRAW            = NM_FIRST-12;
  661.   {$EXTERNALSYM NM_HOVER}
  662.   NM_HOVER                 = NM_FIRST-13;
  663.   {$EXTERNALSYM NM_NCHITTEST}
  664.   NM_NCHITTEST             = NM_FIRST-14;   // uses NMMOUSE struct
  665.   {$EXTERNALSYM NM_KEYDOWN}
  666.   NM_KEYDOWN               = NM_FIRST-15;   // uses NMKEY struct
  667.   {$EXTERNALSYM NM_RELEASEDCAPTURE}
  668.   NM_RELEASEDCAPTURE       = NM_FIRST-16;
  669.   {$EXTERNALSYM NM_SETCURSOR}
  670.   NM_SETCURSOR             = NM_FIRST-17;   // uses NMMOUSE struct
  671.   {$EXTERNALSYM NM_CHAR}
  672.   NM_CHAR                  = NM_FIRST-18;   // uses NMCHAR struct
  673.  
  674. type
  675.   {$EXTERNALSYM tagNMMOUSE}
  676.   tagNMMOUSE = packed record
  677.     hdr: TNMHdr;
  678.     dwItemSpec: DWORD;
  679.     dwItemData: DWORD;
  680.     pt: TPoint;
  681.     dwHitInfo: DWORD; // any specifics about where on the item or control the mouse is
  682.   end;
  683.   PNMMouse = ^TNMMouse;
  684.   TNMMouse = tagNMMOUSE;
  685.  
  686.   PNMClick = ^TNMClick;
  687.   TNMClick = tagNMMOUSE;
  688.  
  689.   // Generic structure to request an object of a specific type.
  690.   {$EXTERNALSYM tagNMOBJECTNOTIFY}
  691.   tagNMOBJECTNOTIFY = packed record
  692.     hdr: TNMHdr;
  693.     iItem: Integer;
  694.     piid: PGUID;
  695.     pObject: Pointer;
  696.     hResult: HRESULT;
  697.     dwFlags: DWORD;    // control specific flags (hints as to where in iItem it hit)
  698.   end;
  699.   PNMObjectNotify = ^TNMObjectNotify;
  700.   TNMObjectNotify = tagNMOBJECTNOTIFY;
  701.  
  702.   // Generic structure for a key
  703.   {$EXTERNALSYM tagNMKEY}
  704.   tagNMKEY = packed record
  705.     hdr: TNMHdr;
  706.     nVKey: UINT;
  707.     uFlags: UINT;
  708.   end;
  709.   PNMKey = ^TNMKey;
  710.   TNMKey = tagNMKEY;
  711.  
  712.   // Generic structure for a character
  713.   {$EXTERNALSYM tagNMCHAR}
  714.   tagNMCHAR = packed record
  715.     hdr: TNMHdr;
  716.     ch: UINT;
  717.     dwItemPrev: DWORD;     // Item previously selected
  718.     dwItemNext: DWORD;     // Item to be selected
  719.   end;
  720.   PNMChar = ^TNMChar;
  721.   TNMChar = tagNMCHAR;
  722.  
  723. { ==================== CUSTOM DRAW ========================================== }
  724.  
  725. const
  726.   // custom draw return flags
  727.   // values under 0x00010000 are reserved for global custom draw values.
  728.   // above that are for specific controls
  729.   {$EXTERNALSYM CDRF_DODEFAULT}
  730.   CDRF_DODEFAULT          = $00000000;
  731.   {$EXTERNALSYM CDRF_NEWFONT}
  732.   CDRF_NEWFONT            = $00000002;
  733.   {$EXTERNALSYM CDRF_SKIPDEFAULT}
  734.   CDRF_SKIPDEFAULT        = $00000004;
  735.  
  736.   {$EXTERNALSYM CDRF_NOTIFYPOSTPAINT}
  737.   CDRF_NOTIFYPOSTPAINT    = $00000010;
  738.   {$EXTERNALSYM CDRF_NOTIFYITEMDRAW}
  739.   CDRF_NOTIFYITEMDRAW     = $00000020;
  740.   {$EXTERNALSYM CDRF_NOTIFYSUBITEMDRAW}
  741.   CDRF_NOTIFYSUBITEMDRAW  = $00000020;  // flags are the same, we can distinguish by context
  742.   {$EXTERNALSYM CDRF_NOTIFYPOSTERASE}
  743.   CDRF_NOTIFYPOSTERASE    = $00000040;
  744.  
  745.   // drawstage flags
  746.   // values under = $00010000 are reserved for global custom draw values.
  747.   // above that are for specific controls
  748.   {$EXTERNALSYM CDDS_PREPAINT}
  749.   CDDS_PREPAINT           = $00000001;
  750.   {$EXTERNALSYM CDDS_POSTPAINT}
  751.   CDDS_POSTPAINT          = $00000002;
  752.   {$EXTERNALSYM CDDS_PREERASE}
  753.   CDDS_PREERASE           = $00000003;
  754.   {$EXTERNALSYM CDDS_POSTERASE}
  755.   CDDS_POSTERASE          = $00000004;
  756.   // the = $000010000 bit means it's individual item specific
  757.   {$EXTERNALSYM CDDS_ITEM}
  758.   CDDS_ITEM               = $00010000;
  759.   {$EXTERNALSYM CDDS_ITEMPREPAINT}
  760.   CDDS_ITEMPREPAINT       = CDDS_ITEM or CDDS_PREPAINT;
  761.   {$EXTERNALSYM CDDS_ITEMPOSTPAINT}
  762.   CDDS_ITEMPOSTPAINT      = CDDS_ITEM or CDDS_POSTPAINT;
  763.   {$EXTERNALSYM CDDS_ITEMPREERASE}
  764.   CDDS_ITEMPREERASE       = CDDS_ITEM or CDDS_PREERASE;
  765.   {$EXTERNALSYM CDDS_ITEMPOSTERASE}
  766.   CDDS_ITEMPOSTERASE      = CDDS_ITEM or CDDS_POSTERASE;
  767.   {$EXTERNALSYM CDDS_SUBITEM}
  768.   CDDS_SUBITEM            = $00020000;
  769.  
  770.   // itemState flags
  771.   {$EXTERNALSYM CDIS_SELECTED}
  772.   CDIS_SELECTED       = $0001;
  773.   {$EXTERNALSYM CDIS_GRAYED}
  774.   CDIS_GRAYED         = $0002;
  775.   {$EXTERNALSYM CDIS_DISABLED}
  776.   CDIS_DISABLED       = $0004;
  777.   {$EXTERNALSYM CDIS_CHECKED}
  778.   CDIS_CHECKED        = $0008;
  779.   {$EXTERNALSYM CDIS_FOCUS}
  780.   CDIS_FOCUS          = $0010;
  781.   {$EXTERNALSYM CDIS_DEFAULT}
  782.   CDIS_DEFAULT        = $0020;
  783.   {$EXTERNALSYM CDIS_HOT}
  784.   CDIS_HOT            = $0040;
  785.   {$EXTERNALSYM CDIS_MARKED}
  786.   CDIS_MARKED         = $0080;
  787.   {$EXTERNALSYM CDIS_INDETERMINATE}
  788.   CDIS_INDETERMINATE  = $0100;
  789.  
  790. type
  791.   {$EXTERNALSYM tagNMCUSTOMDRAWINFO}
  792.   tagNMCUSTOMDRAWINFO = packed record
  793.     hdr: TNMHdr;
  794.     dwDrawStage: DWORD;
  795.     hdc: HDC;
  796.     rc: TRect;
  797.     dwItemSpec: DWORD;  // this is control specific, but it's how to specify an item.  valid only with CDDS_ITEM bit set
  798.     uItemState: UINT;
  799.     lItemlParam: LPARAM;
  800.   end;
  801.   PNMCustomDraw = ^TNMCustomDraw;
  802.   TNMCustomDraw = tagNMCUSTOMDRAWINFO;
  803.  
  804.   {$EXTERNALSYM tagNMTTCUSTOMDRAW}
  805.   tagNMTTCUSTOMDRAW = packed record
  806.     nmcd: TNMCustomDraw;
  807.     uDrawFlags: UINT;
  808.   end;
  809.   PNMTTCustomDraw = ^TNMTTCustomDraw;
  810.   TNMTTCustomDraw = tagNMTTCUSTOMDRAW;
  811.  
  812. { ====== IMAGE LIST =========================================== }
  813.  
  814. const
  815.   {$EXTERNALSYM CLR_NONE}
  816.   CLR_NONE                = $FFFFFFFF;
  817.   {$EXTERNALSYM CLR_DEFAULT}
  818.   CLR_DEFAULT             = $FF000000;
  819.  
  820. type
  821.   {$EXTERNALSYM HIMAGELIST}
  822.   HIMAGELIST = THandle;
  823.  
  824.   {$EXTERNALSYM _IMAGELISTDRAWPARAMS}
  825.   _IMAGELISTDRAWPARAMS = packed record
  826.     cbSize: DWORD;
  827.     himl: HIMAGELIST;
  828.     i: Integer;
  829.     hdcDst: HDC;
  830.     x: Integer;
  831.     y: Integer;
  832.     cx: Integer;
  833.     cy: Integer;
  834.     xBitmap: Integer;        // x offest from the upperleft of bitmap
  835.     yBitmap: Integer;        // y offset from the upperleft of bitmap
  836.     rgbBk: COLORREF;
  837.     rgbFg: COLORREF;
  838.     fStyle: UINT;
  839.     dwRop: DWORD;
  840.   end;
  841.   PImageListDrawParams = ^TImageListDrawParams;
  842.   TImageListDrawParams = _IMAGELISTDRAWPARAMS;
  843.  
  844. const
  845.   {$EXTERNALSYM ILC_MASK}
  846.   ILC_MASK                = $0001;
  847.   {$EXTERNALSYM ILC_COLOR}
  848.   ILC_COLOR               = $0000;
  849.   {$EXTERNALSYM ILC_COLORDDB}
  850.   ILC_COLORDDB            = $00FE;
  851.   {$EXTERNALSYM ILC_COLOR4}
  852.   ILC_COLOR4              = $0004;
  853.   {$EXTERNALSYM ILC_COLOR8}
  854.   ILC_COLOR8              = $0008;
  855.   {$EXTERNALSYM ILC_COLOR16}
  856.   ILC_COLOR16             = $0010;
  857.   {$EXTERNALSYM ILC_COLOR24}
  858.   ILC_COLOR24             = $0018;
  859.   {$EXTERNALSYM ILC_COLOR32}
  860.   ILC_COLOR32             = $0020;
  861.   {$EXTERNALSYM ILC_PALETTE}
  862.   ILC_PALETTE             = $0800;
  863.  
  864. {$EXTERNALSYM ImageList_Create}
  865. function ImageList_Create(CX, CY: Integer; Flags: UINT;
  866.   Initial, Grow: Integer): HIMAGELIST; stdcall;
  867. {$EXTERNALSYM ImageList_Destroy}
  868. function ImageList_Destroy(ImageList: HIMAGELIST): Bool; stdcall;
  869. {$EXTERNALSYM ImageList_GetImageCount}
  870. function ImageList_GetImageCount(ImageList: HIMAGELIST): Integer; stdcall;
  871. {$EXTERNALSYM ImageList_SetImageCount}
  872. function ImageList_SetImageCount(himl: HIMAGELIST; uNewCount: UINT): Integer; stdcall;
  873. {$EXTERNALSYM ImageList_Add}
  874. function ImageList_Add(ImageList: HIMAGELIST; Image, Mask: HBitmap): Integer; stdcall;
  875. {$EXTERNALSYM ImageList_ReplaceIcon}
  876. function ImageList_ReplaceIcon(ImageList: HIMAGELIST; Index: Integer;
  877.   Icon: HIcon): Integer; stdcall;
  878. {$EXTERNALSYM ImageList_SetBkColor}
  879. function ImageList_SetBkColor(ImageList: HIMAGELIST; ClrBk: TColorRef): TColorRef; stdcall;
  880. {$EXTERNALSYM ImageList_GetBkColor}
  881. function ImageList_GetBkColor(ImageList: HIMAGELIST): TColorRef; stdcall;
  882. {$EXTERNALSYM ImageList_SetOverlayImage}
  883. function ImageList_SetOverlayImage(ImageList: HIMAGELIST; Image: Integer;
  884.   Overlay: Integer): Bool; stdcall;
  885.  
  886. {$EXTERNALSYM ImageList_AddIcon}
  887. function ImageList_AddIcon(ImageList: HIMAGELIST; Icon: HIcon): Integer;
  888.  
  889. const
  890.   {$EXTERNALSYM ILD_NORMAL}
  891.   ILD_NORMAL              = $0000;
  892.   {$EXTERNALSYM ILD_TRANSPARENT}
  893.   ILD_TRANSPARENT         = $0001;
  894.   {$EXTERNALSYM ILD_MASK}
  895.   ILD_MASK                = $0010;
  896.   {$EXTERNALSYM ILD_IMAGE}
  897.   ILD_IMAGE               = $0020;
  898.   {$EXTERNALSYM ILD_ROP}
  899.   ILD_ROP                 = $0040;
  900.   {$EXTERNALSYM ILD_BLEND25}
  901.   ILD_BLEND25             = $0002;
  902.   {$EXTERNALSYM ILD_BLEND50}
  903.   ILD_BLEND50             = $0004;
  904.   {$EXTERNALSYM ILD_OVERLAYMASK}
  905.   ILD_OVERLAYMASK         = $0F00;
  906.  
  907. {$EXTERNALSYM IndexToOverlayMask}
  908. function IndexToOverlayMask(Index: Integer): Integer;
  909.  
  910. const
  911.   {$EXTERNALSYM ILD_SELECTED}
  912.   ILD_SELECTED            = ILD_BLEND50;
  913.   {$EXTERNALSYM ILD_FOCUS}
  914.   ILD_FOCUS               = ILD_BLEND25;
  915.   {$EXTERNALSYM ILD_BLEND}
  916.   ILD_BLEND               = ILD_BLEND50;
  917.   {$EXTERNALSYM CLR_HILIGHT}
  918.   CLR_HILIGHT             = CLR_DEFAULT;
  919.  
  920. {$EXTERNALSYM ImageList_Draw}
  921. function ImageList_Draw(ImageList: HIMAGELIST; Index: Integer;
  922.   Dest: HDC; X, Y: Integer; Style: UINT): Bool; stdcall;
  923.  
  924. {$EXTERNALSYM ImageList_Replace}
  925. function ImageList_Replace(ImageList: HIMAGELIST; Index: Integer;
  926.   Image, Mask: HBitmap): Bool; stdcall;
  927. {$EXTERNALSYM ImageList_AddMasked}
  928. function ImageList_AddMasked(ImageList: HIMAGELIST; Image: HBitmap;
  929.   Mask: TColorRef): Integer; stdcall;
  930. {$EXTERNALSYM ImageList_DrawEx}
  931. function ImageList_DrawEx(ImageList: HIMAGELIST; Index: Integer;
  932.   Dest: HDC; X, Y, DX, DY: Integer; Bk, Fg: TColorRef; Style: Cardinal): Bool; stdcall;
  933. {$EXTERNALSYM ImageList_DrawIndirect}
  934. function ImageList_DrawIndirect(pimldp: PImageListDrawParams): Integer; stdcall;
  935. {$EXTERNALSYM ImageList_Remove}
  936. function ImageList_Remove(ImageList: HIMAGELIST; Index: Integer): Bool; stdcall;
  937. {$EXTERNALSYM ImageList_GetIcon}
  938. function ImageList_GetIcon(ImageList: HIMAGELIST; Index: Integer;
  939.   Flags: Cardinal): HIcon; stdcall;
  940. {$EXTERNALSYM ImageList_LoadImageA}
  941. function ImageList_LoadImageA(Instance: THandle; Bmp: PAnsiChar; CX, Grow: Integer;
  942.   Mask: TColorRef; pType, Flags: Cardinal): HIMAGELIST; stdcall;
  943. {$EXTERNALSYM ImageList_LoadImageW}
  944. function ImageList_LoadImageW(Instance: THandle; Bmp: PWideChar; CX, Grow: Integer;
  945.   Mask: TColorRef; pType, Flags: Cardinal): HIMAGELIST; stdcall;
  946. {$EXTERNALSYM ImageList_LoadImage}
  947. function ImageList_LoadImage(Instance: THandle; Bmp: PChar; CX, Grow: Integer;
  948.   Mask: TColorRef; pType, Flags: Cardinal): HIMAGELIST; stdcall;
  949.  
  950. const
  951.   {$EXTERNALSYM ILCF_MOVE}
  952.   ILCF_MOVE   = $00000000;
  953.   {$EXTERNALSYM ILCF_SWAP}
  954.   ILCF_SWAP   = $00000001;
  955.  
  956. {$EXTERNALSYM ImageList_Copy}
  957. function ImageList_Copy(himlDst: HIMAGELIST; iDst: Integer; himlSrc: HIMAGELIST;
  958.   Src: Integer; uFlags: UINT): Integer; stdcall;
  959.  
  960. {$EXTERNALSYM ImageList_BeginDrag}
  961. function ImageList_BeginDrag(ImageList: HIMAGELIST; Track: Integer;
  962.   XHotSpot, YHotSpot: Integer): Bool; stdcall;
  963. {$EXTERNALSYM ImageList_EndDrag}
  964. function ImageList_EndDrag: Bool; stdcall;
  965. {$EXTERNALSYM ImageList_DragEnter}
  966. function ImageList_DragEnter(LockWnd: HWnd; X, Y: Integer): Bool; stdcall;
  967. {$EXTERNALSYM ImageList_DragLeave}
  968. function ImageList_DragLeave(LockWnd: HWnd): Bool; stdcall;
  969. {$EXTERNALSYM ImageList_DragMove}
  970. function ImageList_DragMove(X, Y: Integer): Bool; stdcall;
  971. {$EXTERNALSYM ImageList_SetDragCursorImage}
  972. function ImageList_SetDragCursorImage(ImageList: HIMAGELIST; Drag: Integer;
  973.   XHotSpot, YHotSpot: Integer): Bool; stdcall;
  974. {$EXTERNALSYM ImageList_DragShowNolock}
  975. function ImageList_DragShowNolock(Show: Bool): Bool; stdcall;
  976. {$EXTERNALSYM ImageList_GetDragImage}
  977. function ImageList_GetDragImage(Point, HotSpot: PPoint): HIMAGELIST; stdcall;
  978.  
  979. { macros }
  980. {$EXTERNALSYM ImageList_RemoveAll}
  981. procedure ImageList_RemoveAll(ImageList: HIMAGELIST);
  982. {$EXTERNALSYM ImageList_ExtractIcon}
  983. function ImageList_ExtractIcon(Instance: THandle; ImageList: HIMAGELIST;
  984.   Image: Integer): HIcon;
  985. {$EXTERNALSYM ImageList_LoadBitmap}
  986. function ImageList_LoadBitmap(Instance: THandle; Bmp: PChar;
  987.   CX, Grow: Integer; MasK: TColorRef): HIMAGELIST;
  988.  
  989. {$EXTERNALSYM ImageList_Read}
  990. function ImageList_Read(Stream: IStream): HIMAGELIST; stdcall;
  991. {$EXTERNALSYM ImageList_Write}
  992. function ImageList_Write(ImageList: HIMAGELIST; Stream: IStream): BOOL; stdcall;
  993.  
  994. type
  995.   PImageInfo = ^TImageInfo;
  996.   {$EXTERNALSYM _IMAGEINFO}
  997.   _IMAGEINFO = packed record
  998.     hbmImage: HBitmap;
  999.     hbmMask: HBitmap;
  1000.     Unused1: Integer;
  1001.     Unused2: Integer;
  1002.     rcImage: TRect;
  1003.   end;
  1004.   TImageInfo = _IMAGEINFO;
  1005.   {$EXTERNALSYM IMAGEINFO}
  1006.   IMAGEINFO = _IMAGEINFO;
  1007.  
  1008. {$EXTERNALSYM ImageList_GetIconSize}
  1009. function ImageList_GetIconSize(ImageList: HIMAGELIST; var CX, CY: Integer): Bool; stdcall;
  1010. {$EXTERNALSYM ImageList_SetIconSize}
  1011. function ImageList_SetIconSize(ImageList: HIMAGELIST; CX, CY: Integer): Bool; stdcall;
  1012. {$EXTERNALSYM ImageList_GetImageInfo}
  1013. function ImageList_GetImageInfo(ImageList: HIMAGELIST; Index: Integer;
  1014.   var ImageInfo: TImageInfo): Bool; stdcall;
  1015. {$EXTERNALSYM ImageList_Merge}
  1016. function ImageList_Merge(ImageList1: HIMAGELIST; Index1: Integer;
  1017.   ImageList2: HIMAGELIST; Index2: Integer; DX, DY: Integer): HIMAGELIST; stdcall;
  1018. {$EXTERNALSYM ImageList_Duplicate}
  1019. function ImageList_Duplicate(himl: HIMAGELIST): HIMAGELIST; stdcall;
  1020.  
  1021. { ====== HEADER CONTROL ========================== }
  1022.  
  1023. const
  1024.   {$EXTERNALSYM WC_HEADER}
  1025.   WC_HEADER = 'SysHeader32';
  1026.  
  1027.   {$EXTERNALSYM HDS_HORZ}
  1028.   HDS_HORZ                = $00000000;
  1029.   {$EXTERNALSYM HDS_BUTTONS}
  1030.   HDS_BUTTONS             = $00000002;
  1031.   {$EXTERNALSYM HDS_HOTTRACK}
  1032.   HDS_HOTTRACK            = $00000004;
  1033.   {$EXTERNALSYM HDS_HIDDEN}
  1034.   HDS_HIDDEN              = $00000008;
  1035.   {$EXTERNALSYM HDS_DRAGDROP}
  1036.   HDS_DRAGDROP            = $00000040;
  1037.   {$EXTERNALSYM HDS_FULLDRAG}
  1038.   HDS_FULLDRAG            = $00000080;
  1039.  
  1040. type
  1041.   PHDItemA = ^THDItemA;
  1042.   PHDItemW = ^THDItemW;
  1043.   PHDItem = PHDItemA;
  1044.   {$EXTERNALSYM _HD_ITEMA}
  1045.   _HD_ITEMA = packed record
  1046.     Mask: Cardinal;
  1047.     cxy: Integer;
  1048.     pszText: PAnsiChar;
  1049.     hbm: HBITMAP;
  1050.     cchTextMax: Integer;
  1051.     fmt: Integer;
  1052.     lParam: LPARAM;
  1053.     iImage: Integer;        // index of bitmap in ImageList
  1054.     iOrder: Integer;        // where to draw this item
  1055.   end;
  1056.   {$EXTERNALSYM _HD_ITEMW}
  1057.   _HD_ITEMW = packed record
  1058.     Mask: Cardinal;
  1059.     cxy: Integer;
  1060.     pszText: PWideChar;
  1061.     hbm: HBITMAP;
  1062.     cchTextMax: Integer;
  1063.     fmt: Integer;
  1064.     lParam: LPARAM;
  1065.     iImage: Integer;        // index of bitmap in ImageList
  1066.     iOrder: Integer;        // where to draw this item
  1067.   end;
  1068.   {$EXTERNALSYM _HD_ITEM}
  1069.   _HD_ITEM = _HD_ITEMA;
  1070.   THDItemA = _HD_ITEMA;
  1071.   THDItemW = _HD_ITEMW;
  1072.   THDItem = THDItemA;
  1073.   {$EXTERNALSYM HD_ITEMA}
  1074.   HD_ITEMA = _HD_ITEMA;
  1075.   {$EXTERNALSYM HD_ITEMW}
  1076.   HD_ITEMW = _HD_ITEMW;
  1077.   {$EXTERNALSYM HD_ITEM}
  1078.   HD_ITEM = HD_ITEMA;
  1079.  
  1080. const
  1081.   {$EXTERNALSYM HDI_WIDTH}
  1082.   HDI_WIDTH               = $0001;
  1083.   {$EXTERNALSYM HDI_HEIGHT}
  1084.   HDI_HEIGHT              = HDI_WIDTH;
  1085.   {$EXTERNALSYM HDI_TEXT}
  1086.   HDI_TEXT                = $0002;
  1087.   {$EXTERNALSYM HDI_FORMAT}
  1088.   HDI_FORMAT              = $0004;
  1089.   {$EXTERNALSYM HDI_LPARAM}
  1090.   HDI_LPARAM              = $0008;
  1091.   {$EXTERNALSYM HDI_BITMAP}
  1092.   HDI_BITMAP              = $0010;
  1093.   {$EXTERNALSYM HDI_IMAGE}
  1094.   HDI_IMAGE               = $0020;
  1095.   {$EXTERNALSYM HDI_DI_SETITEM}
  1096.   HDI_DI_SETITEM          = $0040;
  1097.   {$EXTERNALSYM HDI_ORDER}
  1098.   HDI_ORDER               = $0080;
  1099.  
  1100.   {$EXTERNALSYM HDF_LEFT}
  1101.   HDF_LEFT                = 0;
  1102.   {$EXTERNALSYM HDF_RIGHT}
  1103.   HDF_RIGHT               = 1;
  1104.   {$EXTERNALSYM HDF_CENTER}
  1105.   HDF_CENTER              = 2;
  1106.   {$EXTERNALSYM HDF_JUSTIFYMASK}
  1107.   HDF_JUSTIFYMASK         = $0003;
  1108.   {$EXTERNALSYM HDF_RTLREADING}
  1109.   HDF_RTLREADING          = 4; 
  1110.  
  1111.   {$EXTERNALSYM HDF_OWNERDRAW}
  1112.   HDF_OWNERDRAW           = $8000;
  1113.   {$EXTERNALSYM HDF_STRING}
  1114.   HDF_STRING              = $4000;
  1115.   {$EXTERNALSYM HDF_BITMAP}
  1116.   HDF_BITMAP              = $2000;
  1117.   {$EXTERNALSYM HDF_BITMAP_ON_RIGHT}
  1118.   HDF_BITMAP_ON_RIGHT     = $1000;
  1119.   {$EXTERNALSYM HDF_IMAGE}
  1120.   HDF_IMAGE               = $0800;
  1121.  
  1122.   {$EXTERNALSYM HDM_GETITEMCOUNT}
  1123.   HDM_GETITEMCOUNT        = HDM_FIRST + 0;
  1124.  
  1125. {$EXTERNALSYM Header_GetItemCount}
  1126. function Header_GetItemCount(Header: HWnd): Integer;
  1127.  
  1128. const
  1129.   {$EXTERNALSYM HDM_INSERTITEMW}
  1130.   HDM_INSERTITEMW          = HDM_FIRST + 10;
  1131.   {$EXTERNALSYM HDM_INSERTITEMA}
  1132.   HDM_INSERTITEMA          = HDM_FIRST + 1;
  1133.  
  1134.  
  1135.  
  1136.   {$EXTERNALSYM HDM_INSERTITEM}
  1137.   HDM_INSERTITEM           = HDM_INSERTITEMA;
  1138.  
  1139. {$EXTERNALSYM Header_InsertItem}
  1140. function Header_InsertItem(Header: HWnd; Index: Integer;
  1141.   const Item: THDItem): Integer;
  1142.  
  1143. const
  1144.   {$EXTERNALSYM HDM_DELETEITEM}
  1145.   HDM_DELETEITEM          = HDM_FIRST + 2;
  1146.  
  1147. {$EXTERNALSYM Header_DeleteItem}
  1148. function Header_DeleteItem(Header: HWnd; Index: Integer): Bool;
  1149.  
  1150. const
  1151.   {$EXTERNALSYM HDM_GETITEMW}
  1152.   HDM_GETITEMW             = HDM_FIRST + 11;
  1153.   {$EXTERNALSYM HDM_GETITEMA}
  1154.   HDM_GETITEMA             = HDM_FIRST + 3;
  1155.  
  1156.  
  1157.  
  1158.   {$EXTERNALSYM HDM_GETITEM}
  1159.   HDM_GETITEM              = HDM_GETITEMA;
  1160.  
  1161. {$EXTERNALSYM Header_GetItem}
  1162. function Header_GetItem(Header: HWnd; Index: Integer;
  1163.   var Item: THDItem): Bool;
  1164.  
  1165. const
  1166.   {$EXTERNALSYM HDM_SETITEMA}
  1167.   HDM_SETITEMA            = HDM_FIRST + 4;
  1168.   {$EXTERNALSYM HDM_SETITEMW}
  1169.   HDM_SETITEMW            = HDM_FIRST + 12;
  1170.  
  1171.  
  1172.  
  1173.   {$EXTERNALSYM HDM_SETITEM}
  1174.   HDM_SETITEM             = HDM_SETITEMA;
  1175.  
  1176. {$EXTERNALSYM Header_SetItem}
  1177. function Header_SetItem(Header: HWnd; Index: Integer; const Item: THDItem): Bool;
  1178.  
  1179. type
  1180.   PHDLayout = ^THDLayout;
  1181.   {$EXTERNALSYM _HD_LAYOUT}
  1182.   _HD_LAYOUT = packed record
  1183.     Rect: ^TRect;
  1184.     WindowPos: PWindowPos;
  1185.   end;
  1186.   THDLayout = _HD_LAYOUT;
  1187.   {$EXTERNALSYM HD_LAYOUT}
  1188.   HD_LAYOUT = _HD_LAYOUT;
  1189.  
  1190. const
  1191.   {$EXTERNALSYM HDM_LAYOUT}
  1192.   HDM_LAYOUT              = HDM_FIRST + 5;
  1193.  
  1194. {$EXTERNALSYM Header_Layout}
  1195. function Header_Layout(Header: HWnd; Layout: PHDLayout): Bool;
  1196.  
  1197. const
  1198.   {$EXTERNALSYM HHT_NOWHERE}
  1199.   HHT_NOWHERE             = $0001;
  1200.   {$EXTERNALSYM HHT_ONHEADER}
  1201.   HHT_ONHEADER            = $0002;
  1202.   {$EXTERNALSYM HHT_ONDIVIDER}
  1203.   HHT_ONDIVIDER           = $0004;
  1204.   {$EXTERNALSYM HHT_ONDIVOPEN}
  1205.   HHT_ONDIVOPEN           = $0008;
  1206.   {$EXTERNALSYM HHT_ABOVE}
  1207.   HHT_ABOVE               = $0100;
  1208.   {$EXTERNALSYM HHT_BELOW}
  1209.   HHT_BELOW               = $0200;
  1210.   {$EXTERNALSYM HHT_TORIGHT}
  1211.   HHT_TORIGHT             = $0400;
  1212.   {$EXTERNALSYM HHT_TOLEFT}
  1213.   HHT_TOLEFT              = $0800;
  1214.  
  1215. type
  1216.   PHDHitTestInfo = ^THDHitTestInfo;
  1217.   {$EXTERNALSYM _HD_HITTESTINFO}
  1218.   _HD_HITTESTINFO = packed record
  1219.     Point: TPoint;
  1220.     Flags: Cardinal;
  1221.     Item: Integer;
  1222.   end;
  1223.   THDHitTestInfo = _HD_HITTESTINFO;
  1224.   {$EXTERNALSYM HD_HITTESTINFO}
  1225.   HD_HITTESTINFO = _HD_HITTESTINFO;
  1226.  
  1227. const
  1228.   {$EXTERNALSYM HDM_HITTEST}
  1229.   HDM_HITTEST             = HDM_FIRST + 6;
  1230.   {$EXTERNALSYM HDM_GETITEMRECT}
  1231.   HDM_GETITEMRECT         = HDM_FIRST + 7;
  1232.   {$EXTERNALSYM HDM_SETIMAGELIST}
  1233.   HDM_SETIMAGELIST        = HDM_FIRST + 8;
  1234.   {$EXTERNALSYM HDM_GETIMAGELIST}
  1235.   HDM_GETIMAGELIST        = HDM_FIRST + 9;
  1236.   {$EXTERNALSYM HDM_ORDERTOINDEX}
  1237.   HDM_ORDERTOINDEX        = HDM_FIRST + 15;
  1238.   {$EXTERNALSYM HDM_CREATEDRAGIMAGE}
  1239.   HDM_CREATEDRAGIMAGE     = HDM_FIRST + 16;  // wparam = which item = by index;
  1240.   {$EXTERNALSYM HDM_GETORDERARRAY}
  1241.   HDM_GETORDERARRAY       = HDM_FIRST + 17;
  1242.   {$EXTERNALSYM HDM_SETORDERARRAY}
  1243.   HDM_SETORDERARRAY       = HDM_FIRST + 18;
  1244.   {$EXTERNALSYM HDM_SETHOTDIVIDER}
  1245.   HDM_SETHOTDIVIDER       = HDM_FIRST + 19;
  1246.   {$EXTERNALSYM HDM_SETUNICODEFORMAT}
  1247.   HDM_SETUNICODEFORMAT    = CCM_SETUNICODEFORMAT;
  1248.   {$EXTERNALSYM HDM_GETUNICODEFORMAT}
  1249.   HDM_GETUNICODEFORMAT    = CCM_GETUNICODEFORMAT;
  1250.  
  1251. {$EXTERNALSYM Header_GetItemRect}
  1252. function Header_GetItemRect(hwnd: HWND; iItem: Integer; lprc: PRect): Integer;
  1253. {$EXTERNALSYM Header_SetImageList}
  1254. function Header_SetImageList(hwnd: HWND; himl: HIMAGELIST): HIMAGELIST;
  1255. {$EXTERNALSYM Header_GetImageList}
  1256. function Header_GetImageList(hwnd: HWND): HIMAGELIST;
  1257. {$EXTERNALSYM Header_OrderToIndex}
  1258. function Header_OrderToIndex(hwnd: HWND; i: Integer): Integer;
  1259. {$EXTERNALSYM Header_CreateDragImage}
  1260. function Header_CreateDragImage(hwnd: HWND; i: Integer): HIMAGELIST;
  1261. {$EXTERNALSYM Header_GetOrderArray}
  1262. function Header_GetOrderArray(hwnd: HWND; iCount: Integer; lpi: PInteger): Integer;
  1263. {$EXTERNALSYM Header_SetOrderArray}
  1264. function Header_SetOrderArray(hwnd: HWND; iCount: Integer; lpi: PInteger): Integer;
  1265.  
  1266. // lparam = int array of size HDM_GETITEMCOUNT
  1267. // the array specifies the order that all items should be displayed.
  1268. // e.g.  { 2, 0, 1}
  1269. // says the index 2 item should be shown in the 0ths position
  1270. //      index 0 should be shown in the 1st position
  1271. //      index 1 should be shown in the 2nd position
  1272.  
  1273. {$EXTERNALSYM Header_SetHotDivider}
  1274. function Header_SetHotDivider(hwnd: HWND; fPos: BOOL; dw: DWORD): Integer;
  1275.  
  1276. // convenience message for external dragdrop
  1277. // wParam = BOOL  specifying whether the lParam is a dwPos of the cursor
  1278. //              position or the index of which divider to hotlight
  1279. // lParam = depends on wParam  (-1 and wParm = FALSE turns off hotlight)
  1280.  
  1281. {$EXTERNALSYM Header_SetUnicodeFormat}
  1282. function Header_SetUnicodeFormat(hwnd: HWND; fUnicode: BOOL): Integer;
  1283. {$EXTERNALSYM Header_GetUnicodeFormat}
  1284. function Header_GetUnicodeFormat(hwnd: HWND): Integer;
  1285.  
  1286. const
  1287.   {$EXTERNALSYM HDN_ITEMCHANGINGA}
  1288.   HDN_ITEMCHANGINGA        = HDN_FIRST-0;
  1289.   {$EXTERNALSYM HDN_ITEMCHANGEDA}
  1290.   HDN_ITEMCHANGEDA         = HDN_FIRST-1;
  1291.   {$EXTERNALSYM HDN_ITEMCLICKA}
  1292.   HDN_ITEMCLICKA           = HDN_FIRST-2;
  1293.   {$EXTERNALSYM HDN_ITEMDBLCLICKA}
  1294.   HDN_ITEMDBLCLICKA        = HDN_FIRST-3;
  1295.   {$EXTERNALSYM HDN_DIVIDERDBLCLICKA}
  1296.   HDN_DIVIDERDBLCLICKA     = HDN_FIRST-5;
  1297.   {$EXTERNALSYM HDN_BEGINTRACKA}
  1298.   HDN_BEGINTRACKA          = HDN_FIRST-6;
  1299.   {$EXTERNALSYM HDN_ENDTRACKA}
  1300.   HDN_ENDTRACKA            = HDN_FIRST-7;
  1301.   {$EXTERNALSYM HDN_TRACKA}
  1302.   HDN_TRACKA               = HDN_FIRST-8;
  1303.   {$EXTERNALSYM HDN_GETDISPINFOA}
  1304.   HDN_GETDISPINFOA         = HDN_FIRST-9;
  1305.   {$EXTERNALSYM HDN_BEGINDRAG}
  1306.   HDN_BEGINDRAG            = HDN_FIRST-10;
  1307.   {$EXTERNALSYM HDN_ENDDRAG}
  1308.   HDN_ENDDRAG              = HDN_FIRST-11;
  1309.  
  1310.   {$EXTERNALSYM HDN_ITEMCHANGINGW}
  1311.   HDN_ITEMCHANGINGW        = HDN_FIRST-20;
  1312.   {$EXTERNALSYM HDN_ITEMCHANGEDW}
  1313.   HDN_ITEMCHANGEDW         = HDN_FIRST-21;
  1314.   {$EXTERNALSYM HDN_ITEMCLICKW}
  1315.   HDN_ITEMCLICKW           = HDN_FIRST-22;
  1316.   {$EXTERNALSYM HDN_ITEMDBLCLICKW}
  1317.   HDN_ITEMDBLCLICKW        = HDN_FIRST-23;
  1318.   {$EXTERNALSYM HDN_DIVIDERDBLCLICKW}
  1319.   HDN_DIVIDERDBLCLICKW     = HDN_FIRST-25;
  1320.   {$EXTERNALSYM HDN_BEGINTRACKW}
  1321.   HDN_BEGINTRACKW          = HDN_FIRST-26;
  1322.   {$EXTERNALSYM HDN_ENDTRACKW}
  1323.   HDN_ENDTRACKW            = HDN_FIRST-27;
  1324.   {$EXTERNALSYM HDN_TRACKW}
  1325.   HDN_TRACKW               = HDN_FIRST-28;
  1326.   {$EXTERNALSYM HDN_GETDISPINFOW}
  1327.   HDN_GETDISPINFOW         = HDN_FIRST-29;
  1328.  
  1329.  
  1330.  
  1331.  
  1332.  
  1333.  
  1334.  
  1335.  
  1336.  
  1337.  
  1338.  
  1339.  
  1340.  
  1341.  
  1342.  
  1343.  
  1344.  
  1345.  
  1346.  
  1347.  
  1348.   {$EXTERNALSYM HDN_ITEMCHANGING}
  1349.   HDN_ITEMCHANGING        = HDN_ITEMCHANGINGA;
  1350.   {$EXTERNALSYM HDN_ITEMCHANGED}
  1351.   HDN_ITEMCHANGED         = HDN_ITEMCHANGEDA;
  1352.   {$EXTERNALSYM HDN_ITEMCLICK}
  1353.   HDN_ITEMCLICK           = HDN_ITEMCLICKA;
  1354.   {$EXTERNALSYM HDN_ITEMDBLCLICK}
  1355.   HDN_ITEMDBLCLICK        = HDN_ITEMDBLCLICKA;
  1356.   {$EXTERNALSYM HDN_DIVIDERDBLCLICK}
  1357.   HDN_DIVIDERDBLCLICK     = HDN_DIVIDERDBLCLICKA;
  1358.   {$EXTERNALSYM HDN_BEGINTRACK}
  1359.   HDN_BEGINTRACK          = HDN_BEGINTRACKA;
  1360.   {$EXTERNALSYM HDN_ENDTRACK}
  1361.   HDN_ENDTRACK            = HDN_ENDTRACKA;
  1362.   {$EXTERNALSYM HDN_TRACK}
  1363.   HDN_TRACK               = HDN_TRACKA;
  1364.   {$EXTERNALSYM HDN_GETDISPINFO}
  1365.   HDN_GETDISPINFO         = HDN_GETDISPINFOA;
  1366.  
  1367. type
  1368.   {$EXTERNALSYM tagNMHEADERA}
  1369.   tagNMHEADERA = packed record
  1370.     Hdr: TNMHdr;
  1371.     Item: Integer;
  1372.     Button: Integer;
  1373.     PItem: PHDItemA;
  1374.   end;
  1375.   {$EXTERNALSYM tagNMHEADERW}
  1376.   tagNMHEADERW = packed record
  1377.     Hdr: TNMHdr;
  1378.     Item: Integer;
  1379.     Button: Integer;
  1380.     PItem: PHDItemW;
  1381.   end;
  1382.   {$EXTERNALSYM tagNMHEADER}
  1383.   tagNMHEADER = tagNMHEADERA;
  1384.   {$EXTERNALSYM HD_NOTIFYA}
  1385.   HD_NOTIFYA = tagNMHEADERA;
  1386.   {$EXTERNALSYM HD_NOTIFYW}
  1387.   HD_NOTIFYW = tagNMHEADERW;
  1388.   {$EXTERNALSYM HD_NOTIFY}
  1389.   HD_NOTIFY = HD_NOTIFYA;
  1390.   PHDNotifyA = ^THDNotifyA;
  1391.   PHDNotifyW = ^THDNotifyW;
  1392.   PHDNotify = PHDNotifyA;
  1393.   THDNotifyA = tagNMHEADERA;
  1394.   THDNotifyW = tagNMHEADERW;
  1395.   THDNotify = THDNotifyA;
  1396.  
  1397.   {$EXTERNALSYM tagNMHDDISPINFOA}
  1398.   tagNMHDDISPINFOA = packed record
  1399.     hdr: TNMHdr;
  1400.     iItem: Integer;
  1401.     mask: UINT;
  1402.     pszText: PAnsiChar;
  1403.     cchTextMax: Integer;
  1404.     iImage: Integer;
  1405.     lParam: LPARAM;
  1406.   end;
  1407.   {$EXTERNALSYM tagNMHDDISPINFOW}
  1408.   tagNMHDDISPINFOW = packed record
  1409.     hdr: TNMHdr;
  1410.     iItem: Integer;
  1411.     mask: UINT;
  1412.     pszText: PWideChar;
  1413.     cchTextMax: Integer;
  1414.     iImage: Integer;
  1415.     lParam: LPARAM;
  1416.   end;
  1417.   {$EXTERNALSYM tagNMHDDISPINFO}
  1418.   tagNMHDDISPINFO = tagNMHDDISPINFOA;
  1419.   PNMHDispInfoA = ^TNMHDispInfoA;
  1420.   PNMHDispInfoW = ^TNMHDispInfoW;
  1421.   PNMHDispInfo = PNMHDispInfoA;
  1422.   TNMHDispInfoA = tagNMHDDISPINFOA;
  1423.   TNMHDispInfoW = tagNMHDDISPINFOW;
  1424.   TNMHDispInfo = TNMHDispInfoA;
  1425.  
  1426.  
  1427. { ====== TOOLBAR CONTROL =================== }
  1428.  
  1429. const
  1430.   {$EXTERNALSYM TOOLBARCLASSNAME}
  1431.   TOOLBARCLASSNAME = 'ToolbarWindow32';
  1432.  
  1433. type
  1434.   PTBButton = ^TTBButton;
  1435.   {$EXTERNALSYM _TBBUTTON}
  1436.   _TBBUTTON = packed record
  1437.     iBitmap: Integer;
  1438.     idCommand: Integer;
  1439.     fsState: Byte;
  1440.     fsStyle: Byte;
  1441.     bReserved: array[1..2] of Byte;
  1442.     dwData: Longint;
  1443.     iString: Integer;
  1444.   end;
  1445.   TTBButton = _TBBUTTON;
  1446.  
  1447.   PColorMap = ^TColorMap;
  1448.   {$EXTERNALSYM _COLORMAP}
  1449.   _COLORMAP = packed record
  1450.     cFrom: TColorRef;
  1451.     cTo: TColorRef;
  1452.   end;
  1453.   TColorMap = _COLORMAP;
  1454.   {$EXTERNALSYM COLORMAP}
  1455.   COLORMAP = _COLORMAP;
  1456.  
  1457. {$EXTERNALSYM CreateToolBarEx}
  1458. function CreateToolBarEx(Wnd: HWnd; ws: Longint; ID: UINT;
  1459.   Bitmaps: Integer; BMInst: THandle; BMID: Cardinal; Buttons: PTBButton;
  1460.   NumButtons: Integer; dxButton, dyButton: Integer;
  1461.   dxBitmap, dyBitmap: Integer; StructSize: UINT): HWnd; stdcall;
  1462.  
  1463. {$EXTERNALSYM CreateMappedBitmap}
  1464. function CreateMappedBitmap(Instance: THandle; Bitmap: Integer;
  1465.   Flags: UINT; ColorMap: PColorMap; NumMaps: Integer): HBitmap; stdcall;
  1466.  
  1467. const
  1468.  
  1469.   {$EXTERNALSYM CMB_MASKED}
  1470.   CMB_MASKED              = $02;
  1471.  
  1472.   {$EXTERNALSYM TBSTATE_CHECKED}
  1473.   TBSTATE_CHECKED         = $01;
  1474.   {$EXTERNALSYM TBSTATE_PRESSED}
  1475.   TBSTATE_PRESSED         = $02;
  1476.   {$EXTERNALSYM TBSTATE_ENABLED}
  1477.   TBSTATE_ENABLED         = $04;
  1478.   {$EXTERNALSYM TBSTATE_HIDDEN}
  1479.   TBSTATE_HIDDEN          = $08;
  1480.   {$EXTERNALSYM TBSTATE_INDETERMINATE}
  1481.   TBSTATE_INDETERMINATE   = $10;
  1482.   {$EXTERNALSYM TBSTATE_WRAP}
  1483.   TBSTATE_WRAP            = $20;
  1484.   {$EXTERNALSYM TBSTATE_ELLIPSES}
  1485.   TBSTATE_ELLIPSES        = $40;
  1486.   {$EXTERNALSYM TBSTATE_MARKED}
  1487.   TBSTATE_MARKED          = $80;
  1488.  
  1489.   {$EXTERNALSYM TBSTYLE_BUTTON}
  1490.   TBSTYLE_BUTTON          = $00;
  1491.   {$EXTERNALSYM TBSTYLE_SEP}
  1492.   TBSTYLE_SEP             = $01;
  1493.   {$EXTERNALSYM TBSTYLE_CHECK}
  1494.   TBSTYLE_CHECK           = $02;
  1495.   {$EXTERNALSYM TBSTYLE_GROUP}
  1496.   TBSTYLE_GROUP           = $04;
  1497.   {$EXTERNALSYM TBSTYLE_CHECKGROUP}
  1498.   TBSTYLE_CHECKGROUP      = TBSTYLE_GROUP or TBSTYLE_CHECK;
  1499.   {$EXTERNALSYM TBSTYLE_DROPDOWN}
  1500.   TBSTYLE_DROPDOWN        = $08;
  1501.   {$EXTERNALSYM TBSTYLE_AUTOSIZE}
  1502.   TBSTYLE_AUTOSIZE        = $0010; // automatically calculate the cx of the button
  1503.   {$EXTERNALSYM TBSTYLE_NOPREFIX}
  1504.   TBSTYLE_NOPREFIX        = $0020; // if this button should not have accel prefix
  1505.  
  1506.   {$EXTERNALSYM TBSTYLE_TOOLTIPS}
  1507.   TBSTYLE_TOOLTIPS        = $0100;
  1508.   {$EXTERNALSYM TBSTYLE_WRAPABLE}
  1509.   TBSTYLE_WRAPABLE        = $0200;
  1510.   {$EXTERNALSYM TBSTYLE_ALTDRAG}
  1511.   TBSTYLE_ALTDRAG         = $0400;
  1512.   {$EXTERNALSYM TBSTYLE_FLAT}
  1513.   TBSTYLE_FLAT            = $0800;
  1514.   {$EXTERNALSYM TBSTYLE_LIST}
  1515.   TBSTYLE_LIST            = $1000;
  1516.   {$EXTERNALSYM TBSTYLE_CUSTOMERASE}
  1517.   TBSTYLE_CUSTOMERASE     = $2000;
  1518.   {$EXTERNALSYM TBSTYLE_REGISTERDROP}
  1519.   TBSTYLE_REGISTERDROP    = $4000;
  1520.   {$EXTERNALSYM TBSTYLE_TRANSPARENT}
  1521.   TBSTYLE_TRANSPARENT     = $8000;
  1522.   {$EXTERNALSYM TBSTYLE_EX_DRAWDDARROWS}
  1523.   TBSTYLE_EX_DRAWDDARROWS = $00000001;
  1524.  
  1525. type
  1526.   // Custom Draw Structure
  1527.   {$EXTERNALSYM _NMTBCUSTOMDRAW}
  1528.   _NMTBCUSTOMDRAW = packed record
  1529.     nmcd: TNMCustomDraw;
  1530.     hbrMonoDither: HBRUSH;
  1531.     hbrLines: HBRUSH;                // For drawing lines on buttons
  1532.     hpenLines: HPEN;                 // For drawing lines on buttons
  1533.     clrText: COLORREF;               // Color of text
  1534.     clrMark: COLORREF;               // Color of text bk when marked. (only if TBSTATE_MARKED)
  1535.     clrTextHighlight: COLORREF;      // Color of text when highlighted
  1536.     clrBtnFace: COLORREF;            // Background of the button
  1537.     clrBtnHighlight: COLORREF;       // 3D highlight
  1538.     clrHighlightHotTrack: COLORREF;  // In conjunction with fHighlightHotTrack
  1539.                                      // will cause button to highlight like a menu
  1540.     rcText: TRect;                   // Rect for text
  1541.     nStringBkMode: Integer;
  1542.     nHLStringBkMode: Integer;
  1543.   end;
  1544.   PNMTBCustomDraw = ^TNMTBCustomDraw;
  1545.   TNMTBCustomDraw = _NMTBCUSTOMDRAW;
  1546.  
  1547. const
  1548.   // Toolbar custom draw return flags
  1549.   {$EXTERNALSYM TBCDRF_NOEDGES}
  1550.   TBCDRF_NOEDGES              = $00010000;  // Don't draw button edges
  1551.   {$EXTERNALSYM TBCDRF_HILITEHOTTRACK}
  1552.   TBCDRF_HILITEHOTTRACK       = $00020000;  // Use color of the button bk when hottracked
  1553.   {$EXTERNALSYM TBCDRF_NOOFFSET}
  1554.   TBCDRF_NOOFFSET             = $00040000;  // Don't offset button if pressed
  1555.   {$EXTERNALSYM TBCDRF_NOMARK}
  1556.   TBCDRF_NOMARK               = $00080000;  // Don't draw default highlight of image/text for TBSTATE_MARKED
  1557.   {$EXTERNALSYM TBCDRF_NOETCHEDEFFECT}
  1558.   TBCDRF_NOETCHEDEFFECT       = $00100000;  // Don't draw etched effect for disabled items
  1559.  
  1560.   {$EXTERNALSYM TB_ENABLEBUTTON}
  1561.   TB_ENABLEBUTTON         = WM_USER + 1;
  1562.   {$EXTERNALSYM TB_CHECKBUTTON}
  1563.   TB_CHECKBUTTON          = WM_USER + 2;
  1564.   {$EXTERNALSYM TB_PRESSBUTTON}
  1565.   TB_PRESSBUTTON          = WM_USER + 3;
  1566.   {$EXTERNALSYM TB_HIDEBUTTON}
  1567.   TB_HIDEBUTTON           = WM_USER + 4;
  1568.   {$EXTERNALSYM TB_INDETERMINATE}
  1569.   TB_INDETERMINATE        = WM_USER + 5;
  1570.   {$EXTERNALSYM TB_MARKBUTTON}
  1571.   TB_MARKBUTTON           = WM_USER + 6;
  1572.   {$EXTERNALSYM TB_ISBUTTONENABLED}
  1573.   TB_ISBUTTONENABLED      = WM_USER + 9;
  1574.   {$EXTERNALSYM TB_ISBUTTONCHECKED}
  1575.   TB_ISBUTTONCHECKED      = WM_USER + 10;
  1576.   {$EXTERNALSYM TB_ISBUTTONPRESSED}
  1577.   TB_ISBUTTONPRESSED      = WM_USER + 11;
  1578.   {$EXTERNALSYM TB_ISBUTTONHIDDEN}
  1579.   TB_ISBUTTONHIDDEN       = WM_USER + 12;
  1580.   {$EXTERNALSYM TB_ISBUTTONINDETERMINATE}
  1581.   TB_ISBUTTONINDETERMINATE = WM_USER + 13;
  1582.   {$EXTERNALSYM TB_ISBUTTONHIGHLIGHTED}
  1583.   TB_ISBUTTONHIGHLIGHTED   = WM_USER + 14;
  1584.   {$EXTERNALSYM TB_SETSTATE}
  1585.   TB_SETSTATE             = WM_USER + 17;
  1586.   {$EXTERNALSYM TB_GETSTATE}
  1587.   TB_GETSTATE             = WM_USER + 18;
  1588.   {$EXTERNALSYM TB_ADDBITMAP}
  1589.   TB_ADDBITMAP            = WM_USER + 19;
  1590.  
  1591. type
  1592.   PTBAddBitmap = ^TTBAddBitmap;
  1593.   {$EXTERNALSYM tagTBADDBITMAP}
  1594.   tagTBADDBITMAP = packed record
  1595.     hInst: THandle;
  1596.     nID: UINT;
  1597.   end;
  1598.   TTBAddBitmap = tagTBADDBITMAP;
  1599.   {$EXTERNALSYM TBADDBITMAP}
  1600.   TBADDBITMAP = tagTBADDBITMAP;
  1601.  
  1602. const
  1603.   {$EXTERNALSYM HINST_COMMCTRL}
  1604.   HINST_COMMCTRL = THandle(-1);
  1605.  
  1606.   {$EXTERNALSYM IDB_STD_SMALL_COLOR}
  1607.   IDB_STD_SMALL_COLOR     = 0;
  1608.   {$EXTERNALSYM IDB_STD_LARGE_COLOR}
  1609.   IDB_STD_LARGE_COLOR     = 1;
  1610.   {$EXTERNALSYM IDB_VIEW_SMALL_COLOR}
  1611.   IDB_VIEW_SMALL_COLOR    = 4;
  1612.   {$EXTERNALSYM IDB_VIEW_LARGE_COLOR}
  1613.   IDB_VIEW_LARGE_COLOR    = 5;
  1614.   {$EXTERNALSYM IDB_HIST_SMALL_COLOR}
  1615.   IDB_HIST_SMALL_COLOR    = 8;
  1616.   {$EXTERNALSYM IDB_HIST_LARGE_COLOR}
  1617.   IDB_HIST_LARGE_COLOR    = 9;
  1618.  
  1619. { icon indexes for standard bitmap }
  1620.   {$EXTERNALSYM STD_CUT}
  1621.   STD_CUT                 = 0;
  1622.   {$EXTERNALSYM STD_COPY}
  1623.   STD_COPY                = 1;
  1624.   {$EXTERNALSYM STD_PASTE}
  1625.   STD_PASTE               = 2;
  1626.   {$EXTERNALSYM STD_UNDO}
  1627.   STD_UNDO                = 3;
  1628.   {$EXTERNALSYM STD_REDOW}
  1629.   STD_REDOW               = 4;
  1630.   {$EXTERNALSYM STD_DELETE}
  1631.   STD_DELETE              = 5;
  1632.   {$EXTERNALSYM STD_FILENEW}
  1633.   STD_FILENEW             = 6;
  1634.   {$EXTERNALSYM STD_FILEOPEN}
  1635.   STD_FILEOPEN            = 7;
  1636.   {$EXTERNALSYM STD_FILESAVE}
  1637.   STD_FILESAVE            = 8;
  1638.   {$EXTERNALSYM STD_PRINTPRE}
  1639.   STD_PRINTPRE            = 9;
  1640.   {$EXTERNALSYM STD_PROPERTIES}
  1641.   STD_PROPERTIES          = 10;
  1642.   {$EXTERNALSYM STD_HELP}
  1643.   STD_HELP                = 11;
  1644.   {$EXTERNALSYM STD_FIND}
  1645.   STD_FIND                = 12;
  1646.   {$EXTERNALSYM STD_REPLACE}
  1647.   STD_REPLACE             = 13;
  1648.   {$EXTERNALSYM STD_PRINT}
  1649.   STD_PRINT               = 14;
  1650.  
  1651. { icon indexes for standard view bitmap }
  1652.  
  1653.   {$EXTERNALSYM VIEW_LARGEICONS}
  1654.   VIEW_LARGEICONS         = 0;
  1655.   {$EXTERNALSYM VIEW_SMALLICONS}
  1656.   VIEW_SMALLICONS         = 1;
  1657.   {$EXTERNALSYM VIEW_LIST}
  1658.   VIEW_LIST               = 2;
  1659.   {$EXTERNALSYM VIEW_DETAILS}
  1660.   VIEW_DETAILS            = 3;
  1661.   {$EXTERNALSYM VIEW_SORTNAME}
  1662.   VIEW_SORTNAME           = 4;
  1663.   {$EXTERNALSYM VIEW_SORTSIZE}
  1664.   VIEW_SORTSIZE           = 5;
  1665.   {$EXTERNALSYM VIEW_SORTDATE}
  1666.   VIEW_SORTDATE           = 6;
  1667.   {$EXTERNALSYM VIEW_SORTTYPE}
  1668.   VIEW_SORTTYPE           = 7;
  1669.   {$EXTERNALSYM VIEW_PARENTFOLDER}
  1670.   VIEW_PARENTFOLDER       = 8;
  1671.   {$EXTERNALSYM VIEW_NETCONNECT}
  1672.   VIEW_NETCONNECT         = 9;
  1673.   {$EXTERNALSYM VIEW_NETDISCONNECT}
  1674.   VIEW_NETDISCONNECT      = 10;
  1675.   {$EXTERNALSYM VIEW_NEWFOLDER}
  1676.   VIEW_NEWFOLDER          = 11;
  1677.   {$EXTERNALSYM VIEW_VIEWMENU}
  1678.   VIEW_VIEWMENU           = 12;
  1679.  
  1680. { icon indexes for history bitmap }
  1681.  
  1682.   {$EXTERNALSYM HIST_BACK}
  1683.   HIST_BACK               = 0;
  1684.   {$EXTERNALSYM HIST_FORWARD}
  1685.   HIST_FORWARD            = 1;
  1686.   {$EXTERNALSYM HIST_FAVORITES}
  1687.   HIST_FAVORITES          = 2;
  1688.   {$EXTERNALSYM HIST_ADDTOFAVORITES}
  1689.   HIST_ADDTOFAVORITES     = 3;
  1690.   {$EXTERNALSYM HIST_VIEWTREE}
  1691.   HIST_VIEWTREE           = 4;
  1692.  
  1693.   {$EXTERNALSYM TB_ADDBUTTONSA}
  1694.   TB_ADDBUTTONSA          = WM_USER + 20;
  1695.   {$EXTERNALSYM TB_INSERTBUTTONA}
  1696.   TB_INSERTBUTTONA        = WM_USER + 21;
  1697.   {$EXTERNALSYM TB_DELETEBUTTON}
  1698.   TB_DELETEBUTTON         = WM_USER + 22;
  1699.   {$EXTERNALSYM TB_GETBUTTON}
  1700.   TB_GETBUTTON            = WM_USER + 23;
  1701.   {$EXTERNALSYM TB_BUTTONCOUNT}
  1702.   TB_BUTTONCOUNT          = WM_USER + 24;
  1703.   {$EXTERNALSYM TB_COMMANDTOINDEX}
  1704.   TB_COMMANDTOINDEX       = WM_USER + 25;
  1705.  
  1706. type
  1707.   PTBSaveParamsA = ^TTBSaveParamsA;
  1708.   PTBSaveParamsW = ^TTBSaveParamsW;
  1709.   PTBSaveParams = PTBSaveParamsA;
  1710.   {$EXTERNALSYM tagTBSAVEPARAMSA}
  1711.   tagTBSAVEPARAMSA = packed record
  1712.     hkr: THandle;
  1713.     pszSubKey: PAnsiChar;
  1714.     pszValueName: PAnsiChar;
  1715.   end;
  1716.   {$EXTERNALSYM tagTBSAVEPARAMSW}
  1717.   tagTBSAVEPARAMSW = packed record
  1718.     hkr: THandle;
  1719.     pszSubKey: PWideChar;
  1720.     pszValueName: PWideChar;
  1721.   end;
  1722.   {$EXTERNALSYM tagTBSAVEPARAMS}
  1723.   tagTBSAVEPARAMS = tagTBSAVEPARAMSA;
  1724.   TTBSaveParamsA = tagTBSAVEPARAMSA;
  1725.   TTBSaveParamsW = tagTBSAVEPARAMSW;
  1726.   TTBSaveParams = TTBSaveParamsA;
  1727.   {$EXTERNALSYM TBSAVEPARAMSA}
  1728.   TBSAVEPARAMSA = tagTBSAVEPARAMSA;
  1729.   {$EXTERNALSYM TBSAVEPARAMSW}
  1730.   TBSAVEPARAMSW = tagTBSAVEPARAMSW;
  1731.   {$EXTERNALSYM TBSAVEPARAMS}
  1732.   TBSAVEPARAMS = TBSAVEPARAMSA;
  1733.  
  1734. const
  1735.   {$EXTERNALSYM TB_SAVERESTOREA}
  1736.   TB_SAVERESTOREA          = WM_USER + 26;
  1737.   {$EXTERNALSYM TB_ADDSTRINGA}
  1738.   TB_ADDSTRINGA            = WM_USER + 28;
  1739.   {$EXTERNALSYM TB_GETBUTTONTEXTA}
  1740.   TB_GETBUTTONTEXTA        = WM_USER + 45;
  1741.   {$EXTERNALSYM TBN_GETBUTTONINFOA}
  1742.   TBN_GETBUTTONINFOA       = TBN_FIRST-0;
  1743.  
  1744.   {$EXTERNALSYM TB_SAVERESTOREW}
  1745.   TB_SAVERESTOREW          = WM_USER + 76;
  1746.   {$EXTERNALSYM TB_ADDSTRINGW}
  1747.   TB_ADDSTRINGW            = WM_USER + 77;
  1748.   {$EXTERNALSYM TB_GETBUTTONTEXTW}
  1749.   TB_GETBUTTONTEXTW        = WM_USER + 75;
  1750.   {$EXTERNALSYM TBN_GETBUTTONINFOW}
  1751.   TBN_GETBUTTONINFOW       = TBN_FIRST-20;
  1752.  
  1753.  
  1754.  
  1755.  
  1756.  
  1757.  
  1758.  
  1759.  
  1760.  
  1761.  
  1762.   {$EXTERNALSYM TB_SAVERESTORE}
  1763.   TB_SAVERESTORE          = TB_SAVERESTOREA;
  1764.   {$EXTERNALSYM TB_ADDSTRING}
  1765.   TB_ADDSTRING            = TB_ADDSTRINGA;
  1766.   {$EXTERNALSYM TB_GETBUTTONTEXT}
  1767.   TB_GETBUTTONTEXT        = TB_GETBUTTONTEXTA;
  1768.   {$EXTERNALSYM TBN_GETBUTTONINFO}
  1769.   TBN_GETBUTTONINFO       = TBN_GETBUTTONINFOA;
  1770.  
  1771.   {$EXTERNALSYM TB_CUSTOMIZE}
  1772.   TB_CUSTOMIZE            = WM_USER + 27;
  1773.   {$EXTERNALSYM TB_GETITEMRECT}
  1774.   TB_GETITEMRECT          = WM_USER + 29;
  1775.   {$EXTERNALSYM TB_BUTTONSTRUCTSIZE}
  1776.   TB_BUTTONSTRUCTSIZE     = WM_USER + 30;
  1777.   {$EXTERNALSYM TB_SETBUTTONSIZE}
  1778.   TB_SETBUTTONSIZE        = WM_USER + 31;
  1779.   {$EXTERNALSYM TB_SETBITMAPSIZE}
  1780.   TB_SETBITMAPSIZE        = WM_USER + 32;
  1781.   {$EXTERNALSYM TB_AUTOSIZE}
  1782.   TB_AUTOSIZE             = WM_USER + 33;
  1783.   {$EXTERNALSYM TB_GETTOOLTIPS}
  1784.   TB_GETTOOLTIPS          = WM_USER + 35;
  1785.   {$EXTERNALSYM TB_SETTOOLTIPS}
  1786.   TB_SETTOOLTIPS          = WM_USER + 36;
  1787.   {$EXTERNALSYM TB_SETPARENT}
  1788.   TB_SETPARENT            = WM_USER + 37;
  1789.   {$EXTERNALSYM TB_SETROWS}
  1790.   TB_SETROWS              = WM_USER + 39;
  1791.   {$EXTERNALSYM TB_GETROWS}
  1792.   TB_GETROWS              = WM_USER + 40;
  1793.   {$EXTERNALSYM TB_SETCMDID}
  1794.   TB_SETCMDID             = WM_USER + 42;
  1795.   {$EXTERNALSYM TB_CHANGEBITMAP}
  1796.   TB_CHANGEBITMAP         = WM_USER + 43;
  1797.   {$EXTERNALSYM TB_GETBITMAP}
  1798.   TB_GETBITMAP            = WM_USER + 44;
  1799.   {$EXTERNALSYM TB_REPLACEBITMAP}
  1800.   TB_REPLACEBITMAP        = WM_USER + 46;
  1801.   {$EXTERNALSYM TB_SETINDENT}
  1802.   TB_SETINDENT            = WM_USER + 47;
  1803.   {$EXTERNALSYM TB_SETIMAGELIST}
  1804.   TB_SETIMAGELIST         = WM_USER + 48;
  1805.   {$EXTERNALSYM TB_GETIMAGELIST}
  1806.   TB_GETIMAGELIST         = WM_USER + 49;
  1807.   {$EXTERNALSYM TB_LOADIMAGES}
  1808.   TB_LOADIMAGES           = WM_USER + 50;
  1809.   {$EXTERNALSYM TB_GETRECT}
  1810.   TB_GETRECT              = WM_USER + 51; { wParam is the Cmd instead of index }
  1811.   {$EXTERNALSYM TB_SETHOTIMAGELIST}
  1812.   TB_SETHOTIMAGELIST      = WM_USER + 52;
  1813.   {$EXTERNALSYM TB_GETHOTIMAGELIST}
  1814.   TB_GETHOTIMAGELIST      = WM_USER + 53;
  1815.   {$EXTERNALSYM TB_SETDISABLEDIMAGELIST}
  1816.   TB_SETDISABLEDIMAGELIST = WM_USER + 54;
  1817.   {$EXTERNALSYM TB_GETDISABLEDIMAGELIST}
  1818.   TB_GETDISABLEDIMAGELIST = WM_USER + 55;
  1819.   {$EXTERNALSYM TB_SETSTYLE}
  1820.   TB_SETSTYLE             = WM_USER + 56;
  1821.   {$EXTERNALSYM TB_GETSTYLE}
  1822.   TB_GETSTYLE             = WM_USER + 57;
  1823.   {$EXTERNALSYM TB_GETBUTTONSIZE}
  1824.   TB_GETBUTTONSIZE        = WM_USER + 58;
  1825.   {$EXTERNALSYM TB_SETBUTTONWIDTH}
  1826.   TB_SETBUTTONWIDTH       = WM_USER + 59;
  1827.   {$EXTERNALSYM TB_SETMAXTEXTROWS}
  1828.   TB_SETMAXTEXTROWS       = WM_USER + 60;
  1829.   {$EXTERNALSYM TB_GETTEXTROWS}
  1830.   TB_GETTEXTROWS          = WM_USER + 61;
  1831.  
  1832.   {$EXTERNALSYM TB_GETOBJECT}
  1833.   TB_GETOBJECT            = WM_USER + 62;  // wParam == IID, lParam void **ppv
  1834.   {$EXTERNALSYM TB_GETHOTITEM}
  1835.   TB_GETHOTITEM           = WM_USER + 71;
  1836.   {$EXTERNALSYM TB_SETHOTITEM}
  1837.   TB_SETHOTITEM           = WM_USER + 72;  // wParam == iHotItem
  1838.   {$EXTERNALSYM TB_SETANCHORHIGHLIGHT}
  1839.   TB_SETANCHORHIGHLIGHT   = WM_USER + 73;  // wParam == TRUE/FALSE
  1840.   {$EXTERNALSYM TB_GETANCHORHIGHLIGHT}
  1841.   TB_GETANCHORHIGHLIGHT   = WM_USER + 74;
  1842.   {$EXTERNALSYM TB_MAPACCELERATORA}
  1843.   TB_MAPACCELERATORA      = WM_USER + 78;  // wParam == ch, lParam int * pidBtn
  1844.  
  1845. type
  1846.   {$EXTERNALSYM TBINSERTMARK}
  1847.   TBINSERTMARK = packed record
  1848.     iButton: Integer;
  1849.     dwFlags: DWORD;
  1850.   end;
  1851.   PTBInsertMark = ^TTBInsertMark;
  1852.   TTBInsertMark = TBINSERTMARK;
  1853.  
  1854. const
  1855.   {$EXTERNALSYM TBIMHT_AFTER}
  1856.   TBIMHT_AFTER      = $00000001; // TRUE = insert After iButton, otherwise before
  1857.   {$EXTERNALSYM TBIMHT_BACKGROUND}
  1858.   TBIMHT_BACKGROUND = $00000002; // TRUE iff missed buttons completely
  1859.  
  1860.   {$EXTERNALSYM TB_GETINSERTMARK}
  1861.   TB_GETINSERTMARK        = WM_USER + 79;  // lParam == LPTBINSERTMARK
  1862.   {$EXTERNALSYM TB_SETINSERTMARK}
  1863.   TB_SETINSERTMARK        = WM_USER + 80;  // lParam == LPTBINSERTMARK
  1864.   {$EXTERNALSYM TB_INSERTMARKHITTEST}
  1865.   TB_INSERTMARKHITTEST    = WM_USER + 81;  // wParam == LPPOINT lParam == LPTBINSERTMARK
  1866.   {$EXTERNALSYM TB_MOVEBUTTON}
  1867.   TB_MOVEBUTTON           = WM_USER + 82;
  1868.   {$EXTERNALSYM TB_GETMAXSIZE}
  1869.   TB_GETMAXSIZE           = WM_USER + 83;  // lParam == LPSIZE
  1870.   {$EXTERNALSYM TB_SETEXTENDEDSTYLE}
  1871.   TB_SETEXTENDEDSTYLE     = WM_USER + 84;  // For TBSTYLE_EX_*
  1872.   {$EXTERNALSYM TB_GETEXTENDEDSTYLE}
  1873.   TB_GETEXTENDEDSTYLE     = WM_USER + 85;  // For TBSTYLE_EX_*
  1874.   {$EXTERNALSYM TB_GETPADDING}
  1875.   TB_GETPADDING           = WM_USER + 86;
  1876.   {$EXTERNALSYM TB_SETPADDING}
  1877.   TB_SETPADDING           = WM_USER + 87;
  1878.   {$EXTERNALSYM TB_SETINSERTMARKCOLOR}
  1879.   TB_SETINSERTMARKCOLOR   = WM_USER + 88;
  1880.   {$EXTERNALSYM TB_GETINSERTMARKCOLOR}
  1881.   TB_GETINSERTMARKCOLOR   = WM_USER + 89;
  1882.  
  1883.   {$EXTERNALSYM TB_SETCOLORSCHEME}
  1884.   TB_SETCOLORSCHEME       = CCM_SETCOLORSCHEME;  // lParam is color scheme
  1885.   {$EXTERNALSYM TB_GETCOLORSCHEME}
  1886.   TB_GETCOLORSCHEME       = CCM_GETCOLORSCHEME;    // fills in COLORSCHEME pointed to by lParam
  1887.  
  1888.   {$EXTERNALSYM TB_SETUNICODEFORMAT}
  1889.   TB_SETUNICODEFORMAT     = CCM_SETUNICODEFORMAT;
  1890.   {$EXTERNALSYM TB_GETUNICODEFORMAT}
  1891.   TB_GETUNICODEFORMAT     = CCM_GETUNICODEFORMAT;
  1892.  
  1893.   {$EXTERNALSYM TB_MAPACCELERATORW}
  1894.   TB_MAPACCELERATORW      = WM_USER + 90;  // wParam == ch, lParam int * pidBtn
  1895.  
  1896.  
  1897.  
  1898.   {$EXTERNALSYM TB_MAPACCELERATOR}
  1899.   TB_MAPACCELERATOR       = TB_MAPACCELERATORA;
  1900.  
  1901. type
  1902.   {$EXTERNALSYM TBREPLACEBITMAP}
  1903.   TBREPLACEBITMAP = packed record
  1904.     hInstOld: THandle;
  1905.     nIDOld: Cardinal;
  1906.     hInstNew: THandle;
  1907.     nIDNew: Cardinal;
  1908.     nButtons: Integer;
  1909.   end;
  1910.   PTBReplaceBitmap = ^TTBReplaceBitmap;
  1911.   TTBReplaceBitmap = TBREPLACEBITMAP;
  1912.  
  1913. const  
  1914.   {$EXTERNALSYM TBBF_LARGE}
  1915.   TBBF_LARGE              = $0001;
  1916.  
  1917.   {$EXTERNALSYM TB_GETBITMAPFLAGS}
  1918.   TB_GETBITMAPFLAGS       = WM_USER + 41;
  1919.  
  1920.   {$EXTERNALSYM TBIF_IMAGE}
  1921.   TBIF_IMAGE              = $00000001;
  1922.   {$EXTERNALSYM TBIF_TEXT}
  1923.   TBIF_TEXT               = $00000002;
  1924.   {$EXTERNALSYM TBIF_STATE}
  1925.   TBIF_STATE              = $00000004;
  1926.   {$EXTERNALSYM TBIF_STYLE}
  1927.   TBIF_STYLE              = $00000008;
  1928.   {$EXTERNALSYM TBIF_LPARAM}
  1929.   TBIF_LPARAM             = $00000010;
  1930.   {$EXTERNALSYM TBIF_COMMAND}
  1931.   TBIF_COMMAND            = $00000020;
  1932.   {$EXTERNALSYM TBIF_SIZE}
  1933.   TBIF_SIZE               = $00000040;
  1934.  
  1935. type
  1936.   {$EXTERNALSYM TBBUTTONINFOA}
  1937.   TBBUTTONINFOA = packed record
  1938.     cbSize: UINT;
  1939.     dwMask: DWORD;
  1940.     idCommand: Integer;
  1941.     iImage: Integer;
  1942.     fsState: Byte;
  1943.     fsStyle: Byte;
  1944.     cx: Word;
  1945.     lParam: DWORD;
  1946.     pszText: PAnsiChar;
  1947.     cchText: Integer;
  1948.   end;
  1949.   {$EXTERNALSYM TBBUTTONINFOW}
  1950.   TBBUTTONINFOW = packed record
  1951.     cbSize: UINT;
  1952.     dwMask: DWORD;
  1953.     idCommand: Integer;
  1954.     iImage: Integer;
  1955.     fsState: Byte;
  1956.     fsStyle: Byte;
  1957.     cx: Word;
  1958.     lParam: DWORD;
  1959.     pszText: PWideChar;
  1960.     cchText: Integer;
  1961.   end;
  1962.   {$EXTERNALSYM TBBUTTONINFO}
  1963.   TBBUTTONINFO = TBBUTTONINFOA;
  1964.   PTBButtonInfoA = ^TTBButtonInfoA;
  1965.   PTBButtonInfoW = ^TTBButtonInfoW;
  1966.   PTBButtonInfo = PTBButtonInfoA;
  1967.   TTBButtonInfoA = TBBUTTONINFOA;
  1968.   TTBButtonInfoW = TBBUTTONINFOW;
  1969.   TTBButtonInfo = TTBButtonInfoA;
  1970.  
  1971. const
  1972.   // BUTTONINFO APIs do NOT support the string pool.
  1973.   {$EXTERNALSYM TB_GETBUTTONINFOW}
  1974.   TB_GETBUTTONINFOW        = WM_USER + 63;
  1975.   {$EXTERNALSYM TB_SETBUTTONINFOW}
  1976.   TB_SETBUTTONINFOW        = WM_USER + 64;
  1977.   {$EXTERNALSYM TB_GETBUTTONINFOA}
  1978.   TB_GETBUTTONINFOA        = WM_USER + 65;
  1979.   {$EXTERNALSYM TB_SETBUTTONINFOA}
  1980.   TB_SETBUTTONINFOA        = WM_USER + 66;
  1981.  
  1982.  
  1983.  
  1984.  
  1985.  
  1986.   {$EXTERNALSYM TB_GETBUTTONINFO}
  1987.   TB_GETBUTTONINFO         = TB_GETBUTTONINFOA;
  1988.   {$EXTERNALSYM TB_SETBUTTONINFO}
  1989.   TB_SETBUTTONINFO         = TB_SETBUTTONINFOA;
  1990.  
  1991.   {$EXTERNALSYM TB_INSERTBUTTONW}
  1992.   TB_INSERTBUTTONW        = WM_USER + 67;
  1993.   {$EXTERNALSYM TB_ADDBUTTONSW}
  1994.   TB_ADDBUTTONSW          = WM_USER + 68;
  1995.  
  1996.   {$EXTERNALSYM TB_HITTEST}
  1997.   TB_HITTEST              = WM_USER + 69;
  1998.  
  1999.   // New post Win95/NT4 for InsertButton and AddButton.  if iString member
  2000.   // is a pointer to a string, it will be handled as a string like listview
  2001.   // = although LPSTR_TEXTCALLBACK is not supported;.
  2002.  
  2003.  
  2004.  
  2005.  
  2006.  
  2007.   {$EXTERNALSYM TB_INSERTBUTTON}
  2008.   TB_INSERTBUTTON         = TB_INSERTBUTTONA;
  2009.   {$EXTERNALSYM TB_ADDBUTTONS}
  2010.   TB_ADDBUTTONS           = TB_ADDBUTTONSA;
  2011.  
  2012.   {$EXTERNALSYM TB_SETDRAWTEXTFLAGS}
  2013.   TB_SETDRAWTEXTFLAGS     = WM_USER + 70;  // wParam == mask lParam == bit values
  2014.  
  2015.   {$EXTERNALSYM TBN_BEGINDRAG}
  2016.   TBN_BEGINDRAG           = TBN_FIRST-1;
  2017.   {$EXTERNALSYM TBN_ENDDRAG}
  2018.   TBN_ENDDRAG             = TBN_FIRST-2;
  2019.   {$EXTERNALSYM TBN_BEGINADJUST}
  2020.   TBN_BEGINADJUST         = TBN_FIRST-3;
  2021.   {$EXTERNALSYM TBN_ENDADJUST}
  2022.   TBN_ENDADJUST           = TBN_FIRST-4;
  2023.   {$EXTERNALSYM TBN_RESET}
  2024.   TBN_RESET               = TBN_FIRST-5;
  2025.   {$EXTERNALSYM TBN_QUERYINSERT}
  2026.   TBN_QUERYINSERT         = TBN_FIRST-6;
  2027.   {$EXTERNALSYM TBN_QUERYDELETE}
  2028.   TBN_QUERYDELETE         = TBN_FIRST-7;
  2029.   {$EXTERNALSYM TBN_TOOLBARCHANGE}
  2030.   TBN_TOOLBARCHANGE       = TBN_FIRST-8;
  2031.   {$EXTERNALSYM TBN_CUSTHELP}
  2032.   TBN_CUSTHELP            = TBN_FIRST-9;
  2033.   {$EXTERNALSYM TBN_DROPDOWN}
  2034.   TBN_DROPDOWN            = TBN_FIRST-10;
  2035.   {$EXTERNALSYM TBN_CLOSEUP}
  2036.   TBN_CLOSEUP             = TBN_FIRST-11;
  2037.   {$EXTERNALSYM TBN_GETOBJECT}
  2038.   TBN_GETOBJECT           = TBN_FIRST-12;
  2039.  
  2040. type
  2041.   // Structure for TBN_HOTITEMCHANGE notification
  2042.   {$EXTERNALSYM tagNMTBHOTITEM}
  2043.   tagNMTBHOTITEM = packed record
  2044.     hdr: TNMHdr;
  2045.     idOld: Integer;
  2046.     idNew: Integer;
  2047.     dwFlags: DWORD;           // HICF_*
  2048.   end;
  2049.   PNMTBHotItem = ^TNMTBHotItem;
  2050.   TNMTBHotItem = tagNMTBHOTITEM;
  2051.  
  2052. const
  2053.   // Hot item change flags
  2054.   {$EXTERNALSYM HICF_OTHER}
  2055.   HICF_OTHER          = $00000000;
  2056.   {$EXTERNALSYM HICF_MOUSE}
  2057.   HICF_MOUSE          = $00000001;          // Triggered by mouse
  2058.   {$EXTERNALSYM HICF_ARROWKEYS}
  2059.   HICF_ARROWKEYS      = $00000002;          // Triggered by arrow keys
  2060.   {$EXTERNALSYM HICF_ACCELERATOR}
  2061.   HICF_ACCELERATOR    = $00000004;          // Triggered by accelerator
  2062.   {$EXTERNALSYM HICF_DUPACCEL}
  2063.   HICF_DUPACCEL       = $00000008;          // This accelerator is not unique
  2064.   {$EXTERNALSYM HICF_ENTERING}
  2065.   HICF_ENTERING       = $00000010;          // idOld is invalid
  2066.   {$EXTERNALSYM HICF_LEAVING}
  2067.   HICF_LEAVING        = $00000020;          // idNew is invalid
  2068.   {$EXTERNALSYM HICF_RESELECT}
  2069.   HICF_RESELECT       = $00000040;          // hot item reselected
  2070.  
  2071.   {$EXTERNALSYM TBN_HOTITEMCHANGE}
  2072.   TBN_HOTITEMCHANGE       = TBN_FIRST - 13;
  2073.   {$EXTERNALSYM TBN_DRAGOUT}
  2074.   TBN_DRAGOUT             = TBN_FIRST - 14; // this is sent when the user clicks down on a button then drags off the button
  2075.   {$EXTERNALSYM TBN_DELETINGBUTTON}
  2076.   TBN_DELETINGBUTTON      = TBN_FIRST - 15; // uses TBNOTIFY
  2077.   {$EXTERNALSYM TBN_GETDISPINFOA}
  2078.   TBN_GETDISPINFOA        = TBN_FIRST - 16; // This is sent when the  toolbar needs  some display information
  2079.   {$EXTERNALSYM TBN_GETDISPINFOW}
  2080.   TBN_GETDISPINFOW        = TBN_FIRST - 17; // This is sent when the  toolbar needs  some display information
  2081.   {$EXTERNALSYM TBN_GETINFOTIPA}
  2082.   TBN_GETINFOTIPA         = TBN_FIRST - 18;
  2083.   {$EXTERNALSYM TBN_GETINFOTIPW}
  2084.   TBN_GETINFOTIPW         = TBN_FIRST - 19;
  2085.  
  2086. type
  2087.   {$EXTERNALSYM tagNMTBGETINFOTIPA}
  2088.   tagNMTBGETINFOTIPA = packed record
  2089.     hdr: TNMHdr;
  2090.     pszText: PAnsiChar;
  2091.     cchTextMax: Integer;
  2092.     iItem: Integer;
  2093.     lParam: LPARAM;
  2094.   end;
  2095.   {$EXTERNALSYM tagNMTBGETINFOTIPW}
  2096.   tagNMTBGETINFOTIPW = packed record
  2097.     hdr: TNMHdr;
  2098.     pszText: PWideChar;
  2099.     cchTextMax: Integer;
  2100.     iItem: Integer;
  2101.     lParam: LPARAM;
  2102.   end;
  2103.   {$EXTERNALSYM tagNMTBGETINFOTIP}
  2104.   tagNMTBGETINFOTIP = tagNMTBGETINFOTIPA;
  2105.   PNMTBGetInfoTipA = ^TNMTBGetInfoTipA;
  2106.   PNMTBGetInfoTipW = ^TNMTBGetInfoTipW;
  2107.   PNMTBGetInfoTip = PNMTBGetInfoTipA;
  2108.   TNMTBGetInfoTipA = tagNMTBGETINFOTIPA;
  2109.   TNMTBGetInfoTipW = tagNMTBGETINFOTIPW;
  2110.   TNMTBGetInfoTip = TNMTBGetInfoTipA;
  2111.  
  2112. const
  2113.   {$EXTERNALSYM TBNF_IMAGE}
  2114.   TBNF_IMAGE              = $00000001;
  2115.   {$EXTERNALSYM TBNF_TEXT}
  2116.   TBNF_TEXT               = $00000002;
  2117.   {$EXTERNALSYM TBNF_DI_SETITEM}
  2118.   TBNF_DI_SETITEM         = $10000000;
  2119.  
  2120. type
  2121.   {$EXTERNALSYM NMTBDISPINFOA}
  2122.   NMTBDISPINFOA = packed record
  2123.     hdr: TNMHdr;
  2124.     dwMask: DWORD;      // [in] Specifies the values requested .[out] Client ask the data to be set for future use
  2125.     idCommand: Integer; // [in] id of button we're requesting info for
  2126.     lParam: DWORD;      // [in] lParam of button
  2127.     iImage: Integer;    // [out] image index
  2128.     pszText: PAnsiChar;    // [out] new text for item
  2129.     cchText: Integer;   // [in] size of buffer pointed to by pszText
  2130.   end;
  2131.   {$EXTERNALSYM NMTBDISPINFOW}
  2132.   NMTBDISPINFOW = packed record
  2133.     hdr: TNMHdr;
  2134.     dwMask: DWORD;      // [in] Specifies the values requested .[out] Client ask the data to be set for future use
  2135.     idCommand: Integer; // [in] id of button we're requesting info for
  2136.     lParam: DWORD;      // [in] lParam of button
  2137.     iImage: Integer;    // [out] image index
  2138.     pszText: PWideChar;    // [out] new text for item
  2139.     cchText: Integer;   // [in] size of buffer pointed to by pszText
  2140.   end;
  2141.   {$EXTERNALSYM NMTBDISPINFO}
  2142.   NMTBDISPINFO = NMTBDISPINFOA;
  2143.   PNMTBDispInfoA = ^TNMTBDispInfoA;
  2144.   PNMTBDispInfoW = ^TNMTBDispInfoW;
  2145.   PNMTBDispInfo = PNMTBDispInfoA;
  2146.   TNMTBDispInfoA = NMTBDISPINFOA;
  2147.   TNMTBDispInfoW = NMTBDISPINFOW;
  2148.   TNMTBDispInfo = TNMTBDispInfoA;
  2149.  
  2150. const
  2151.   // Return codes for TBN_DROPDOWN
  2152.   {$EXTERNALSYM TBDDRET_DEFAULT}
  2153.   TBDDRET_DEFAULT         = 0;
  2154.   {$EXTERNALSYM TBDDRET_NODEFAULT}
  2155.   TBDDRET_NODEFAULT       = 1;
  2156.   {$EXTERNALSYM TBDDRET_TREATPRESSED}
  2157.   TBDDRET_TREATPRESSED    = 2;       // Treat as a standard press button
  2158.  
  2159. type
  2160.   {$EXTERNALSYM tagNMTOOLBARA}
  2161.   tagNMTOOLBARA = packed record
  2162.     hdr: TNMHdr;
  2163.     iItem: Integer;
  2164.     tbButton: TTBButton;
  2165.     cchText: Integer;
  2166.     pszText: PAnsiChar;
  2167.   end;
  2168.   {$EXTERNALSYM tagNMTOOLBARW}
  2169.   tagNMTOOLBARW = packed record
  2170.     hdr: TNMHdr;
  2171.     iItem: Integer;
  2172.     tbButton: TTBButton;
  2173.     cchText: Integer;
  2174.     pszText: PWideChar;
  2175.   end;
  2176.   {$EXTERNALSYM tagNMTOOLBAR}
  2177.   tagNMTOOLBAR = tagNMTOOLBARA;
  2178.   PNMToolBarA = ^TNMToolBarA;
  2179.   PNMToolBarW = ^TNMToolBarW;
  2180.   PNMToolBar = PNMToolBarA;
  2181.   TNMToolBarA = tagNMTOOLBARA;
  2182.   TNMToolBarW = tagNMTOOLBARW;
  2183.   TNMToolBar = TNMToolBarA;
  2184.  
  2185. { ====== REBAR CONTROL =================== }
  2186.  
  2187. const
  2188.   {$EXTERNALSYM REBARCLASSNAME}
  2189.   REBARCLASSNAME = 'ReBarWindow32';
  2190.  
  2191. type
  2192.   {$EXTERNALSYM tagREBARINFO}
  2193.   tagREBARINFO = packed record
  2194.     cbSize: UINT;
  2195.     fMask: UINT;
  2196.     himl: HIMAGELIST;
  2197.   end;
  2198.   PReBarInfo = ^TReBarInfo;
  2199.   TReBarInfo = tagREBARINFO;
  2200.  
  2201. const
  2202.   {$EXTERNALSYM RBIM_IMAGELIST}
  2203.   RBIM_IMAGELIST    = $00000001;
  2204.  
  2205.   {$EXTERNALSYM RBS_TOOLTIPS}
  2206.   RBS_TOOLTIPS      = $00000100;
  2207.   {$EXTERNALSYM RBS_VARHEIGHT}
  2208.   RBS_VARHEIGHT     = $00000200;
  2209.   {$EXTERNALSYM RBS_BANDBORDERS}
  2210.   RBS_BANDBORDERS   = $00000400;
  2211.   {$EXTERNALSYM RBS_FIXEDORDER}
  2212.   RBS_FIXEDORDER    = $00000800;
  2213.  
  2214.   {$EXTERNALSYM RBS_REGISTERDROP}
  2215.   RBS_REGISTERDROP  = $00001000;
  2216.   {$EXTERNALSYM RBS_AUTOSIZE}
  2217.   RBS_AUTOSIZE      = $00002000;
  2218.   {$EXTERNALSYM RBS_VERTICALGRIPPER}
  2219.   RBS_VERTICALGRIPPER = $00004000;  // this always has the vertical gripper (default for horizontal mode)
  2220.   {$EXTERNALSYM RBS_DBLCLKTOGGLE}
  2221.   RBS_DBLCLKTOGGLE  = $00008000;
  2222.  
  2223.   {$EXTERNALSYM RBBS_BREAK}
  2224.   RBBS_BREAK        = $00000001;  // break to new line
  2225.   {$EXTERNALSYM RBBS_FIXEDSIZE}
  2226.   RBBS_FIXEDSIZE    = $00000002;  // band can't be sized
  2227.   {$EXTERNALSYM RBBS_CHILDEDGE}
  2228.   RBBS_CHILDEDGE    = $00000004;  // edge around top and bottom of child window
  2229.   {$EXTERNALSYM RBBS_HIDDEN}
  2230.   RBBS_HIDDEN       = $00000008;  // don't show
  2231.   {$EXTERNALSYM RBBS_NOVERT}
  2232.   RBBS_NOVERT       = $00000010;  // don't show when vertical
  2233.   {$EXTERNALSYM RBBS_FIXEDBMP}
  2234.   RBBS_FIXEDBMP     = $00000020;  // bitmap doesn't move during band resize
  2235.   {$EXTERNALSYM RBBS_VARIABLEHEIGHT}
  2236.   RBBS_VARIABLEHEIGHT = $00000040;  // allow autosizing of this child vertically
  2237.   {$EXTERNALSYM RBBS_GRIPPERALWAYS}
  2238.   RBBS_GRIPPERALWAYS  = $00000080;  // always show the gripper
  2239.   {$EXTERNALSYM RBBS_NOGRIPPER}
  2240.   RBBS_NOGRIPPER      = $00000100;  // never show the gripper
  2241.  
  2242.   {$EXTERNALSYM RBBIM_STYLE}
  2243.   RBBIM_STYLE       = $00000001;
  2244.   {$EXTERNALSYM RBBIM_COLORS}
  2245.   RBBIM_COLORS      = $00000002;
  2246.   {$EXTERNALSYM RBBIM_TEXT}
  2247.   RBBIM_TEXT        = $00000004;
  2248.   {$EXTERNALSYM RBBIM_IMAGE}
  2249.   RBBIM_IMAGE       = $00000008;
  2250.   {$EXTERNALSYM RBBIM_CHILD}
  2251.   RBBIM_CHILD       = $00000010;
  2252.   {$EXTERNALSYM RBBIM_CHILDSIZE}
  2253.   RBBIM_CHILDSIZE   = $00000020;
  2254.   {$EXTERNALSYM RBBIM_SIZE}
  2255.   RBBIM_SIZE        = $00000040;
  2256.   {$EXTERNALSYM RBBIM_BACKGROUND}
  2257.   RBBIM_BACKGROUND  = $00000080;
  2258.   {$EXTERNALSYM RBBIM_ID}
  2259.   RBBIM_ID          = $00000100;
  2260.   {$EXTERNALSYM RBBIM_IDEALSIZE}
  2261.   RBBIM_IDEALSIZE     = $00000200;
  2262.   {$EXTERNALSYM RBBIM_LPARAM}
  2263.   RBBIM_LPARAM        = $00000400;
  2264.   {$EXTERNALSYM RBBIM_HEADERSIZE}
  2265.   RBBIM_HEADERSIZE    = $00000800;  // control the size of the header
  2266.  
  2267. type
  2268.   {$EXTERNALSYM tagREBARBANDINFOA}
  2269.   tagREBARBANDINFOA = packed record
  2270.     cbSize: UINT;
  2271.     fMask: UINT;
  2272.     fStyle: UINT;
  2273.     clrFore: TColorRef;
  2274.     clrBack: TColorRef;
  2275.     lpText: PAnsiChar;
  2276.     cch: UINT;
  2277.     iImage: Integer;
  2278.     hwndChild: HWnd;
  2279.     cxMinChild: UINT;
  2280.     cyMinChild: UINT;
  2281.     cx: UINT;
  2282.     hbmBack: HBitmap;
  2283.     wID: UINT;
  2284.     cyChild: UINT;
  2285.     cyMaxChild: UINT;
  2286.     cyIntegral: UINT;
  2287.     cxIdeal: UINT;
  2288.     lParam: LPARAM;
  2289.     cxHeader: UINT;
  2290.   end;
  2291.   {$EXTERNALSYM tagREBARBANDINFOW}
  2292.   tagREBARBANDINFOW = packed record
  2293.     cbSize: UINT;
  2294.     fMask: UINT;
  2295.     fStyle: UINT;
  2296.     clrFore: TColorRef;
  2297.     clrBack: TColorRef;
  2298.     lpText: PWideChar;
  2299.     cch: UINT;
  2300.     iImage: Integer;
  2301.     hwndChild: HWnd;
  2302.     cxMinChild: UINT;
  2303.     cyMinChild: UINT;
  2304.     cx: UINT;
  2305.     hbmBack: HBitmap;
  2306.     wID: UINT;
  2307.     cyChild: UINT;
  2308.     cyMaxChild: UINT;
  2309.     cyIntegral: UINT;
  2310.     cxIdeal: UINT;
  2311.     lParam: LPARAM;
  2312.     cxHeader: UINT;
  2313.   end;
  2314.   {$EXTERNALSYM tagREBARBANDINFO}
  2315.   tagREBARBANDINFO = tagREBARBANDINFOA;
  2316.   PReBarBandInfoA = ^TReBarBandInfoA;
  2317.   PReBarBandInfoW = ^TReBarBandInfoW;
  2318.   PReBarBandInfo = PReBarBandInfoA;
  2319.   TReBarBandInfoA = tagREBARBANDINFOA;
  2320.   TReBarBandInfoW = tagREBARBANDINFOW;
  2321.   TReBarBandInfo = TReBarBandInfoA;
  2322.  
  2323. const
  2324.   {$EXTERNALSYM RB_INSERTBANDA}
  2325.   RB_INSERTBANDA     = WM_USER +  1;
  2326.   {$EXTERNALSYM RB_DELETEBAND}
  2327.   RB_DELETEBAND      = WM_USER +  2;
  2328.   {$EXTERNALSYM RB_GETBARINFO}
  2329.   RB_GETBARINFO      = WM_USER +  3;
  2330.   {$EXTERNALSYM RB_SETBARINFO}
  2331.   RB_SETBARINFO      = WM_USER +  4;
  2332.   RB_GETBANDINFO_PRE_IE4     = WM_USER +  5;
  2333.   {$EXTERNALSYM RB_SETBANDINFOA}
  2334.   RB_SETBANDINFOA    = WM_USER +  6;
  2335.   {$EXTERNALSYM RB_SETPARENT}
  2336.   RB_SETPARENT       = WM_USER +  7;
  2337.   {$EXTERNALSYM RB_HITTEST}
  2338.   RB_HITTEST         = WM_USER +  8;
  2339.   {$EXTERNALSYM RB_GETRECT}
  2340.   RB_GETRECT         = WM_USER +  9;
  2341.   {$EXTERNALSYM RB_INSERTBANDW}
  2342.   RB_INSERTBANDW     = WM_USER +  10;
  2343.   {$EXTERNALSYM RB_SETBANDINFOW}
  2344.   RB_SETBANDINFOW    = WM_USER +  11;
  2345.   {$EXTERNALSYM RB_GETBANDCOUNT}
  2346.   RB_GETBANDCOUNT    = WM_USER +  12;
  2347.   {$EXTERNALSYM RB_GETROWCOUNT}
  2348.   RB_GETROWCOUNT     = WM_USER +  13;
  2349.   {$EXTERNALSYM RB_GETROWHEIGHT}
  2350.   RB_GETROWHEIGHT    = WM_USER +  14;
  2351.   {$EXTERNALSYM RB_IDTOINDEX}
  2352.   RB_IDTOINDEX       = WM_USER +  16; // wParam == id
  2353.   {$EXTERNALSYM RB_GETTOOLTIPS}
  2354.   RB_GETTOOLTIPS     = WM_USER +  17;
  2355.   {$EXTERNALSYM RB_SETTOOLTIPS}
  2356.   RB_SETTOOLTIPS     = WM_USER +  18;
  2357.   {$EXTERNALSYM RB_SETBKCOLOR}
  2358.   RB_SETBKCOLOR      = WM_USER +  19; // sets the default BK color
  2359.   {$EXTERNALSYM RB_GETBKCOLOR}
  2360.   RB_GETBKCOLOR      = WM_USER +  20; // defaults to CLR_NONE
  2361.   {$EXTERNALSYM RB_SETTEXTCOLOR}
  2362.   RB_SETTEXTCOLOR    = WM_USER +  21;
  2363.   {$EXTERNALSYM RB_GETTEXTCOLOR}
  2364.   RB_GETTEXTCOLOR    = WM_USER +  22; // defaults to 0x00000000
  2365.   {$EXTERNALSYM RB_SIZETORECT}
  2366.   RB_SIZETORECT      = WM_USER +  23; // resize the rebar/break bands and such to this rect (lparam;
  2367.  
  2368.   // for manual drag control
  2369.   // lparam == cursor pos
  2370.         // -1 means do it yourself.
  2371.         // -2 means use what you had saved before
  2372.   {$EXTERNALSYM RB_BEGINDRAG}
  2373.   RB_BEGINDRAG    = WM_USER + 24;
  2374.   {$EXTERNALSYM RB_ENDDRAG}
  2375.   RB_ENDDRAG      = WM_USER + 25;
  2376.   {$EXTERNALSYM RB_DRAGMOVE}
  2377.   RB_DRAGMOVE     = WM_USER + 26;
  2378.   {$EXTERNALSYM RB_GETBARHEIGHT}
  2379.   RB_GETBARHEIGHT = WM_USER + 27;
  2380.   {$EXTERNALSYM RB_GETBANDINFOW}
  2381.   RB_GETBANDINFOW = WM_USER + 28;
  2382.   {$EXTERNALSYM RB_GETBANDINFOA}
  2383.   RB_GETBANDINFOA = WM_USER + 29;
  2384.  
  2385.   {$EXTERNALSYM RB_MINIMIZEBAND}
  2386.   RB_MINIMIZEBAND = WM_USER + 30;
  2387.   {$EXTERNALSYM RB_MAXIMIZEBAND}
  2388.   RB_MAXIMIZEBAND = WM_USER + 31;
  2389.  
  2390.   {$EXTERNALSYM RB_GETDROPTARGET}
  2391.   RB_GETDROPTARGET = CCM_GETDROPTARGET;
  2392.  
  2393.   {$EXTERNALSYM RB_GETBANDBORDERS}
  2394.   RB_GETBANDBORDERS = WM_USER + 34;  // returns in lparam = lprc the amount of edges added to band wparam
  2395.  
  2396.   {$EXTERNALSYM RB_SHOWBAND}
  2397.   RB_SHOWBAND     = WM_USER + 35;      // show/hide band
  2398.   {$EXTERNALSYM RB_SETPALETTE}
  2399.   RB_SETPALETTE   = WM_USER + 37;
  2400.   {$EXTERNALSYM RB_GETPALETTE}
  2401.   RB_GETPALETTE   = WM_USER + 38;
  2402.   {$EXTERNALSYM RB_MOVEBAND}
  2403.   RB_MOVEBAND     = WM_USER + 39;
  2404.  
  2405.   {$EXTERNALSYM RB_SETUNICODEFORMAT}
  2406.   RB_SETUNICODEFORMAT     = CCM_SETUNICODEFORMAT;
  2407.   {$EXTERNALSYM RB_GETUNICODEFORMAT}
  2408.   RB_GETUNICODEFORMAT     = CCM_GETUNICODEFORMAT;
  2409.  
  2410.  
  2411.  
  2412.  
  2413.  
  2414.  
  2415.  
  2416.  
  2417.   {$EXTERNALSYM RB_INSERTBAND}
  2418.   RB_INSERTBAND      = RB_INSERTBANDA;
  2419.   {$EXTERNALSYM RB_SETBANDINFO}
  2420.   RB_SETBANDINFO     = RB_SETBANDINFOA;
  2421.   {$EXTERNALSYM RB_GETBANDINFO}
  2422.   RB_GETBANDINFO     = RB_GETBANDINFOA;
  2423.  
  2424.   {$EXTERNALSYM RBN_HEIGHTCHANGE}
  2425.   RBN_HEIGHTCHANGE   = RBN_FIRST - 0;
  2426.  
  2427.   {$EXTERNALSYM RBN_GETOBJECT}
  2428.   RBN_GETOBJECT       = RBN_FIRST - 1;
  2429.   {$EXTERNALSYM RBN_LAYOUTCHANGED}
  2430.   RBN_LAYOUTCHANGED   = RBN_FIRST - 2;
  2431.   {$EXTERNALSYM RBN_AUTOSIZE}
  2432.   RBN_AUTOSIZE        = RBN_FIRST - 3;
  2433.   {$EXTERNALSYM RBN_BEGINDRAG}
  2434.   RBN_BEGINDRAG       = RBN_FIRST - 4;
  2435.   {$EXTERNALSYM RBN_ENDDRAG}
  2436.   RBN_ENDDRAG         = RBN_FIRST - 5;
  2437.   {$EXTERNALSYM RBN_DELETINGBAND}
  2438.   RBN_DELETINGBAND    = RBN_FIRST - 6;     // Uses NMREBAR
  2439.   {$EXTERNALSYM RBN_DELETEDBAND}
  2440.   RBN_DELETEDBAND     = RBN_FIRST - 7;     // Uses NMREBAR
  2441.   {$EXTERNALSYM RBN_CHILDSIZE}
  2442.   RBN_CHILDSIZE       = RBN_FIRST - 8;
  2443.  
  2444. type
  2445.   {$EXTERNALSYM tagNMREBARCHILDSIZE}
  2446.   tagNMREBARCHILDSIZE = packed record
  2447.     hdr: TNMHdr;
  2448.     uBand: UINT;
  2449.     wID: UINT;
  2450.     rcChild: TRect;
  2451.     rcBand: TRect;
  2452.   end;
  2453.   PNMReBarChildSize = ^TNMReBarChildSize;
  2454.   TNMReBarChildSize = tagNMREBARCHILDSIZE;
  2455.  
  2456.   {$EXTERNALSYM tagNMREBAR}
  2457.   tagNMREBAR = packed record
  2458.     hdr: TNMHdr;
  2459.     dwMask: DWORD;           // RBNM_*
  2460.     uBand: UINT;
  2461.     fStyle: UINT;
  2462.     wID: UINT;
  2463.     lParam: LPARAM;
  2464.   end;
  2465.   PNMReBar = ^TNMReBar;
  2466.   TNMReBar = tagNMREBAR;
  2467.  
  2468. const
  2469.   // Mask flags for NMREBAR
  2470.   {$EXTERNALSYM RBNM_ID}
  2471.   RBNM_ID         = $00000001;
  2472.   {$EXTERNALSYM RBNM_STYLE}
  2473.   RBNM_STYLE      = $00000002;
  2474.   {$EXTERNALSYM RBNM_LPARAM}
  2475.   RBNM_LPARAM     = $00000004;
  2476.  
  2477. type
  2478.   {$EXTERNALSYM tagNMRBAUTOSIZE}
  2479.   tagNMRBAUTOSIZE = packed record
  2480.     hdr: TNMHdr;
  2481.     fChanged: BOOL;
  2482.     rcTarget: TRect;
  2483.     rcActual: TRect;
  2484.   end;
  2485.   PNMRBAutoSize = ^TNMRBAutoSize;
  2486.   TNMRBAutoSize = tagNMRBAUTOSIZE;
  2487.  
  2488. const
  2489.   {$EXTERNALSYM RBHT_NOWHERE}
  2490.   RBHT_NOWHERE    = $0001;
  2491.   {$EXTERNALSYM RBHT_CAPTION}
  2492.   RBHT_CAPTION    = $0002;
  2493.   {$EXTERNALSYM RBHT_CLIENT}
  2494.   RBHT_CLIENT     = $0003;
  2495.   {$EXTERNALSYM RBHT_GRABBER}
  2496.   RBHT_GRABBER    = $0004;
  2497.  
  2498. type
  2499.   {$EXTERNALSYM _RB_HITTESTINFO}
  2500.   _RB_HITTESTINFO = packed record
  2501.     pt: TPoint;
  2502.     flags: UINT;
  2503.     iBand: Integer;
  2504.   end;
  2505.   PRBHitTestInfo = ^TRBHitTestInfo;
  2506.   TRBHitTestInfo = _RB_HITTESTINFO;
  2507.  
  2508. { ====== TOOLTIPS CONTROL ========================== }
  2509.  
  2510. const
  2511.   {$EXTERNALSYM TOOLTIPS_CLASS}
  2512.   TOOLTIPS_CLASS = 'tooltips_class32';
  2513.  
  2514. type
  2515.   PToolInfoA = ^TToolInfoA;
  2516.   PToolInfoW = ^TToolInfoW;
  2517.   PToolInfo = PToolInfoA;
  2518.   {$EXTERNALSYM tagTOOLINFOA}
  2519.   tagTOOLINFOA = packed record
  2520.     cbSize: UINT;
  2521.     uFlags: UINT;
  2522.     hwnd: HWND;
  2523.     uId: UINT;
  2524.     Rect: TRect;
  2525.     hInst: THandle;
  2526.     lpszText: PAnsiChar;
  2527.     lParam: LPARAM;
  2528.   end;
  2529.   {$EXTERNALSYM tagTOOLINFOW}
  2530.   tagTOOLINFOW = packed record
  2531.     cbSize: UINT;
  2532.     uFlags: UINT;
  2533.     hwnd: HWND;
  2534.     uId: UINT;
  2535.     Rect: TRect;
  2536.     hInst: THandle;
  2537.     lpszText: PWideChar;
  2538.     lParam: LPARAM;
  2539.   end;
  2540.   {$EXTERNALSYM tagTOOLINFO}
  2541.   tagTOOLINFO = tagTOOLINFOA;
  2542.   TToolInfoA = tagTOOLINFOA;
  2543.   TToolInfoW = tagTOOLINFOW;
  2544.   TToolInfo = TToolInfoA;
  2545.   {$EXTERNALSYM TOOLINFOA}
  2546.   TOOLINFOA = tagTOOLINFOA;
  2547.   {$EXTERNALSYM TOOLINFOW}
  2548.   TOOLINFOW = tagTOOLINFOW;
  2549.   {$EXTERNALSYM TOOLINFO}
  2550.   TOOLINFO = TOOLINFOA;
  2551.  
  2552. const
  2553.   {$EXTERNALSYM TTS_ALWAYSTIP}
  2554.   TTS_ALWAYSTIP           = $01;
  2555.   {$EXTERNALSYM TTS_NOPREFIX}
  2556.   TTS_NOPREFIX            = $02;
  2557.  
  2558.   {$EXTERNALSYM TTF_IDISHWND}
  2559.   TTF_IDISHWND            = $0001;
  2560.  
  2561.   // Use this to center around trackpoint in trackmode
  2562.   // -OR- to center around tool in normal mode.
  2563.   // Use TTF_ABSOLUTE to place the tip exactly at the track coords when
  2564.   // in tracking mode.  TTF_ABSOLUTE can be used in conjunction with TTF_CENTERTIP
  2565.   // to center the tip absolutely about the track point.
  2566.  
  2567.   {$EXTERNALSYM TTF_CENTERTIP}
  2568.   TTF_CENTERTIP           = $0002;
  2569.   {$EXTERNALSYM TTF_RTLREADING}
  2570.   TTF_RTLREADING          = $0004;
  2571.   {$EXTERNALSYM TTF_SUBCLASS}
  2572.   TTF_SUBCLASS            = $0010;
  2573.   {$EXTERNALSYM TTF_TRACK}
  2574.   TTF_TRACK               = $0020;
  2575.   {$EXTERNALSYM TTF_ABSOLUTE}
  2576.   TTF_ABSOLUTE            = $0080;
  2577.   {$EXTERNALSYM TTF_TRANSPARENT}
  2578.   TTF_TRANSPARENT         = $0100;
  2579.   {$EXTERNALSYM TTF_DI_SETITEM}
  2580.   TTF_DI_SETITEM          = $8000;       // valid only on the TTN_NEEDTEXT callback
  2581.  
  2582.   {$EXTERNALSYM TTDT_AUTOMATIC}
  2583.   TTDT_AUTOMATIC          = 0;
  2584.   {$EXTERNALSYM TTDT_RESHOW}
  2585.   TTDT_RESHOW             = 1;
  2586.   {$EXTERNALSYM TTDT_AUTOPOP}
  2587.   TTDT_AUTOPOP            = 2;
  2588.   {$EXTERNALSYM TTDT_INITIAL}
  2589.   TTDT_INITIAL            = 3;
  2590.  
  2591.   {$EXTERNALSYM TTM_ACTIVATE}
  2592.   TTM_ACTIVATE            = WM_USER + 1;
  2593.   {$EXTERNALSYM TTM_SETDELAYTIME}
  2594.   TTM_SETDELAYTIME        = WM_USER + 3;
  2595.  
  2596.   {$EXTERNALSYM TTM_ADDTOOLA}
  2597.   TTM_ADDTOOLA             = WM_USER + 4;
  2598.   {$EXTERNALSYM TTM_DELTOOLA}
  2599.   TTM_DELTOOLA             = WM_USER + 5;
  2600.   {$EXTERNALSYM TTM_NEWTOOLRECTA}
  2601.   TTM_NEWTOOLRECTA         = WM_USER + 6;
  2602.   {$EXTERNALSYM TTM_GETTOOLINFOA}
  2603.   TTM_GETTOOLINFOA         = WM_USER + 8;
  2604.   {$EXTERNALSYM TTM_SETTOOLINFOA}
  2605.   TTM_SETTOOLINFOA         = WM_USER + 9;
  2606.   {$EXTERNALSYM TTM_HITTESTA}
  2607.   TTM_HITTESTA             = WM_USER + 10;
  2608.   {$EXTERNALSYM TTM_GETTEXTA}
  2609.   TTM_GETTEXTA             = WM_USER + 11;
  2610.   {$EXTERNALSYM TTM_UPDATETIPTEXTA}
  2611.   TTM_UPDATETIPTEXTA       = WM_USER + 12;
  2612.   {$EXTERNALSYM TTM_ENUMTOOLSA}
  2613.   TTM_ENUMTOOLSA           = WM_USER + 14;
  2614.   {$EXTERNALSYM TTM_GETCURRENTTOOLA}
  2615.   TTM_GETCURRENTTOOLA      = WM_USER + 15;
  2616.  
  2617.   {$EXTERNALSYM TTM_ADDTOOLW}
  2618.   TTM_ADDTOOLW             = WM_USER + 50;
  2619.   {$EXTERNALSYM TTM_DELTOOLW}
  2620.   TTM_DELTOOLW             = WM_USER + 51;
  2621.   {$EXTERNALSYM TTM_NEWTOOLRECTW}
  2622.   TTM_NEWTOOLRECTW         = WM_USER + 52;
  2623.   {$EXTERNALSYM TTM_GETTOOLINFOW}
  2624.   TTM_GETTOOLINFOW         = WM_USER + 53;
  2625.   {$EXTERNALSYM TTM_SETTOOLINFOW}
  2626.   TTM_SETTOOLINFOW         = WM_USER + 54;
  2627.   {$EXTERNALSYM TTM_HITTESTW}
  2628.   TTM_HITTESTW             = WM_USER + 55;
  2629.   {$EXTERNALSYM TTM_GETTEXTW}
  2630.   TTM_GETTEXTW             = WM_USER + 56;
  2631.   {$EXTERNALSYM TTM_UPDATETIPTEXTW}
  2632.   TTM_UPDATETIPTEXTW       = WM_USER + 57;
  2633.   {$EXTERNALSYM TTM_ENUMTOOLSW}
  2634.   TTM_ENUMTOOLSW           = WM_USER + 58;
  2635.   {$EXTERNALSYM TTM_GETCURRENTTOOLW}
  2636.   TTM_GETCURRENTTOOLW      = WM_USER + 59;
  2637.   {$EXTERNALSYM TTM_WINDOWFROMPOINT}
  2638.   TTM_WINDOWFROMPOINT      = WM_USER + 16;
  2639.   {$EXTERNALSYM TTM_TRACKACTIVATE}
  2640.   TTM_TRACKACTIVATE        = WM_USER + 17;  // wParam = TRUE/FALSE start end  lparam = LPTOOLINFO
  2641.   {$EXTERNALSYM TTM_TRACKPOSITION}
  2642.   TTM_TRACKPOSITION        = WM_USER + 18;  // lParam = dwPos
  2643.   {$EXTERNALSYM TTM_SETTIPBKCOLOR}
  2644.   TTM_SETTIPBKCOLOR        = WM_USER + 19;
  2645.   {$EXTERNALSYM TTM_SETTIPTEXTCOLOR}
  2646.   TTM_SETTIPTEXTCOLOR      = WM_USER + 20;
  2647.   {$EXTERNALSYM TTM_GETDELAYTIME}
  2648.   TTM_GETDELAYTIME         = WM_USER + 21;
  2649.   {$EXTERNALSYM TTM_GETTIPBKCOLOR}
  2650.   TTM_GETTIPBKCOLOR        = WM_USER + 22;
  2651.   {$EXTERNALSYM TTM_GETTIPTEXTCOLOR}
  2652.   TTM_GETTIPTEXTCOLOR      = WM_USER + 23;
  2653.   {$EXTERNALSYM TTM_SETMAXTIPWIDTH}
  2654.   TTM_SETMAXTIPWIDTH       = WM_USER + 24;
  2655.   {$EXTERNALSYM TTM_GETMAXTIPWIDTH}
  2656.   TTM_GETMAXTIPWIDTH       = WM_USER + 25;
  2657.   {$EXTERNALSYM TTM_SETMARGIN}
  2658.   TTM_SETMARGIN            = WM_USER + 26;  // lParam = lprc
  2659.   {$EXTERNALSYM TTM_GETMARGIN}
  2660.   TTM_GETMARGIN            = WM_USER + 27;  // lParam = lprc
  2661.   {$EXTERNALSYM TTM_POP}
  2662.   TTM_POP                  = WM_USER + 28;
  2663.   {$EXTERNALSYM TTM_UPDATE}
  2664.   TTM_UPDATE               = WM_USER + 29;
  2665.  
  2666.  
  2667.  
  2668.  
  2669.  
  2670.  
  2671.  
  2672.  
  2673.  
  2674.  
  2675.  
  2676.  
  2677.  
  2678.  
  2679.  
  2680.  
  2681.  
  2682.  
  2683.  
  2684.  
  2685.  
  2686.  
  2687.   {$EXTERNALSYM TTM_ADDTOOL}
  2688.   TTM_ADDTOOL             = TTM_ADDTOOLA;
  2689.   {$EXTERNALSYM TTM_DELTOOL}
  2690.   TTM_DELTOOL             = TTM_DELTOOLA;
  2691.   {$EXTERNALSYM TTM_NEWTOOLRECT}
  2692.   TTM_NEWTOOLRECT         = TTM_NEWTOOLRECTA;
  2693.   {$EXTERNALSYM TTM_GETTOOLINFO}
  2694.   TTM_GETTOOLINFO         = TTM_GETTOOLINFOA;
  2695.   {$EXTERNALSYM TTM_SETTOOLINFO}
  2696.   TTM_SETTOOLINFO         = TTM_SETTOOLINFOA;
  2697.   {$EXTERNALSYM TTM_HITTEST}
  2698.   TTM_HITTEST             = TTM_HITTESTA;
  2699.   {$EXTERNALSYM TTM_GETTEXT}
  2700.   TTM_GETTEXT             = TTM_GETTEXTA;
  2701.   {$EXTERNALSYM TTM_UPDATETIPTEXT}
  2702.   TTM_UPDATETIPTEXT       = TTM_UPDATETIPTEXTA;
  2703.   {$EXTERNALSYM TTM_ENUMTOOLS}
  2704.   TTM_ENUMTOOLS           = TTM_ENUMTOOLSA;
  2705.   {$EXTERNALSYM TTM_GETCURRENTTOOL}
  2706.   TTM_GETCURRENTTOOL      = TTM_GETCURRENTTOOLA;
  2707.  
  2708.   {$EXTERNALSYM TTM_RELAYEVENT}
  2709.   TTM_RELAYEVENT          = WM_USER + 7;
  2710.   {$EXTERNALSYM TTM_GETTOOLCOUNT}
  2711.   TTM_GETTOOLCOUNT        = WM_USER +13;
  2712.  
  2713.  
  2714. type
  2715.   PTTHitTestInfoA = ^TTTHitTestInfoA;
  2716.   PTTHitTestInfoW = ^TTTHitTestInfoW;
  2717.   PTTHitTestInfo = PTTHitTestInfoA;
  2718.   {$EXTERNALSYM _TT_HITTESTINFOA}
  2719.   _TT_HITTESTINFOA = packed record
  2720.     hwnd: HWND;
  2721.     pt: TPoint;
  2722.     ti: TToolInfoA;
  2723.   end;
  2724.   {$EXTERNALSYM _TT_HITTESTINFOW}
  2725.   _TT_HITTESTINFOW = packed record
  2726.     hwnd: HWND;
  2727.     pt: TPoint;
  2728.     ti: TToolInfoW;
  2729.   end;
  2730.   {$EXTERNALSYM _TT_HITTESTINFO}
  2731.   _TT_HITTESTINFO = _TT_HITTESTINFOA;
  2732.   TTTHitTestInfoA = _TT_HITTESTINFOA;
  2733.   TTTHitTestInfoW = _TT_HITTESTINFOW;
  2734.   TTTHitTestInfo = TTTHitTestInfoA;
  2735.   {$EXTERNALSYM TTHITTESTINFOA}
  2736.   TTHITTESTINFOA = _TT_HITTESTINFOA;
  2737.   {$EXTERNALSYM TTHITTESTINFOW}
  2738.   TTHITTESTINFOW = _TT_HITTESTINFOW;
  2739.   {$EXTERNALSYM TTHITTESTINFO}
  2740.   TTHITTESTINFO = TTHITTESTINFOA;
  2741.  
  2742.  
  2743. const
  2744.   {$EXTERNALSYM TTN_NEEDTEXTA}
  2745.   TTN_NEEDTEXTA            = TTN_FIRST - 0;
  2746.   {$EXTERNALSYM TTN_NEEDTEXTW}
  2747.   TTN_NEEDTEXTW            = TTN_FIRST - 10;
  2748.  
  2749.  
  2750.  
  2751.  
  2752.   {$EXTERNALSYM TTN_NEEDTEXT}
  2753.   TTN_NEEDTEXT            = TTN_NEEDTEXTA;
  2754.  
  2755.   {$EXTERNALSYM TTN_SHOW}
  2756.   TTN_SHOW                = TTN_FIRST - 1;
  2757.   {$EXTERNALSYM TTN_POP}
  2758.   TTN_POP                 = TTN_FIRST - 2;
  2759.  
  2760. type
  2761.   tagNMTTDISPINFOA = packed record
  2762.     hdr: TNMHdr;
  2763.     lpszText: PAnsiChar;
  2764.     szText: array[0..79] of AnsiChar;
  2765.     hinst: HINST;
  2766.     uFlags: UINT;
  2767.     lParam: LPARAM;
  2768.   end;
  2769. //  {$EXTERNALSYM tagNMTTDISPINFOA}
  2770.   tagNMTTDISPINFOW = packed record
  2771.     hdr: TNMHdr;
  2772.     lpszText: PWideChar;
  2773.     szText: array[0..79] of WideChar;
  2774.     hinst: HINST;
  2775.     uFlags: UINT;
  2776.     lParam: LPARAM;
  2777.   end;
  2778. //  {$EXTERNALSYM tagNMTTDISPINFOW}
  2779.   tagNMTTDISPINFO = tagNMTTDISPINFOA;
  2780.   PNMTTDispInfoA = ^TNMTTDispInfoA;
  2781.   PNMTTDispInfoW = ^TNMTTDispInfoW;
  2782.   PNMTTDispInfo = PNMTTDispInfoA;
  2783.   TNMTTDispInfoA = tagNMTTDISPINFOA;
  2784.   TNMTTDispInfoW = tagNMTTDISPINFOW;
  2785.   TNMTTDispInfo = TNMTTDispInfoA;
  2786.  
  2787.   {$EXTERNALSYM tagTOOLTIPTEXTA}
  2788.   tagTOOLTIPTEXTA = tagNMTTDISPINFOA;
  2789.   {$EXTERNALSYM tagTOOLTIPTEXTW}
  2790.   tagTOOLTIPTEXTW = tagNMTTDISPINFOW;
  2791.   {$EXTERNALSYM tagTOOLTIPTEXT}
  2792.   tagTOOLTIPTEXT = tagTOOLTIPTEXTA;
  2793.   {$EXTERNALSYM TOOLTIPTEXTA}
  2794.   TOOLTIPTEXTA = tagNMTTDISPINFOA;
  2795.   {$EXTERNALSYM TOOLTIPTEXTW}
  2796.   TOOLTIPTEXTW = tagNMTTDISPINFOW;
  2797.   {$EXTERNALSYM TOOLTIPTEXT}
  2798.   TOOLTIPTEXT = TOOLTIPTEXTA;
  2799.   TToolTipTextA = tagNMTTDISPINFOA;
  2800.   TToolTipTextW = tagNMTTDISPINFOW;
  2801.   TToolTipText = TToolTipTextA;
  2802.   PToolTipTextA = ^TToolTipTextA;
  2803.   PToolTipTextW = ^TToolTipTextW;
  2804.   PToolTipText = PToolTipTextA;
  2805. { ====== STATUS BAR CONTROL ================= }
  2806.  
  2807. const
  2808.   {$EXTERNALSYM SBARS_SIZEGRIP}
  2809.   SBARS_SIZEGRIP          = $0100;
  2810.  
  2811. {$EXTERNALSYM DrawStatusTextA}
  2812. procedure DrawStatusTextA(hDC: HDC; lprc: PRect; pzsText: PAnsiChar;
  2813.   uFlags: UINT); stdcall;
  2814. {$EXTERNALSYM DrawStatusTextW}
  2815. procedure DrawStatusTextW(hDC: HDC; lprc: PRect; pzsText: PWideChar;
  2816.   uFlags: UINT); stdcall;
  2817. {$EXTERNALSYM DrawStatusText}
  2818. procedure DrawStatusText(hDC: HDC; lprc: PRect; pzsText: PChar;
  2819.   uFlags: UINT); stdcall;
  2820. {$EXTERNALSYM CreateStatusWindowA}
  2821. function CreateStatusWindowA(Style: Longint; lpszText: PAnsiChar;
  2822.   hwndParent: HWND; wID: UINT): HWND; stdcall;
  2823. {$EXTERNALSYM CreateStatusWindowW}
  2824. function CreateStatusWindowW(Style: Longint; lpszText: PWideChar;
  2825.   hwndParent: HWND; wID: UINT): HWND; stdcall;
  2826. {$EXTERNALSYM CreateStatusWindow}
  2827. function CreateStatusWindow(Style: Longint; lpszText: PChar;
  2828.   hwndParent: HWND; wID: UINT): HWND; stdcall;
  2829.  
  2830. const
  2831.   {$EXTERNALSYM STATUSCLASSNAME}
  2832.   STATUSCLASSNAME = 'msctls_statusbar32';
  2833.  
  2834. const
  2835.   {$EXTERNALSYM SB_SETTEXTA}
  2836.   SB_SETTEXTA             = WM_USER+1;
  2837.   {$EXTERNALSYM SB_GETTEXTA}
  2838.   SB_GETTEXTA             = WM_USER+2;
  2839.   {$EXTERNALSYM SB_GETTEXTLENGTHA}
  2840.   SB_GETTEXTLENGTHA       = WM_USER+3;
  2841.   {$EXTERNALSYM SB_SETTIPTEXTA}
  2842.   SB_SETTIPTEXTA          = WM_USER+16;
  2843.   {$EXTERNALSYM SB_GETTIPTEXTA}
  2844.   SB_GETTIPTEXTA          = WM_USER+18;
  2845.  
  2846.   {$EXTERNALSYM SB_SETTEXTW}
  2847.   SB_SETTEXTW             = WM_USER+11;
  2848.   {$EXTERNALSYM SB_GETTEXTW}
  2849.   SB_GETTEXTW             = WM_USER+13;
  2850.   {$EXTERNALSYM SB_GETTEXTLENGTHW}
  2851.   SB_GETTEXTLENGTHW       = WM_USER+12;
  2852.   {$EXTERNALSYM SB_SETTIPTEXTW}
  2853.   SB_SETTIPTEXTW          = WM_USER+17;
  2854.   {$EXTERNALSYM SB_GETTIPTEXTW}
  2855.   SB_GETTIPTEXTW          = WM_USER+19;
  2856.  
  2857.  
  2858.  
  2859.  
  2860.  
  2861.  
  2862.  
  2863.  
  2864.  
  2865.  
  2866.  
  2867.  
  2868.   {$EXTERNALSYM SB_SETTEXT}
  2869.   SB_SETTEXT             = SB_SETTEXTA;
  2870.   {$EXTERNALSYM SB_GETTEXT}
  2871.   SB_GETTEXT             = SB_GETTEXTA;
  2872.   {$EXTERNALSYM SB_GETTEXTLENGTH}
  2873.   SB_GETTEXTLENGTH       = SB_GETTEXTLENGTHA;
  2874.   {$EXTERNALSYM SB_SETTIPTEXT}
  2875.   SB_SETTIPTEXT          = SB_SETTIPTEXTA;
  2876.   {$EXTERNALSYM SB_GETTIPTEXT}
  2877.   SB_GETTIPTEXT          = SB_GETTIPTEXTA;
  2878.  
  2879.   {$EXTERNALSYM SB_SETPARTS}
  2880.   SB_SETPARTS             = WM_USER+4;
  2881.   {$EXTERNALSYM SB_GETPARTS}
  2882.   SB_GETPARTS             = WM_USER+6;
  2883.   {$EXTERNALSYM SB_GETBORDERS}
  2884.   SB_GETBORDERS           = WM_USER+7;
  2885.   {$EXTERNALSYM SB_SETMINHEIGHT}
  2886.   SB_SETMINHEIGHT         = WM_USER+8;
  2887.   {$EXTERNALSYM SB_SIMPLE}
  2888.   SB_SIMPLE               = WM_USER+9;
  2889.   {$EXTERNALSYM SB_GETRECT}
  2890.   SB_GETRECT              = WM_USER + 10;
  2891.   {$EXTERNALSYM SB_ISSIMPLE}
  2892.   SB_ISSIMPLE             = WM_USER+14;
  2893.   {$EXTERNALSYM SB_SETICON}
  2894.   SB_SETICON              = WM_USER+15;
  2895.   {$EXTERNALSYM SB_GETICON}
  2896.   SB_GETICON              = WM_USER+20;
  2897.   {$EXTERNALSYM SB_SETUNICODEFORMAT}
  2898.   SB_SETUNICODEFORMAT     = CCM_SETUNICODEFORMAT;
  2899.   {$EXTERNALSYM SB_GETUNICODEFORMAT}
  2900.   SB_GETUNICODEFORMAT     = CCM_GETUNICODEFORMAT;
  2901.  
  2902.   {$EXTERNALSYM SBT_OWNERDRAW}
  2903.   SBT_OWNERDRAW            = $1000;
  2904.   {$EXTERNALSYM SBT_NOBORDERS}
  2905.   SBT_NOBORDERS            = $0100;
  2906.   {$EXTERNALSYM SBT_POPOUT}
  2907.   SBT_POPOUT               = $0200;
  2908.   {$EXTERNALSYM SBT_RTLREADING}
  2909.   SBT_RTLREADING           = $0400;
  2910.   {$EXTERNALSYM SBT_TOOLTIPS}
  2911.   SBT_TOOLTIPS             = $0800;
  2912.  
  2913.   {$EXTERNALSYM SB_SETBKCOLOR}
  2914.   SB_SETBKCOLOR            = CCM_SETBKCOLOR;      // lParam = bkColor
  2915.  
  2916.   // status bar notifications
  2917.   {$EXTERNALSYM SBN_SIMPLEMODECHANGE}
  2918.   SBN_SIMPLEMODECHANGE     = SBN_FIRST - 0;
  2919.  
  2920. { ====== MENU HELP ========================== }
  2921.  
  2922. {$EXTERNALSYM MenuHelp}
  2923. procedure MenuHelp(Msg: UINT; wParam: WPARAM; lParam: LPARAM;
  2924.   hMainMenu: HMENU; hInst: THandle; hwndStatus: HWND; lpwIDs: PUINT); stdcall;
  2925. {$EXTERNALSYM ShowHideMenuCtl}
  2926. function ShowHideMenuCtl(hWnd: HWND; uFlags: UINT; lpInfo: PINT): Bool; stdcall;
  2927. {$EXTERNALSYM GetEffectiveClientRect}
  2928. procedure GetEffectiveClientRect(hWnd: HWND; lprc: PRect; lpInfo: PINT); stdcall;
  2929.  
  2930. const
  2931.   {$EXTERNALSYM MINSYSCOMMAND}
  2932.   MINSYSCOMMAND   = SC_SIZE;
  2933.  
  2934.  
  2935. { ====== TRACKBAR CONTROL =================== }
  2936.  
  2937.   {$EXTERNALSYM TRACKBAR_CLASS}
  2938.   TRACKBAR_CLASS = 'msctls_trackbar32';
  2939.  
  2940. const
  2941.   {$EXTERNALSYM TBS_AUTOTICKS}
  2942.   TBS_AUTOTICKS           = $0001;
  2943.   {$EXTERNALSYM TBS_VERT}
  2944.   TBS_VERT                = $0002;
  2945.   {$EXTERNALSYM TBS_HORZ}
  2946.   TBS_HORZ                = $0000;
  2947.   {$EXTERNALSYM TBS_TOP}
  2948.   TBS_TOP                 = $0004;
  2949.   {$EXTERNALSYM TBS_BOTTOM}
  2950.   TBS_BOTTOM              = $0000;
  2951.   {$EXTERNALSYM TBS_LEFT}
  2952.   TBS_LEFT                = $0004;
  2953.   {$EXTERNALSYM TBS_RIGHT}
  2954.   TBS_RIGHT               = $0000;
  2955.   {$EXTERNALSYM TBS_BOTH}
  2956.   TBS_BOTH                = $0008;
  2957.   {$EXTERNALSYM TBS_NOTICKS}
  2958.   TBS_NOTICKS             = $0010;
  2959.   {$EXTERNALSYM TBS_ENABLESELRANGE}
  2960.   TBS_ENABLESELRANGE      = $0020;
  2961.   {$EXTERNALSYM TBS_FIXEDLENGTH}
  2962.   TBS_FIXEDLENGTH         = $0040;
  2963.   {$EXTERNALSYM TBS_NOTHUMB}
  2964.   TBS_NOTHUMB             = $0080;
  2965.   {$EXTERNALSYM TBS_TOOLTIPS}
  2966.   TBS_TOOLTIPS            = $0100;
  2967.  
  2968.   {$EXTERNALSYM TBM_GETPOS}
  2969.   TBM_GETPOS              = WM_USER;
  2970.   {$EXTERNALSYM TBM_GETRANGEMIN}
  2971.   TBM_GETRANGEMIN         = WM_USER+1;
  2972.   {$EXTERNALSYM TBM_GETRANGEMAX}
  2973.   TBM_GETRANGEMAX         = WM_USER+2;
  2974.   {$EXTERNALSYM TBM_GETTIC}
  2975.   TBM_GETTIC              = WM_USER+3;
  2976.   {$EXTERNALSYM TBM_SETTIC}
  2977.   TBM_SETTIC              = WM_USER+4;
  2978.   {$EXTERNALSYM TBM_SETPOS}
  2979.   TBM_SETPOS              = WM_USER+5;
  2980.   {$EXTERNALSYM TBM_SETRANGE}
  2981.   TBM_SETRANGE            = WM_USER+6;
  2982.   {$EXTERNALSYM TBM_SETRANGEMIN}
  2983.   TBM_SETRANGEMIN         = WM_USER+7;
  2984.   {$EXTERNALSYM TBM_SETRANGEMAX}
  2985.   TBM_SETRANGEMAX         = WM_USER+8;
  2986.   {$EXTERNALSYM TBM_CLEARTICS}
  2987.   TBM_CLEARTICS           = WM_USER+9;
  2988.   {$EXTERNALSYM TBM_SETSEL}
  2989.   TBM_SETSEL              = WM_USER+10;
  2990.   {$EXTERNALSYM TBM_SETSELSTART}
  2991.   TBM_SETSELSTART         = WM_USER+11;
  2992.   {$EXTERNALSYM TBM_SETSELEND}
  2993.   TBM_SETSELEND           = WM_USER+12;
  2994.   {$EXTERNALSYM TBM_GETPTICS}
  2995.   TBM_GETPTICS            = WM_USER+14;
  2996.   {$EXTERNALSYM TBM_GETTICPOS}
  2997.   TBM_GETTICPOS           = WM_USER+15;
  2998.   {$EXTERNALSYM TBM_GETNUMTICS}
  2999.   TBM_GETNUMTICS          = WM_USER+16;
  3000.   {$EXTERNALSYM TBM_GETSELSTART}
  3001.   TBM_GETSELSTART         = WM_USER+17;
  3002.   {$EXTERNALSYM TBM_GETSELEND}
  3003.   TBM_GETSELEND           = WM_USER+18;
  3004.   {$EXTERNALSYM TBM_CLEARSEL}
  3005.   TBM_CLEARSEL            = WM_USER+19;
  3006.   {$EXTERNALSYM TBM_SETTICFREQ}
  3007.   TBM_SETTICFREQ          = WM_USER+20;
  3008.   {$EXTERNALSYM TBM_SETPAGESIZE}
  3009.   TBM_SETPAGESIZE         = WM_USER+21;
  3010.   {$EXTERNALSYM TBM_GETPAGESIZE}
  3011.   TBM_GETPAGESIZE         = WM_USER+22;
  3012.   {$EXTERNALSYM TBM_SETLINESIZE}
  3013.   TBM_SETLINESIZE         = WM_USER+23;
  3014.   {$EXTERNALSYM TBM_GETLINESIZE}
  3015.   TBM_GETLINESIZE         = WM_USER+24;
  3016.   {$EXTERNALSYM TBM_GETTHUMBRECT}
  3017.   TBM_GETTHUMBRECT        = WM_USER+25;
  3018.   {$EXTERNALSYM TBM_GETCHANNELRECT}
  3019.   TBM_GETCHANNELRECT      = WM_USER+26;
  3020.   {$EXTERNALSYM TBM_SETTHUMBLENGTH}
  3021.   TBM_SETTHUMBLENGTH      = WM_USER+27;
  3022.   {$EXTERNALSYM TBM_GETTHUMBLENGTH}
  3023.   TBM_GETTHUMBLENGTH      = WM_USER+28;
  3024.   {$EXTERNALSYM TBM_SETTOOLTIPS}
  3025.   TBM_SETTOOLTIPS         = WM_USER+29;
  3026.   {$EXTERNALSYM TBM_GETTOOLTIPS}
  3027.   TBM_GETTOOLTIPS         = WM_USER+30;
  3028.   {$EXTERNALSYM TBM_SETTIPSIDE}
  3029.   TBM_SETTIPSIDE          = WM_USER+31;
  3030.  
  3031.   // TrackBar Tip Side flags
  3032.   {$EXTERNALSYM TBTS_TOP}
  3033.   TBTS_TOP                = 0;
  3034.   {$EXTERNALSYM TBTS_LEFT}
  3035.   TBTS_LEFT               = 1;
  3036.   {$EXTERNALSYM TBTS_BOTTOM}
  3037.   TBTS_BOTTOM             = 2;
  3038.   {$EXTERNALSYM TBTS_RIGHT}
  3039.   TBTS_RIGHT              = 3;
  3040.  
  3041.   {$EXTERNALSYM TBM_SETBUDDY}
  3042.   TBM_SETBUDDY            = WM_USER+32; // wparam = BOOL fLeft; (or right)
  3043.   {$EXTERNALSYM TBM_GETBUDDY}
  3044.   TBM_GETBUDDY            = WM_USER+33; // wparam = BOOL fLeft; (or right)
  3045.   {$EXTERNALSYM TBM_SETUNICODEFORMAT}
  3046.   TBM_SETUNICODEFORMAT    = CCM_SETUNICODEFORMAT;
  3047.   {$EXTERNALSYM TBM_GETUNICODEFORMAT}
  3048.   TBM_GETUNICODEFORMAT    = CCM_GETUNICODEFORMAT;
  3049.  
  3050.   {$EXTERNALSYM TB_LINEUP}
  3051.   TB_LINEUP               = 0;
  3052.   {$EXTERNALSYM TB_LINEDOWN}
  3053.   TB_LINEDOWN             = 1;
  3054.   {$EXTERNALSYM TB_PAGEUP}
  3055.   TB_PAGEUP               = 2;
  3056.   {$EXTERNALSYM TB_PAGEDOWN}
  3057.   TB_PAGEDOWN             = 3;
  3058.   {$EXTERNALSYM TB_THUMBPOSITION}
  3059.   TB_THUMBPOSITION        = 4;
  3060.   {$EXTERNALSYM TB_THUMBTRACK}
  3061.   TB_THUMBTRACK           = 5;
  3062.   {$EXTERNALSYM TB_TOP}
  3063.   TB_TOP                  = 6;
  3064.   {$EXTERNALSYM TB_BOTTOM}
  3065.   TB_BOTTOM               = 7;
  3066.   {$EXTERNALSYM TB_ENDTRACK}
  3067.   TB_ENDTRACK             = 8;
  3068.  
  3069.   // custom draw item specs
  3070.   {$EXTERNALSYM TBCD_TICS}
  3071.   TBCD_TICS    = $0001;
  3072.   {$EXTERNALSYM TBCD_THUMB}
  3073.   TBCD_THUMB   = $0002;
  3074.   {$EXTERNALSYM TBCD_CHANNEL}
  3075.   TBCD_CHANNEL = $0003;
  3076.  
  3077. { ====== DRAG LIST CONTROL ================== }
  3078.  
  3079. type
  3080.   PDragListInfo = ^TDragListInfo;
  3081.   {$EXTERNALSYM tagDRAGLISTINFO}
  3082.   tagDRAGLISTINFO = packed record
  3083.     uNotification: UINT;
  3084.     hWnd: HWND;
  3085.     ptCursor: TPoint;
  3086.   end;
  3087.   TDragListInfo = tagDRAGLISTINFO;
  3088.   {$EXTERNALSYM DRAGLISTINFO}
  3089.   DRAGLISTINFO = tagDRAGLISTINFO;
  3090.  
  3091. const
  3092.   {$EXTERNALSYM DL_BEGINDRAG}
  3093.   DL_BEGINDRAG            = WM_USER+133;
  3094.   {$EXTERNALSYM DL_DRAGGING}
  3095.   DL_DRAGGING             = WM_USER+134;
  3096.   {$EXTERNALSYM DL_DROPPED}
  3097.   DL_DROPPED              = WM_USER+135;
  3098.   {$EXTERNALSYM DL_CANCELDRAG}
  3099.   DL_CANCELDRAG           = WM_USER+136;
  3100.  
  3101.   {$EXTERNALSYM DL_CURSORSET}
  3102.   DL_CURSORSET            = 0;
  3103.   {$EXTERNALSYM DL_STOPCURSOR}
  3104.   DL_STOPCURSOR           = 1;
  3105.   {$EXTERNALSYM DL_COPYCURSOR}
  3106.   DL_COPYCURSOR           = 2;
  3107.   {$EXTERNALSYM DL_MOVECURSOR}
  3108.   DL_MOVECURSOR           = 3;
  3109.  
  3110. const
  3111.   {$EXTERNALSYM DRAGLISTMSGSTRING}
  3112.   DRAGLISTMSGSTRING = 'commctrl_DragListMsg';
  3113.  
  3114. {$EXTERNALSYM MakeDragList}
  3115. procedure MakeDragList(hLB: HWND); stdcall;
  3116. {$EXTERNALSYM DrawInsert}
  3117. procedure DrawInsert(hwndParent: HWND; hLB: HWND; nItem: Integer); stdcall;
  3118. {$EXTERNALSYM LBItemFromPt}
  3119. function LBItemFromPt(hLB: HWND; pt: TPoint; bAutoScroll: Bool): Integer; stdcall;
  3120.  
  3121.  
  3122. { ====== UPDOWN CONTROL ========================== }
  3123.  
  3124. const
  3125.   {$EXTERNALSYM UPDOWN_CLASS}
  3126.   UPDOWN_CLASS = 'msctls_updown32';
  3127.  
  3128. type
  3129.   PUDAccel = ^TUDAccel;
  3130.   {$EXTERNALSYM _UDACCEL}
  3131.   _UDACCEL = packed record
  3132.     nSec: UINT;
  3133.     nInc: UINT;
  3134.   end;
  3135.   TUDAccel = _UDACCEL;
  3136.   {$EXTERNALSYM UDACCEL}
  3137.   UDACCEL = _UDACCEL;
  3138.  
  3139. const
  3140.   {$EXTERNALSYM UD_MAXVAL}
  3141.   UD_MAXVAL               = $7fff;
  3142.   {$EXTERNALSYM UD_MINVAL}
  3143.   UD_MINVAL               = -UD_MAXVAL;
  3144.  
  3145.   {$EXTERNALSYM UDS_WRAP}
  3146.   UDS_WRAP                = $0001;
  3147.   {$EXTERNALSYM UDS_SETBUDDYINT}
  3148.   UDS_SETBUDDYINT         = $0002;
  3149.   {$EXTERNALSYM UDS_ALIGNRIGHT}
  3150.   UDS_ALIGNRIGHT          = $0004;
  3151.   {$EXTERNALSYM UDS_ALIGNLEFT}
  3152.   UDS_ALIGNLEFT           = $0008;
  3153.   {$EXTERNALSYM UDS_AUTOBUDDY}
  3154.   UDS_AUTOBUDDY           = $0010;
  3155.   {$EXTERNALSYM UDS_ARROWKEYS}
  3156.   UDS_ARROWKEYS           = $0020;
  3157.   {$EXTERNALSYM UDS_HORZ}
  3158.   UDS_HORZ                = $0040;
  3159.   {$EXTERNALSYM UDS_NOTHOUSANDS}
  3160.   UDS_NOTHOUSANDS         = $0080;
  3161.   {$EXTERNALSYM UDS_HOTTRACK}
  3162.   UDS_HOTTRACK            = $0100;
  3163.  
  3164.  
  3165.   {$EXTERNALSYM UDM_SETRANGE}
  3166.   UDM_SETRANGE            = WM_USER+101;
  3167.   {$EXTERNALSYM UDM_GETRANGE}
  3168.   UDM_GETRANGE            = WM_USER+102;
  3169.   {$EXTERNALSYM UDM_SETPOS}
  3170.   UDM_SETPOS              = WM_USER+103;
  3171.   {$EXTERNALSYM UDM_GETPOS}
  3172.   UDM_GETPOS              = WM_USER+104;
  3173.   {$EXTERNALSYM UDM_SETBUDDY}
  3174.   UDM_SETBUDDY            = WM_USER+105;
  3175.   {$EXTERNALSYM UDM_GETBUDDY}
  3176.   UDM_GETBUDDY            = WM_USER+106;
  3177.   {$EXTERNALSYM UDM_SETACCEL}
  3178.   UDM_SETACCEL            = WM_USER+107;
  3179.   {$EXTERNALSYM UDM_GETACCEL}
  3180.   UDM_GETACCEL            = WM_USER+108;
  3181.   {$EXTERNALSYM UDM_SETBASE}
  3182.   UDM_SETBASE             = WM_USER+109;
  3183.   {$EXTERNALSYM UDM_GETBASE}
  3184.   UDM_GETBASE             = WM_USER+110;
  3185.   {$EXTERNALSYM UDM_SETRANGE32}
  3186.   UDM_SETRANGE32          = WM_USER+111;
  3187.   {$EXTERNALSYM UDM_GETRANGE32}
  3188.   UDM_GETRANGE32          = WM_USER+112; // wParam & lParam are LPINT
  3189.   {$EXTERNALSYM UDM_SETUNICODEFORMAT}
  3190.   UDM_SETUNICODEFORMAT    = CCM_SETUNICODEFORMAT;
  3191.   {$EXTERNALSYM UDM_GETUNICODEFORMAT}
  3192.   UDM_GETUNICODEFORMAT    = CCM_GETUNICODEFORMAT;
  3193.  
  3194. {$EXTERNALSYM CreateUpDownControl}
  3195. function CreateUpDownControl(dwStyle: Longint; X, Y, CX, CY: Integer;
  3196.   hParent: HWND;  nID: Integer; hInst: THandle; hBuddy: HWND;
  3197.   nUpper, nLower, nPos: Integer): HWND; stdcall;
  3198.  
  3199. type
  3200.   PNMUpDown = ^TNMUpDown;
  3201.   {$EXTERNALSYM _NM_UPDOWN}
  3202.   _NM_UPDOWN = packed record
  3203.     hdr: TNMHDR;
  3204.     iPos: Integer;
  3205.     iDelta: Integer;
  3206.   end;
  3207.   TNMUpDown = _NM_UPDOWN;
  3208.   {$EXTERNALSYM NM_UPDOWN}
  3209.   NM_UPDOWN = _NM_UPDOWN;
  3210.  
  3211. const
  3212.   {$EXTERNALSYM UDN_DELTAPOS}
  3213.   UDN_DELTAPOS = UDN_FIRST - 1;
  3214.  
  3215.  
  3216. { ====== PROGRESS CONTROL ========================= }
  3217.  
  3218. const
  3219.   {$EXTERNALSYM PROGRESS_CLASS}
  3220.   PROGRESS_CLASS = 'msctls_progress32';
  3221.  
  3222. type
  3223.   {$EXTERNALSYM PBRANGE}
  3224.   PBRANGE = record
  3225.     iLow: Integer;
  3226.     iHigh: Integer;
  3227.   end;
  3228.   PPBRange = ^TPBRange;
  3229.   TPBRange = PBRANGE;
  3230.  
  3231. const
  3232.   {$EXTERNALSYM PBS_SMOOTH}
  3233.   PBS_SMOOTH              = 01;
  3234.   {$EXTERNALSYM PBS_VERTICAL}
  3235.   PBS_VERTICAL            = 04;
  3236.   
  3237.   {$EXTERNALSYM PBM_SETRANGE}
  3238.   PBM_SETRANGE            = WM_USER+1;
  3239.   {$EXTERNALSYM PBM_SETPOS}
  3240.   PBM_SETPOS              = WM_USER+2;
  3241.   {$EXTERNALSYM PBM_DELTAPOS}
  3242.   PBM_DELTAPOS            = WM_USER+3;
  3243.   {$EXTERNALSYM PBM_SETSTEP}
  3244.   PBM_SETSTEP             = WM_USER+4;
  3245.   {$EXTERNALSYM PBM_STEPIT}
  3246.   PBM_STEPIT              = WM_USER+5;
  3247.   {$EXTERNALSYM PBM_SETRANGE32}
  3248.   PBM_SETRANGE32          = WM_USER+6;   // lParam = high, wParam = low
  3249.   {$EXTERNALSYM PBM_GETRANGE}
  3250.   PBM_GETRANGE            = WM_USER+7;   // lParam = PPBRange or Nil
  3251.                      // wParam = False: Result = high
  3252.                      // wParam = True: Result = low
  3253.   {$EXTERNALSYM PBM_GETPOS}
  3254.   PBM_GETPOS              = WM_USER+8;
  3255.   {$EXTERNALSYM PBM_SETBARCOLOR}
  3256.   PBM_SETBARCOLOR         = WM_USER+9;        // lParam = bar color
  3257.   {$EXTERNALSYM PBM_SETBKCOLOR}
  3258.   PBM_SETBKCOLOR          = CCM_SETBKCOLOR;  // lParam = bkColor
  3259.  
  3260.  
  3261. {  ====== HOTKEY CONTROL ========================== }
  3262.  
  3263. const
  3264.   {$EXTERNALSYM HOTKEYF_SHIFT}
  3265.   HOTKEYF_SHIFT           = $01;
  3266.   {$EXTERNALSYM HOTKEYF_CONTROL}
  3267.   HOTKEYF_CONTROL         = $02;
  3268.   {$EXTERNALSYM HOTKEYF_ALT}
  3269.   HOTKEYF_ALT             = $04;
  3270.   {$EXTERNALSYM HOTKEYF_EXT}
  3271.   HOTKEYF_EXT             = $08;
  3272.  
  3273.   {$EXTERNALSYM HKCOMB_NONE}
  3274.   HKCOMB_NONE             = $0001;
  3275.   {$EXTERNALSYM HKCOMB_S}
  3276.   HKCOMB_S                = $0002;
  3277.   {$EXTERNALSYM HKCOMB_C}
  3278.   HKCOMB_C                = $0004;
  3279.   {$EXTERNALSYM HKCOMB_A}
  3280.   HKCOMB_A                = $0008;
  3281.   {$EXTERNALSYM HKCOMB_SC}
  3282.   HKCOMB_SC               = $0010;
  3283.   {$EXTERNALSYM HKCOMB_SA}
  3284.   HKCOMB_SA               = $0020;
  3285.   {$EXTERNALSYM HKCOMB_CA}
  3286.   HKCOMB_CA               = $0040;
  3287.   {$EXTERNALSYM HKCOMB_SCA}
  3288.   HKCOMB_SCA              = $0080;
  3289.  
  3290.  
  3291.   {$EXTERNALSYM HKM_SETHOTKEY}
  3292.   HKM_SETHOTKEY           = WM_USER+1;
  3293.   {$EXTERNALSYM HKM_GETHOTKEY}
  3294.   HKM_GETHOTKEY           = WM_USER+2;
  3295.   {$EXTERNALSYM HKM_SETRULES}
  3296.   HKM_SETRULES            = WM_USER+3;
  3297.  
  3298. const
  3299.   HOTKEYCLASS = 'msctls_hotkey32';
  3300.  
  3301.  
  3302. { ====== COMMON CONTROL STYLES ================ }
  3303.  
  3304. const
  3305.   {$EXTERNALSYM CCS_TOP}
  3306.   CCS_TOP                 = $00000001;
  3307.   {$EXTERNALSYM CCS_NOMOVEY}
  3308.   CCS_NOMOVEY             = $00000002;
  3309.   {$EXTERNALSYM CCS_BOTTOM}
  3310.   CCS_BOTTOM              = $00000003;
  3311.   {$EXTERNALSYM CCS_NORESIZE}
  3312.   CCS_NORESIZE            = $00000004;
  3313.   {$EXTERNALSYM CCS_NOPARENTALIGN}
  3314.   CCS_NOPARENTALIGN       = $00000008;
  3315.   {$EXTERNALSYM CCS_ADJUSTABLE}
  3316.   CCS_ADJUSTABLE          = $00000020;
  3317.   {$EXTERNALSYM CCS_NODIVIDER}
  3318.   CCS_NODIVIDER           = $00000040;
  3319.   {$EXTERNALSYM CCS_VERT}
  3320.   CCS_VERT                = $00000080;
  3321.   {$EXTERNALSYM CCS_LEFT}
  3322.   CCS_LEFT                = (CCS_VERT or CCS_TOP);
  3323.   {$EXTERNALSYM CCS_RIGHT}
  3324.   CCS_RIGHT               = (CCS_VERT or CCS_BOTTOM);
  3325.   {$EXTERNALSYM CCS_NOMOVEX}
  3326.   CCS_NOMOVEX             = (CCS_VERT or CCS_NOMOVEY);
  3327.  
  3328.  
  3329. { ====== LISTVIEW CONTROL ====================== }
  3330.  
  3331. const
  3332.   {$EXTERNALSYM WC_LISTVIEW}
  3333.   WC_LISTVIEW = 'SysListView32';
  3334.  
  3335. const
  3336.  
  3337.   { List View Styles }
  3338.   {$EXTERNALSYM LVS_ICON}
  3339.   LVS_ICON                = $0000;
  3340.   {$EXTERNALSYM LVS_REPORT}
  3341.   LVS_REPORT              = $0001;
  3342.   {$EXTERNALSYM LVS_SMALLICON}
  3343.   LVS_SMALLICON           = $0002;
  3344.   {$EXTERNALSYM LVS_LIST}
  3345.   LVS_LIST                = $0003;
  3346.   {$EXTERNALSYM LVS_TYPEMASK}
  3347.   LVS_TYPEMASK            = $0003;
  3348.   {$EXTERNALSYM LVS_SINGLESEL}
  3349.   LVS_SINGLESEL           = $0004;
  3350.   {$EXTERNALSYM LVS_SHOWSELALWAYS}
  3351.   LVS_SHOWSELALWAYS       = $0008;
  3352.   {$EXTERNALSYM LVS_SORTASCENDING}
  3353.   LVS_SORTASCENDING       = $0010;
  3354.   {$EXTERNALSYM LVS_SORTDESCENDING}
  3355.   LVS_SORTDESCENDING      = $0020;
  3356.   {$EXTERNALSYM LVS_SHAREIMAGELISTS}
  3357.   LVS_SHAREIMAGELISTS     = $0040;
  3358.   {$EXTERNALSYM LVS_NOLABELWRAP}
  3359.   LVS_NOLABELWRAP         = $0080;
  3360.   {$EXTERNALSYM LVS_AUTOARRANGE}
  3361.   LVS_AUTOARRANGE         = $0100;
  3362.   {$EXTERNALSYM LVS_EDITLABELS}
  3363.   LVS_EDITLABELS          = $0200;
  3364.   {$EXTERNALSYM LVS_OWNERDATA}
  3365.   LVS_OWNERDATA           = $1000; 
  3366.   {$EXTERNALSYM LVS_NOSCROLL}
  3367.   LVS_NOSCROLL            = $2000;
  3368.  
  3369.   {$EXTERNALSYM LVS_TYPESTYLEMASK}
  3370.   LVS_TYPESTYLEMASK       = $FC00;
  3371.  
  3372.   {$EXTERNALSYM LVS_ALIGNTOP}
  3373.   LVS_ALIGNTOP            = $0000;
  3374.   {$EXTERNALSYM LVS_ALIGNLEFT}
  3375.   LVS_ALIGNLEFT           = $0800;
  3376.   {$EXTERNALSYM LVS_ALIGNMASK}
  3377.   LVS_ALIGNMASK           = $0c00;
  3378.  
  3379.   {$EXTERNALSYM LVS_OWNERDRAWFIXED}
  3380.   LVS_OWNERDRAWFIXED      = $0400;
  3381.   {$EXTERNALSYM LVS_NOCOLUMNHEADER}
  3382.   LVS_NOCOLUMNHEADER      = $4000;
  3383.   {$EXTERNALSYM LVS_NOSORTHEADER}
  3384.   LVS_NOSORTHEADER        = $8000;
  3385.  
  3386.   { List View Extended Styles }
  3387.   {$EXTERNALSYM LVS_EX_GRIDLINES}
  3388.   LVS_EX_GRIDLINES        = $00000001;
  3389.   {$EXTERNALSYM LVS_EX_SUBITEMIMAGES}
  3390.   LVS_EX_SUBITEMIMAGES    = $00000002;
  3391.   {$EXTERNALSYM LVS_EX_CHECKBOXES}
  3392.   LVS_EX_CHECKBOXES       = $00000004;
  3393.   {$EXTERNALSYM LVS_EX_TRACKSELECT}
  3394.   LVS_EX_TRACKSELECT      = $00000008;
  3395.   {$EXTERNALSYM LVS_EX_HEADERDRAGDROP}
  3396.   LVS_EX_HEADERDRAGDROP   = $00000010;
  3397.   {$EXTERNALSYM LVS_EX_FULLROWSELECT}
  3398.   LVS_EX_FULLROWSELECT    = $00000020; // applies to report mode only
  3399.   {$EXTERNALSYM LVS_EX_ONECLICKACTIVATE}
  3400.   LVS_EX_ONECLICKACTIVATE = $00000040;
  3401.   {$EXTERNALSYM LVS_EX_TWOCLICKACTIVATE}
  3402.   LVS_EX_TWOCLICKACTIVATE = $00000080;
  3403.   {$EXTERNALSYM LVS_EX_FLATSB}
  3404.   LVS_EX_FLATSB           = $00000100;
  3405.   {$EXTERNALSYM LVS_EX_REGIONAL}
  3406.   LVS_EX_REGIONAL         = $00000200;
  3407.   {$EXTERNALSYM LVS_EX_INFOTIP}
  3408.   LVS_EX_INFOTIP          = $00000400; // listview does InfoTips for you
  3409.   {$EXTERNALSYM LVS_EX_UNDERLINEHOT}
  3410.   LVS_EX_UNDERLINEHOT     = $00000800;
  3411.   {$EXTERNALSYM LVS_EX_UNDERLINECOLD}
  3412.   LVS_EX_UNDERLINECOLD    = $00001000;
  3413.   {$EXTERNALSYM LVS_EX_MULTIWORKAREAS}
  3414.   LVS_EX_MULTIWORKAREAS   = $00002000;
  3415.  
  3416. const
  3417.   {$EXTERNALSYM LVM_SETUNICODEFORMAT}
  3418.   LVM_SETUNICODEFORMAT     = CCM_SETUNICODEFORMAT;
  3419.  
  3420. {$EXTERNALSYM ListView_SetUnicodeFormat}
  3421. function ListView_SetUnicodeFormat(hwnd: HWND; fUnicode: BOOL): Integer;
  3422.  
  3423. const
  3424.   {$EXTERNALSYM LVM_GETUNICODEFORMAT}
  3425.   LVM_GETUNICODEFORMAT     = CCM_GETUNICODEFORMAT;
  3426.  
  3427. {$EXTERNALSYM ListView_GetUnicodeFormat}
  3428. function ListView_GetUnicodeFormat(hwnd: HWND): BOOL;
  3429.  
  3430. const
  3431.   {$EXTERNALSYM LVM_GETBKCOLOR}
  3432.   LVM_GETBKCOLOR          = LVM_FIRST + 0;
  3433.  
  3434. {$EXTERNALSYM ListView_GetBkColor}
  3435. function ListView_GetBkColor(hWnd: HWND): TColorRef;
  3436.  
  3437. const
  3438.   {$EXTERNALSYM LVM_SETBKCOLOR}
  3439.   LVM_SETBKCOLOR          = LVM_FIRST + 1;
  3440.  
  3441. {$EXTERNALSYM ListView_SetBkColor}
  3442. function ListView_SetBkColor(hWnd: HWND; clrBk: TColorRef): Bool;
  3443.  
  3444. const
  3445.   {$EXTERNALSYM LVM_GETIMAGELIST}
  3446.   LVM_GETIMAGELIST        = LVM_FIRST + 2;
  3447.  
  3448. {$EXTERNALSYM ListView_GetImageList}
  3449. function ListView_GetImageList(hWnd: HWND; iImageList: Integer): HIMAGELIST;
  3450.  
  3451. const
  3452.   {$EXTERNALSYM LVSIL_NORMAL}
  3453.   LVSIL_NORMAL            = 0;
  3454.   {$EXTERNALSYM LVSIL_SMALL}
  3455.   LVSIL_SMALL             = 1;
  3456.   {$EXTERNALSYM LVSIL_STATE}
  3457.   LVSIL_STATE             = 2;
  3458.  
  3459. const
  3460.   {$EXTERNALSYM LVM_SETIMAGELIST}
  3461.   LVM_SETIMAGELIST        = LVM_FIRST + 3;
  3462.  
  3463. {$EXTERNALSYM ListView_SetImageList}
  3464. function ListView_SetImageList(hWnd: HWND; himl: HIMAGELIST;
  3465.   iImageList: Integer): HIMAGELIST;
  3466.  
  3467. const
  3468.   {$EXTERNALSYM LVM_GETITEMCOUNT}
  3469.   LVM_GETITEMCOUNT        = LVM_FIRST + 4;
  3470.  
  3471. {$EXTERNALSYM ListView_GetItemCount}
  3472. function ListView_GetItemCount(hWnd: HWND): Integer;
  3473.  
  3474. const
  3475.   {$EXTERNALSYM LVIF_TEXT}
  3476.   LVIF_TEXT               = $0001;
  3477.   {$EXTERNALSYM LVIF_IMAGE}
  3478.   LVIF_IMAGE              = $0002;
  3479.   {$EXTERNALSYM LVIF_PARAM}
  3480.   LVIF_PARAM              = $0004;
  3481.   {$EXTERNALSYM LVIF_STATE}
  3482.   LVIF_STATE              = $0008;
  3483.   {$EXTERNALSYM LVIF_INDENT}
  3484.   LVIF_INDENT             = $0010;
  3485.   {$EXTERNALSYM LVIF_NORECOMPUTE}
  3486.   LVIF_NORECOMPUTE        = $0800;
  3487.  
  3488.   {$EXTERNALSYM LVIS_FOCUSED}
  3489.   LVIS_FOCUSED            = $0001;
  3490.   {$EXTERNALSYM LVIS_SELECTED}
  3491.   LVIS_SELECTED           = $0002;
  3492.   {$EXTERNALSYM LVIS_CUT}
  3493.   LVIS_CUT                = $0004;
  3494.   {$EXTERNALSYM LVIS_DROPHILITED}
  3495.   LVIS_DROPHILITED        = $0008;
  3496.   {$EXTERNALSYM LVIS_ACTIVATING}
  3497.   LVIS_ACTIVATING         = $0020;
  3498.  
  3499.   {$EXTERNALSYM LVIS_OVERLAYMASK}
  3500.   LVIS_OVERLAYMASK        = $0F00;
  3501.   {$EXTERNALSYM LVIS_STATEIMAGEMASK}
  3502.   LVIS_STATEIMAGEMASK     = $F000;
  3503.  
  3504. {$EXTERNALSYM IndexToStateImageMask}
  3505. function IndexToStateImageMask(I: Longint): Longint;
  3506.  
  3507. const
  3508.   {$EXTERNALSYM I_INDENTCALLBACK}
  3509.   I_INDENTCALLBACK        = -1;
  3510.  
  3511. type
  3512.   PLVItemA = ^TLVItemA;
  3513.   PLVItemW = ^TLVItemW;
  3514.   PLVItem = PLVItemA;
  3515.   {$EXTERNALSYM tagLVITEMA}
  3516.   tagLVITEMA = packed record
  3517.     mask: UINT;
  3518.     iItem: Integer;
  3519.     iSubItem: Integer;
  3520.     state: UINT;
  3521.     stateMask: UINT;
  3522.     pszText: PAnsiChar;
  3523.     cchTextMax: Integer;
  3524.     iImage: Integer;
  3525.     lParam: LPARAM;
  3526.     iIndent: Integer;
  3527.   end;
  3528.   {$EXTERNALSYM tagLVITEMW}
  3529.   tagLVITEMW = packed record
  3530.     mask: UINT;
  3531.     iItem: Integer;
  3532.     iSubItem: Integer;
  3533.     state: UINT;
  3534.     stateMask: UINT;
  3535.     pszText: PWideChar;
  3536.     cchTextMax: Integer;
  3537.     iImage: Integer;
  3538.     lParam: LPARAM;
  3539.     iIndent: Integer;
  3540.   end;
  3541.   {$EXTERNALSYM tagLVITEM}
  3542.   tagLVITEM = tagLVITEMA;
  3543.   {$EXTERNALSYM _LV_ITEMA}
  3544.   _LV_ITEMA = tagLVITEMA;
  3545.   {$EXTERNALSYM _LV_ITEMW}
  3546.   _LV_ITEMW = tagLVITEMW;
  3547.   {$EXTERNALSYM _LV_ITEM}
  3548.   _LV_ITEM = _LV_ITEMA;
  3549.   TLVItemA = tagLVITEMA;
  3550.   TLVItemW = tagLVITEMW;
  3551.   TLVItem = TLVItemA;
  3552.   {$EXTERNALSYM LV_ITEMA}
  3553.   LV_ITEMA = tagLVITEMA;
  3554.   {$EXTERNALSYM LV_ITEMW}
  3555.   LV_ITEMW = tagLVITEMW;
  3556.   {$EXTERNALSYM LV_ITEM}
  3557.   LV_ITEM = LV_ITEMA;
  3558.  
  3559. const
  3560.   {$EXTERNALSYM LPSTR_TEXTCALLBACKA}
  3561.   LPSTR_TEXTCALLBACKA = LPSTR(-1);
  3562.   {$EXTERNALSYM LPSTR_TEXTCALLBACKW}
  3563.   LPSTR_TEXTCALLBACKW = LPWSTR(-1);
  3564.  
  3565.  
  3566.  
  3567.  
  3568.   {$EXTERNALSYM LPSTR_TEXTCALLBACK}
  3569.   LPSTR_TEXTCALLBACK = LPSTR_TEXTCALLBACKA;
  3570.  
  3571.   {$EXTERNALSYM I_IMAGECALLBACK}
  3572.   I_IMAGECALLBACK         = -1;
  3573.  
  3574. const
  3575.   {$EXTERNALSYM LVM_GETITEMA}
  3576.   LVM_GETITEMA            = LVM_FIRST + 5;
  3577.   {$EXTERNALSYM LVM_SETITEMA}
  3578.   LVM_SETITEMA            = LVM_FIRST + 6;
  3579.   {$EXTERNALSYM LVM_INSERTITEMA}
  3580.   LVM_INSERTITEMA         = LVM_FIRST + 7;
  3581.  
  3582.   {$EXTERNALSYM LVM_GETITEMW}
  3583.   LVM_GETITEMW            = LVM_FIRST + 75;
  3584.   {$EXTERNALSYM LVM_SETITEMW}
  3585.   LVM_SETITEMW            = LVM_FIRST + 76;
  3586.   {$EXTERNALSYM LVM_INSERTITEMW}
  3587.   LVM_INSERTITEMW         = LVM_FIRST + 77;
  3588.  
  3589.  
  3590.  
  3591.  
  3592.  
  3593.  
  3594.  
  3595.  
  3596.   {$EXTERNALSYM LVM_GETITEM}
  3597.   LVM_GETITEM            = LVM_GETITEMA;
  3598.   {$EXTERNALSYM LVM_SETITEM}
  3599.   LVM_SETITEM            = LVM_SETITEMA;
  3600.   {$EXTERNALSYM LVM_INSERTITEM}
  3601.   LVM_INSERTITEM         = LVM_INSERTITEMA;
  3602.  
  3603.   {$EXTERNALSYM LVM_DELETEITEM}
  3604.   LVM_DELETEITEM          = LVM_FIRST + 8;
  3605.   {$EXTERNALSYM LVM_DELETEALLITEMS}
  3606.   LVM_DELETEALLITEMS      = LVM_FIRST + 9;
  3607.   {$EXTERNALSYM LVM_GETCALLBACKMASK}
  3608.   LVM_GETCALLBACKMASK     = LVM_FIRST + 10;
  3609.   {$EXTERNALSYM LVM_SETCALLBACKMASK}
  3610.   LVM_SETCALLBACKMASK     = LVM_FIRST + 11;
  3611.  
  3612. {$EXTERNALSYM ListView_GetItemA}
  3613. function ListView_GetItemA(hWnd: HWND; var pItem: TLVItemA): Bool;
  3614. {$EXTERNALSYM ListView_GetItemW}
  3615. function ListView_GetItemW(hWnd: HWND; var pItem: TLVItemW): Bool;
  3616. {$EXTERNALSYM ListView_GetItem}
  3617. function ListView_GetItem(hWnd: HWND; var pItem: TLVItem): Bool;
  3618. {$EXTERNALSYM ListView_SetItemA}
  3619. function ListView_SetItemA(hWnd: HWND; const pItem: TLVItemA): Bool;
  3620. {$EXTERNALSYM ListView_SetItemW}
  3621. function ListView_SetItemW(hWnd: HWND; const pItem: TLVItemW): Bool;
  3622. {$EXTERNALSYM ListView_SetItem}
  3623. function ListView_SetItem(hWnd: HWND; const pItem: TLVItem): Bool;
  3624. {$EXTERNALSYM ListView_InsertItemA}
  3625. function ListView_InsertItemA(hWnd: HWND; const pItem: TLVItemA): Integer;
  3626. {$EXTERNALSYM ListView_InsertItemW}
  3627. function ListView_InsertItemW(hWnd: HWND; const pItem: TLVItemW): Integer;
  3628. {$EXTERNALSYM ListView_InsertItem}
  3629. function ListView_InsertItem(hWnd: HWND; const pItem: TLVItem): Integer;
  3630. {$EXTERNALSYM ListView_DeleteItem}
  3631. function ListView_DeleteItem(hWnd: HWND; i: Integer): Bool;
  3632. {$EXTERNALSYM ListView_DeleteAllItems}
  3633. function ListView_DeleteAllItems(hWnd: HWND): Bool;
  3634. {$EXTERNALSYM ListView_GetCallbackMask}
  3635. function ListView_GetCallbackMask(hWnd: HWND): UINT;
  3636. {$EXTERNALSYM ListView_SetCallbackMask}
  3637. function ListView_SetCallbackMask(hWnd: HWND; mask: UINT): Bool;
  3638.  
  3639. const
  3640.   {$EXTERNALSYM LVNI_ALL}
  3641.   LVNI_ALL                = $0000;
  3642.   {$EXTERNALSYM LVNI_FOCUSED}
  3643.   LVNI_FOCUSED            = $0001;
  3644.   {$EXTERNALSYM LVNI_SELECTED}
  3645.   LVNI_SELECTED           = $0002;
  3646.   {$EXTERNALSYM LVNI_CUT}
  3647.   LVNI_CUT                = $0004;
  3648.   {$EXTERNALSYM LVNI_DROPHILITED}
  3649.   LVNI_DROPHILITED        = $0008;
  3650.  
  3651.   {$EXTERNALSYM LVNI_ABOVE}
  3652.   LVNI_ABOVE              = $0100;
  3653.   {$EXTERNALSYM LVNI_BELOW}
  3654.   LVNI_BELOW              = $0200;
  3655.   {$EXTERNALSYM LVNI_TOLEFT}
  3656.   LVNI_TOLEFT             = $0400;
  3657.   {$EXTERNALSYM LVNI_TORIGHT}
  3658.   LVNI_TORIGHT            = $0800;
  3659.  
  3660.  
  3661. const
  3662.   {$EXTERNALSYM LVM_GETNEXTITEM}
  3663.   LVM_GETNEXTITEM         = LVM_FIRST + 12;
  3664.  
  3665. {$EXTERNALSYM ListView_GetNextItem}
  3666. function ListView_GetNextItem(hWnd: HWND; iStart: Integer; Flags: UINT): Integer;
  3667.  
  3668. const
  3669.   {$EXTERNALSYM LVFI_PARAM}
  3670.   LVFI_PARAM              = $0001;
  3671.   {$EXTERNALSYM LVFI_STRING}
  3672.   LVFI_STRING             = $0002;
  3673.   {$EXTERNALSYM LVFI_PARTIAL}
  3674.   LVFI_PARTIAL            = $0008;
  3675.   {$EXTERNALSYM LVFI_WRAP}
  3676.   LVFI_WRAP               = $0020;
  3677.   {$EXTERNALSYM LVFI_NEARESTXY}
  3678.   LVFI_NEARESTXY          = $0040;
  3679.  
  3680.  
  3681. type
  3682.   PLVFindInfoA = ^TLVFindInfoA;
  3683.   PLVFindInfoW = ^TLVFindInfoW;
  3684.   PLVFindInfo = PLVFindInfoA;
  3685.   {$EXTERNALSYM tagLVFINDINFOA}
  3686.   tagLVFINDINFOA = packed record
  3687.     flags: UINT;
  3688.     psz: PAnsiChar;
  3689.     lParam: LPARAM;
  3690.     pt: TPoint;
  3691.     vkDirection: UINT;
  3692.   end;
  3693.   {$EXTERNALSYM tagLVFINDINFOW}
  3694.   tagLVFINDINFOW = packed record
  3695.     flags: UINT;
  3696.     psz: PWideChar;
  3697.     lParam: LPARAM;
  3698.     pt: TPoint;
  3699.     vkDirection: UINT;
  3700.   end;
  3701.   {$EXTERNALSYM tagLVFINDINFO}
  3702.   tagLVFINDINFO = tagLVFINDINFOA;
  3703.   {$EXTERNALSYM _LV_FINDINFOA}
  3704.   _LV_FINDINFOA = tagLVFINDINFOA;
  3705.   {$EXTERNALSYM _LV_FINDINFOW}
  3706.   _LV_FINDINFOW = tagLVFINDINFOW;
  3707.   {$EXTERNALSYM _LV_FINDINFO}
  3708.   _LV_FINDINFO = _LV_FINDINFOA;
  3709.   TLVFindInfoA = tagLVFINDINFOA;
  3710.   TLVFindInfoW = tagLVFINDINFOW;
  3711.   TLVFindInfo = TLVFindInfoA;
  3712.   {$EXTERNALSYM LV_FINDINFOA}
  3713.   LV_FINDINFOA = tagLVFINDINFOA;
  3714.   {$EXTERNALSYM LV_FINDINFOW}
  3715.   LV_FINDINFOW = tagLVFINDINFOW;
  3716.   {$EXTERNALSYM LV_FINDINFO}
  3717.   LV_FINDINFO = LV_FINDINFOA;
  3718.  
  3719. const
  3720.   {$EXTERNALSYM LVM_FINDITEMA}
  3721.   LVM_FINDITEMA            = LVM_FIRST + 13;
  3722.   {$EXTERNALSYM LVM_FINDITEMW}
  3723.   LVM_FINDITEMW            = LVM_FIRST + 83;
  3724.  
  3725.  
  3726.  
  3727.   {$EXTERNALSYM LVM_FINDITEM}
  3728.   LVM_FINDITEM            = LVM_FINDITEMA;
  3729.  
  3730. {$EXTERNALSYM ListView_FindItemA}
  3731. function ListView_FindItemA(hWnd: HWND; iStart: Integer;
  3732.   const plvfi: TLVFindInfoA): Integer;
  3733. {$EXTERNALSYM ListView_FindItemW}
  3734. function ListView_FindItemW(hWnd: HWND; iStart: Integer;
  3735.   const plvfi: TLVFindInfoW): Integer;
  3736. {$EXTERNALSYM ListView_FindItem}
  3737. function ListView_FindItem(hWnd: HWND; iStart: Integer;
  3738.   const plvfi: TLVFindInfo): Integer;
  3739.  
  3740. const
  3741.   {$EXTERNALSYM LVIR_BOUNDS}
  3742.   LVIR_BOUNDS             = 0;
  3743.   {$EXTERNALSYM LVIR_ICON}
  3744.   LVIR_ICON               = 1;
  3745.   {$EXTERNALSYM LVIR_LABEL}
  3746.   LVIR_LABEL              = 2;
  3747.   {$EXTERNALSYM LVIR_SELECTBOUNDS}
  3748.   LVIR_SELECTBOUNDS       = 3;
  3749.  
  3750.  
  3751. const
  3752.   {$EXTERNALSYM LVM_GETITEMRECT}
  3753.   LVM_GETITEMRECT         = LVM_FIRST + 14;
  3754.  
  3755. {$EXTERNALSYM ListView_GetItemRect}
  3756. function ListView_GetItemRect(hWnd: HWND; i: Integer; var prc: TRect;
  3757.   Code: Integer): Bool;
  3758.  
  3759. const
  3760.   {$EXTERNALSYM LVM_SETITEMPOSITION}
  3761.   LVM_SETITEMPOSITION     = LVM_FIRST + 15;
  3762.  
  3763. {$EXTERNALSYM ListView_SetItemPosition}
  3764. function ListView_SetItemPosition(hWnd: HWND; i, x, y: Integer): Bool;
  3765.  
  3766. const
  3767.   {$EXTERNALSYM LVM_GETITEMPOSITION}
  3768.   LVM_GETITEMPOSITION     = LVM_FIRST + 16;
  3769.  
  3770. {$EXTERNALSYM ListView_GetItemPosition}
  3771. function ListView_GetItemPosition(hwndLV: HWND; i: Integer; var ppt: TPoint): Bool;
  3772.  
  3773. const
  3774.   {$EXTERNALSYM LVM_GETSTRINGWIDTHA}
  3775.   LVM_GETSTRINGWIDTHA      = LVM_FIRST + 17;
  3776.   {$EXTERNALSYM LVM_GETSTRINGWIDTHW}
  3777.   LVM_GETSTRINGWIDTHW      = LVM_FIRST + 87;
  3778.  
  3779.  
  3780.  
  3781.   {$EXTERNALSYM LVM_GETSTRINGWIDTH}
  3782.   LVM_GETSTRINGWIDTH      = LVM_GETSTRINGWIDTHA;
  3783.  
  3784. {$EXTERNALSYM ListView_GetStringWidthA}
  3785. function ListView_GetStringWidthA(hwndLV: HWND; psz: PAnsiChar): Integer;
  3786. {$EXTERNALSYM ListView_GetStringWidthW}
  3787. function ListView_GetStringWidthW(hwndLV: HWND; psz: PWideChar): Integer;
  3788. {$EXTERNALSYM ListView_GetStringWidth}
  3789. function ListView_GetStringWidth(hwndLV: HWND; psz: PChar): Integer;
  3790.  
  3791. const
  3792.   {$EXTERNALSYM LVHT_NOWHERE}
  3793.   LVHT_NOWHERE            = $0001;
  3794.   {$EXTERNALSYM LVHT_ONITEMICON}
  3795.   LVHT_ONITEMICON         = $0002;
  3796.   {$EXTERNALSYM LVHT_ONITEMLABEL}
  3797.   LVHT_ONITEMLABEL        = $0004;
  3798.   {$EXTERNALSYM LVHT_ONITEMSTATEICON}
  3799.   LVHT_ONITEMSTATEICON    = $0008;
  3800.   {$EXTERNALSYM LVHT_ONITEM}
  3801.   LVHT_ONITEM             = LVHT_ONITEMICON or LVHT_ONITEMLABEL or
  3802.                 LVHT_ONITEMSTATEICON;
  3803.   {$EXTERNALSYM LVHT_ABOVE}
  3804.   LVHT_ABOVE              = $0008;
  3805.   {$EXTERNALSYM LVHT_BELOW}
  3806.   LVHT_BELOW              = $0010;
  3807.   {$EXTERNALSYM LVHT_TORIGHT}
  3808.   LVHT_TORIGHT            = $0020;
  3809.   {$EXTERNALSYM LVHT_TOLEFT}
  3810.   LVHT_TOLEFT             = $0040;
  3811.  
  3812. type
  3813.   PLVHitTestInfo = ^TLVHitTestInfo;
  3814.   {$EXTERNALSYM tagLVHITTESTINFO}
  3815.   tagLVHITTESTINFO = packed record
  3816.     pt: TPoint;
  3817.     flags: UINT;
  3818.     iItem: Integer;
  3819.     iSubItem: Integer;    // this is was NOT in win95.  valid only for LVM_SUBITEMHITTEST
  3820.   end;
  3821.   TLVHitTestInfo = tagLVHITTESTINFO;
  3822.   {$EXTERNALSYM LV_HITTESTINFO}
  3823.   LV_HITTESTINFO = tagLVHITTESTINFO;
  3824.   {$EXTERNALSYM _LV_HITTESTINFO}
  3825.   _LV_HITTESTINFO = tagLVHITTESTINFO;
  3826.  
  3827. const
  3828.   {$EXTERNALSYM LVM_HITTEST}
  3829.   LVM_HITTEST             = LVM_FIRST + 18;
  3830.  
  3831. {$EXTERNALSYM ListView_HitTest}
  3832. function ListView_HitTest(hwndLV: HWND; var pinfo: TLVHitTestInfo): Integer;
  3833.  
  3834. const
  3835.   {$EXTERNALSYM LVM_ENSUREVISIBLE}
  3836.   LVM_ENSUREVISIBLE       = LVM_FIRST + 19;
  3837.  
  3838. {$EXTERNALSYM ListView_EnsureVisible}
  3839. function ListView_EnsureVisible(hwndLV: HWND; i: Integer; fPartialOK: Bool): Bool;
  3840.  
  3841. const
  3842.   {$EXTERNALSYM LVM_SCROLL}
  3843.   LVM_SCROLL              = LVM_FIRST + 20;
  3844.  
  3845. {$EXTERNALSYM ListView_Scroll}
  3846. function ListView_Scroll(hwndLV: HWnd; DX, DY: Integer): Bool;
  3847.  
  3848. const
  3849.   {$EXTERNALSYM LVM_REDRAWITEMS}
  3850.   LVM_REDRAWITEMS         = LVM_FIRST + 21;
  3851.  
  3852. {$EXTERNALSYM ListView_RedrawItems}
  3853. function ListView_RedrawItems(hwndLV: HWND; iFirst, iLast: Integer): Bool;
  3854.  
  3855. const
  3856.   {$EXTERNALSYM LVA_DEFAULT}
  3857.   LVA_DEFAULT             = $0000;
  3858.   {$EXTERNALSYM LVA_ALIGNLEFT}
  3859.   LVA_ALIGNLEFT           = $0001;
  3860.   {$EXTERNALSYM LVA_ALIGNTOP}
  3861.   LVA_ALIGNTOP            = $0002;
  3862.   LVA_ALIGNRIGHT          = $0003;
  3863.   LVA_ALIGNBOTTOM         = $0004;
  3864.   {$EXTERNALSYM LVA_SNAPTOGRID}
  3865.   LVA_SNAPTOGRID          = $0005;
  3866.  
  3867.   LVA_SORTASCENDING       = $0100;
  3868.   LVA_SORTDESCENDING      = $0200;
  3869.  
  3870.   {$EXTERNALSYM LVM_ARRANGE}
  3871.   LVM_ARRANGE             = LVM_FIRST + 22;
  3872.  
  3873. {$EXTERNALSYM ListView_Arrange}
  3874. function ListView_Arrange(hwndLV: HWND; Code: UINT): Bool;
  3875.  
  3876.  
  3877. const
  3878.   {$EXTERNALSYM LVM_EDITLABELA}
  3879.   LVM_EDITLABELA           = LVM_FIRST + 23;
  3880.   {$EXTERNALSYM LVM_EDITLABELW}
  3881.   LVM_EDITLABELW           = LVM_FIRST + 118;
  3882.  
  3883.  
  3884.  
  3885.   {$EXTERNALSYM LVM_EDITLABEL}
  3886.   LVM_EDITLABEL           = LVM_EDITLABELA;
  3887.  
  3888. {$EXTERNALSYM ListView_EditLabelA}
  3889. function ListView_EditLabelA(hwndLV: HWND; i: Integer): HWND;
  3890. {$EXTERNALSYM ListView_EditLabelW}
  3891. function ListView_EditLabelW(hwndLV: HWND; i: Integer): HWND;
  3892. {$EXTERNALSYM ListView_EditLabel}
  3893. function ListView_EditLabel(hwndLV: HWND; i: Integer): HWND;
  3894.  
  3895. const
  3896.   {$EXTERNALSYM LVM_GETEDITCONTROL}
  3897.   LVM_GETEDITCONTROL      = LVM_FIRST + 24;
  3898.  
  3899. {$EXTERNALSYM ListView_GetEditControl}
  3900. function ListView_GetEditControl(hwndLV: HWND): HWND;
  3901.  
  3902. type
  3903.   PLVColumnA = ^TLVColumnA;
  3904.   PLVColumnW = ^TLVColumnW;
  3905.   PLVColumn = PLVColumnA;
  3906.   {$EXTERNALSYM tagLVCOLUMNA}
  3907.   tagLVCOLUMNA = packed record
  3908.     mask: UINT;
  3909.     fmt: Integer;
  3910.     cx: Integer;
  3911.     pszText: PAnsiChar;
  3912.     cchTextMax: Integer;
  3913.     iSubItem: Integer;
  3914.     iImage: Integer;
  3915.     iOrder: Integer;
  3916.   end;
  3917.   {$EXTERNALSYM tagLVCOLUMNW}
  3918.   tagLVCOLUMNW = packed record
  3919.     mask: UINT;
  3920.     fmt: Integer;
  3921.     cx: Integer;
  3922.     pszText: PWideChar;
  3923.     cchTextMax: Integer;
  3924.     iSubItem: Integer;
  3925.     iImage: Integer;
  3926.     iOrder: Integer;
  3927.   end;
  3928.   {$EXTERNALSYM tagLVCOLUMN}
  3929.   tagLVCOLUMN = tagLVCOLUMNA;
  3930.   {$EXTERNALSYM _LV_COLUMNA}
  3931.   _LV_COLUMNA = tagLVCOLUMNA;
  3932.   {$EXTERNALSYM _LV_COLUMNW}
  3933.   _LV_COLUMNW = tagLVCOLUMNW;
  3934.   {$EXTERNALSYM _LV_COLUMN}
  3935.   _LV_COLUMN = _LV_COLUMNA;
  3936.   TLVColumnA = tagLVCOLUMNA;
  3937.   TLVColumnW = tagLVCOLUMNW;
  3938.   TLVColumn = TLVColumnA;
  3939.   {$EXTERNALSYM LV_COLUMNA}
  3940.   LV_COLUMNA = tagLVCOLUMNA;
  3941.   {$EXTERNALSYM LV_COLUMNW}
  3942.   LV_COLUMNW = tagLVCOLUMNW;
  3943.   {$EXTERNALSYM LV_COLUMN}
  3944.   LV_COLUMN = LV_COLUMNA;
  3945.  
  3946. const
  3947.   {$EXTERNALSYM LVCF_FMT}
  3948.   LVCF_FMT                = $0001;
  3949.   {$EXTERNALSYM LVCF_WIDTH}
  3950.   LVCF_WIDTH              = $0002;
  3951.   {$EXTERNALSYM LVCF_TEXT}
  3952.   LVCF_TEXT               = $0004;
  3953.   {$EXTERNALSYM LVCF_SUBITEM}
  3954.   LVCF_SUBITEM            = $0008;
  3955.   {$EXTERNALSYM LVCF_IMAGE}
  3956.   LVCF_IMAGE              = $0010;
  3957.   {$EXTERNALSYM LVCF_ORDER}
  3958.   LVCF_ORDER              = $0020;
  3959.  
  3960.   {$EXTERNALSYM LVCFMT_LEFT}
  3961.   LVCFMT_LEFT             = $0000; 
  3962.   {$EXTERNALSYM LVCFMT_RIGHT}
  3963.   LVCFMT_RIGHT            = $0001;
  3964.   {$EXTERNALSYM LVCFMT_CENTER}
  3965.   LVCFMT_CENTER           = $0002; 
  3966.   {$EXTERNALSYM LVCFMT_JUSTIFYMASK}
  3967.   LVCFMT_JUSTIFYMASK      = $0003;
  3968.   {$EXTERNALSYM LVCFMT_IMAGE}
  3969.   LVCFMT_IMAGE            = $0800;
  3970.   {$EXTERNALSYM LVCFMT_BITMAP_ON_RIGHT}
  3971.   LVCFMT_BITMAP_ON_RIGHT  = $1000;
  3972.   {$EXTERNALSYM LVCFMT_COL_HAS_IMAGES}
  3973.   LVCFMT_COL_HAS_IMAGES   = $8000;
  3974.  
  3975.   {$EXTERNALSYM LVM_GETCOLUMNA}
  3976.   LVM_GETCOLUMNA          = LVM_FIRST + 25;
  3977.   {$EXTERNALSYM LVM_GETCOLUMNW}
  3978.   LVM_GETCOLUMNW          = LVM_FIRST + 95;
  3979.  
  3980.  
  3981.  
  3982.   {$EXTERNALSYM LVM_GETCOLUMN}
  3983.   LVM_GETCOLUMN           = LVM_GETCOLUMNA;
  3984.  
  3985. {$EXTERNALSYM ListView_GetColumnA}
  3986. function ListView_GetColumnA(hwnd: HWND; iCol: Integer;
  3987.   var pcol: TLVColumnA): Bool;
  3988. {$EXTERNALSYM ListView_GetColumnW}
  3989. function ListView_GetColumnW(hwnd: HWND; iCol: Integer;
  3990.   var pcol: TLVColumnW): Bool;
  3991. {$EXTERNALSYM ListView_GetColumn}
  3992. function ListView_GetColumn(hwnd: HWND; iCol: Integer;
  3993.   var pcol: TLVColumn): Bool;
  3994.  
  3995. const
  3996.   {$EXTERNALSYM LVM_SETCOLUMNA}
  3997.   LVM_SETCOLUMNA           = LVM_FIRST + 26;
  3998.   {$EXTERNALSYM LVM_SETCOLUMNW}
  3999.   LVM_SETCOLUMNW           = LVM_FIRST + 96;
  4000.  
  4001.  
  4002.  
  4003.   {$EXTERNALSYM LVM_SETCOLUMN}
  4004.   LVM_SETCOLUMN           = LVM_SETCOLUMNA;
  4005.  
  4006. {$EXTERNALSYM ListView_SetColumnA}
  4007. function ListView_SetColumnA(hwnd: HWnd; iCol: Integer; const pcol: TLVColumnA): Bool;
  4008. {$EXTERNALSYM ListView_SetColumnW}
  4009. function ListView_SetColumnW(hwnd: HWnd; iCol: Integer; const pcol: TLVColumnW): Bool;
  4010. {$EXTERNALSYM ListView_SetColumn}
  4011. function ListView_SetColumn(hwnd: HWnd; iCol: Integer; const pcol: TLVColumn): Bool;
  4012.  
  4013. const
  4014.   {$EXTERNALSYM LVM_INSERTCOLUMNA}
  4015.   LVM_INSERTCOLUMNA        = LVM_FIRST + 27;
  4016.   {$EXTERNALSYM LVM_INSERTCOLUMNW}
  4017.   LVM_INSERTCOLUMNW        = LVM_FIRST + 97;
  4018.  
  4019.  
  4020.  
  4021.   {$EXTERNALSYM LVM_INSERTCOLUMN}
  4022.   LVM_INSERTCOLUMN        = LVM_INSERTCOLUMNA;
  4023.  
  4024. {$EXTERNALSYM ListView_InsertColumnA}
  4025. function ListView_InsertColumnA(hwnd: HWND; iCol: Integer;
  4026.   const pcol: TLVColumnA): Integer;
  4027. {$EXTERNALSYM ListView_InsertColumnW}
  4028. function ListView_InsertColumnW(hwnd: HWND; iCol: Integer;
  4029.   const pcol: TLVColumnW): Integer;
  4030. {$EXTERNALSYM ListView_InsertColumn}
  4031. function ListView_InsertColumn(hwnd: HWND; iCol: Integer;
  4032.   const pcol: TLVColumn): Integer;
  4033.  
  4034. const
  4035.   {$EXTERNALSYM LVM_DELETECOLUMN}
  4036.   LVM_DELETECOLUMN        = LVM_FIRST + 28;
  4037.  
  4038. {$EXTERNALSYM ListView_DeleteColumn}
  4039. function ListView_DeleteColumn(hwnd: HWND; iCol: Integer): Bool;
  4040.  
  4041. const
  4042.   {$EXTERNALSYM LVM_GETCOLUMNWIDTH}
  4043.   LVM_GETCOLUMNWIDTH      = LVM_FIRST + 29;
  4044.  
  4045. {$EXTERNALSYM ListView_GetColumnWidth}
  4046. function ListView_GetColumnWidth(hwnd: HWND; iCol: Integer): Integer;
  4047.  
  4048. const
  4049.   {$EXTERNALSYM LVSCW_AUTOSIZE}
  4050.   LVSCW_AUTOSIZE              = -1;
  4051.   {$EXTERNALSYM LVSCW_AUTOSIZE_USEHEADER}
  4052.   LVSCW_AUTOSIZE_USEHEADER    = -2;
  4053.   {$EXTERNALSYM LVM_SETCOLUMNWIDTH}
  4054.   LVM_SETCOLUMNWIDTH          = LVM_FIRST + 30;
  4055.  
  4056. {$EXTERNALSYM ListView_SetColumnWidth}
  4057. function ListView_SetColumnWidth(hwnd: HWnd; iCol: Integer; cx: Integer): Bool;
  4058.  
  4059. const
  4060.   {$EXTERNALSYM LVM_GETHEADER}
  4061.   LVM_GETHEADER               = LVM_FIRST + 31;
  4062.  
  4063. {$EXTERNALSYM ListView_GetHeader}
  4064. function ListView_GetHeader(hwnd: HWND): HWND;
  4065.  
  4066. const
  4067.   {$EXTERNALSYM LVM_CREATEDRAGIMAGE}
  4068.   LVM_CREATEDRAGIMAGE     = LVM_FIRST + 33;
  4069.  
  4070. {$EXTERNALSYM ListView_CreateDragImage}
  4071. function ListView_CreateDragImage(hwnd: HWND; i: Integer;
  4072.   const lpptUpLeft: TPoint): HIMAGELIST;
  4073.  
  4074. const
  4075.   {$EXTERNALSYM LVM_GETVIEWRECT}
  4076.   LVM_GETVIEWRECT         = LVM_FIRST + 34;
  4077.  
  4078. {$EXTERNALSYM ListView_GetViewRect}
  4079. function ListView_GetViewRect(hwnd: HWND; var prc: TRect): Bool;
  4080.  
  4081. const
  4082.   {$EXTERNALSYM LVM_GETTEXTCOLOR}
  4083.   LVM_GETTEXTCOLOR        = LVM_FIRST + 35;
  4084.  
  4085. {$EXTERNALSYM ListView_GetTextColor}
  4086. function ListView_GetTextColor(hwnd: HWND): TColorRef;
  4087.  
  4088. const
  4089.   {$EXTERNALSYM LVM_SETTEXTCOLOR}
  4090.   LVM_SETTEXTCOLOR        = LVM_FIRST + 36;
  4091.  
  4092. {$EXTERNALSYM ListView_SetTextColor}
  4093. function ListView_SetTextColor(hwnd: HWND; clrText: TColorRef): Bool;
  4094.  
  4095. const
  4096.   {$EXTERNALSYM LVM_GETTEXTBKCOLOR}
  4097.   LVM_GETTEXTBKCOLOR      = LVM_FIRST + 37;
  4098.  
  4099. {$EXTERNALSYM ListView_GetTextBkColor}
  4100. function ListView_GetTextBkColor(hwnd: HWND): TColorRef;
  4101.  
  4102. const
  4103.   {$EXTERNALSYM LVM_SETTEXTBKCOLOR}
  4104.   LVM_SETTEXTBKCOLOR      = LVM_FIRST + 38;
  4105.  
  4106. {$EXTERNALSYM ListView_SetTextBkColor}
  4107. function ListView_SetTextBkColor(hwnd: HWND; clrTextBk: TColorRef): Bool;
  4108.  
  4109. const
  4110.   {$EXTERNALSYM LVM_GETTOPINDEX}
  4111.   LVM_GETTOPINDEX         = LVM_FIRST + 39;
  4112.  
  4113. {$EXTERNALSYM ListView_GetTopIndex}
  4114. function ListView_GetTopIndex(hwndLV: HWND): Integer;
  4115.  
  4116. const
  4117.   {$EXTERNALSYM LVM_GETCOUNTPERPAGE}
  4118.   LVM_GETCOUNTPERPAGE     = LVM_FIRST + 40;
  4119.  
  4120. {$EXTERNALSYM ListView_GetCountPerPage}
  4121. function ListView_GetCountPerPage(hwndLV: HWND): Integer;
  4122.  
  4123. const
  4124.   {$EXTERNALSYM LVM_GETORIGIN}
  4125.   LVM_GETORIGIN           = LVM_FIRST + 41;
  4126.  
  4127. {$EXTERNALSYM ListView_GetOrigin}
  4128. function ListView_GetOrigin(hwndLV: HWND; var ppt: TPoint): Bool;
  4129.  
  4130. const
  4131.   {$EXTERNALSYM LVM_UPDATE}
  4132.   LVM_UPDATE              = LVM_FIRST + 42;
  4133.  
  4134. {$EXTERNALSYM ListView_Update}
  4135. function ListView_Update(hwndLV: HWND; i: Integer): Bool;
  4136.  
  4137. const
  4138.   {$EXTERNALSYM LVM_SETITEMSTATE}
  4139.   LVM_SETITEMSTATE        = LVM_FIRST + 43;
  4140.  
  4141. {$EXTERNALSYM ListView_SetItemState}
  4142. function ListView_SetItemState(hwndLV: HWND; i: Integer; data, mask: UINT): Bool;
  4143.  
  4144. const
  4145.   {$EXTERNALSYM LVM_GETITEMSTATE}
  4146.   LVM_GETITEMSTATE        = LVM_FIRST + 44;
  4147.  
  4148. {$EXTERNALSYM ListView_GetItemState}
  4149. function ListView_GetItemState(hwndLV: HWND; i, mask: Integer): Integer;
  4150.  
  4151. {$EXTERNALSYM ListView_GetCheckState}
  4152. function ListView_GetCheckState(hwndLV: HWND; i: Integer): UINT;
  4153. {$EXTERNALSYM ListView_SetCheckState}
  4154. procedure ListView_SetCheckState(hwndLV: HWND; i: Integer; Checked: Boolean);
  4155.  
  4156. const
  4157.   {$EXTERNALSYM LVM_GETITEMTEXTA}
  4158.   LVM_GETITEMTEXTA         = LVM_FIRST + 45;
  4159.   {$EXTERNALSYM LVM_GETITEMTEXTW}
  4160.   LVM_GETITEMTEXTW         = LVM_FIRST + 115;
  4161.  
  4162.  
  4163.  
  4164.   {$EXTERNALSYM LVM_GETITEMTEXT}
  4165.   LVM_GETITEMTEXT         = LVM_GETITEMTEXTA;
  4166.  
  4167. {$EXTERNALSYM ListView_GetItemTextA}
  4168. function ListView_GetItemTextA(hwndLV: HWND; i, iSubItem: Integer;
  4169.   pszText: PAnsiChar; cchTextMax: Integer): Integer;
  4170. {$EXTERNALSYM ListView_GetItemTextW}
  4171. function ListView_GetItemTextW(hwndLV: HWND; i, iSubItem: Integer;
  4172.   pszText: PWideChar; cchTextMax: Integer): Integer;
  4173. {$EXTERNALSYM ListView_GetItemText}
  4174. function ListView_GetItemText(hwndLV: HWND; i, iSubItem: Integer;
  4175.   pszText: PChar; cchTextMax: Integer): Integer;
  4176.  
  4177. const
  4178.   {$EXTERNALSYM LVM_SETITEMTEXTA}
  4179.   LVM_SETITEMTEXTA         = LVM_FIRST + 46;
  4180.   {$EXTERNALSYM LVM_SETITEMTEXTW}
  4181.   LVM_SETITEMTEXTW         = LVM_FIRST + 116;
  4182.  
  4183.  
  4184.  
  4185.   {$EXTERNALSYM LVM_SETITEMTEXT}
  4186.   LVM_SETITEMTEXT         = LVM_SETITEMTEXTA;
  4187.  
  4188. {$EXTERNALSYM ListView_SetItemTextA}
  4189. function ListView_SetItemTextA(hwndLV: HWND; i, iSubItem: Integer;
  4190.   pszText: PAnsiChar): Bool;
  4191. {$EXTERNALSYM ListView_SetItemTextW}
  4192. function ListView_SetItemTextW(hwndLV: HWND; i, iSubItem: Integer;
  4193.   pszText: PWideChar): Bool;
  4194. {$EXTERNALSYM ListView_SetItemText}
  4195. function ListView_SetItemText(hwndLV: HWND; i, iSubItem: Integer;
  4196.   pszText: PChar): Bool;
  4197.  
  4198. const
  4199.   // these flags only apply to LVS_OWNERDATA listviews in report or list mode
  4200.   {$EXTERNALSYM LVSICF_NOINVALIDATEALL}
  4201.   LVSICF_NOINVALIDATEALL  = $00000001;
  4202.   {$EXTERNALSYM LVSICF_NOSCROLL}
  4203.   LVSICF_NOSCROLL         = $00000002;
  4204.  
  4205.   {$EXTERNALSYM LVM_SETITEMCOUNT}
  4206.   LVM_SETITEMCOUNT        = LVM_FIRST + 47;
  4207.  
  4208. {$EXTERNALSYM ListView_SetItemCount}
  4209. procedure ListView_SetItemCount(hwndLV: HWND; cItems: Integer);
  4210.  
  4211. {$EXTERNALSYM ListView_SetItemCountEx}
  4212. procedure ListView_SetItemCountEx(hwndLV: HWND; cItems: Integer; dwFlags: DWORD);
  4213.  
  4214. type
  4215.   {$EXTERNALSYM PFNLVCOMPARE}
  4216.   PFNLVCOMPARE = function(lParam1, lParam2, lParamSort: Integer): Integer stdcall;
  4217.   TLVCompare = PFNLVCOMPARE;
  4218.  
  4219. const
  4220.   {$EXTERNALSYM LVM_SORTITEMS}
  4221.   LVM_SORTITEMS           = LVM_FIRST + 48;
  4222.  
  4223. {$EXTERNALSYM ListView_SortItems}
  4224. function ListView_SortItems(hwndLV: HWND; pfnCompare: TLVCompare;
  4225.   lPrm: Longint): Bool;
  4226.  
  4227. const
  4228.   {$EXTERNALSYM LVM_SETITEMPOSITION32}
  4229.   LVM_SETITEMPOSITION32   = LVM_FIRST + 49;
  4230.  
  4231. {$EXTERNALSYM ListView_SetItemPosition32}
  4232. procedure ListView_SetItemPosition32(hwndLV: HWND; i, x, y: Integer);
  4233.  
  4234. const
  4235.   {$EXTERNALSYM LVM_GETSELECTEDCOUNT}
  4236.   LVM_GETSELECTEDCOUNT    = LVM_FIRST + 50;
  4237.  
  4238. {$EXTERNALSYM ListView_GetSelectedCount}
  4239. function ListView_GetSelectedCount(hwndLV: HWND): UINT;
  4240.  
  4241. const
  4242.   {$EXTERNALSYM LVM_GETITEMSPACING}
  4243.   LVM_GETITEMSPACING      = LVM_FIRST + 51;
  4244.  
  4245. {$EXTERNALSYM ListView_GetItemSpacing}
  4246. function ListView_GetItemSpacing(hwndLV: HWND; fSmall: Integer): Longint;
  4247.  
  4248. const
  4249.   {$EXTERNALSYM LVM_GETISEARCHSTRINGA}
  4250.   LVM_GETISEARCHSTRINGA    = LVM_FIRST + 52;
  4251.   {$EXTERNALSYM LVM_GETISEARCHSTRINGW}
  4252.   LVM_GETISEARCHSTRINGW    = LVM_FIRST + 117;
  4253.  
  4254.  
  4255.  
  4256.   {$EXTERNALSYM LVM_GETISEARCHSTRING}
  4257.   LVM_GETISEARCHSTRING    = LVM_GETISEARCHSTRINGA;
  4258.  
  4259. {$EXTERNALSYM ListView_GetISearchStringA}
  4260. function ListView_GetISearchStringA(hwndLV: HWND; lpsz: PAnsiChar): Bool;
  4261. {$EXTERNALSYM ListView_GetISearchStringW}
  4262. function ListView_GetISearchStringW(hwndLV: HWND; lpsz: PWideChar): Bool;
  4263. {$EXTERNALSYM ListView_GetISearchString}
  4264. function ListView_GetISearchString(hwndLV: HWND; lpsz: PChar): Bool;
  4265.  
  4266. const
  4267.   {$EXTERNALSYM LVM_SETICONSPACING}
  4268.   LVM_SETICONSPACING      = LVM_FIRST + 53;
  4269.  
  4270. // -1 for cx and cy means we'll use the default (system settings)
  4271. // 0 for cx or cy means use the current setting (allows you to change just one param)
  4272. {$EXTERNALSYM ListView_SetIconSpacing}
  4273. function ListView_SetIconSpacing(hwndLV: HWND; cx, cy: Word): DWORD;
  4274.  
  4275. const
  4276.   {$EXTERNALSYM LVM_SETEXTENDEDLISTVIEWSTYLE}
  4277.   LVM_SETEXTENDEDLISTVIEWSTYLE = LVM_FIRST + 54;
  4278.  
  4279. {$EXTERNALSYM ListView_SetExtendedListViewStyle}
  4280. function ListView_SetExtendedListViewStyle(hwndLV: HWND; dw: DWORD): BOOL;
  4281.  
  4282. const
  4283.   {$EXTERNALSYM LVM_GETEXTENDEDLISTVIEWSTYLE}
  4284.   LVM_GETEXTENDEDLISTVIEWSTYLE = LVM_FIRST + 55;
  4285.  
  4286. {$EXTERNALSYM ListView_GetExtendedListViewStyle}
  4287. function ListView_GetExtendedListViewStyle(hwndLV: HWND): DWORD;
  4288.  
  4289. const
  4290.   {$EXTERNALSYM LVM_GETSUBITEMRECT}
  4291.   LVM_GETSUBITEMRECT      = LVM_FIRST + 56;
  4292.  
  4293. {$EXTERNALSYM ListView_GetSubItemRect}
  4294. function ListView_GetSubItemRect(hwndLV: HWND; iItem, iSubItem: Integer;
  4295.   code: DWORD; prc: PRect): BOOL;
  4296.  
  4297. const
  4298.   {$EXTERNALSYM LVM_SUBITEMHITTEST}
  4299.   LVM_SUBITEMHITTEST      = LVM_FIRST + 57;
  4300.  
  4301. {$EXTERNALSYM ListView_SubItemHitTest}
  4302. function ListView_SubItemHitTest(hwndLV: HWND; plvhti: PLVHitTestInfo): Integer;
  4303.  
  4304. const
  4305.   {$EXTERNALSYM LVM_SETCOLUMNORDERARRAY}
  4306.   LVM_SETCOLUMNORDERARRAY = LVM_FIRST + 58;
  4307.  
  4308. {$EXTERNALSYM ListView_SetColumnOrderArray}
  4309. function ListView_SetColumnOrderArray(hwndLV: HWND; iCount: Integer;
  4310.   pi: PInteger): BOOL;
  4311.  
  4312. const
  4313.   {$EXTERNALSYM LVM_GETCOLUMNORDERARRAY}
  4314.   LVM_GETCOLUMNORDERARRAY = LVM_FIRST + 59;
  4315.  
  4316. {$EXTERNALSYM ListView_GetColumnOrderArray}
  4317. function ListView_GetColumnOrderArray(hwndLV: HWND; iCount: Integer;
  4318.   pi: PInteger): BOOL;
  4319.  
  4320. const
  4321.   {$EXTERNALSYM LVM_SETHOTITEM}
  4322.   LVM_SETHOTITEM  = LVM_FIRST + 60;
  4323.  
  4324. {$EXTERNALSYM ListView_SetHotItem}
  4325. function ListView_SetHotItem(hwndLV: HWND; i: Integer): Integer;
  4326.  
  4327. const
  4328.   {$EXTERNALSYM LVM_GETHOTITEM}
  4329.   LVM_GETHOTITEM  = LVM_FIRST + 61;
  4330.  
  4331. {$EXTERNALSYM ListView_GetHotItem}
  4332. function ListView_GetHotItem(hwndLV: HWND): Integer;
  4333.  
  4334. const
  4335.   {$EXTERNALSYM LVM_SETHOTCURSOR}
  4336.   LVM_SETHOTCURSOR  = LVM_FIRST + 62;
  4337.  
  4338. {$EXTERNALSYM ListView_SetHotCursor}
  4339. function ListView_SetHotCursor(hwndLV: HWND; hcur: HCURSOR): HCURSOR;
  4340.  
  4341. const
  4342.   {$EXTERNALSYM LVM_GETHOTCURSOR}
  4343.   LVM_GETHOTCURSOR  = LVM_FIRST + 63;
  4344.  
  4345. {$EXTERNALSYM ListView_GetHotCursor}
  4346. function ListView_GetHotCursor(hwndLV: HWND): HCURSOR;
  4347.  
  4348. const
  4349.   {$EXTERNALSYM LVM_APPROXIMATEVIEWRECT}
  4350.   LVM_APPROXIMATEVIEWRECT = LVM_FIRST + 64;
  4351.  
  4352. {$EXTERNALSYM ListView_ApproximateViewRect}
  4353. function ListView_ApproximateViewRect(hwndLV: HWND; iWidth, iHeight: Word;
  4354.   iCount: Integer): DWORD;
  4355.  
  4356. const
  4357.   {$EXTERNALSYM LV_MAX_WORKAREAS}
  4358.   LV_MAX_WORKAREAS        = 16;
  4359.   {$EXTERNALSYM LVM_SETWORKAREA}
  4360.   LVM_SETWORKAREA         = LVM_FIRST + 65;
  4361.  
  4362. {$EXTERNALSYM ListView_SetWorkAreas}
  4363. function ListView_SetWorkAreas(hwndLV: HWND; nWorkAreas: Integer; prc: PRect): BOOL;
  4364.  
  4365. const
  4366.   {$EXTERNALSYM LVM_GETSELECTIONMARK}
  4367.   LVM_GETSELECTIONMARK    = LVM_FIRST + 66;
  4368.  
  4369. {$EXTERNALSYM ListView_GetSelectionMark}
  4370. function ListView_GetSelectionMark(hwnd: HWND): Integer;
  4371.  
  4372. const
  4373.   {$EXTERNALSYM LVM_SETSELECTIONMARK}
  4374.   LVM_SETSELECTIONMARK    = LVM_FIRST + 67;
  4375.  
  4376. {$EXTERNALSYM ListView_SetSelectionMark}
  4377. function ListView_SetSelectionMark(hwnd: HWND; i: Integer): Integer;
  4378.  
  4379. const
  4380.   {$EXTERNALSYM LVM_GETWORKAREAS}
  4381.   LVM_GETWORKAREAS        = LVM_FIRST + 70;
  4382.  
  4383. {$EXTERNALSYM ListView_GetWorkAreas}
  4384. function ListView_GetWorkAreas(hwnd: HWND; nWorkAreas: Integer; prc: PRect): BOOL;
  4385.  
  4386. const
  4387.   {$EXTERNALSYM LVM_SETHOVERTIME}
  4388.   LVM_SETHOVERTIME        = LVM_FIRST + 71;
  4389.  
  4390. {$EXTERNALSYM ListView_SetHoverTime}
  4391. function ListView_SetHoverTime(hwndLV: HWND; dwHoverTimeMs: DWORD): DWORD;
  4392.  
  4393. const
  4394.   {$EXTERNALSYM LVM_GETHOVERTIME}
  4395.   LVM_GETHOVERTIME        = LVM_FIRST + 72;
  4396.  
  4397. {$EXTERNALSYM ListView_GetHoverTime}
  4398. function ListView_GetHoverTime(hwndLV: HWND): Integer;
  4399.  
  4400. const
  4401.   {$EXTERNALSYM LVM_GETNUMBEROFWORKAREAS}
  4402.   LVM_GETNUMBEROFWORKAREAS  = LVM_FIRST + 73;
  4403.  
  4404. {$EXTERNALSYM ListView_GetNumberOfWorkAreas}
  4405. function ListView_GetNumberOfWorkAreas(hwnd: HWND; pnWorkAreas: PInteger): Integer;
  4406.  
  4407. const
  4408.   {$EXTERNALSYM LVM_SETTOOLTIPS}
  4409.   LVM_SETTOOLTIPS       = LVM_FIRST + 74;
  4410.  
  4411. {$EXTERNALSYM ListView_SetToolTips}
  4412. function ListView_SetToolTips(hwndLV: HWND; hwndNewHwnd: HWND): HWND;
  4413.  
  4414. const
  4415.   {$EXTERNALSYM LVM_GETTOOLTIPS}
  4416.   LVM_GETTOOLTIPS       = LVM_FIRST + 78;
  4417.  
  4418. {$EXTERNALSYM ListView_GetToolTips}
  4419. function ListView_GetToolTips(hwndLV: HWND): HWND;
  4420.  
  4421. type
  4422. {$EXTERNALSYM tagLVBKIMAGEA}
  4423.   tagLVBKIMAGEA = packed record
  4424.     ulFlags: ULONG;              // LVBKIF_*
  4425.     hbm: HBITMAP;
  4426.     pszImage: PAnsiChar;
  4427.     cchImageMax: UINT;
  4428.     xOffsetPercent: Integer;
  4429.     yOffsetPercent: Integer;
  4430.   end;
  4431. {$EXTERNALSYM tagLVBKIMAGEW}
  4432.   tagLVBKIMAGEW = packed record
  4433.     ulFlags: ULONG;              // LVBKIF_*
  4434.     hbm: HBITMAP;
  4435.     pszImage: PWideChar;
  4436.     cchImageMax: UINT;
  4437.     xOffsetPercent: Integer;
  4438.     yOffsetPercent: Integer;
  4439.   end;
  4440.   {$EXTERNALSYM tagLVBKIMAGE}
  4441.   tagLVBKIMAGE = tagLVBKIMAGEA;
  4442.   PLVBKImageA = ^TLVBKImageA;
  4443.   PLVBKImageW = ^TLVBKImageW;
  4444.   PLVBKImage = PLVBKImageA;
  4445.   TLVBKImageA = tagLVBKIMAGEA;
  4446.   TLVBKImageW = tagLVBKIMAGEW;
  4447.   TLVBKImage = TLVBKImageA;
  4448.  
  4449. const
  4450.   {$EXTERNALSYM LVBKIF_SOURCE_NONE}
  4451.   LVBKIF_SOURCE_NONE      = $00000000;
  4452.   {$EXTERNALSYM LVBKIF_SOURCE_HBITMAP}
  4453.   LVBKIF_SOURCE_HBITMAP   = $00000001;
  4454.   {$EXTERNALSYM LVBKIF_SOURCE_URL}
  4455.   LVBKIF_SOURCE_URL       = $00000002;
  4456.   {$EXTERNALSYM LVBKIF_SOURCE_MASK}
  4457.   LVBKIF_SOURCE_MASK      = $00000003;
  4458.   {$EXTERNALSYM LVBKIF_STYLE_NORMAL}
  4459.   LVBKIF_STYLE_NORMAL     = $00000000;
  4460.   {$EXTERNALSYM LVBKIF_STYLE_TILE}
  4461.   LVBKIF_STYLE_TILE       = $00000010;
  4462.   {$EXTERNALSYM LVBKIF_STYLE_MASK}
  4463.   LVBKIF_STYLE_MASK       = $00000010;
  4464.  
  4465.   {$EXTERNALSYM LVM_SETBKIMAGEA}
  4466.   LVM_SETBKIMAGEA         = LVM_FIRST + 68;
  4467.   {$EXTERNALSYM LVM_SETBKIMAGEW}
  4468.   LVM_SETBKIMAGEW         = LVM_FIRST + 138;
  4469.   {$EXTERNALSYM LVM_GETBKIMAGEA}
  4470.   LVM_GETBKIMAGEA         = LVM_FIRST + 69;
  4471.   {$EXTERNALSYM LVM_GETBKIMAGEW}
  4472.   LVM_GETBKIMAGEW         = LVM_FIRST + 139;
  4473.  
  4474.  
  4475.  
  4476.  
  4477.  
  4478.  
  4479.   {$EXTERNALSYM LVM_SETBKIMAGE}
  4480.   LVM_SETBKIMAGE = LVM_SETBKIMAGEA;
  4481.   {$EXTERNALSYM LVM_GETBKIMAGE}
  4482.   LVM_GETBKIMAGE = LVM_GETBKIMAGEA;
  4483.  
  4484. {$EXTERNALSYM ListView_SetBkImage}
  4485. function ListView_SetBkImage(hwnd: HWND; plvbki: PLVBKImage): BOOL;
  4486.  
  4487. {$EXTERNALSYM ListView_GetBkImage}
  4488. function ListView_GetBkImage(hwnd: HWND; plvbki: PLVBKImage): BOOL;
  4489.  
  4490. type
  4491.   {$EXTERNALSYM tagNMLISTVIEW}
  4492.   tagNMLISTVIEW = packed record
  4493.     hdr: TNMHDR;
  4494.     iItem: Integer;
  4495.     iSubItem: Integer;
  4496.     uNewState: UINT;
  4497.     uOldState: UINT;
  4498.     uChanged: UINT;
  4499.     ptAction: TPoint;
  4500.     lParam: LPARAM;
  4501.   end;
  4502.   {$EXTERNALSYM _NM_LISTVIEW}
  4503.   _NM_LISTVIEW = tagNMLISTVIEW;
  4504.   {$EXTERNALSYM NM_LISTVIEW}
  4505.   NM_LISTVIEW = tagNMLISTVIEW;
  4506.   PNMListView = ^TNMListView;
  4507.   TNMListView = tagNMLISTVIEW;
  4508.  
  4509.   // NMITEMACTIVATE is used instead of NMLISTVIEW in IE >= 0x400
  4510.   // therefore all the fields are the same except for extra uKeyFlags
  4511.   // they are used to store key flags at the time of the single click with
  4512.   // delayed activation - because by the time the timer goes off a user may
  4513.   // not hold the keys (shift, ctrl) any more
  4514.   {$EXTERNALSYM tagNMITEMACTIVATE}
  4515.   tagNMITEMACTIVATE = packed record
  4516.     hdr: TNMHdr;
  4517.     iItem: Integer;
  4518.     iSubItem: Integer;
  4519.     uNewState: UINT;
  4520.     uOldState: UINT;
  4521.     uChanged: UINT;
  4522.     ptAction: TPoint;
  4523.     lParam: LPARAM;
  4524.     uKeyFlags: UINT;
  4525.   end;
  4526.   PNMItemActivate = ^TNMItemActivate;
  4527.   TNMItemActivate = tagNMITEMACTIVATE;
  4528.  
  4529. const
  4530.   // key flags stored in uKeyFlags
  4531.   {$EXTERNALSYM LVKF_ALT}
  4532.   LVKF_ALT       = $0001;
  4533.   {$EXTERNALSYM LVKF_CONTROL}
  4534.   LVKF_CONTROL   = $0002;
  4535.   {$EXTERNALSYM LVKF_SHIFT}
  4536.   LVKF_SHIFT     = $0004;
  4537.  
  4538. type
  4539.   {$EXTERNALSYM tagNMLVCUSTOMDRAW}
  4540.   tagNMLVCUSTOMDRAW = packed record
  4541.     nmcd: TNMCustomDraw;
  4542.     clrText: COLORREF;
  4543.     clrTextBk: COLORREF;
  4544.     iSubItem: Integer;
  4545.   end;
  4546.   PNMLVCustomDraw = ^TNMLVCustomDraw;
  4547.   TNMLVCustomDraw = tagNMLVCUSTOMDRAW;
  4548.  
  4549.   {$EXTERNALSYM tagNMLVCACHEHINT}
  4550.   tagNMLVCACHEHINT = packed record
  4551.     hdr: TNMHDR;
  4552.     iFrom: Integer;
  4553.     iTo: Integer;
  4554.   end;
  4555.   PNMLVCacheHint = ^TNMLVCacheHint;
  4556.   TNMLVCacheHint = tagNMLVCACHEHINT;
  4557.   PNMCacheHint = ^TNMCacheHint;
  4558.   TNMCacheHint = tagNMLVCACHEHINT;
  4559.  
  4560.   {$EXTERNALSYM tagNMLVFINDITEMA} // WIN2K
  4561.   tagNMLVFINDITEMA = packed record // WIN2K
  4562.     hdr: TNMHdr;
  4563.     iStart: Integer;
  4564.     lvfi: TLVFindInfo;
  4565.   end;
  4566.   PNMLVFinditem = ^TNMLVFinditem;
  4567.   TNMLVFinditem = tagNMLVFINDITEMA; // WIN2K
  4568.   PNMFinditem = ^TNMFinditem;
  4569.   TNMFinditem = tagNMLVFINDITEMA; // WIN2K
  4570.  
  4571.   {$EXTERNALSYM tagNMLVODSTATECHANGE}
  4572.   tagNMLVODSTATECHANGE = packed record
  4573.     hdr: TNMHdr;
  4574.     iFrom: Integer;
  4575.     iTo: Integer;
  4576.     uNewState: UINT;
  4577.     uOldState: UINT;
  4578.   end;
  4579.   PNMLVODStateChange = ^TNMLVODStateChange;
  4580.   TNMLVODStateChange = tagNMLVODSTATECHANGE;
  4581.  
  4582. const
  4583.   {$EXTERNALSYM LVN_ITEMCHANGING}
  4584.   LVN_ITEMCHANGING        = LVN_FIRST-0;
  4585.   {$EXTERNALSYM LVN_ITEMCHANGED}
  4586.   LVN_ITEMCHANGED         = LVN_FIRST-1;
  4587.   {$EXTERNALSYM LVN_INSERTITEM}
  4588.   LVN_INSERTITEM          = LVN_FIRST-2;
  4589.   {$EXTERNALSYM LVN_DELETEITEM}
  4590.   LVN_DELETEITEM          = LVN_FIRST-3;
  4591.   {$EXTERNALSYM LVN_DELETEALLITEMS}
  4592.   LVN_DELETEALLITEMS      = LVN_FIRST-4;
  4593.   {$EXTERNALSYM LVN_COLUMNCLICK}
  4594.   LVN_COLUMNCLICK         = LVN_FIRST-8;
  4595.   {$EXTERNALSYM LVN_BEGINDRAG}
  4596.   LVN_BEGINDRAG           = LVN_FIRST-9;
  4597.   {$EXTERNALSYM LVN_BEGINRDRAG}
  4598.   LVN_BEGINRDRAG          = LVN_FIRST-11;
  4599.  
  4600.   {$EXTERNALSYM LVN_ODCACHEHINT}
  4601.   LVN_ODCACHEHINT         = LVN_FIRST-13;
  4602.   {$EXTERNALSYM LVN_ODFINDITEMA}
  4603.   LVN_ODFINDITEMA         = LVN_FIRST-52;
  4604.   {$EXTERNALSYM LVN_ODFINDITEMW}
  4605.   LVN_ODFINDITEMW         = LVN_FIRST-79;
  4606.  
  4607.   {$EXTERNALSYM LVN_ITEMACTIVATE}
  4608.   LVN_ITEMACTIVATE        = LVN_FIRST-14;
  4609.   {$EXTERNALSYM LVN_ODSTATECHANGED}
  4610.   LVN_ODSTATECHANGED      = LVN_FIRST-15;
  4611.  
  4612.  
  4613.  
  4614.  
  4615.   {$EXTERNALSYM LVN_ODFINDITEM}
  4616.   LVN_ODFINDITEM          = LVN_ODFINDITEMA; 
  4617.  
  4618.   {$EXTERNALSYM LVN_BEGINLABELEDITA}
  4619.   LVN_BEGINLABELEDITA      = LVN_FIRST-5;
  4620.   {$EXTERNALSYM LVN_ENDLABELEDITA}
  4621.   LVN_ENDLABELEDITA        = LVN_FIRST-6;
  4622.   {$EXTERNALSYM LVN_BEGINLABELEDITW}
  4623.   LVN_BEGINLABELEDITW      = LVN_FIRST-75;
  4624.   {$EXTERNALSYM LVN_ENDLABELEDITW}
  4625.   LVN_ENDLABELEDITW        = LVN_FIRST-76;
  4626.  
  4627.  
  4628.  
  4629.  
  4630.  
  4631.   {$EXTERNALSYM LVN_BEGINLABELEDIT}
  4632.   LVN_BEGINLABELEDIT      = LVN_BEGINLABELEDITA;
  4633.   {$EXTERNALSYM LVN_ENDLABELEDIT}
  4634.   LVN_ENDLABELEDIT        = LVN_ENDLABELEDITA;
  4635.  
  4636.   {$EXTERNALSYM LVN_HOTTRACK}
  4637.   LVN_HOTTRACK            = LVN_FIRST-21;
  4638.   
  4639.   {$EXTERNALSYM LVN_GETDISPINFOA}
  4640.   LVN_GETDISPINFOA        = LVN_FIRST-50;
  4641.   {$EXTERNALSYM LVN_SETDISPINFOA}
  4642.   LVN_SETDISPINFOA        = LVN_FIRST-51;
  4643.   {$EXTERNALSYM LVN_GETDISPINFOW}
  4644.   LVN_GETDISPINFOW        = LVN_FIRST-77;
  4645.   {$EXTERNALSYM LVN_SETDISPINFOW}
  4646.   LVN_SETDISPINFOW        = LVN_FIRST-78;
  4647.  
  4648.  
  4649.  
  4650.  
  4651.  
  4652.   {$EXTERNALSYM LVN_GETDISPINFO}
  4653.   LVN_GETDISPINFO        = LVN_GETDISPINFOA;
  4654.   {$EXTERNALSYM LVN_SETDISPINFO}
  4655.   LVN_SETDISPINFO        = LVN_SETDISPINFOA;
  4656.  
  4657.   {$EXTERNALSYM LVIF_DI_SETITEM}
  4658.   LVIF_DI_SETITEM         = $1000;
  4659.  
  4660. type
  4661.   PLVDispInfoA = ^TLVDispInfoA;
  4662.   PLVDispInfoW = ^TLVDispInfoW;
  4663.   PLVDispInfo = PLVDispInfoA;
  4664.   {$EXTERNALSYM tagLVDISPINFO}
  4665.   tagLVDISPINFO = packed record
  4666.     hdr: TNMHDR;
  4667.     item: TLVItemA;
  4668.   end;
  4669.   {$EXTERNALSYM _LV_DISPINFO}
  4670.   _LV_DISPINFO = tagLVDISPINFO;
  4671.   {$EXTERNALSYM tagLVDISPINFOW}
  4672.   tagLVDISPINFOW = packed record
  4673.     hdr: TNMHDR;
  4674.     item: TLVItemW;
  4675.   end;
  4676.   {$EXTERNALSYM _LV_DISPINFOW}
  4677.   _LV_DISPINFOW = tagLVDISPINFOW;
  4678.   TLVDispInfoA = tagLVDISPINFO;
  4679.   TLVDispInfoW = tagLVDISPINFOW;
  4680.   TLVDispInfo = TLVDispInfoA;
  4681.   {$EXTERNALSYM LV_DISPINFOA}
  4682.   LV_DISPINFOA = tagLVDISPINFO;
  4683.   {$EXTERNALSYM LV_DISPINFOW}
  4684.   LV_DISPINFOW = tagLVDISPINFOW;
  4685.   {$EXTERNALSYM LV_DISPINFO}
  4686.   LV_DISPINFO = LV_DISPINFOA;
  4687.  
  4688. const
  4689.   {$EXTERNALSYM LVN_KEYDOWN}
  4690.   LVN_KEYDOWN             = LVN_FIRST-55;
  4691.  
  4692. type
  4693.   PLVKeyDown = ^TLVKeyDown;
  4694.   {$EXTERNALSYM tagLVKEYDOWN}
  4695.   tagLVKEYDOWN = packed record
  4696.     hdr: TNMHDR;
  4697.     wVKey: Word;
  4698.     flags: UINT;
  4699.   end;
  4700.   {$EXTERNALSYM _LV_KEYDOWN}
  4701.   _LV_KEYDOWN = tagLVKEYDOWN;
  4702.   TLVKeyDown = tagLVKEYDOWN;
  4703.   {$EXTERNALSYM LV_KEYDOWN}
  4704.   LV_KEYDOWN = tagLVKEYDOWN;
  4705.  
  4706. const
  4707.   {$EXTERNALSYM LVN_MARQUEEBEGIN}
  4708.   LVN_MARQUEEBEGIN        = LVN_FIRST-56;
  4709.  
  4710. type
  4711.   {$EXTERNALSYM tagNMLVGETINFOTIPA}
  4712.   tagNMLVGETINFOTIPA = packed record
  4713.     hdr: TNMHdr;
  4714.     dwFlags: DWORD;
  4715.     pszText: PAnsiChar;
  4716.     cchTextMax: Integer;
  4717.     iItem: Integer;
  4718.     iSubItem: Integer;
  4719.     lParam: LPARAM;
  4720.   end;
  4721.   {$EXTERNALSYM tagNMLVGETINFOTIPW}
  4722.   tagNMLVGETINFOTIPW = packed record
  4723.     hdr: TNMHdr;
  4724.     dwFlags: DWORD;
  4725.     pszText: PWideChar;
  4726.     cchTextMax: Integer;
  4727.     iItem: Integer;
  4728.     iSubItem: Integer;
  4729.     lParam: LPARAM;
  4730.   end;
  4731.   {$EXTERNALSYM tagNMLVGETINFOTIP}
  4732.   tagNMLVGETINFOTIP = tagNMLVGETINFOTIPA;
  4733.   PNMLVGetInfoTipA = ^TNMLVGetInfoTipA;
  4734.   PNMLVGetInfoTipW = ^TNMLVGetInfoTipW;
  4735.   PNMLVGetInfoTip = PNMLVGetInfoTipA;
  4736.   TNMLVGetInfoTipA = tagNMLVGETINFOTIPA;
  4737.   TNMLVGetInfoTipW = tagNMLVGETINFOTIPW;
  4738.   TNMLVGetInfoTip = TNMLVGetInfoTipA;
  4739.  
  4740. const
  4741.   // NMLVGETINFOTIPA.dwFlag values
  4742.   {$EXTERNALSYM LVGIT_UNFOLDED}
  4743.   LVGIT_UNFOLDED  = $0001;
  4744.  
  4745.   {$EXTERNALSYM LVN_GETINFOTIPA}
  4746.   LVN_GETINFOTIPA          = LVN_FIRST-57;
  4747.   {$EXTERNALSYM LVN_GETINFOTIPW}
  4748.   LVN_GETINFOTIPW          = LVN_FIRST-58;
  4749.  
  4750.  
  4751.  
  4752.  
  4753.   {$EXTERNALSYM LVN_GETINFOTIP}
  4754.   LVN_GETINFOTIP          = LVN_GETINFOTIPA;
  4755.  
  4756. { ====== TREEVIEW CONTROL =================== }
  4757.  
  4758. const
  4759.   {$EXTERNALSYM WC_TREEVIEW}
  4760.   WC_TREEVIEW = 'SysTreeView32';
  4761.  
  4762. const
  4763.   {$EXTERNALSYM TVS_HASBUTTONS}
  4764.   TVS_HASBUTTONS          = $0001;
  4765.   {$EXTERNALSYM TVS_HASLINES}
  4766.   TVS_HASLINES            = $0002;
  4767.   {$EXTERNALSYM TVS_LINESATROOT}
  4768.   TVS_LINESATROOT         = $0004;
  4769.   {$EXTERNALSYM TVS_EDITLABELS}
  4770.   TVS_EDITLABELS          = $0008;
  4771.   {$EXTERNALSYM TVS_DISABLEDRAGDROP}
  4772.   TVS_DISABLEDRAGDROP     = $0010;
  4773.   {$EXTERNALSYM TVS_SHOWSELALWAYS}
  4774.   TVS_SHOWSELALWAYS       = $0020;
  4775.   {$EXTERNALSYM TVS_RTLREADING}
  4776.   TVS_RTLREADING          = $0040;
  4777.   {$EXTERNALSYM TVS_NOTOOLTIPS}
  4778.   TVS_NOTOOLTIPS          = $0080;
  4779.   {$EXTERNALSYM TVS_CHECKBOXES}
  4780.   TVS_CHECKBOXES          = $0100;
  4781.   {$EXTERNALSYM TVS_TRACKSELECT}
  4782.   TVS_TRACKSELECT         = $0200;
  4783.   {$EXTERNALSYM TVS_SINGLEEXPAND}
  4784.   TVS_SINGLEEXPAND        = $0400;
  4785.   {$EXTERNALSYM TVS_INFOTIP}
  4786.   TVS_INFOTIP             = $0800;
  4787.   {$EXTERNALSYM TVS_FULLROWSELECT}
  4788.   TVS_FULLROWSELECT       = $1000;
  4789.   {$EXTERNALSYM TVS_NOSCROLL}
  4790.   TVS_NOSCROLL            = $2000;
  4791.   {$EXTERNALSYM TVS_NONEVENHEIGHT}
  4792.   TVS_NONEVENHEIGHT       = $4000;
  4793.  
  4794. type
  4795.   {$EXTERNALSYM HTREEITEM}
  4796.   HTREEITEM = ^_TREEITEM;
  4797.   {$EXTERNALSYM _TREEITEM}
  4798.   _TREEITEM = packed record
  4799.   end;
  4800.  
  4801. const
  4802.   {$EXTERNALSYM TVIF_TEXT}
  4803.   TVIF_TEXT               = $0001;
  4804.   {$EXTERNALSYM TVIF_IMAGE}
  4805.   TVIF_IMAGE              = $0002;
  4806.   {$EXTERNALSYM TVIF_PARAM}
  4807.   TVIF_PARAM              = $0004;
  4808.   {$EXTERNALSYM TVIF_STATE}
  4809.   TVIF_STATE              = $0008;
  4810.   {$EXTERNALSYM TVIF_HANDLE}
  4811.   TVIF_HANDLE             = $0010;
  4812.   {$EXTERNALSYM TVIF_SELECTEDIMAGE}
  4813.   TVIF_SELECTEDIMAGE      = $0020;
  4814.   {$EXTERNALSYM TVIF_CHILDREN}
  4815.   TVIF_CHILDREN           = $0040;
  4816.   {$EXTERNALSYM TVIF_INTEGRAL}
  4817.   TVIF_INTEGRAL           = $0080;
  4818.  
  4819.   {$EXTERNALSYM TVIS_FOCUSED}
  4820.   TVIS_FOCUSED            = $0001;
  4821.   {$EXTERNALSYM TVIS_SELECTED}
  4822.   TVIS_SELECTED           = $0002;
  4823.   {$EXTERNALSYM TVIS_CUT}
  4824.   TVIS_CUT                = $0004;
  4825.   {$EXTERNALSYM TVIS_DROPHILITED}
  4826.   TVIS_DROPHILITED        = $0008;
  4827.   {$EXTERNALSYM TVIS_BOLD}
  4828.   TVIS_BOLD               = $0010;
  4829.   {$EXTERNALSYM TVIS_EXPANDED}
  4830.   TVIS_EXPANDED           = $0020;
  4831.   {$EXTERNALSYM TVIS_EXPANDEDONCE}
  4832.   TVIS_EXPANDEDONCE       = $0040;
  4833.   {$EXTERNALSYM TVIS_EXPANDPARTIAL}
  4834.   TVIS_EXPANDPARTIAL      = $0080;
  4835.  
  4836.   {$EXTERNALSYM TVIS_OVERLAYMASK}
  4837.   TVIS_OVERLAYMASK        = $0F00;
  4838.   {$EXTERNALSYM TVIS_STATEIMAGEMASK}
  4839.   TVIS_STATEIMAGEMASK     = $F000;
  4840.   {$EXTERNALSYM TVIS_USERMASK}
  4841.   TVIS_USERMASK           = $F000;
  4842.  
  4843.  
  4844. const
  4845.   {$EXTERNALSYM I_CHILDRENCALLBACK}
  4846.   I_CHILDRENCALLBACK  = -1;
  4847.  
  4848. type
  4849.   PTVItemA = ^TTVItemA;
  4850.   PTVItemW = ^TTVItemW;
  4851.   PTVItem = PTVItemA;
  4852.   {$EXTERNALSYM tagTVITEMA}
  4853.   tagTVITEMA = packed record
  4854.     mask: UINT;
  4855.     hItem: HTreeItem;
  4856.     state: UINT;
  4857.     stateMask: UINT;
  4858.     pszText: PAnsiChar;
  4859.     cchTextMax: Integer;
  4860.     iImage: Integer;
  4861.     iSelectedImage: Integer;
  4862.     cChildren: Integer;
  4863.     lParam: LPARAM;
  4864.   end;
  4865.   {$EXTERNALSYM tagTVITEMW}
  4866.   tagTVITEMW = packed record
  4867.     mask: UINT;
  4868.     hItem: HTreeItem;
  4869.     state: UINT;
  4870.     stateMask: UINT;
  4871.     pszText: PWideChar;
  4872.     cchTextMax: Integer;
  4873.     iImage: Integer;
  4874.     iSelectedImage: Integer;
  4875.     cChildren: Integer;
  4876.     lParam: LPARAM;
  4877.   end;
  4878.   {$EXTERNALSYM tagTVITEM}
  4879.   tagTVITEM = tagTVITEMA;
  4880.   {$EXTERNALSYM _TV_ITEMA}
  4881.   _TV_ITEMA = tagTVITEMA;
  4882.   {$EXTERNALSYM _TV_ITEMW}
  4883.   _TV_ITEMW = tagTVITEMW;
  4884.   {$EXTERNALSYM _TV_ITEM}
  4885.   _TV_ITEM = _TV_ITEMA;
  4886.   TTVItemA = tagTVITEMA;
  4887.   TTVItemW = tagTVITEMW;
  4888.   TTVItem = TTVItemA;
  4889.   {$EXTERNALSYM TV_ITEMA}
  4890.   TV_ITEMA = tagTVITEMA;
  4891.   {$EXTERNALSYM TV_ITEMW}
  4892.   TV_ITEMW = tagTVITEMW;
  4893.   {$EXTERNALSYM TV_ITEM}
  4894.   TV_ITEM = TV_ITEMA;
  4895.  
  4896.   // only used for Get and Set messages.  no notifies
  4897.   {$EXTERNALSYM tagTVITEMEXA}
  4898.   tagTVITEMEXA = packed record
  4899.     mask: UINT;
  4900.     hItem: HTREEITEM;
  4901.     state: UINT;
  4902.     stateMask: UINT;
  4903.     pszText: PAnsiChar;
  4904.     cchTextMax: Integer;
  4905.     iImage: Integer;
  4906.     iSelectedImage: Integer;
  4907.     cChildren: Integer;
  4908.     lParam: LPARAM;
  4909.     iIntegral: Integer;
  4910.   end;
  4911.   {$EXTERNALSYM tagTVITEMEXW}
  4912.   tagTVITEMEXW = packed record
  4913.     mask: UINT;
  4914.     hItem: HTREEITEM;
  4915.     state: UINT;
  4916.     stateMask: UINT;
  4917.     pszText: PWideChar;
  4918.     cchTextMax: Integer;
  4919.     iImage: Integer;
  4920.     iSelectedImage: Integer;
  4921.     cChildren: Integer;
  4922.     lParam: LPARAM;
  4923.     iIntegral: Integer;
  4924.   end;
  4925.   {$EXTERNALSYM tagTVITEMEX}
  4926.   tagTVITEMEX = tagTVITEMEXA;
  4927.   PTVItemExA = ^TTVItemExA;
  4928.   PTVItemExW = ^TTVItemExW;
  4929.   PTVItemEx = PTVItemExA;
  4930.   TTVItemExA = tagTVITEMEXA;
  4931.   TTVItemExW = tagTVITEMEXW;
  4932.   TTVItemEx = TTVItemExA;
  4933.  
  4934. const
  4935.   {$EXTERNALSYM TVI_ROOT}
  4936.   TVI_ROOT                = HTreeItem($FFFF0000);
  4937.   {$EXTERNALSYM TVI_FIRST}
  4938.   TVI_FIRST               = HTreeItem($FFFF0001);
  4939.   {$EXTERNALSYM TVI_LAST}
  4940.   TVI_LAST                = HTreeItem($FFFF0002);
  4941.   {$EXTERNALSYM TVI_SORT}
  4942.   TVI_SORT                = HTreeItem($FFFF0003);
  4943.  
  4944. type
  4945.   PTVInsertStructA = ^TTVInsertStructA;
  4946.   PTVInsertStructW = ^TTVInsertStructW;
  4947.   PTVInsertStruct = PTVInsertStructA;
  4948.   {$EXTERNALSYM tagTVINSERTSTRUCTA}
  4949.   tagTVINSERTSTRUCTA = packed record
  4950.     hParent: HTreeItem;
  4951.     hInsertAfter: HTreeItem;
  4952.     case Integer of
  4953.       0: (itemex: TTVItemExA);
  4954.       1: (item: TTVItemA);
  4955.   end;
  4956.   {$EXTERNALSYM tagTVINSERTSTRUCTW}
  4957.   tagTVINSERTSTRUCTW = packed record
  4958.     hParent: HTreeItem;
  4959.     hInsertAfter: HTreeItem;
  4960.     case Integer of
  4961.       0: (itemex: TTVItemExW);
  4962.       1: (item: TTVItemW);
  4963.   end;
  4964.   {$EXTERNALSYM tagTVINSERTSTRUCT}
  4965.   tagTVINSERTSTRUCT = tagTVINSERTSTRUCTA;
  4966.   {$EXTERNALSYM _TV_INSERTSTRUCTA}
  4967.   _TV_INSERTSTRUCTA = tagTVINSERTSTRUCTA;
  4968.   {$EXTERNALSYM _TV_INSERTSTRUCTW}
  4969.   _TV_INSERTSTRUCTW = tagTVINSERTSTRUCTW;
  4970.   {$EXTERNALSYM _TV_INSERTSTRUCT}
  4971.   _TV_INSERTSTRUCT = _TV_INSERTSTRUCTA;
  4972.   TTVInsertStructA = tagTVINSERTSTRUCTA;
  4973.   TTVInsertStructW = tagTVINSERTSTRUCTW;
  4974.   TTVInsertStruct = TTVInsertStructA;
  4975.   {$EXTERNALSYM TV_INSERTSTRUCTA}
  4976.   TV_INSERTSTRUCTA = tagTVINSERTSTRUCTA;
  4977.   {$EXTERNALSYM TV_INSERTSTRUCTW}
  4978.   TV_INSERTSTRUCTW = tagTVINSERTSTRUCTW;
  4979.   {$EXTERNALSYM TV_INSERTSTRUCT}
  4980.   TV_INSERTSTRUCT = TV_INSERTSTRUCTA;
  4981.  
  4982. const
  4983.   {$EXTERNALSYM TVM_INSERTITEMA}
  4984.   TVM_INSERTITEMA          = TV_FIRST + 0;
  4985.   {$EXTERNALSYM TVM_INSERTITEMW}
  4986.   TVM_INSERTITEMW          = TV_FIRST + 50;
  4987.  
  4988.  
  4989.  
  4990.   {$EXTERNALSYM TVM_INSERTITEM}
  4991.   TVM_INSERTITEM          = TVM_INSERTITEMA;
  4992.  
  4993. {$EXTERNALSYM TreeView_InsertItem}
  4994. function TreeView_InsertItem(hwnd: HWND; const lpis: TTVInsertStruct): HTreeItem;
  4995.  
  4996. const
  4997.   {$EXTERNALSYM TVM_DELETEITEM}
  4998.   TVM_DELETEITEM          = TV_FIRST + 1;
  4999.  
  5000. {$EXTERNALSYM TreeView_DeleteItem}
  5001. function TreeView_DeleteItem(hwnd: HWND; hitem: HTreeItem): Bool;
  5002.  
  5003. {$EXTERNALSYM TreeView_DeleteAllItems}
  5004. function TreeView_DeleteAllItems(hwnd: HWND): Bool;
  5005.  
  5006. const
  5007.   {$EXTERNALSYM TVM_EXPAND}
  5008.   TVM_EXPAND              = TV_FIRST + 2;
  5009.  
  5010. {$EXTERNALSYM TreeView_Expand}
  5011. function TreeView_Expand(hwnd: HWND; hitem: HTreeItem; code: Integer): Bool;
  5012.  
  5013. const
  5014.   {$EXTERNALSYM TVE_COLLAPSE}
  5015.   TVE_COLLAPSE            = $0001;
  5016.   {$EXTERNALSYM TVE_EXPAND}
  5017.   TVE_EXPAND              = $0002;
  5018.   {$EXTERNALSYM TVE_TOGGLE}
  5019.   TVE_TOGGLE              = $0003;
  5020.   {$EXTERNALSYM TVE_EXPANDPARTIAL}
  5021.   TVE_EXPANDPARTIAL       = $4000;
  5022.   {$EXTERNALSYM TVE_COLLAPSERESET}
  5023.   TVE_COLLAPSERESET       = $8000;
  5024.  
  5025. const
  5026.   {$EXTERNALSYM TVM_GETITEMRECT}
  5027.   TVM_GETITEMRECT         = TV_FIRST + 4;
  5028.  
  5029. {$EXTERNALSYM TreeView_GetItemRect}
  5030. function TreeView_GetItemRect(hwnd: HWND; hitem: HTreeItem;
  5031.   var prc: TRect; code: Bool): Bool;
  5032.  
  5033. const
  5034.   {$EXTERNALSYM TVM_GETCOUNT}
  5035.   TVM_GETCOUNT            = TV_FIRST + 5;
  5036.  
  5037. {$EXTERNALSYM TreeView_GetCount}
  5038. function TreeView_GetCount(hwnd: HWND): UINT;
  5039.  
  5040. const
  5041.   {$EXTERNALSYM TVM_GETINDENT}
  5042.   TVM_GETINDENT           = TV_FIRST + 6;
  5043.  
  5044. {$EXTERNALSYM TreeView_GetIndent}
  5045. function TreeView_GetIndent(hwnd: HWND): UINT;
  5046.  
  5047. const
  5048.   {$EXTERNALSYM TVM_SETINDENT}
  5049.   TVM_SETINDENT           = TV_FIRST + 7;
  5050.  
  5051. {$EXTERNALSYM TreeView_SetIndent}
  5052. function TreeView_SetIndent(hwnd: HWND; indent: Integer): Bool;
  5053.  
  5054. const
  5055.   {$EXTERNALSYM TVM_GETIMAGELIST}
  5056.   TVM_GETIMAGELIST        = TV_FIRST + 8;
  5057.  
  5058. {$EXTERNALSYM TreeView_GetImageList}
  5059. function TreeView_GetImageList(hwnd: HWND; iImage: Integer): HIMAGELIST;
  5060.  
  5061. const
  5062.   {$EXTERNALSYM TVSIL_NORMAL}
  5063.   TVSIL_NORMAL            = 0;
  5064.   {$EXTERNALSYM TVSIL_STATE}
  5065.   TVSIL_STATE             = 2;
  5066.  
  5067.  
  5068. const
  5069.   {$EXTERNALSYM TVM_SETIMAGELIST}
  5070.   TVM_SETIMAGELIST        = TV_FIRST + 9;
  5071.  
  5072. {$EXTERNALSYM TreeView_SetImageList}
  5073. function TreeView_SetImageList(hwnd: HWND; himl: HIMAGELIST;
  5074.   iImage: Integer): HIMAGELIST;
  5075.  
  5076. const
  5077.   {$EXTERNALSYM TVM_GETNEXTITEM}
  5078.   TVM_GETNEXTITEM         = TV_FIRST + 10;
  5079.  
  5080. {$EXTERNALSYM TreeView_GetNextItem}
  5081. function TreeView_GetNextItem(hwnd: HWND; hitem: HTreeItem;
  5082.   code: Integer): HTreeItem;
  5083.  
  5084. const
  5085.   {$EXTERNALSYM TVGN_ROOT}
  5086.   TVGN_ROOT               = $0000;
  5087.   {$EXTERNALSYM TVGN_NEXT}
  5088.   TVGN_NEXT               = $0001;
  5089.   {$EXTERNALSYM TVGN_PREVIOUS}
  5090.   TVGN_PREVIOUS           = $0002;
  5091.   {$EXTERNALSYM TVGN_PARENT}
  5092.   TVGN_PARENT             = $0003;
  5093.   {$EXTERNALSYM TVGN_CHILD}
  5094.   TVGN_CHILD              = $0004;
  5095.   {$EXTERNALSYM TVGN_FIRSTVISIBLE}
  5096.   TVGN_FIRSTVISIBLE       = $0005;
  5097.   {$EXTERNALSYM TVGN_NEXTVISIBLE}
  5098.   TVGN_NEXTVISIBLE        = $0006;
  5099.   {$EXTERNALSYM TVGN_PREVIOUSVISIBLE}
  5100.   TVGN_PREVIOUSVISIBLE    = $0007;
  5101.   {$EXTERNALSYM TVGN_DROPHILITE}
  5102.   TVGN_DROPHILITE         = $0008;
  5103.   {$EXTERNALSYM TVGN_CARET}
  5104.   TVGN_CARET              = $0009;
  5105.   {$EXTERNALSYM TVGN_LASTVISIBLE}
  5106.   TVGN_LASTVISIBLE        = $000A;
  5107.  
  5108. {$EXTERNALSYM TreeView_GetChild}
  5109. function TreeView_GetChild(hwnd: HWND; hitem: HTreeItem): HTreeItem;
  5110. {$EXTERNALSYM TreeView_GetNextSibling}
  5111. function TreeView_GetNextSibling(hwnd: HWND; hitem: HTreeItem): HTreeItem;
  5112. {$EXTERNALSYM TreeView_GetPrevSibling}
  5113. function TreeView_GetPrevSibling(hwnd: HWND; hitem: HTreeItem): HTreeItem;
  5114. {$EXTERNALSYM TreeView_GetParent}
  5115. function TreeView_GetParent(hwnd: HWND; hitem: HTreeItem): HTreeItem;
  5116. {$EXTERNALSYM TreeView_GetFirstVisible}
  5117. function TreeView_GetFirstVisible(hwnd: HWND): HTreeItem;
  5118. {$EXTERNALSYM TreeView_GetNextVisible}
  5119. function TreeView_GetNextVisible(hwnd: HWND; hitem: HTreeItem): HTreeItem;
  5120. {$EXTERNALSYM TreeView_GetPrevVisible}
  5121. function TreeView_GetPrevVisible(hwnd: HWND; hitem: HTreeItem): HTreeItem;
  5122. {$EXTERNALSYM TreeView_GetSelection}
  5123. function TreeView_GetSelection(hwnd: HWND): HTreeItem;
  5124. {$EXTERNALSYM TreeView_GetDropHilite}
  5125. function TreeView_GetDropHilite(hwnd: HWND): HTreeItem;
  5126. {$EXTERNALSYM TreeView_GetRoot}
  5127. function TreeView_GetRoot(hwnd: HWND): HTreeItem;
  5128. {$EXTERNALSYM TreeView_GetLastVisible}
  5129. function TreeView_GetLastVisible(hwnd: HWND): HTreeItem;
  5130.  
  5131. const
  5132.   {$EXTERNALSYM TVM_SELECTITEM}
  5133.   TVM_SELECTITEM          = TV_FIRST + 11;
  5134.  
  5135. {$EXTERNALSYM TreeView_Select}
  5136. function TreeView_Select(hwnd: HWND; hitem: HTreeItem;
  5137.   code: Integer): HTreeItem;
  5138.  
  5139. {$EXTERNALSYM TreeView_SelectItem}
  5140. function TreeView_SelectItem(hwnd: HWND; hitem: HTreeItem): HTreeItem;
  5141. {$EXTERNALSYM TreeView_SelectDropTarget}
  5142. function TreeView_SelectDropTarget(hwnd: HWND; hitem: HTreeItem): HTreeItem;
  5143. {$EXTERNALSYM TreeView_SelectSetFirstVisible}
  5144. function TreeView_SelectSetFirstVisible(hwnd: HWND; hitem: HTreeItem): HTreeItem;
  5145.  
  5146. const
  5147.   {$EXTERNALSYM TVM_GETITEMA}
  5148.   TVM_GETITEMA             = TV_FIRST + 12;
  5149.   {$EXTERNALSYM TVM_GETITEMW}
  5150.   TVM_GETITEMW             = TV_FIRST + 62;
  5151.  
  5152.  
  5153.  
  5154.   {$EXTERNALSYM TVM_GETITEM}
  5155.   TVM_GETITEM             = TVM_GETITEMA;
  5156.  
  5157. {$EXTERNALSYM TreeView_GetItemA}
  5158. function TreeView_GetItemA(hwnd: HWND; var pitem: TTVItemA): Bool;
  5159. {$EXTERNALSYM TreeView_GetItemW}
  5160. function TreeView_GetItemW(hwnd: HWND; var pitem: TTVItemW): Bool;
  5161. {$EXTERNALSYM TreeView_GetItem}
  5162. function TreeView_GetItem(hwnd: HWND; var pitem: TTVItem): Bool;
  5163.  
  5164. const
  5165.   {$EXTERNALSYM TVM_SETITEMA}
  5166.   TVM_SETITEMA             = TV_FIRST + 13;
  5167.   {$EXTERNALSYM TVM_SETITEMW}
  5168.   TVM_SETITEMW             = TV_FIRST + 63;
  5169.  
  5170.  
  5171.  
  5172.   {$EXTERNALSYM TVM_SETITEM}
  5173.   TVM_SETITEM             = TVM_SETITEMA;
  5174.  
  5175. {$EXTERNALSYM TreeView_SetItemA}
  5176. function TreeView_SetItemA(hwnd: HWND; const pitem: TTVItemA): Bool;
  5177. {$EXTERNALSYM TreeView_SetItemW}
  5178. function TreeView_SetItemW(hwnd: HWND; const pitem: TTVItemW): Bool;
  5179. {$EXTERNALSYM TreeView_SetItem}
  5180. function TreeView_SetItem(hwnd: HWND; const pitem: TTVItem): Bool;
  5181.  
  5182. const
  5183.   {$EXTERNALSYM TVM_EDITLABELA}
  5184.   TVM_EDITLABELA           = TV_FIRST + 14;
  5185.   {$EXTERNALSYM TVM_EDITLABELW}
  5186.   TVM_EDITLABELW           = TV_FIRST + 65;
  5187.  
  5188.  
  5189.  
  5190.   {$EXTERNALSYM TVM_EDITLABEL}
  5191.   TVM_EDITLABEL           = TVM_EDITLABELA;
  5192.  
  5193. {$EXTERNALSYM TreeView_EditLabelA}
  5194. function TreeView_EditLabelA(hwnd: HWND; hitem: HTreeItem): HWND;
  5195. {$EXTERNALSYM TreeView_EditLabelW}
  5196. function TreeView_EditLabelW(hwnd: HWND; hitem: HTreeItem): HWND;
  5197. {$EXTERNALSYM TreeView_EditLabel}
  5198. function TreeView_EditLabel(hwnd: HWND; hitem: HTreeItem): HWND;
  5199.  
  5200. const
  5201.   {$EXTERNALSYM TVM_GETEDITCONTROL}
  5202.   TVM_GETEDITCONTROL      = TV_FIRST + 15;
  5203.  
  5204. {$EXTERNALSYM TreeView_GetEditControl}
  5205. function TreeView_GetEditControl(hwnd: HWND): HWND;
  5206.  
  5207.  
  5208. const
  5209.   {$EXTERNALSYM TVM_GETVISIBLECOUNT}
  5210.   TVM_GETVISIBLECOUNT     = TV_FIRST + 16;
  5211.  
  5212. {$EXTERNALSYM TreeView_GetVisibleCount}
  5213. function TreeView_GetVisibleCount(hwnd: HWND): UINT;
  5214.  
  5215. const
  5216.   {$EXTERNALSYM TVM_HITTEST}
  5217.   TVM_HITTEST             = TV_FIRST + 17;
  5218.  
  5219. type
  5220.   PTVHitTestInfo = ^TTVHitTestInfo;
  5221.   {$EXTERNALSYM tagTVHITTESTINFO}
  5222.   tagTVHITTESTINFO = packed record
  5223.     pt: TPoint;
  5224.     flags: UINT;
  5225.     hItem: HTreeItem;
  5226.   end;
  5227.   {$EXTERNALSYM _TV_HITTESTINFO}
  5228.   _TV_HITTESTINFO = tagTVHITTESTINFO;
  5229.   TTVHitTestInfo = tagTVHITTESTINFO;
  5230.   {$EXTERNALSYM TV_HITTESTINFO}
  5231.   TV_HITTESTINFO = tagTVHITTESTINFO;
  5232.  
  5233. {$EXTERNALSYM TreeView_HitTest}
  5234. function TreeView_HitTest(hwnd: HWND; var lpht: TTVHitTestInfo): HTreeItem;
  5235.  
  5236. const
  5237.   {$EXTERNALSYM TVHT_NOWHERE}
  5238.   TVHT_NOWHERE            = $0001;
  5239.   {$EXTERNALSYM TVHT_ONITEMICON}
  5240.   TVHT_ONITEMICON         = $0002;
  5241.   {$EXTERNALSYM TVHT_ONITEMLABEL}
  5242.   TVHT_ONITEMLABEL        = $0004;
  5243.   {$EXTERNALSYM TVHT_ONITEMINDENT}
  5244.   TVHT_ONITEMINDENT       = $0008;
  5245.   {$EXTERNALSYM TVHT_ONITEMBUTTON}
  5246.   TVHT_ONITEMBUTTON       = $0010;
  5247.   {$EXTERNALSYM TVHT_ONITEMRIGHT}
  5248.   TVHT_ONITEMRIGHT        = $0020;
  5249.   {$EXTERNALSYM TVHT_ONITEMSTATEICON}
  5250.   TVHT_ONITEMSTATEICON    = $0040;
  5251.  
  5252.   {$EXTERNALSYM TVHT_ONITEM}
  5253.   TVHT_ONITEM             = TVHT_ONITEMICON or TVHT_ONITEMLABEL or
  5254.                   TVHT_ONITEMSTATEICON;
  5255.  
  5256.   {$EXTERNALSYM TVHT_ABOVE}
  5257.   TVHT_ABOVE              = $0100;
  5258.   {$EXTERNALSYM TVHT_BELOW}
  5259.   TVHT_BELOW              = $0200;
  5260.   {$EXTERNALSYM TVHT_TORIGHT}
  5261.   TVHT_TORIGHT            = $0400;
  5262.   {$EXTERNALSYM TVHT_TOLEFT}
  5263.   TVHT_TOLEFT             = $0800;
  5264.  
  5265. const
  5266.   {$EXTERNALSYM TVM_CREATEDRAGIMAGE}
  5267.   TVM_CREATEDRAGIMAGE     = TV_FIRST + 18;
  5268.  
  5269. {$EXTERNALSYM TreeView_CreateDragImage}
  5270. function TreeView_CreateDragImage(hwnd: HWND; hitem: HTreeItem): HIMAGELIST;
  5271.  
  5272. const
  5273.   {$EXTERNALSYM TVM_SORTCHILDREN}
  5274.   TVM_SORTCHILDREN        = TV_FIRST + 19;
  5275.  
  5276. {$EXTERNALSYM TreeView_SortChildren}
  5277. function TreeView_SortChildren(hwnd: HWND; hitem: HTreeItem;
  5278.   recurse: Integer): Bool;
  5279.  
  5280. const
  5281.   {$EXTERNALSYM TVM_ENSUREVISIBLE}
  5282.   TVM_ENSUREVISIBLE       = TV_FIRST + 20;
  5283.  
  5284. {$EXTERNALSYM TreeView_EnsureVisible}
  5285. function TreeView_EnsureVisible(hwnd: HWND; hitem: HTreeItem): Bool;
  5286.  
  5287. const
  5288.   {$EXTERNALSYM TVM_SORTCHILDRENCB}
  5289.   TVM_SORTCHILDRENCB      = TV_FIRST + 21;
  5290.  
  5291. type
  5292.   {$EXTERNALSYM PFNTVCOMPARE}
  5293.   PFNTVCOMPARE = function(lParam1, lParam2, lParamSort: Longint): Integer stdcall;
  5294.   TTVCompare = PFNTVCOMPARE;
  5295.  
  5296. type
  5297.   {$EXTERNALSYM tagTVSORTCB}
  5298.   tagTVSORTCB = packed record
  5299.     hParent: HTreeItem;
  5300.     lpfnCompare: TTVCompare;
  5301.     lParam: LPARAM;
  5302.   end;
  5303.   {$EXTERNALSYM _TV_SORTCB}
  5304.   _TV_SORTCB = tagTVSORTCB;
  5305.   TTVSortCB = tagTVSORTCB;
  5306.   {$EXTERNALSYM TV_SORTCB}
  5307.   TV_SORTCB = tagTVSORTCB;
  5308.  
  5309. {$EXTERNALSYM TreeView_SortChildrenCB}
  5310. function TreeView_SortChildrenCB(hwnd: HWND; const psort: TTVSortCB;
  5311.   recurse: Integer): Bool;
  5312.  
  5313. const
  5314.   {$EXTERNALSYM TVM_ENDEDITLABELNOW}
  5315.   TVM_ENDEDITLABELNOW     = TV_FIRST + 22;
  5316.  
  5317. {$EXTERNALSYM TreeView_EndEditLabelNow}
  5318. function TreeView_EndEditLabelNow(hwnd: HWND; fCancel: Bool): Bool;
  5319.  
  5320. const
  5321.   {$EXTERNALSYM TVM_GETISEARCHSTRINGA}
  5322.   TVM_GETISEARCHSTRINGA    = TV_FIRST + 23;
  5323.   {$EXTERNALSYM TVM_GETISEARCHSTRINGW}
  5324.   TVM_GETISEARCHSTRINGW    = TV_FIRST + 64;
  5325.  
  5326.  
  5327.  
  5328.   {$EXTERNALSYM TVM_GETISEARCHSTRING}
  5329.   TVM_GETISEARCHSTRING    = TVM_GETISEARCHSTRINGA;
  5330.  
  5331. {$EXTERNALSYM TreeView_GetISearchStringA}
  5332. function TreeView_GetISearchStringA(hwndTV: HWND; lpsz: PAnsiChar): Bool;
  5333. {$EXTERNALSYM TreeView_GetISearchStringW}
  5334. function TreeView_GetISearchStringW(hwndTV: HWND; lpsz: PWideChar): Bool;
  5335. {$EXTERNALSYM TreeView_GetISearchString}
  5336. function TreeView_GetISearchString(hwndTV: HWND; lpsz: PChar): Bool;
  5337.  
  5338. const
  5339.   {$EXTERNALSYM TVM_SETTOOLTIPS}
  5340.   TVM_SETTOOLTIPS         = TV_FIRST + 24;
  5341.  
  5342. {$EXTERNALSYM TreeView_SetToolTips}
  5343. function TreeView_SetToolTips(wnd: HWND; hwndTT: HWND): HWND;
  5344.  
  5345. const
  5346.   {$EXTERNALSYM TVM_GETTOOLTIPS}
  5347.   TVM_GETTOOLTIPS         = TV_FIRST + 25;
  5348.  
  5349. {$EXTERNALSYM TreeView_GetToolTips}
  5350. function TreeView_GetToolTips(wnd: HWND): HWND;
  5351.  
  5352. const
  5353.   {$EXTERNALSYM TVM_SETINSERTMARK}
  5354.   TVM_SETINSERTMARK       = TV_FIRST + 26;
  5355.  
  5356. {$EXTERNALSYM TreeView_SetInsertMark}
  5357. function TreeView_SetInsertMark(hwnd: HWND; hItem: Integer; fAfter: BOOL): BOOL;
  5358.  
  5359. const
  5360.   {$EXTERNALSYM TVM_SETUNICODEFORMAT}
  5361.   TVM_SETUNICODEFORMAT     = CCM_SETUNICODEFORMAT;
  5362.  
  5363. {$EXTERNALSYM TreeView_SetUnicodeFormat}
  5364. function TreeView_SetUnicodeFormat(hwnd: HWND; fUnicode: BOOL): BOOL;
  5365.  
  5366. const
  5367.   {$EXTERNALSYM TVM_GETUNICODEFORMAT}
  5368.   TVM_GETUNICODEFORMAT     = CCM_GETUNICODEFORMAT;
  5369.  
  5370. {$EXTERNALSYM TreeView_GetUnicodeFormat}
  5371. function TreeView_GetUnicodeFormat(hwnd: HWND): BOOL;
  5372.  
  5373. const
  5374.   {$EXTERNALSYM TVM_SETITEMHEIGHT}
  5375.   TVM_SETITEMHEIGHT         = TV_FIRST + 27;
  5376.  
  5377. {$EXTERNALSYM TreeView_SetItemHeight}
  5378. function TreeView_SetItemHeight(hwnd: HWND; iHeight: Integer): Integer;
  5379.  
  5380. const
  5381.   {$EXTERNALSYM TVM_GETITEMHEIGHT}
  5382.   TVM_GETITEMHEIGHT         = TV_FIRST + 28;
  5383.  
  5384. {$EXTERNALSYM TreeView_GetItemHeight}
  5385. function TreeView_GetItemHeight(hwnd: HWND): Integer;
  5386.  
  5387. const
  5388.   {$EXTERNALSYM TVM_SETBKCOLOR}
  5389.   TVM_SETBKCOLOR              = TV_FIRST + 29;
  5390.  
  5391. {$EXTERNALSYM TreeView_SetBkColor}
  5392. function TreeView_SetBkColor(hwnd: HWND; clr: COLORREF): COLORREF;
  5393.  
  5394. const
  5395.   {$EXTERNALSYM TVM_SETTEXTCOLOR}
  5396.   TVM_SETTEXTCOLOR              = TV_FIRST + 30;
  5397.  
  5398. {$EXTERNALSYM TreeView_SetTextColor}
  5399. function TreeView_SetTextColor(hwnd: HWND; clr: COLORREF): COLORREF;
  5400.  
  5401. const
  5402.   {$EXTERNALSYM TVM_GETBKCOLOR}
  5403.   TVM_GETBKCOLOR              = TV_FIRST + 31;
  5404.  
  5405. {$EXTERNALSYM TreeView_GetBkColor}
  5406. function TreeView_GetBkColor(hwnd: HWND): COLORREF;
  5407.  
  5408. const
  5409.   {$EXTERNALSYM TVM_GETTEXTCOLOR}
  5410.   TVM_GETTEXTCOLOR              = TV_FIRST + 32;
  5411.  
  5412. {$EXTERNALSYM TreeView_GetTextColor}
  5413. function TreeView_GetTextColor(hwnd: HWND): COLORREF;
  5414.  
  5415. const
  5416.   {$EXTERNALSYM TVM_SETSCROLLTIME}
  5417.   TVM_SETSCROLLTIME              = TV_FIRST + 33;
  5418.  
  5419. {$EXTERNALSYM TreeView_SetScrollTime}
  5420. function TreeView_SetScrollTime(hwnd: HWND; uTime: UINT): UINT;
  5421.  
  5422. const
  5423.   {$EXTERNALSYM TVM_GETSCROLLTIME}
  5424.   TVM_GETSCROLLTIME              = TV_FIRST + 34;
  5425.  
  5426. {$EXTERNALSYM TreeView_GetScrollTime}
  5427. function TreeView_GetScrollTime(hwnd: HWND): UINT;
  5428.  
  5429. const
  5430.   {$EXTERNALSYM TVM_SETINSERTMARKCOLOR}
  5431.   TVM_SETINSERTMARKCOLOR         = TV_FIRST + 37;
  5432.  
  5433. {$EXTERNALSYM TreeView_SetInsertMarkColor}
  5434. function TreeView_SetInsertMarkColor(hwnd: HWND; clr: COLORREF): COLORREF;
  5435.  
  5436. const
  5437.   {$EXTERNALSYM TVM_GETINSERTMARKCOLOR}
  5438.   TVM_GETINSERTMARKCOLOR         = TV_FIRST + 38;
  5439.  
  5440. {$EXTERNALSYM TreeView_GetInsertMarkColor}
  5441. function TreeView_GetInsertMarkColor(hwnd: HWND): COLORREF;
  5442.  
  5443. type
  5444.   PNMTreeViewA = ^TNMTreeViewA;
  5445.   PNMTreeViewW = ^TNMTreeViewW;
  5446.   PNMTreeView = PNMTreeViewA;
  5447.   {$EXTERNALSYM tagNMTREEVIEWA}
  5448.   tagNMTREEVIEWA = packed record
  5449.     hdr: TNMHDR;
  5450.     action: UINT;
  5451.     itemOld: TTVItemA;
  5452.     itemNew: TTVItemA;
  5453.     ptDrag: TPoint;
  5454.   end;
  5455.   {$EXTERNALSYM tagNMTREEVIEWW}
  5456.   tagNMTREEVIEWW = packed record
  5457.     hdr: TNMHDR;
  5458.     action: UINT;
  5459.     itemOld: TTVItemW;
  5460.     itemNew: TTVItemW;
  5461.     ptDrag: TPoint;
  5462.   end;
  5463.   {$EXTERNALSYM tagNMTREEVIEW}
  5464.   tagNMTREEVIEW = tagNMTREEVIEWA;
  5465.   {$EXTERNALSYM _NM_TREEVIEWA}
  5466.   _NM_TREEVIEWA = tagNMTREEVIEWA;
  5467.   {$EXTERNALSYM _NM_TREEVIEWW}
  5468.   _NM_TREEVIEWW = tagNMTREEVIEWW;
  5469.   {$EXTERNALSYM _NM_TREEVIEW}
  5470.   _NM_TREEVIEW = _NM_TREEVIEWA;
  5471.   TNMTreeViewA  = tagNMTREEVIEWA;
  5472.   TNMTreeViewW  = tagNMTREEVIEWW;
  5473.   TNMTreeView = TNMTreeViewA;
  5474.   {$EXTERNALSYM NM_TREEVIEWA}
  5475.   NM_TREEVIEWA  = tagNMTREEVIEWA;
  5476.   {$EXTERNALSYM NM_TREEVIEWW}
  5477.   NM_TREEVIEWW  = tagNMTREEVIEWW;
  5478.   {$EXTERNALSYM NM_TREEVIEW}
  5479.   NM_TREEVIEW = NM_TREEVIEWA;
  5480.  
  5481. const
  5482.   {$EXTERNALSYM TVN_SELCHANGINGA}
  5483.   TVN_SELCHANGINGA         = TVN_FIRST-1;
  5484.   {$EXTERNALSYM TVN_SELCHANGEDA}
  5485.   TVN_SELCHANGEDA          = TVN_FIRST-2;
  5486.   {$EXTERNALSYM TVN_SELCHANGINGW}
  5487.   TVN_SELCHANGINGW         = TVN_FIRST-50;
  5488.   {$EXTERNALSYM TVN_SELCHANGEDW}
  5489.   TVN_SELCHANGEDW          = TVN_FIRST-51;
  5490.  
  5491.  
  5492.  
  5493.  
  5494.  
  5495.   {$EXTERNALSYM TVN_SELCHANGING}
  5496.   TVN_SELCHANGING         = TVN_SELCHANGINGA;
  5497.   {$EXTERNALSYM TVN_SELCHANGED}
  5498.   TVN_SELCHANGED          = TVN_SELCHANGEDA;
  5499.  
  5500. const
  5501.   {$EXTERNALSYM TVC_UNKNOWN}
  5502.   TVC_UNKNOWN             = $0000;
  5503.   {$EXTERNALSYM TVC_BYMOUSE}
  5504.   TVC_BYMOUSE             = $0001;
  5505.   {$EXTERNALSYM TVC_BYKEYBOARD}
  5506.   TVC_BYKEYBOARD          = $0002;
  5507.  
  5508. const
  5509.   {$EXTERNALSYM TVN_GETDISPINFOA}
  5510.   TVN_GETDISPINFOA         = TVN_FIRST-3;
  5511.   {$EXTERNALSYM TVN_SETDISPINFOA}
  5512.   TVN_SETDISPINFOA         = TVN_FIRST-4;
  5513.   {$EXTERNALSYM TVN_GETDISPINFOW}
  5514.   TVN_GETDISPINFOW         = TVN_FIRST-52;
  5515.   {$EXTERNALSYM TVN_SETDISPINFOW}
  5516.   TVN_SETDISPINFOW         = TVN_FIRST-53;
  5517.  
  5518.  
  5519.  
  5520.  
  5521.  
  5522.   {$EXTERNALSYM TVN_GETDISPINFO}
  5523.   TVN_GETDISPINFO         = TVN_GETDISPINFOA;
  5524.   {$EXTERNALSYM TVN_SETDISPINFO}
  5525.   TVN_SETDISPINFO         = TVN_SETDISPINFOA;
  5526.  
  5527.   {$EXTERNALSYM TVIF_DI_SETITEM}
  5528.   TVIF_DI_SETITEM         = $1000;
  5529.  
  5530. type
  5531.   PTVDispInfoA = ^TTVDispInfoA;
  5532.   PTVDispInfoW = ^TTVDispInfoW;
  5533.   PTVDispInfo = PTVDispInfoA;
  5534.   {$EXTERNALSYM tagTVDISPINFOA}
  5535.   tagTVDISPINFOA = packed record
  5536.     hdr: TNMHDR;
  5537.     item: TTVItemA;
  5538.   end;
  5539.   {$EXTERNALSYM tagTVDISPINFOW}
  5540.   tagTVDISPINFOW = packed record
  5541.     hdr: TNMHDR;
  5542.     item: TTVItemW;
  5543.   end;
  5544.   {$EXTERNALSYM tagTVDISPINFO}
  5545.   tagTVDISPINFO = tagTVDISPINFOA;
  5546.   {$EXTERNALSYM _TV_DISPINFOA}
  5547.   _TV_DISPINFOA = tagTVDISPINFOA;
  5548.   {$EXTERNALSYM _TV_DISPINFOW}
  5549.   _TV_DISPINFOW = tagTVDISPINFOW;
  5550.   {$EXTERNALSYM _TV_DISPINFO}
  5551.   _TV_DISPINFO = _TV_DISPINFOA;
  5552.   TTVDispInfoA = tagTVDISPINFOA;
  5553.   TTVDispInfoW = tagTVDISPINFOW;
  5554.   TTVDispInfo = TTVDispInfoA;
  5555.   {$EXTERNALSYM TV_DISPINFOA}
  5556.   TV_DISPINFOA = tagTVDISPINFOA;
  5557.   {$EXTERNALSYM TV_DISPINFOW}
  5558.   TV_DISPINFOW = tagTVDISPINFOW;
  5559.   {$EXTERNALSYM TV_DISPINFO}
  5560.   TV_DISPINFO = TV_DISPINFOA;
  5561.  
  5562. const
  5563.   {$EXTERNALSYM TVN_ITEMEXPANDINGA}
  5564.   TVN_ITEMEXPANDINGA       = TVN_FIRST-5;
  5565.   {$EXTERNALSYM TVN_ITEMEXPANDEDA}
  5566.   TVN_ITEMEXPANDEDA        = TVN_FIRST-6;
  5567.   {$EXTERNALSYM TVN_BEGINDRAGA}
  5568.   TVN_BEGINDRAGA           = TVN_FIRST-7;
  5569.   {$EXTERNALSYM TVN_BEGINRDRAGA}
  5570.   TVN_BEGINRDRAGA          = TVN_FIRST-8;
  5571.   {$EXTERNALSYM TVN_DELETEITEMA}
  5572.   TVN_DELETEITEMA          = TVN_FIRST-9;
  5573.   {$EXTERNALSYM TVN_BEGINLABELEDITA}
  5574.   TVN_BEGINLABELEDITA      = TVN_FIRST-10;
  5575.   {$EXTERNALSYM TVN_ENDLABELEDITA}
  5576.   TVN_ENDLABELEDITA        = TVN_FIRST-11;
  5577.   {$EXTERNALSYM TVN_GETINFOTIPA}
  5578.   TVN_GETINFOTIPA          = TVN_FIRST-13;
  5579.   {$EXTERNALSYM TVN_ITEMEXPANDINGW}
  5580.   TVN_ITEMEXPANDINGW       = TVN_FIRST-54;
  5581.   {$EXTERNALSYM TVN_ITEMEXPANDEDW}
  5582.   TVN_ITEMEXPANDEDW        = TVN_FIRST-55;
  5583.   {$EXTERNALSYM TVN_BEGINDRAGW}
  5584.   TVN_BEGINDRAGW           = TVN_FIRST-56;
  5585.   {$EXTERNALSYM TVN_BEGINRDRAGW}
  5586.   TVN_BEGINRDRAGW          = TVN_FIRST-57;
  5587.   {$EXTERNALSYM TVN_DELETEITEMW}
  5588.   TVN_DELETEITEMW          = TVN_FIRST-58;
  5589.   {$EXTERNALSYM TVN_BEGINLABELEDITW}
  5590.   TVN_BEGINLABELEDITW      = TVN_FIRST-59;
  5591.   {$EXTERNALSYM TVN_ENDLABELEDITW}
  5592.   TVN_ENDLABELEDITW        = TVN_FIRST-60;
  5593.   {$EXTERNALSYM TVN_GETINFOTIPW}
  5594.   TVN_GETINFOTIPW          = TVN_FIRST-14;
  5595.  
  5596.  
  5597.  
  5598.  
  5599.  
  5600.  
  5601.  
  5602.  
  5603.  
  5604.  
  5605.  
  5606.  
  5607.  
  5608.  
  5609.  
  5610.  
  5611.  
  5612.   {$EXTERNALSYM TVN_ITEMEXPANDING}
  5613.   TVN_ITEMEXPANDING       = TVN_ITEMEXPANDINGA;
  5614.   {$EXTERNALSYM TVN_ITEMEXPANDED}
  5615.   TVN_ITEMEXPANDED        = TVN_ITEMEXPANDEDA;
  5616.   {$EXTERNALSYM TVN_BEGINDRAG}
  5617.   TVN_BEGINDRAG           = TVN_BEGINDRAGA;
  5618.   {$EXTERNALSYM TVN_BEGINRDRAG}
  5619.   TVN_BEGINRDRAG          = TVN_BEGINRDRAGA;
  5620.   {$EXTERNALSYM TVN_DELETEITEM}
  5621.   TVN_DELETEITEM          = TVN_DELETEITEMA;
  5622.   {$EXTERNALSYM TVN_BEGINLABELEDIT}
  5623.   TVN_BEGINLABELEDIT      = TVN_BEGINLABELEDITA;
  5624.   {$EXTERNALSYM TVN_ENDLABELEDIT}
  5625.   TVN_ENDLABELEDIT        = TVN_ENDLABELEDITA;
  5626.   {$EXTERNALSYM TVN_GETINFOTIP}
  5627.   TVN_GETINFOTIP         = TVN_GETINFOTIPA;
  5628.  
  5629. const
  5630.   {$EXTERNALSYM TVN_KEYDOWN}
  5631.   TVN_KEYDOWN             = TVN_FIRST-12;
  5632.   {$EXTERNALSYM TVN_SINGLEEXPAND}
  5633.   TVN_SINGLEEXPAND        = TVN_FIRST-15;
  5634.  
  5635. type
  5636.   {$EXTERNALSYM tagTVKEYDOWN}
  5637.   tagTVKEYDOWN = packed record
  5638.     hdr: TNMHDR;
  5639.     wVKey: Word;
  5640.     flags: UINT;
  5641.   end;
  5642.   {$EXTERNALSYM _TV_KEYDOWN}
  5643.   _TV_KEYDOWN = tagTVKEYDOWN;
  5644.   TTVKeyDown = tagTVKEYDOWN;
  5645.   {$EXTERNALSYM TV_KEYDOWN}
  5646.   TV_KEYDOWN = tagTVKEYDOWN;
  5647.  
  5648.   {$EXTERNALSYM tagNMTVCUSTOMDRAW}
  5649.   tagNMTVCUSTOMDRAW = packed record
  5650.     nmcd: TNMCustomDraw;
  5651.     clrText: COLORREF;
  5652.     clrTextBk: COLORREF;
  5653.     iLevel: Integer;
  5654.   end;
  5655.   PNMTVCustomDraw = ^TNMTVCustomDraw;
  5656.   TNMTVCustomDraw = tagNMTVCUSTOMDRAW;
  5657.  
  5658.   // for tooltips
  5659.   {$EXTERNALSYM tagNMTVGETINFOTIPA}
  5660.   tagNMTVGETINFOTIPA = packed record
  5661.     hdr: TNMHdr;
  5662.     pszText: PAnsiChar;
  5663.     cchTextMax: Integer;
  5664.     hItem: HTREEITEM;
  5665.     lParam: LPARAM;
  5666.   end;
  5667.   {$EXTERNALSYM tagNMTVGETINFOTIPW}
  5668.   tagNMTVGETINFOTIPW = packed record
  5669.     hdr: TNMHdr;
  5670.     pszText: PWideChar;
  5671.     cchTextMax: Integer;
  5672.     hItem: HTREEITEM;
  5673.     lParam: LPARAM;
  5674.   end;
  5675.   {$EXTERNALSYM tagNMTVGETINFOTIP}
  5676.   tagNMTVGETINFOTIP = tagNMTVGETINFOTIPA;
  5677.   PNMTVGetInfoTipA = ^TNMTVGetInfoTipA;
  5678.   PNMTVGetInfoTipW = ^TNMTVGetInfoTipW;
  5679.   PNMTVGetInfoTip = PNMTVGetInfoTipA;
  5680.   TNMTVGetInfoTipA = tagNMTVGETINFOTIPA;
  5681.   TNMTVGetInfoTipW = tagNMTVGETINFOTIPW;
  5682.   TNMTVGetInfoTip = TNMTVGetInfoTipA;
  5683.  
  5684. const
  5685.   // treeview's customdraw return meaning don't draw images.  valid on CDRF_NOTIFYITEMPREPAINT
  5686.   {$EXTERNALSYM TVCDRF_NOIMAGES}
  5687.   TVCDRF_NOIMAGES         = $00010000;
  5688.  
  5689. { ====== ComboBoxEx ======================== }
  5690.  
  5691. const
  5692.   {$EXTERNALSYM WC_COMBOBOXEX}
  5693.   WC_COMBOBOXEX = 'ComboBoxEx32';
  5694.  
  5695.   {$EXTERNALSYM CBEIF_TEXT}
  5696.   CBEIF_TEXT              = $00000001;
  5697.   {$EXTERNALSYM CBEIF_IMAGE}
  5698.   CBEIF_IMAGE             = $00000002;
  5699.   {$EXTERNALSYM CBEIF_SELECTEDIMAGE}
  5700.   CBEIF_SELECTEDIMAGE     = $00000004;
  5701.   {$EXTERNALSYM CBEIF_OVERLAY}
  5702.   CBEIF_OVERLAY           = $00000008;
  5703.   {$EXTERNALSYM CBEIF_INDENT}
  5704.   CBEIF_INDENT            = $00000010;
  5705.   {$EXTERNALSYM CBEIF_LPARAM}
  5706.   CBEIF_LPARAM            = $00000020;
  5707.  
  5708.   {$EXTERNALSYM CBEIF_DI_SETITEM}
  5709.   CBEIF_DI_SETITEM        = $10000000;
  5710.  
  5711. type
  5712.   {$EXTERNALSYM tagCOMBOBOXEXITEMA}
  5713.   tagCOMBOBOXEXITEMA = packed record
  5714.     mask: UINT;
  5715.     iItem: Integer;
  5716.     pszText: PAnsiChar;
  5717.     cchTextMax: Integer;
  5718.     iImage: Integer;
  5719.     iSelectedImage: Integer;
  5720.     iOverlay: Integer;
  5721.     iIndent: Integer;
  5722.     lParam: LPARAM;
  5723.   end;
  5724.   {$EXTERNALSYM tagCOMBOBOXEXITEMW}
  5725.   tagCOMBOBOXEXITEMW = packed record
  5726.     mask: UINT;
  5727.     iItem: Integer;
  5728.     pszText: PWideChar;
  5729.     cchTextMax: Integer;
  5730.     iImage: Integer;
  5731.     iSelectedImage: Integer;
  5732.     iOverlay: Integer;
  5733.     iIndent: Integer;
  5734.     lParam: LPARAM;
  5735.   end;
  5736.   {$EXTERNALSYM tagCOMBOBOXEXITEM}
  5737.   tagCOMBOBOXEXITEM = tagCOMBOBOXEXITEMA;
  5738.   PComboBoxExItemA = ^TComboBoxExItemA;
  5739.   PComboBoxExItemW = ^TComboBoxExItemW;
  5740.   PComboBoxExItem = PComboBoxExItemA;
  5741.   TComboBoxExItemA = tagCOMBOBOXEXITEMA;
  5742.   TComboBoxExItemW = tagCOMBOBOXEXITEMW;
  5743.   TComboBoxExItem = TComboBoxExItemA;
  5744.  
  5745. const
  5746.   {$EXTERNALSYM CBEM_INSERTITEMA}
  5747.   CBEM_INSERTITEMA        = WM_USER + 1;
  5748.   {$EXTERNALSYM CBEM_SETIMAGELIST}
  5749.   CBEM_SETIMAGELIST       = WM_USER + 2;
  5750.   {$EXTERNALSYM CBEM_GETIMAGELIST}
  5751.   CBEM_GETIMAGELIST       = WM_USER + 3;
  5752.   {$EXTERNALSYM CBEM_GETITEMA}
  5753.   CBEM_GETITEMA           = WM_USER + 4;
  5754.   {$EXTERNALSYM CBEM_SETITEMA}
  5755.   CBEM_SETITEMA           = WM_USER + 5;
  5756.   {$EXTERNALSYM CBEM_DELETEITEM}
  5757.   CBEM_DELETEITEM         = CB_DELETESTRING;
  5758.   {$EXTERNALSYM CBEM_GETCOMBOCONTROL}
  5759.   CBEM_GETCOMBOCONTROL    = WM_USER + 6;
  5760.   {$EXTERNALSYM CBEM_GETEDITCONTROL}
  5761.   CBEM_GETEDITCONTROL     = WM_USER + 7;
  5762.   {$EXTERNALSYM CBEM_SETEXSTYLE}
  5763.   CBEM_SETEXSTYLE         = WM_USER + 8;  // use SETEXTENDEDSTYLE instead
  5764.   {$EXTERNALSYM CBEM_GETEXSTYLE}
  5765.   CBEM_GETEXSTYLE         = WM_USER + 9;  // use GETEXTENDEDSTYLE instead
  5766.   {$EXTERNALSYM CBEM_GETEXTENDEDSTYLE}
  5767.   CBEM_GETEXTENDEDSTYLE   = WM_USER + 9;
  5768.   {$EXTERNALSYM CBEM_HASEDITCHANGED}
  5769.   CBEM_HASEDITCHANGED     = WM_USER + 10;
  5770.   {$EXTERNALSYM CBEM_INSERTITEMW}
  5771.   CBEM_INSERTITEMW        = WM_USER + 11;
  5772.   {$EXTERNALSYM CBEM_SETITEMW}
  5773.   CBEM_SETITEMW           = WM_USER + 12;
  5774.   {$EXTERNALSYM CBEM_GETITEMW}
  5775.   CBEM_GETITEMW           = WM_USER + 13;
  5776.   {$EXTERNALSYM CBEM_SETEXTENDEDSTYLE}
  5777.   CBEM_SETEXTENDEDSTYLE   = WM_USER + 14; // lparam == new style, wParam (optional) == mask
  5778.   {$EXTERNALSYM CBEM_SETUNICODEFORMAT}
  5779.   CBEM_SETUNICODEFORMAT   = CCM_SETUNICODEFORMAT;
  5780.   {$EXTERNALSYM CBEM_GETUNICODEFORMAT}
  5781.   CBEM_GETUNICODEFORMAT   = CCM_GETUNICODEFORMAT;
  5782.  
  5783.  
  5784.  
  5785.  
  5786.  
  5787.  
  5788.  
  5789.  
  5790.   {$EXTERNALSYM CBEM_INSERTITEM}
  5791.   CBEM_INSERTITEM         = CBEM_INSERTITEMA;
  5792.   {$EXTERNALSYM CBEM_SETITEM}
  5793.   CBEM_SETITEM            = CBEM_SETITEMA;
  5794.   {$EXTERNALSYM CBEM_GETITEM}
  5795.   CBEM_GETITEM            = CBEM_GETITEMA;
  5796.  
  5797.   {$EXTERNALSYM CBES_EX_NOEDITIMAGE}
  5798.   CBES_EX_NOEDITIMAGE          = $00000001;
  5799.   {$EXTERNALSYM CBES_EX_NOEDITIMAGEINDENT}
  5800.   CBES_EX_NOEDITIMAGEINDENT    = $00000002;
  5801.   {$EXTERNALSYM CBES_EX_PATHWORDBREAKPROC}
  5802.   CBES_EX_PATHWORDBREAKPROC    = $00000004;
  5803.   {$EXTERNALSYM CBES_EX_NOSIZELIMIT}
  5804.   CBES_EX_NOSIZELIMIT          = $00000008;
  5805.   {$EXTERNALSYM CBES_EX_CASESENSITIVE}
  5806.   CBES_EX_CASESENSITIVE        = $00000010;
  5807.  
  5808. type
  5809.   {$EXTERNALSYM NMCOMBOBOXEXA}
  5810.   NMCOMBOBOXEXA = packed record
  5811.     hdr: TNMHdr;
  5812.     ceItem: TComboBoxExItemA;
  5813.   end;
  5814.   {$EXTERNALSYM NMCOMBOBOXEXW}
  5815.   NMCOMBOBOXEXW = packed record
  5816.     hdr: TNMHdr;
  5817.     ceItem: TComboBoxExItemW;
  5818.   end;
  5819.   {$EXTERNALSYM NMCOMBOBOXEX}
  5820.   NMCOMBOBOXEX = NMCOMBOBOXEXA;
  5821.   PNMComboBoxExA = ^TNMComboBoxExA;
  5822.   PNMComboBoxExW = ^TNMComboBoxExW;
  5823.   PNMComboBoxEx = PNMComboBoxExA;
  5824.   TNMComboBoxExA = NMCOMBOBOXEXA;
  5825.   TNMComboBoxExW = NMCOMBOBOXEXW;
  5826.   TNMComboBoxEx = TNMComboBoxExA;
  5827.  
  5828. const
  5829.   {$EXTERNALSYM CBEN_GETDISPINFOA}
  5830.   CBEN_GETDISPINFOA       = CBEN_FIRST - 0;
  5831.   {$EXTERNALSYM CBEN_INSERTITEM}
  5832.   CBEN_INSERTITEM         = CBEN_FIRST - 1;
  5833.   {$EXTERNALSYM CBEN_DELETEITEM}
  5834.   CBEN_DELETEITEM         = CBEN_FIRST - 2;
  5835.   {$EXTERNALSYM CBEN_BEGINEDIT}
  5836.   CBEN_BEGINEDIT          = CBEN_FIRST - 4;
  5837.   {$EXTERNALSYM CBEN_ENDEDITA}
  5838.   CBEN_ENDEDITA           = CBEN_FIRST - 5; // lParam specifies why the endedit is happening
  5839.   {$EXTERNALSYM CBEN_ENDEDITW}
  5840.   CBEN_ENDEDITW           = CBEN_FIRST - 6;
  5841.   {$EXTERNALSYM CBEN_GETDISPINFOW}
  5842.   CBEN_GETDISPINFOW       = CBEN_FIRST - 7;
  5843.   {$EXTERNALSYM CBEN_DRAGBEGINA}
  5844.   CBEN_DRAGBEGINA                = CBEN_FIRST - 8;
  5845.   {$EXTERNALSYM CBEN_DRAGBEGINW}
  5846.   CBEN_DRAGBEGINW                = CBEN_FIRST - 9;
  5847.  
  5848.  
  5849.  
  5850.  
  5851.  
  5852.  
  5853.  
  5854.  
  5855.   {$EXTERNALSYM CBEN_ENDEDIT}
  5856.   CBEN_ENDEDIT            = CBEN_ENDEDITA;
  5857.   {$EXTERNALSYM CBEN_GETDISPINFO}
  5858.   CBEN_GETDISPINFO        = CBEN_GETDISPINFOA;
  5859.   {$EXTERNALSYM CBEN_DRAGBEGIN}
  5860.   CBEN_DRAGBEGIN          = CBEN_DRAGBEGINA;
  5861.  
  5862.   {$EXTERNALSYM CBENF_KILLFOCUS}
  5863.   CBENF_KILLFOCUS         = 1;
  5864.   {$EXTERNALSYM CBENF_RETURN}
  5865.   CBENF_RETURN            = 2;
  5866.   {$EXTERNALSYM CBENF_ESCAPE}
  5867.   CBENF_ESCAPE            = 3;
  5868.   {$EXTERNALSYM CBENF_DROPDOWN}
  5869.   CBENF_DROPDOWN          = 4;
  5870.  
  5871.   {$EXTERNALSYM CBEMAXSTRLEN}
  5872.   CBEMAXSTRLEN = 260;
  5873.  
  5874. type
  5875.   // CBEN_DRAGBEGIN sends this information ...
  5876.   {$EXTERNALSYM NMCBEDRAGBEGINA}
  5877.   NMCBEDRAGBEGINA = packed record
  5878.     hdr: TNMHdr;
  5879.     iItemid: Integer;
  5880.     szText: array[0..CBEMAXSTRLEN - 1] of AnsiChar;
  5881.   end;
  5882.   {$EXTERNALSYM NMCBEDRAGBEGINW}
  5883.   NMCBEDRAGBEGINW = packed record
  5884.     hdr: TNMHdr;
  5885.     iItemid: Integer;
  5886.     szText: array[0..CBEMAXSTRLEN - 1] of WideChar;
  5887.   end;
  5888.   {$EXTERNALSYM NMCBEDRAGBEGIN}
  5889.   NMCBEDRAGBEGIN = NMCBEDRAGBEGINA;
  5890.   PNMCBEDragBeginA = ^TNMCBEDragBeginA;
  5891.   PNMCBEDragBeginW = ^TNMCBEDragBeginW;
  5892.   PNMCBEDragBegin = PNMCBEDragBeginA;
  5893.   TNMCBEDragBeginA = NMCBEDRAGBEGINA;
  5894.   TNMCBEDragBeginW = NMCBEDRAGBEGINW;
  5895.   TNMCBEDragBegin = TNMCBEDragBeginA;
  5896.  
  5897.   // CBEN_ENDEDIT sends this information...
  5898.   // fChanged if the user actually did anything
  5899.   // iNewSelection gives what would be the new selection unless the notify is failed
  5900.   //                      iNewSelection may be CB_ERR if there's no match
  5901.   {$EXTERNALSYM NMCBEENDEDITA}
  5902.   NMCBEENDEDITA = packed record
  5903.     hdr: TNMHdr;
  5904.     fChanged: BOOL;
  5905.     iNewSelection: Integer;
  5906.     szText: array[0..CBEMAXSTRLEN - 1] of AnsiChar;
  5907.     iWhy: Integer;
  5908.   end;
  5909.   {$EXTERNALSYM NMCBEENDEDITW}
  5910.   NMCBEENDEDITW = packed record
  5911.     hdr: TNMHdr;
  5912.     fChanged: BOOL;
  5913.     iNewSelection: Integer;
  5914.     szText: array[0..CBEMAXSTRLEN - 1] of WideChar;
  5915.     iWhy: Integer;
  5916.   end;
  5917.   {$EXTERNALSYM NMCBEENDEDIT}
  5918.   NMCBEENDEDIT = NMCBEENDEDITA;
  5919.   PNMCBEEndEditA = ^TNMCBEEndEditA;
  5920.   PNMCBEEndEditW = ^TNMCBEEndEditW;
  5921.   PNMCBEEndEdit = PNMCBEEndEditA;
  5922.   TNMCBEEndEditA = NMCBEENDEDITA;
  5923.   TNMCBEEndEditW = NMCBEENDEDITW;
  5924.   TNMCBEEndEdit = TNMCBEEndEditA;
  5925.  
  5926. { ====== TAB CONTROL ======================== }
  5927.  
  5928. const
  5929.   {$EXTERNALSYM WC_TABCONTROL}
  5930.   WC_TABCONTROL = 'SysTabControl32';
  5931.  
  5932. const
  5933.   {$EXTERNALSYM TCS_SCROLLOPPOSITE}
  5934.   TCS_SCROLLOPPOSITE    = $0001;  // assumes multiline tab
  5935.   {$EXTERNALSYM TCS_BOTTOM}
  5936.   TCS_BOTTOM            = $0002;
  5937.   {$EXTERNALSYM TCS_RIGHT}
  5938.   TCS_RIGHT             = $0002;
  5939.   {$EXTERNALSYM TCS_MULTISELECT}
  5940.   TCS_MULTISELECT       = $0004;  // allow multi-select in button mode
  5941.   {$EXTERNALSYM TCS_FLATBUTTONS}
  5942.   TCS_FLATBUTTONS       = $0008;
  5943.   {$EXTERNALSYM TCS_FORCEICONLEFT}
  5944.   TCS_FORCEICONLEFT     = $0010;
  5945.   {$EXTERNALSYM TCS_FORCELABELLEFT}
  5946.   TCS_FORCELABELLEFT    = $0020;
  5947.   {$EXTERNALSYM TCS_HOTTRACK}
  5948.   TCS_HOTTRACK          = $0040;
  5949.   {$EXTERNALSYM TCS_VERTICAL}
  5950.   TCS_VERTICAL          = $0080;
  5951.   {$EXTERNALSYM TCS_TABS}
  5952.   TCS_TABS              = $0000;
  5953.   {$EXTERNALSYM TCS_BUTTONS}
  5954.   TCS_BUTTONS           = $0100;
  5955.   {$EXTERNALSYM TCS_SINGLELINE}
  5956.   TCS_SINGLELINE        = $0000;
  5957.   {$EXTERNALSYM TCS_MULTILINE}
  5958.   TCS_MULTILINE         = $0200;
  5959.   {$EXTERNALSYM TCS_RIGHTJUSTIFY}
  5960.   TCS_RIGHTJUSTIFY      = $0000;
  5961.   {$EXTERNALSYM TCS_FIXEDWIDTH}
  5962.   TCS_FIXEDWIDTH        = $0400;
  5963.   {$EXTERNALSYM TCS_RAGGEDRIGHT}
  5964.   TCS_RAGGEDRIGHT       = $0800;
  5965.   {$EXTERNALSYM TCS_FOCUSONBUTTONDOWN}
  5966.   TCS_FOCUSONBUTTONDOWN = $1000;
  5967.   {$EXTERNALSYM TCS_OWNERDRAWFIXED}
  5968.   TCS_OWNERDRAWFIXED    = $2000;
  5969.   {$EXTERNALSYM TCS_TOOLTIPS}
  5970.   TCS_TOOLTIPS          = $4000;
  5971.   {$EXTERNALSYM TCS_FOCUSNEVER}
  5972.   TCS_FOCUSNEVER        = $8000;
  5973.  
  5974.   {$EXTERNALSYM TCS_EX_FLATSEPARATORS}
  5975.   TCS_EX_FLATSEPARATORS = $00000001;
  5976.   {$EXTERNALSYM TCS_EX_REGISTERDROP}
  5977.   TCS_EX_REGISTERDROP   = $00000002;
  5978.  
  5979.   {$EXTERNALSYM TCM_GETIMAGELIST}
  5980.   TCM_GETIMAGELIST       = TCM_FIRST + 2;
  5981.   {$EXTERNALSYM TCM_SETIMAGELIST}
  5982.   TCM_SETIMAGELIST       = TCM_FIRST + 3;
  5983.   {$EXTERNALSYM TCM_GETITEMCOUNT}
  5984.   TCM_GETITEMCOUNT       = TCM_FIRST + 4;
  5985.   {$EXTERNALSYM TCM_DELETEITEM}
  5986.   TCM_DELETEITEM         = TCM_FIRST + 8;
  5987.   {$EXTERNALSYM TCM_DELETEALLITEMS}
  5988.   TCM_DELETEALLITEMS     = TCM_FIRST + 9;
  5989.   {$EXTERNALSYM TCM_GETITEMRECT}
  5990.   TCM_GETITEMRECT        = TCM_FIRST + 10;
  5991.   {$EXTERNALSYM TCM_GETCURSEL}
  5992.   TCM_GETCURSEL          = TCM_FIRST + 11;
  5993.   {$EXTERNALSYM TCM_SETCURSEL}
  5994.   TCM_SETCURSEL          = TCM_FIRST + 12;
  5995.   {$EXTERNALSYM TCM_HITTEST}
  5996.   TCM_HITTEST            = TCM_FIRST + 13;
  5997.   {$EXTERNALSYM TCM_SETITEMEXTRA}
  5998.   TCM_SETITEMEXTRA       = TCM_FIRST + 14;
  5999.   {$EXTERNALSYM TCM_ADJUSTRECT}
  6000.   TCM_ADJUSTRECT         = TCM_FIRST + 40;
  6001.   {$EXTERNALSYM TCM_SETITEMSIZE}
  6002.   TCM_SETITEMSIZE        = TCM_FIRST + 41;
  6003.   {$EXTERNALSYM TCM_REMOVEIMAGE}
  6004.   TCM_REMOVEIMAGE        = TCM_FIRST + 42;
  6005.   {$EXTERNALSYM TCM_SETPADDING}
  6006.   TCM_SETPADDING         = TCM_FIRST + 43;
  6007.   {$EXTERNALSYM TCM_GETROWCOUNT}
  6008.   TCM_GETROWCOUNT        = TCM_FIRST + 44;
  6009.   {$EXTERNALSYM TCM_GETTOOLTIPS}
  6010.   TCM_GETTOOLTIPS        = TCM_FIRST + 45;
  6011.   {$EXTERNALSYM TCM_SETTOOLTIPS}
  6012.   TCM_SETTOOLTIPS        = TCM_FIRST + 46;
  6013.   {$EXTERNALSYM TCM_GETCURFOCUS}
  6014.   TCM_GETCURFOCUS        = TCM_FIRST + 47;
  6015.   {$EXTERNALSYM TCM_SETCURFOCUS}
  6016.   TCM_SETCURFOCUS        = TCM_FIRST + 48;
  6017.   {$EXTERNALSYM TCM_SETMINTABWIDTH}
  6018.   TCM_SETMINTABWIDTH     = TCM_FIRST + 49;
  6019.   {$EXTERNALSYM TCM_DESELECTALL}
  6020.   TCM_DESELECTALL        = TCM_FIRST + 50;
  6021.   {$EXTERNALSYM TCM_HIGHLIGHTITEM}
  6022.   TCM_HIGHLIGHTITEM      = TCM_FIRST + 51;
  6023.   {$EXTERNALSYM TCM_SETEXTENDEDSTYLE}
  6024.   TCM_SETEXTENDEDSTYLE   = TCM_FIRST + 52;  // optional wParam == mask
  6025.   {$EXTERNALSYM TCM_GETEXTENDEDSTYLE}
  6026.   TCM_GETEXTENDEDSTYLE   = TCM_FIRST + 53;
  6027.   {$EXTERNALSYM TCM_SETUNICODEFORMAT}
  6028.   TCM_SETUNICODEFORMAT   = CCM_SETUNICODEFORMAT;
  6029.   {$EXTERNALSYM TCM_GETUNICODEFORMAT}
  6030.   TCM_GETUNICODEFORMAT   = CCM_GETUNICODEFORMAT;
  6031.  
  6032.   {$EXTERNALSYM TCIF_TEXT}
  6033.   TCIF_TEXT       = $0001;
  6034.   {$EXTERNALSYM TCIF_IMAGE}
  6035.   TCIF_IMAGE      = $0002;
  6036.   {$EXTERNALSYM TCIF_RTLREADING}
  6037.   TCIF_RTLREADING = $0004;
  6038.   {$EXTERNALSYM TCIF_PARAM}
  6039.   TCIF_PARAM      = $0008;
  6040.   {$EXTERNALSYM TCIF_STATE}
  6041.   TCIF_STATE      = $0010;
  6042.  
  6043.   {$EXTERNALSYM TCIS_BUTTONPRESSED}
  6044.   TCIS_BUTTONPRESSED      = $0001;
  6045.   {$EXTERNALSYM TCIS_HIGHLIGHTED}
  6046.   TCIS_HIGHLIGHTED        = $0002;
  6047.  
  6048. type
  6049.   PTCItemHeaderA = ^TTCItemHeaderA;
  6050.   PTCItemHeaderW = ^TTCItemHeaderW;
  6051.   PTCItemHeader = PTCItemHeaderA;
  6052.   {$EXTERNALSYM tagTCITEMHEADERA}
  6053.   tagTCITEMHEADERA = packed record
  6054.     mask: UINT;
  6055.     lpReserved1: UINT;
  6056.     lpReserved2: UINT;
  6057.     pszText: PAnsiChar;
  6058.     cchTextMax: Integer;
  6059.     iImage: Integer;
  6060.   end;
  6061.   {$EXTERNALSYM tagTCITEMHEADERW}
  6062.   tagTCITEMHEADERW = packed record
  6063.     mask: UINT;
  6064.     lpReserved1: UINT;
  6065.     lpReserved2: UINT;
  6066.     pszText: PWideChar;
  6067.     cchTextMax: Integer;
  6068.     iImage: Integer;
  6069.   end;
  6070.   {$EXTERNALSYM tagTCITEMHEADER}
  6071.   tagTCITEMHEADER = tagTCITEMHEADERA;
  6072.   {$EXTERNALSYM _TC_ITEMHEADERA}
  6073.   _TC_ITEMHEADERA = tagTCITEMHEADERA;
  6074.   {$EXTERNALSYM _TC_ITEMHEADERW}
  6075.   _TC_ITEMHEADERW = tagTCITEMHEADERW;
  6076.   {$EXTERNALSYM _TC_ITEMHEADER}
  6077.   _TC_ITEMHEADER = _TC_ITEMHEADERA;
  6078.   TTCItemHeaderA = tagTCITEMHEADERA;
  6079.   TTCItemHeaderW = tagTCITEMHEADERW;
  6080.   TTCItemHeader = TTCItemHeaderA;
  6081.   {$EXTERNALSYM TC_ITEMHEADERA}
  6082.   TC_ITEMHEADERA = tagTCITEMHEADERA;
  6083.   {$EXTERNALSYM TC_ITEMHEADERW}
  6084.   TC_ITEMHEADERW = tagTCITEMHEADERW;
  6085.   {$EXTERNALSYM TC_ITEMHEADER}
  6086.   TC_ITEMHEADER = TC_ITEMHEADERA;
  6087.  
  6088.   PTCItemA = ^TTCItemA;
  6089.   PTCItemW = ^TTCItemW;
  6090.   PTCItem = PTCItemA;
  6091.   {$EXTERNALSYM tagTCITEMA}
  6092.   tagTCITEMA = packed record
  6093.     mask: UINT;
  6094.     dwState: UINT;
  6095.     dwStateMask: UINT;
  6096.     pszText: PAnsiChar;
  6097.     cchTextMax: Integer;
  6098.     iImage: Integer;
  6099.     lParam: LPARAM;
  6100.   end;
  6101.   {$EXTERNALSYM tagTCITEMW}
  6102.   tagTCITEMW = packed record
  6103.     mask: UINT;
  6104.     dwState: UINT;
  6105.     dwStateMask: UINT;
  6106.     pszText: PWideChar;
  6107.     cchTextMax: Integer;
  6108.     iImage: Integer;
  6109.     lParam: LPARAM;
  6110.   end;
  6111.   {$EXTERNALSYM tagTCITEM}
  6112.   tagTCITEM = tagTCITEMA;
  6113.   {$EXTERNALSYM _TC_ITEMA}
  6114.   _TC_ITEMA = tagTCITEMA;
  6115.   {$EXTERNALSYM _TC_ITEMW}
  6116.   _TC_ITEMW = tagTCITEMW;
  6117.   {$EXTERNALSYM _TC_ITEM}
  6118.   _TC_ITEM = _TC_ITEMA;
  6119.   TTCItemA = tagTCITEMA;
  6120.   TTCItemW = tagTCITEMW;
  6121.   TTCItem = TTCItemA;
  6122.   {$EXTERNALSYM TC_ITEMA}
  6123.   TC_ITEMA = tagTCITEMA;
  6124.   {$EXTERNALSYM TC_ITEMW}
  6125.   TC_ITEMW = tagTCITEMW;
  6126.   {$EXTERNALSYM TC_ITEM}
  6127.   TC_ITEM = TC_ITEMA;
  6128.  
  6129. const
  6130.   {$EXTERNALSYM TCM_GETITEMA}
  6131.   TCM_GETITEMA             = TCM_FIRST + 5;
  6132.   {$EXTERNALSYM TCM_SETITEMA}
  6133.   TCM_SETITEMA             = TCM_FIRST + 6;
  6134.   {$EXTERNALSYM TCM_INSERTITEMA}
  6135.   TCM_INSERTITEMA          = TCM_FIRST + 7;
  6136.   {$EXTERNALSYM TCM_GETITEMW}
  6137.   TCM_GETITEMW             = TCM_FIRST + 60;
  6138.   {$EXTERNALSYM TCM_SETITEMW}
  6139.   TCM_SETITEMW             = TCM_FIRST + 61;
  6140.   {$EXTERNALSYM TCM_INSERTITEMW}
  6141.   TCM_INSERTITEMW          = TCM_FIRST + 62;
  6142.  
  6143.  
  6144.  
  6145.  
  6146.  
  6147.  
  6148.  
  6149.   {$EXTERNALSYM TCM_GETITEM}
  6150.   TCM_GETITEM             = TCM_GETITEMA;
  6151.   {$EXTERNALSYM TCM_SETITEM}
  6152.   TCM_SETITEM             = TCM_SETITEMA;
  6153.   {$EXTERNALSYM TCM_INSERTITEM}
  6154.   TCM_INSERTITEM          = TCM_INSERTITEMA;
  6155.  
  6156. const
  6157.   {$EXTERNALSYM TCHT_NOWHERE}
  6158.   TCHT_NOWHERE     = $0001;
  6159.   {$EXTERNALSYM TCHT_ONITEMICON}
  6160.   TCHT_ONITEMICON  = $0002;
  6161.   {$EXTERNALSYM TCHT_ONITEMLABEL}
  6162.   TCHT_ONITEMLABEL = $0004;
  6163.   {$EXTERNALSYM TCHT_ONITEM}
  6164.   TCHT_ONITEM      = TCHT_ONITEMICON or TCHT_ONITEMLABEL;
  6165.  
  6166. type
  6167.   PTCHitTestInfo = ^TTCHitTestInfo;
  6168.   {$EXTERNALSYM tagTCHITTESTINFO}
  6169.   tagTCHITTESTINFO = packed record
  6170.     pt: TPoint;
  6171.     flags: UINT;
  6172.   end;
  6173.   {$EXTERNALSYM _TC_HITTESTINFO}
  6174.   _TC_HITTESTINFO = tagTCHITTESTINFO;
  6175.   TTCHitTestInfo = tagTCHITTESTINFO;
  6176.   {$EXTERNALSYM TC_HITTESTINFO}
  6177.   TC_HITTESTINFO = tagTCHITTESTINFO;
  6178.  
  6179.   {$EXTERNALSYM tagTCKEYDOWN}
  6180.   tagTCKEYDOWN = packed record
  6181.     hdr: TNMHDR;
  6182.     wVKey: Word;
  6183.     flags: UINT;
  6184.   end;
  6185.   {$EXTERNALSYM _TC_KEYDOWN}
  6186.   _TC_KEYDOWN = tagTCKEYDOWN;
  6187.   TTCKeyDown = tagTCKEYDOWN;
  6188.   {$EXTERNALSYM TC_KEYDOWN}
  6189.   TC_KEYDOWN = tagTCKEYDOWN;
  6190.  
  6191. const
  6192.   {$EXTERNALSYM TCN_KEYDOWN}
  6193.   TCN_KEYDOWN             = TCN_FIRST - 0;
  6194.   {$EXTERNALSYM TCN_SELCHANGE}
  6195.   TCN_SELCHANGE           = TCN_FIRST - 1;
  6196.   {$EXTERNALSYM TCN_SELCHANGING}
  6197.   TCN_SELCHANGING         = TCN_FIRST - 2;
  6198.   {$EXTERNALSYM TCN_GETOBJECT}
  6199.   TCN_GETOBJECT           = TCN_FIRST - 3;
  6200.  
  6201. {$EXTERNALSYM TabCtrl_HitTest}
  6202. function TabCtrl_HitTest(hwndTC: HWND; pinfo: PTCHitTestInfo): Integer;
  6203. {$EXTERNALSYM TabCtrl_SetItemExtra}
  6204. function TabCtrl_SetItemExtra(hwndTC: HWND; cb: Integer): BOOL;
  6205. {$EXTERNALSYM TabCtrl_AdjustRect}
  6206. function TabCtrl_AdjustRect(hwnd: HWND; bLarger: BOOL; prc: PRect): Integer;
  6207. {$EXTERNALSYM TabCtrl_SetItemSize}
  6208. function TabCtrl_SetItemSize(hwnd: HWND; x, y: Integer): DWORD;
  6209. {$EXTERNALSYM TabCtrl_RemoveImage}
  6210. procedure TabCtrl_RemoveImage(hwnd: HWND; i: Integer);
  6211. {$EXTERNALSYM TabCtrl_SetPadding}
  6212. procedure TabCtrl_SetPadding(hwnd: HWND; cx, cy: Integer);
  6213. {$EXTERNALSYM TabCtrl_GetRowCount}
  6214. function TabCtrl_GetRowCount(hwnd: HWND): Integer;
  6215. {$EXTERNALSYM TabCtrl_GetToolTips}
  6216. function TabCtrl_GetToolTips(wnd: HWND): HWND;
  6217. {$EXTERNALSYM TabCtrl_SetToolTips}
  6218. procedure TabCtrl_SetToolTips(hwnd: HWND; hwndTT: HWND);
  6219. {$EXTERNALSYM TabCtrl_GetCurFocus}
  6220. function TabCtrl_GetCurFocus(hwnd: HWND): Integer;
  6221. {$EXTERNALSYM TabCtrl_SetCurFocus}
  6222. procedure TabCtrl_SetCurFocus(hwnd: HWND; i: Integer);
  6223. {$EXTERNALSYM TabCtrl_SetMinTabWidth}
  6224. function TabCtrl_SetMinTabWidth(hwnd: HWND; x: Integer): Integer;
  6225. {$EXTERNALSYM TabCtrl_DeselectAll}
  6226. procedure TabCtrl_DeselectAll(hwnd: HWND; fExcludeFocus: BOOL);
  6227. {$EXTERNALSYM TabCtrl_HighlightItem}
  6228. function TabCtrl_HighlightItem(hwnd: HWND; i: Integer; fHighlight: WordBool): BOOL;
  6229. {$EXTERNALSYM TabCtrl_SetExtendedStyle}
  6230. function TabCtrl_SetExtendedStyle(hwnd: HWND; dw: DWORD): DWORD;
  6231. {$EXTERNALSYM TabCtrl_GetExtendedStyle}
  6232. function TabCtrl_GetExtendedStyle(hwnd: HWND): DWORD;
  6233. {$EXTERNALSYM TabCtrl_SetUnicodeFormat}
  6234. function TabCtrl_SetUnicodeFormat(hwnd: HWND; fUnicode: BOOL): BOOL;
  6235. {$EXTERNALSYM TabCtrl_GetUnicodeFormat}
  6236. function TabCtrl_GetUnicodeFormat(hwnd: HWND): BOOL;
  6237. {$EXTERNALSYM TabCtrl_GetItemRect}
  6238. function TabCtrl_GetItemRect(hwnd: HWND; i: Integer; var prc: TRect): BOOL;
  6239.  
  6240. { ====== ANIMATE CONTROL ================= }
  6241.  
  6242. const
  6243.   {$EXTERNALSYM ANIMATE_CLASS}
  6244.   ANIMATE_CLASS = 'SysAnimate32';
  6245.  
  6246. const
  6247.   {$EXTERNALSYM ACS_CENTER}
  6248.   ACS_CENTER              = $0001;
  6249.   {$EXTERNALSYM ACS_TRANSPARENT}
  6250.   ACS_TRANSPARENT         = $0002;
  6251.   {$EXTERNALSYM ACS_AUTOPLAY}
  6252.   ACS_AUTOPLAY            = $0004;
  6253.   {$EXTERNALSYM ACS_TIMER}
  6254.   ACS_TIMER               = $0008;  { don't use threads... use timers }
  6255.  
  6256.   {$EXTERNALSYM ACM_OPENA}
  6257.   ACM_OPENA                = WM_USER + 100;
  6258.   {$EXTERNALSYM ACM_OPENW}
  6259.   ACM_OPENW                = WM_USER + 103;
  6260.  
  6261.  
  6262.  
  6263.   {$EXTERNALSYM ACM_OPEN}
  6264.   ACM_OPEN                = ACM_OPENA;
  6265.  
  6266.   {$EXTERNALSYM ACM_PLAY}
  6267.   ACM_PLAY                = WM_USER + 101;
  6268.   {$EXTERNALSYM ACM_STOP}
  6269.   ACM_STOP                = WM_USER + 102;
  6270.  
  6271.   {$EXTERNALSYM ACN_START}
  6272.   ACN_START               = 1;
  6273.   {$EXTERNALSYM ACN_STOP}
  6274.   ACN_STOP                = 2;
  6275.  
  6276. {$EXTERNALSYM Animate_Create}
  6277. function Animate_Create(hwndP: HWND; id: HMENU; dwStyle: DWORD; hInstance: HINST): HWND;
  6278. {$EXTERNALSYM Animate_Open}
  6279. function Animate_Open(hwnd: HWND; szName: PChar): BOOL;
  6280. {$EXTERNALSYM Animate_OpenEx}
  6281. function Animate_OpenEx(hwnd: HWND; hInst: HINST; szName: PChar): BOOL;
  6282. {$EXTERNALSYM Animate_Play}
  6283. function Animate_Play(hwnd: HWND; from, _to: Word; rep: UINT): BOOL;
  6284. {$EXTERNALSYM Animate_Stop}
  6285. function Animate_Stop(hwnd: HWND): BOOL;
  6286. {$EXTERNALSYM Animate_Close}
  6287. function Animate_Close(hwnd: HWND): BOOL;
  6288. {$EXTERNALSYM Animate_Seek}
  6289. function Animate_Seek(hwnd: HWND; frame: Word): BOOL;
  6290.  
  6291. { ====== MONTHCAL CONTROL ========= }
  6292.  
  6293. const
  6294.   {$EXTERNALSYM MONTHCAL_CLASS}
  6295.   MONTHCAL_CLASS          = 'SysMonthCal32';
  6296.  
  6297. const  
  6298.   // Message constants
  6299.   {$EXTERNALSYM MCM_FIRST}
  6300.   MCM_FIRST             = $1000;
  6301.   {$EXTERNALSYM MCM_GETCURSEL}
  6302.   MCM_GETCURSEL         = MCM_FIRST + 1;
  6303.   {$EXTERNALSYM MCM_SETCURSEL}
  6304.   MCM_SETCURSEL         = MCM_FIRST + 2;
  6305.   {$EXTERNALSYM MCM_GETMAXSELCOUNT}
  6306.   MCM_GETMAXSELCOUNT    = MCM_FIRST + 3;
  6307.   {$EXTERNALSYM MCM_SETMAXSELCOUNT}
  6308.   MCM_SETMAXSELCOUNT    = MCM_FIRST + 4;
  6309.   {$EXTERNALSYM MCM_GETSELRANGE}
  6310.   MCM_GETSELRANGE       = MCM_FIRST + 5;
  6311.   {$EXTERNALSYM MCM_SETSELRANGE}
  6312.   MCM_SETSELRANGE       = MCM_FIRST + 6;
  6313.   {$EXTERNALSYM MCM_GETMONTHRANGE}
  6314.   MCM_GETMONTHRANGE     = MCM_FIRST + 7;
  6315.   {$EXTERNALSYM MCM_SETDAYSTATE}
  6316.   MCM_SETDAYSTATE       = MCM_FIRST + 8;
  6317.   {$EXTERNALSYM MCM_GETMINREQRECT}
  6318.   MCM_GETMINREQRECT     = MCM_FIRST + 9;
  6319.   {$EXTERNALSYM MCM_SETCOLOR}
  6320.   MCM_SETCOLOR          = MCM_FIRST + 10;
  6321.   {$EXTERNALSYM MCM_GETCOLOR}
  6322.   MCM_GETCOLOR          = MCM_FIRST + 11;
  6323.   {$EXTERNALSYM MCM_SETTODAY}
  6324.   MCM_SETTODAY          = MCM_FIRST + 12;
  6325.   {$EXTERNALSYM MCM_GETTODAY}
  6326.   MCM_GETTODAY          = MCM_FIRST + 13;
  6327.   {$EXTERNALSYM MCM_HITTEST}
  6328.   MCM_HITTEST           = MCM_FIRST + 14;
  6329.   {$EXTERNALSYM MCM_SETFIRSTDAYOFWEEK}
  6330.   MCM_SETFIRSTDAYOFWEEK = MCM_FIRST + 15;
  6331.   {$EXTERNALSYM MCM_GETFIRSTDAYOFWEEK}
  6332.   MCM_GETFIRSTDAYOFWEEK = MCM_FIRST + 16;
  6333.   {$EXTERNALSYM MCM_GETRANGE}
  6334.   MCM_GETRANGE          = MCM_FIRST + 17;
  6335.   {$EXTERNALSYM MCM_SETRANGE}
  6336.   MCM_SETRANGE          = MCM_FIRST + 18;
  6337.   {$EXTERNALSYM MCM_GETMONTHDELTA}
  6338.   MCM_GETMONTHDELTA     = MCM_FIRST + 19;
  6339.   {$EXTERNALSYM MCM_SETMONTHDELTA}
  6340.   MCM_SETMONTHDELTA     = MCM_FIRST + 20;
  6341.   {$EXTERNALSYM MCM_GETMAXTODAYWIDTH}
  6342.   MCM_GETMAXTODAYWIDTH  = MCM_FIRST + 21;
  6343.   {$EXTERNALSYM MCM_SETUNICODEFORMAT}
  6344.   MCM_SETUNICODEFORMAT  = CCM_SETUNICODEFORMAT;
  6345.   {$EXTERNALSYM MCM_GETUNICODEFORMAT}
  6346.   MCM_GETUNICODEFORMAT  = CCM_GETUNICODEFORMAT;
  6347.  
  6348.   // Hit test flags
  6349.   {$EXTERNALSYM MCHT_TITLE}
  6350.   MCHT_TITLE            = $00010000;
  6351.   {$EXTERNALSYM MCHT_CALENDAR}
  6352.   MCHT_CALENDAR         = $00020000;
  6353.   {$EXTERNALSYM MCHT_TODAYLINK}
  6354.   MCHT_TODAYLINK        = $00030000;
  6355.   {$EXTERNALSYM MCHT_NEXT}
  6356.   MCHT_NEXT             = $01000000;  // these indicate that hitting
  6357.   {$EXTERNALSYM MCHT_PREV}
  6358.   MCHT_PREV             = $02000000;  // here will go to the next/prev month
  6359.   {$EXTERNALSYM MCHT_NOWHERE}
  6360.   MCHT_NOWHERE          = $00000000;
  6361.   {$EXTERNALSYM MCHT_TITLEBK}
  6362.   MCHT_TITLEBK          = MCHT_TITLE;
  6363.   {$EXTERNALSYM MCHT_TITLEMONTH}
  6364.   MCHT_TITLEMONTH       = MCHT_TITLE or $0001;
  6365.   {$EXTERNALSYM MCHT_TITLEYEAR}
  6366.   MCHT_TITLEYEAR        = MCHT_TITLE or $0002;
  6367.   {$EXTERNALSYM MCHT_TITLEBTNNEXT}
  6368.   MCHT_TITLEBTNNEXT     = MCHT_TITLE or MCHT_NEXT or $0003;
  6369.   {$EXTERNALSYM MCHT_TITLEBTNPREV}
  6370.   MCHT_TITLEBTNPREV     = MCHT_TITLE or MCHT_PREV or $0003;
  6371.   {$EXTERNALSYM MCHT_CALENDARBK}
  6372.   MCHT_CALENDARBK       = MCHT_CALENDAR;
  6373.   {$EXTERNALSYM MCHT_CALENDARDATE}
  6374.   MCHT_CALENDARDATE     = MCHT_CALENDAR or $0001;
  6375.   {$EXTERNALSYM MCHT_CALENDARDATENEXT}
  6376.   MCHT_CALENDARDATENEXT = MCHT_CALENDARDATE or MCHT_NEXT;
  6377.   {$EXTERNALSYM MCHT_CALENDARDATEPREV}
  6378.   MCHT_CALENDARDATEPREV = MCHT_CALENDARDATE or MCHT_PREV;
  6379.   {$EXTERNALSYM MCHT_CALENDARDAY}
  6380.   MCHT_CALENDARDAY      = MCHT_CALENDAR or $0002;
  6381.   {$EXTERNALSYM MCHT_CALENDARWEEKNUM}
  6382.   MCHT_CALENDARWEEKNUM  = MCHT_CALENDAR or $0003;
  6383.  
  6384.   // Color codes
  6385.   {$EXTERNALSYM MCSC_BACKGROUND}
  6386.   MCSC_BACKGROUND       = 0;   // the background color (between months)
  6387.   {$EXTERNALSYM MCSC_TEXT}
  6388.   MCSC_TEXT             = 1;   // the dates
  6389.   {$EXTERNALSYM MCSC_TITLEBK}
  6390.   MCSC_TITLEBK          = 2;   // background of the title
  6391.   {$EXTERNALSYM MCSC_TITLETEXT}
  6392.   MCSC_TITLETEXT        = 3;
  6393.   {$EXTERNALSYM MCSC_MONTHBK}
  6394.   MCSC_MONTHBK          = 4;   // background within the month cal
  6395.   {$EXTERNALSYM MCSC_TRAILINGTEXT}
  6396.   MCSC_TRAILINGTEXT     = 5;   // the text color of header & trailing days
  6397.  
  6398.   // Notification codes
  6399.   {$EXTERNALSYM MCN_SELCHANGE}
  6400.   MCN_SELCHANGE         = MCN_FIRST + 1;
  6401.   {$EXTERNALSYM MCN_GETDAYSTATE}
  6402.   MCN_GETDAYSTATE       = MCN_FIRST + 3;
  6403.   {$EXTERNALSYM MCN_SELECT}
  6404.   MCN_SELECT            = MCN_FIRST + 4;
  6405.  
  6406.   // Style flags
  6407.   {$EXTERNALSYM MCS_DAYSTATE}
  6408.   MCS_DAYSTATE          = $0001;
  6409.   {$EXTERNALSYM MCS_MULTISELECT}
  6410.   MCS_MULTISELECT       = $0002;
  6411.   {$EXTERNALSYM MCS_WEEKNUMBERS}
  6412.   MCS_WEEKNUMBERS       = $0004;
  6413.   MCS_NOTODAY_PRE_IE4   = $0008;
  6414.   {$EXTERNALSYM MCS_NOTODAYCIRCLE}
  6415.   MCS_NOTODAYCIRCLE     = $0008;
  6416.   {$EXTERNALSYM MCS_NOTODAY}
  6417.   MCS_NOTODAY           = $0010;
  6418.  
  6419.   {$EXTERNALSYM GMR_VISIBLE}
  6420.   GMR_VISIBLE           = 0;       // visible portion of display
  6421.   {$EXTERNALSYM GMR_DAYSTATE}
  6422.   GMR_DAYSTATE          = 1;       // above plus the grayed out parts of
  6423.                                    // partially displayed months
  6424.                                    
  6425. type
  6426.   // bit-packed array of "bold" info for a month
  6427.   // if a bit is on, that day is drawn bold
  6428.   {$EXTERNALSYM MONTHDAYSTATE}
  6429.   MONTHDAYSTATE = DWORD;
  6430.   PMonthDayState = ^TMonthDayState;
  6431.   TMonthDayState = MONTHDAYSTATE;
  6432.  
  6433.   {$EXTERNALSYM MCHITTESTINFO}
  6434.   MCHITTESTINFO = packed record
  6435.     cbSize: UINT;
  6436.     pt: TPoint;
  6437.     uHit: UINT;      // out param
  6438.     st: TSystemTime;
  6439.   end;
  6440.   PMCHitTestInfo = ^TMCHitTestInfo;
  6441.   TMCHitTestInfo = MCHITTESTINFO;
  6442.  
  6443.   // MCN_SELCHANGE is sent whenever the currently displayed date changes
  6444.   // via month change, year change, keyboard navigation, prev/next button
  6445.   {$EXTERNALSYM tagNMSELCHANGE}
  6446.   tagNMSELCHANGE = packed record
  6447.     nmhdr: TNmHdr;  // this must be first, so we don't break WM_NOTIFY
  6448.     stSelStart: TSystemTime;
  6449.     stSelEnd: TSystemTime;
  6450.   end;
  6451.   PNMSelChange = ^TNMSelChange;
  6452.   TNMSelChange = tagNMSELCHANGE;
  6453.  
  6454.   // MCN_GETDAYSTATE is sent for MCS_DAYSTATE controls whenever new daystate
  6455.   // information is needed (month or year scroll) to draw bolding information.
  6456.   // The app must fill in cDayState months worth of information starting from
  6457.   // stStart date. The app may fill in the array at prgDayState or change
  6458.   // prgDayState to point to a different array out of which the information
  6459.   // will be copied. (similar to tooltips)
  6460.   {$EXTERNALSYM tagNMDAYSTATE}
  6461.   tagNMDAYSTATE = packed record
  6462.     nmhdr: TNmHdr;  // this must be first, so we don't break WM_NOTIFY
  6463.     stStart: TSystemTime;
  6464.     cDayState: Integer;
  6465.     prgDayState: PMonthDayState; // points to cDayState TMONTHDAYSTATEs
  6466.   end;
  6467.   PNMDayState = ^TNMDayState;
  6468.   TNMDayState = tagNMDAYSTATE;
  6469.  
  6470.   // MCN_SELECT is sent whenever a selection has occured (via mouse or keyboard)
  6471.   {$EXTERNALSYM NMSELECT}
  6472.   NMSELECT = tagNMSELCHANGE;
  6473.   PNMSelect = ^TNMSelect;
  6474.   TNMSelect = NMSELECT;
  6475.  
  6476. //   returns FALSE if MCS_MULTISELECT
  6477. //   returns TRUE and sets *pst to the currently selected date otherwise
  6478. {$EXTERNALSYM MonthCal_GetCurSel}
  6479. function MonthCal_GetCurSel(hmc: HWND; var pst: TSystemTime): BOOL;
  6480.  
  6481. //   returns FALSE if MCS_MULTISELECT
  6482. //   returns TURE and sets the currently selected date to *pst otherwise
  6483. {$EXTERNALSYM MonthCal_SetCurSel}
  6484. function MonthCal_SetCurSel(hmc: HWND; const pst: TSystemTime): BOOL;
  6485.  
  6486. //   returns the maximum number of selectable days allowed
  6487. {$EXTERNALSYM MonthCal_GetMaxSelCount}
  6488. function MonthCal_GetMaxSelCount(hmc: HWND): DWORD;
  6489.  
  6490. //   sets the max number days that can be selected iff MCS_MULTISELECT
  6491. {$EXTERNALSYM MonthCal_SetMaxSelCount}
  6492. function MonthCal_SetMaxSelCount(hmc: HWND; n: UINT): BOOL;
  6493.  
  6494. //   sets rgst[0] to the first day of the selection range
  6495. //   sets rgst[1] to the last day of the selection range
  6496. {$EXTERNALSYM MonthCal_GetSelRange}
  6497. function MonthCal_GetSelRange(hmc: HWND; rgst: PSystemTime): BOOL;
  6498.  
  6499. //   selects the range of days from rgst[0] to rgst[1]
  6500. {$EXTERNALSYM MonthCal_SetSelRange}
  6501. function MonthCal_SetSelRange(hmc: HWND; rgst: PSystemTime): BOOL;
  6502.  
  6503. //   if rgst specified, sets rgst[0] to the starting date and
  6504. //      and rgst[1] to the ending date of the the selectable (non-grayed)
  6505. //      days if GMR_VISIBLE or all the displayed days (including grayed)
  6506. //      if GMR_DAYSTATE.
  6507. //   returns the number of months spanned by the above range.
  6508. {$EXTERNALSYM MonthCal_GetMonthRange}
  6509. function MonthCal_GetMonthRange(hmc: HWND; gmr: DWORD; rgst: PSystemTime): DWORD;
  6510.  
  6511. //   cbds is the count of DAYSTATE items in rgds and it must be equal
  6512. //   to the value returned from MonthCal_GetMonthRange(hmc, GMR_DAYSTATE, NULL)
  6513. //   This sets the DAYSTATE bits for each month (grayed and non-grayed
  6514. //   days) displayed in the calendar. The first bit in a month's DAYSTATE
  6515. //   corresponts to bolding day 1, the second bit affects day 2, etc.
  6516. {$EXTERNALSYM MonthCal_SetDayState}
  6517. function MonthCal_SetDayState(hmc: HWND; cbds: Integer; const rgds: TNMDayState): BOOL;
  6518.  
  6519. //   sets prc the minimal size needed to display one month
  6520. {$EXTERNALSYM MonthCal_GetMinReqRect}
  6521. function MonthCal_GetMinReqRect(hmc: HWND; var prc: TRect): BOOL;
  6522.  
  6523. // set what day is "today"   send NULL to revert back to real date
  6524. {$EXTERNALSYM MonthCal_SetToday}
  6525. function MonthCal_SetToday(hmc: HWND; const pst: TSystemTime): BOOL;
  6526.  
  6527. // get what day is "today"
  6528. // returns BOOL for success/failure
  6529. {$EXTERNALSYM MonthCal_GetToday}
  6530. function MonthCal_GetToday(hmc: HWND; var pst: TSystemTime): BOOL;
  6531.  
  6532. // determine what pinfo->pt is over
  6533. {$EXTERNALSYM MonthCal_HitTest}
  6534. function MonthCal_HitTest(hmc: HWND; var info: TMCHitTestInfo): DWORD;
  6535.  
  6536. // set colors to draw control with -- see MCSC_ bits below
  6537. {$EXTERNALSYM MonthCal_SetColor}
  6538. function MonthCal_SetColor(hmc: HWND; iColor: Integer; clr: TColorRef): TColorRef;
  6539.  
  6540. {$EXTERNALSYM MonthCal_GetColor}
  6541. function MonthCal_GetColor(hmc: HWND; iColor: Integer): TColorRef;
  6542.  
  6543. // set first day of week to iDay:
  6544. // 0 for Monday, 1 for Tuesday, ..., 6 for Sunday
  6545. // -1 for means use locale info
  6546. {$EXTERNALSYM MonthCal_SetFirstDayOfWeek}
  6547. function MonthCal_SetFirstDayOfWeek(hmc: HWND; iDay: Integer): Integer;
  6548.  
  6549. // DWORD result...  low word has the day.  high word is bool if this is app set
  6550. // or not (FALSE == using locale info)
  6551. {$EXTERNALSYM MonthCal_GetFirstDayOfWeek}
  6552. function MonthCal_GetFirstDayOfWeek(hmc: HWND): Integer;
  6553.  
  6554. //   modifies rgst[0] to be the minimum ALLOWABLE systemtime (or 0 if no minimum)
  6555. //   modifies rgst[1] to be the maximum ALLOWABLE systemtime (or 0 if no maximum)
  6556. //   returns GDTR_MIN|GDTR_MAX if there is a minimum|maximum limit
  6557. {$EXTERNALSYM MonthCal_GetRange}
  6558. function MonthCal_GetRange(hmc: HWND; rgst: PSystemTime): DWORD;
  6559.  
  6560. //   if GDTR_MIN, sets the minimum ALLOWABLE systemtime to rgst[0], otherwise removes minimum
  6561. //   if GDTR_MAX, sets the maximum ALLOWABLE systemtime to rgst[1], otherwise removes maximum
  6562. //   returns TRUE on success, FALSE on error (such as invalid parameters)
  6563. {$EXTERNALSYM Monthcal_SetRange}
  6564. function Monthcal_SetRange(hmc: HWND; gdtr: DWORD; rgst: PSystemTime): BOOL;
  6565.  
  6566. //   returns the number of months one click on a next/prev button moves by
  6567. {$EXTERNALSYM MonthCal_GetMonthDelta}
  6568. function MonthCal_GetMonthDelta(hmc: HWND): Integer;
  6569.  
  6570. //   sets the month delta to n. n = 0 reverts to moving by a page of months
  6571. //   returns the previous value of n.
  6572. {$EXTERNALSYM MonthCal_SetMonthDelta}
  6573. function MonthCal_SetMonthDelta(hmc: HWND; n: Integer): Integer;
  6574.  
  6575. //   sets *psz to the maximum width/height of the "Today" string displayed
  6576. //   at the bottom of the calendar (as long as MCS_NOTODAY is not specified)
  6577. {$EXTERNALSYM MonthCal_GetMaxTodayWidth}
  6578. function MonthCal_GetMaxTodayWidth(hmc: HWND): DWORD;
  6579.  
  6580. {$EXTERNALSYM MonthCal_SetUnicodeFormat}
  6581. function MonthCal_SetUnicodeFormat(hwnd: HWND; fUnicode: BOOL): BOOL;
  6582.  
  6583. {$EXTERNALSYM MonthCal_GetUnicodeFormat}
  6584. function MonthCal_GetUnicodeFormat(hwnd: HWND): BOOL;
  6585.  
  6586. { ====== DATETIMEPICK CONTROL =============== }
  6587.  
  6588. const
  6589.   {$EXTERNALSYM DATETIMEPICK_CLASS}
  6590.   DATETIMEPICK_CLASS = 'SysDateTimePick32';
  6591.  
  6592.   // Message constants
  6593.   {$EXTERNALSYM DTM_FIRST}
  6594.   DTM_FIRST         = $1000;
  6595.   {$EXTERNALSYM DTM_GETSYSTEMTIME}
  6596.   DTM_GETSYSTEMTIME = DTM_FIRST + 1;
  6597.   {$EXTERNALSYM DTM_SETSYSTEMTIME}
  6598.   DTM_SETSYSTEMTIME = DTM_FIRST + 2;
  6599.   {$EXTERNALSYM DTM_GETRANGE}
  6600.   DTM_GETRANGE      = DTM_FIRST + 3;
  6601.   {$EXTERNALSYM DTM_SETRANGE}
  6602.   DTM_SETRANGE      = DTM_FIRST + 4;
  6603.   {$EXTERNALSYM DTM_SETFORMATA}
  6604.   DTM_SETFORMATA    = DTM_FIRST + 5;
  6605.   {$EXTERNALSYM DTM_SETMCCOLOR}
  6606.   DTM_SETMCCOLOR    = DTM_FIRST + 6;
  6607.   {$EXTERNALSYM DTM_GETMCCOLOR}
  6608.   DTM_GETMCCOLOR    = DTM_FIRST + 7;
  6609.   {$EXTERNALSYM DTM_GETMONTHCAL}
  6610.   DTM_GETMONTHCAL   = DTM_FIRST + 8;
  6611.   {$EXTERNALSYM DTM_SETMCFONT}
  6612.   DTM_SETMCFONT     = DTM_FIRST + 9;
  6613.   {$EXTERNALSYM DTM_GETMCFONT}
  6614.   DTM_GETMCFONT     = DTM_FIRST + 10;
  6615.   {$EXTERNALSYM DTM_SETFORMATW}
  6616.   DTM_SETFORMATW    = DTM_FIRST + 50;
  6617.   {$EXTERNALSYM DTM_SETFORMAT}
  6618.   DTM_SETFORMAT     = DTM_SETFORMATA;
  6619.  
  6620.   // Style Flags
  6621.   {$EXTERNALSYM DTS_UPDOWN}
  6622.   DTS_UPDOWN          = $0001;  // use UPDOWN instead of MONTHCAL
  6623.   {$EXTERNALSYM DTS_SHOWNONE}
  6624.   DTS_SHOWNONE        = $0002;  // allow a NONE selection
  6625.   {$EXTERNALSYM DTS_SHORTDATEFORMAT}
  6626.   DTS_SHORTDATEFORMAT = $0000;  // use the short date format
  6627.                                 // (app must forward WM_WININICHANGE messages)
  6628.   {$EXTERNALSYM DTS_LONGDATEFORMAT}
  6629.   DTS_LONGDATEFORMAT  = $0004;  // use the long date format
  6630.                                 // (app must forward WM_WININICHANGE messages)
  6631.   {$EXTERNALSYM DTS_TIMEFORMAT}
  6632.   DTS_TIMEFORMAT      = $0009;  // use the time format
  6633.                                 // (app must forward WM_WININICHANGE messages)
  6634.   {$EXTERNALSYM DTS_APPCANPARSE}
  6635.   DTS_APPCANPARSE     = $0010;  // allow user entered strings
  6636.                                 // (app MUST respond to DTN_USERSTRING)
  6637.   {$EXTERNALSYM DTS_RIGHTALIGN}
  6638.   DTS_RIGHTALIGN      = $0020;  // right-align popup instead of left-align it
  6639.  
  6640.   // Notification codes
  6641.   {$EXTERNALSYM DTN_DATETIMECHANGE}
  6642.   DTN_DATETIMECHANGE = DTN_FIRST + 1;  // the systemtime has changed
  6643.   {$EXTERNALSYM DTN_USERSTRINGA}
  6644.   DTN_USERSTRINGA    = DTN_FIRST + 2;  // the user has entered a string
  6645.   {$EXTERNALSYM DTN_USERSTRINGW}
  6646.   DTN_USERSTRINGW    = DTN_FIRST + 15;
  6647.   {$EXTERNALSYM DTN_WMKEYDOWNA}
  6648.   DTN_WMKEYDOWNA     = DTN_FIRST + 3;  // modify keydown on app format field (X)
  6649.   {$EXTERNALSYM DTN_WMKEYDOWNW}
  6650.   DTN_WMKEYDOWNW     = DTN_FIRST + 16;
  6651.   {$EXTERNALSYM DTN_FORMATA}
  6652.   DTN_FORMATA        = DTN_FIRST + 4;  // query display for app format field (X)
  6653.   {$EXTERNALSYM DTN_FORMATW}
  6654.   DTN_FORMATW        = DTN_FIRST + 17;
  6655.   {$EXTERNALSYM DTN_FORMATQUERYA}
  6656.   DTN_FORMATQUERYA   = DTN_FIRST + 5;  // query formatting info for app format field (X)
  6657.   {$EXTERNALSYM DTN_FORMATQUERYW}
  6658.   DTN_FORMATQUERYW   = DTN_FIRST + 18;
  6659.   {$EXTERNALSYM DTN_DROPDOWN}
  6660.   DTN_DROPDOWN       = DTN_FIRST + 6;  // MonthCal has dropped down
  6661.   {$EXTERNALSYM DTN_CLOSEUP}
  6662.   DTN_CLOSEUP        = DTN_FIRST + 7;  // MonthCal is popping up
  6663.  
  6664.  
  6665.  
  6666.  
  6667.  
  6668.  
  6669.  
  6670.  
  6671.  
  6672.   {$EXTERNALSYM DTN_USERSTRING}
  6673.   DTN_USERSTRING     = DTN_USERSTRINGA;
  6674.   {$EXTERNALSYM DTN_WMKEYDOWN}
  6675.   DTN_WMKEYDOWN      = DTN_WMKEYDOWNA;
  6676.   {$EXTERNALSYM DTN_FORMAT}
  6677.   DTN_FORMAT         = DTN_FORMATA;
  6678.   {$EXTERNALSYM DTN_FORMATQUERY}
  6679.   DTN_FORMATQUERY    = DTN_FORMATQUERYA;
  6680.  
  6681.   // Ranges
  6682.   {$EXTERNALSYM GDTR_MIN}
  6683.   GDTR_MIN = $0001;
  6684.   {$EXTERNALSYM GDTR_MAX}
  6685.   GDTR_MAX = $0002;
  6686.  
  6687.   // Return Values
  6688.   {$EXTERNALSYM GDT_ERROR}
  6689.   GDT_ERROR = -1;
  6690.   {$EXTERNALSYM GDT_VALID}
  6691.   GDT_VALID = 0;
  6692.   {$EXTERNALSYM GDT_NONE}
  6693.   GDT_NONE  = 1;
  6694.  
  6695. type
  6696.   {$EXTERNALSYM tagNMDATETIMECHANGE}
  6697.   tagNMDATETIMECHANGE = packed record
  6698.     nmhdr: TNmHdr;
  6699.     dwFlags: DWORD;         // GDT_VALID or GDT_NONE
  6700.     st: TSystemTime;        // valid iff dwFlags = GDT_VALID
  6701.   end;
  6702.   PNMDateTimeChange = ^TNMDateTimeChange;
  6703.   TNMDateTimeChange = tagNMDATETIMECHANGE;
  6704.  
  6705.   {$EXTERNALSYM tagNMDATETIMESTRINGA}
  6706.   tagNMDATETIMESTRINGA = packed record
  6707.     nmhdr: TNmHdr;
  6708.     pszUserString: PAnsiChar;     // string user entered
  6709.     st: TSystemTime;           // app fills this in
  6710.     dwFlags: DWORD;            // GDT_VALID or GDT_NONE
  6711.   end;
  6712.   {$EXTERNALSYM tagNMDATETIMESTRINGW}
  6713.   tagNMDATETIMESTRINGW = packed record
  6714.     nmhdr: TNmHdr;
  6715.     pszUserString: PWideChar;     // string user entered
  6716.     st: TSystemTime;           // app fills this in
  6717.     dwFlags: DWORD;            // GDT_VALID or GDT_NONE
  6718.   end;
  6719.   {$EXTERNALSYM tagNMDATETIMESTRING}
  6720.   tagNMDATETIMESTRING = tagNMDATETIMESTRINGA;
  6721.   PNMDateTimeStringA = ^TNMDateTimeStringA;
  6722.   PNMDateTimeStringW = ^TNMDateTimeStringW;
  6723.   PNMDateTimeString = PNMDateTimeStringA;
  6724.   TNMDateTimeStringA = tagNMDATETIMESTRINGA;
  6725.   TNMDateTimeStringW = tagNMDATETIMESTRINGW;
  6726.   TNMDateTimeString = TNMDateTimeStringA;
  6727.  
  6728.   {$EXTERNALSYM tagNMDATETIMEWMKEYDOWNA}
  6729.   tagNMDATETIMEWMKEYDOWNA = packed record
  6730.     nmhdr: TNmHdr;
  6731.     nVirtKey: Integer; // virtual key code of WM_KEYDOWN which MODIFIES an X field
  6732.     pszFormat: PAnsiChar; // format substring
  6733.     st: TSystemTime;   // current systemtime, app should modify based on key
  6734.   end;
  6735.   {$EXTERNALSYM tagNMDATETIMEWMKEYDOWNW}
  6736.   tagNMDATETIMEWMKEYDOWNW = packed record
  6737.     nmhdr: TNmHdr;
  6738.     nVirtKey: Integer; // virtual key code of WM_KEYDOWN which MODIFIES an X field
  6739.     pszFormat: PWideChar; // format substring
  6740.     st: TSystemTime;   // current systemtime, app should modify based on key
  6741.   end;
  6742.   {$EXTERNALSYM tagNMDATETIMEWMKEYDOWN}
  6743.   tagNMDATETIMEWMKEYDOWN = tagNMDATETIMEWMKEYDOWNA;
  6744.   PNMDateTimeWMKeyDownA = ^TNMDateTimeWMKeyDownA;
  6745.   PNMDateTimeWMKeyDownW = ^TNMDateTimeWMKeyDownW;
  6746.   PNMDateTimeWMKeyDown = PNMDateTimeWMKeyDownA;
  6747.   TNMDateTimeWMKeyDownA = tagNMDATETIMEWMKEYDOWNA;
  6748.   TNMDateTimeWMKeyDownW = tagNMDATETIMEWMKEYDOWNW;
  6749.   TNMDateTimeWMKeyDown = TNMDateTimeWMKeyDownA;
  6750.  
  6751.   {$EXTERNALSYM tagNMDATETIMEFORMATA}
  6752.   tagNMDATETIMEFORMATA = packed record
  6753.     nmhdr: TNmHdr;
  6754.     pszFormat: PAnsiChar;                // format substring
  6755.     st: TSystemTime;                  // current systemtime
  6756.     pszDisplay: PAnsiChar;               // string to display
  6757.     szDisplay: array[0..63] of AnsiChar; // buffer pszDisplay originally points at
  6758.   end;
  6759.   {$EXTERNALSYM tagNMDATETIMEFORMATW}
  6760.   tagNMDATETIMEFORMATW = packed record
  6761.     nmhdr: TNmHdr;
  6762.     pszFormat: PWideChar;                // format substring
  6763.     st: TSystemTime;                  // current systemtime
  6764.     pszDisplay: PWideChar;               // string to display
  6765.     szDisplay: array[0..63] of WideChar; // buffer pszDisplay originally points at
  6766.   end;
  6767.   {$EXTERNALSYM tagNMDATETIMEFORMAT}
  6768.   tagNMDATETIMEFORMAT = tagNMDATETIMEFORMATA;
  6769.   PNMDateTimeFormatA = ^TNMDateTimeFormatA;
  6770.   PNMDateTimeFormatW = ^TNMDateTimeFormatW;
  6771.   PNMDateTimeFormat = PNMDateTimeFormatA;
  6772.   TNMDateTimeFormatA = tagNMDATETIMEFORMATA;
  6773.   TNMDateTimeFormatW = tagNMDATETIMEFORMATW;
  6774.   TNMDateTimeFormat = TNMDateTimeFormatA;
  6775.  
  6776.   {$EXTERNALSYM tagNMDATETIMEFORMATQUERYA}
  6777.   tagNMDATETIMEFORMATQUERYA = packed record
  6778.     nmhdr: TNmHdr;
  6779.     pszFormat: PAnsiChar; // format substring
  6780.     szMax: TSize;      // max bounding rectangle app will use for this format string
  6781.   end;
  6782.   {$EXTERNALSYM tagNMDATETIMEFORMATQUERYW}
  6783.   tagNMDATETIMEFORMATQUERYW = packed record
  6784.     nmhdr: TNmHdr;
  6785.     pszFormat: PWideChar; // format substring
  6786.     szMax: TSize;      // max bounding rectangle app will use for this format string
  6787.   end;
  6788.   {$EXTERNALSYM tagNMDATETIMEFORMATQUERY}
  6789.   tagNMDATETIMEFORMATQUERY = tagNMDATETIMEFORMATQUERYA;
  6790.   PNMDateTimeFormatQueryA = ^TNMDateTimeFormatQueryA;
  6791.   PNMDateTimeFormatQueryW = ^TNMDateTimeFormatQueryW;
  6792.   PNMDateTimeFormatQuery = PNMDateTimeFormatQueryA;
  6793.   TNMDateTimeFormatQueryA = tagNMDATETIMEFORMATQUERYA;
  6794.   TNMDateTimeFormatQueryW = tagNMDATETIMEFORMATQUERYW;
  6795.   TNMDateTimeFormatQuery = TNMDateTimeFormatQueryA;
  6796.  
  6797. //   returns GDT_NONE if "none" is selected (DTS_SHOWNONE only)
  6798. //   returns GDT_VALID and modifies pst to be the currently selected value
  6799. {$EXTERNALSYM DateTime_GetSystemTime}
  6800. function DateTime_GetSystemTime(hdp: HWND; var pst: TSystemTime): DWORD;
  6801.  
  6802. //   if gd = GDT_NONE, sets datetimepick to None (DTS_SHOWNONE only)
  6803. //   if gd = GDT_VALID, sets datetimepick to pst
  6804. //   returns TRUE on success, FALSE on error (such as bad params)
  6805. {$EXTERNALSYM DateTime_SetSystemTime}
  6806. function DateTime_SetSystemTime(hdp: HWND; gd: DWORD; const pst: TSystemTime): BOOL;
  6807.  
  6808. //   modifies rgst[0] to be the minimum ALLOWABLE systemtime (or 0 if no minimum)
  6809. //   modifies rgst[1] to be the maximum ALLOWABLE systemtime (or 0 if no maximum)
  6810. //   returns GDTR_MIN or GDTR_MAX if there is a minimum or maximum limit
  6811. {$EXTERNALSYM DateTime_GetRange}
  6812. function DateTime_GetRange(hdp: HWND; rgst: PSystemTime): DWORD;
  6813.  
  6814. //   if GDTR_MIN, sets the minimum ALLOWABLE systemtime to rgst[0], otherwise removes minimum
  6815. //   if GDTR_MAX, sets the maximum ALLOWABLE systemtime to rgst[1], otherwise removes maximum
  6816. //   returns TRUE on success, FALSE on error (such as invalid parameters)
  6817. {$EXTERNALSYM DateTime_SetRange}
  6818. function DateTime_SetRange(hdp: HWND; gdtr: DWORD; rgst: PSystemTime): BOOL;
  6819.  
  6820. //   sets the display formatting string to sz (see GetDateFormat and GetTimeFormat for valid formatting chars)
  6821. //   NOTE: 'X' is a valid formatting character which indicates that the application
  6822. //   will determine how to display information. Such apps must support DTN_WMKEYDOWN,
  6823. //   DTN_FORMAT, and DTN_FORMATQUERY.
  6824. {$EXTERNALSYM DateTime_SetFormatA}
  6825. function DateTime_SetFormatA(hdp: HWND; sz: PAnsiChar): BOOL;
  6826. {$EXTERNALSYM DateTime_SetFormatW}
  6827. function DateTime_SetFormatW(hdp: HWND; sz: PWideChar): BOOL;
  6828. {$EXTERNALSYM DateTime_SetFormat}
  6829. function DateTime_SetFormat(hdp: HWND; sz: PChar): BOOL;
  6830.  
  6831. {$EXTERNALSYM DateTime_SetMonthCalColor}
  6832. function DateTime_SetMonthCalColor(hdp: HWND; iColor: DWORD; clr: TColorRef): TColorRef;
  6833.  
  6834. {$EXTERNALSYM DateTime_GetMonthCalColor}
  6835. function DateTime_GetMonthCalColor(hdp: HWND; iColor: DWORD): TColorRef;
  6836.  
  6837. // returns the HWND of the MonthCal popup window. Only valid
  6838. // between DTN_DROPDOWN and DTN_CLOSEUP notifications.
  6839. {$EXTERNALSYM DateTime_GetMonthCal}
  6840. function DateTime_GetMonthCal(hdp: HWND): HWND;
  6841.  
  6842. {$EXTERNALSYM DateTime_SetMonthCalFont}
  6843. procedure DateTime_SetMonthCalFont(hdp: HWND; hfont: HFONT; fRedraw: BOOL);
  6844.  
  6845. {$EXTERNALSYM DateTime_GetMonthCalFont}
  6846. function DateTime_GetMonthCalFont(hdp: HWND): HFONT;
  6847.  
  6848. {  ====================== IP Address edit control ============================= }
  6849.  
  6850. const
  6851.   {$EXTERNALSYM WC_IPADDRESS}
  6852.   WC_IPADDRESS         = 'SysIPAddress32';
  6853.  
  6854.   // Messages sent to IPAddress controls
  6855.   {$EXTERNALSYM IPM_CLEARADDRESS}
  6856.   IPM_CLEARADDRESS     = WM_USER+100;  { no parameters }
  6857.   {$EXTERNALSYM IPM_SETADDRESS}
  6858.   IPM_SETADDRESS       = WM_USER+101;  { lparam = TCP/IP address }
  6859.   {$EXTERNALSYM IPM_GETADDRESS}
  6860.   IPM_GETADDRESS       = WM_USER+102;  { lresult = # of non black fields.  lparam = LPDWORD for TCP/IP address }
  6861.   {$EXTERNALSYM IPM_SETRANGE}
  6862.   IPM_SETRANGE         = WM_USER+103;  { wparam = field, lparam = range }
  6863.   {$EXTERNALSYM IPM_SETFOCUS}
  6864.   IPM_SETFOCUS         = WM_USER+104;  { wparam = field }
  6865.   {$EXTERNALSYM IPM_ISBLANK}
  6866.   IPM_ISBLANK          = WM_USER+105;  { no parameters }
  6867.  
  6868.   {$EXTERNALSYM IPN_FIELDCHANGED}
  6869.   IPN_FIELDCHANGED     = IPN_FIRST - 0;
  6870.  
  6871. type
  6872.   {$EXTERNALSYM tagNMIPADDRESS}
  6873.   tagNMIPADDRESS = packed record
  6874.     hdr: NMHDR;
  6875.     iField: Integer;
  6876.     iValue: Integer;
  6877.   end;
  6878.   PNMIPAddress = ^TNMIPAddress;
  6879.   TNMIPAddress = tagNMIPADDRESS;
  6880.  
  6881. { The following is a useful macro for passing the range values in the }
  6882. { IPM_SETRANGE message. }
  6883. {$EXTERNALSYM MAKEIPRANGE}
  6884. function MAKEIPRANGE(low, high: Byte): LPARAM;
  6885.  
  6886. { And this is a useful macro for making the IP Address to be passed }
  6887. { as a LPARAM. }
  6888. {$EXTERNALSYM MAKEIPADDRESS}
  6889. function MAKEIPADDRESS(b1, b2, b3, b4: DWORD): LPARAM;
  6890.  
  6891. { Get individual number }
  6892. {$EXTERNALSYM FIRST_IPADDRESS}
  6893. function FIRST_IPADDRESS(x: DWORD): DWORD;
  6894.  
  6895. {$EXTERNALSYM SECOND_IPADDRESS}
  6896. function SECOND_IPADDRESS(x: DWORD): DWORD;
  6897.  
  6898. {$EXTERNALSYM THIRD_IPADDRESS}
  6899. function THIRD_IPADDRESS(x: DWORD): DWORD;
  6900.  
  6901. {$EXTERNALSYM FOURTH_IPADDRESS}
  6902. function FOURTH_IPADDRESS(x: DWORD): DWORD;
  6903.  
  6904. {  ====================== Pager Control ============================= }
  6905.  
  6906. const
  6907.   { Pager Class Name }
  6908.   {$EXTERNALSYM WC_PAGESCROLLER}
  6909.   WC_PAGESCROLLER               = 'SysPager';
  6910.  
  6911.   { Pager Control Styles }
  6912.   {$EXTERNALSYM PGS_VERT}
  6913.   PGS_VERT                    = $00000000;
  6914.   {$EXTERNALSYM PGS_HORZ}
  6915.   PGS_HORZ                    = $00000001;
  6916.   {$EXTERNALSYM PGS_AUTOSCROLL}
  6917.   PGS_AUTOSCROLL              = $00000002;
  6918.   {$EXTERNALSYM PGS_DRAGNDROP}
  6919.   PGS_DRAGNDROP               = $00000004;
  6920.  
  6921.   { Pager Button State }
  6922.   { The scroll can be in one of the following control State }
  6923.   {$EXTERNALSYM PGF_INVISIBLE}
  6924.   PGF_INVISIBLE        = 0;     { Scroll button is not visible }
  6925.   {$EXTERNALSYM PGF_NORMAL}
  6926.   PGF_NORMAL           = 1;     { Scroll button is in normal state }
  6927.   {$EXTERNALSYM PGF_GRAYED}
  6928.   PGF_GRAYED           = 2;     { Scroll button is in grayed state }
  6929.   {$EXTERNALSYM PGF_DEPRESSED}
  6930.   PGF_DEPRESSED        = 4;     { Scroll button is in depressed state }
  6931.   {$EXTERNALSYM PGF_HOT}
  6932.   PGF_HOT              = 8;     { Scroll button is in hot state }
  6933.  
  6934.   { The following identifiers specifies the button control }
  6935.   {$EXTERNALSYM PGB_TOPORLEFT}
  6936.   PGB_TOPORLEFT           = 0;
  6937.   {$EXTERNALSYM PGB_BOTTOMORRIGHT}
  6938.   PGB_BOTTOMORRIGHT       = 1;
  6939.  
  6940.   { Pager Control  Messages }
  6941.   {$EXTERNALSYM PGM_SETCHILD}
  6942.   PGM_SETCHILD                = PGM_FIRST + 1;   { lParam == hwnd }
  6943.   {$EXTERNALSYM PGM_RECALCSIZE}
  6944.   PGM_RECALCSIZE              = PGM_FIRST + 2;
  6945.   {$EXTERNALSYM PGM_FORWARDMOUSE}
  6946.   PGM_FORWARDMOUSE            = PGM_FIRST + 3;
  6947.   {$EXTERNALSYM PGM_SETBKCOLOR}
  6948.   PGM_SETBKCOLOR              = PGM_FIRST + 4;
  6949.   {$EXTERNALSYM PGM_GETBKCOLOR}
  6950.   PGM_GETBKCOLOR              = PGM_FIRST + 5;
  6951.   {$EXTERNALSYM PGM_SETBORDER}
  6952.   PGM_SETBORDER              = PGM_FIRST + 6;
  6953.   {$EXTERNALSYM PGM_GETBORDER}
  6954.   PGM_GETBORDER              = PGM_FIRST + 7;
  6955.   {$EXTERNALSYM PGM_SETPOS}
  6956.   PGM_SETPOS                  = PGM_FIRST + 8;
  6957.   {$EXTERNALSYM PGM_GETPOS}
  6958.   PGM_GETPOS                  = PGM_FIRST + 9;
  6959.   {$EXTERNALSYM PGM_SETBUTTONSIZE}
  6960.   PGM_SETBUTTONSIZE           = PGM_FIRST + 10;
  6961.   {$EXTERNALSYM PGM_GETBUTTONSIZE}
  6962.   PGM_GETBUTTONSIZE           = PGM_FIRST + 11;
  6963.   {$EXTERNALSYM PGM_GETBUTTONSTATE}
  6964.   PGM_GETBUTTONSTATE          = PGM_FIRST + 12;
  6965.   {$EXTERNALSYM PGM_GETDROPTARGET}
  6966.   PGM_GETDROPTARGET           = CCM_GETDROPTARGET;
  6967.  
  6968. {$EXTERNALSYM Pager_SetChild}
  6969. procedure Pager_SetChild(hwnd: HWND; hwndChild: HWND);
  6970. {$EXTERNALSYM Pager_RecalcSize}
  6971. procedure Pager_RecalcSize(hwnd: HWND);
  6972. {$EXTERNALSYM Pager_ForwardMouse}
  6973. procedure Pager_ForwardMouse(hwnd: HWND; bForward: BOOL);
  6974. {$EXTERNALSYM Pager_SetBkColor}
  6975. function Pager_SetBkColor(hwnd: HWND; clr: COLORREF): COLORREF;
  6976. {$EXTERNALSYM Pager_GetBkColor}
  6977. function Pager_GetBkColor(hwnd: HWND): COLORREF;
  6978. {$EXTERNALSYM Pager_SetBorder}
  6979. function Pager_SetBorder(hwnd: HWND; iBorder: Integer): Integer;
  6980. {$EXTERNALSYM Pager_GetBorder}
  6981. function Pager_GetBorder(hwnd: HWND): Integer;
  6982. {$EXTERNALSYM Pager_SetPos}
  6983. function Pager_SetPos(hwnd: HWND; iPos: Integer): Integer;
  6984. {$EXTERNALSYM Pager_GetPos}
  6985. function Pager_GetPos(hwnd: HWND): Integer;
  6986. {$EXTERNALSYM Pager_SetButtonSize}
  6987. function Pager_SetButtonSize(hwnd: HWND; iSize: Integer): Integer;
  6988. {$EXTERNALSYM Pager_GetButtonSize}
  6989. function Pager_GetButtonSize(hwnd: HWND): Integer;
  6990. {$EXTERNALSYM Pager_GetButtonState}
  6991. function Pager_GetButtonState(hwnd: HWND; iButton: Integer): DWORD;
  6992. {$EXTERNALSYM Pager_GetDropTarget}
  6993. procedure Pager_GetDropTarget(hwnd: HWND; ppdt: Pointer{!!});
  6994.  
  6995. const
  6996.   { Pager Control Notification Messages }
  6997.  
  6998.   { PGN_SCROLL Notification Message }
  6999.   {$EXTERNALSYM PGN_SCROLL}
  7000.   PGN_SCROLL              = PGN_FIRST-1;
  7001.  
  7002.   {$EXTERNALSYM PGF_SCROLLUP}
  7003.   PGF_SCROLLUP            = 1;
  7004.   {$EXTERNALSYM PGF_SCROLLDOWN}
  7005.   PGF_SCROLLDOWN          = 2;
  7006.   {$EXTERNALSYM PGF_SCROLLLEFT}
  7007.   PGF_SCROLLLEFT          = 4;
  7008.   {$EXTERNALSYM PGF_SCROLLRIGHT}
  7009.   PGF_SCROLLRIGHT         = 8;
  7010.  
  7011.   { Keys down }
  7012.   {$EXTERNALSYM PGK_SHIFT}
  7013.   PGK_SHIFT               = 1;
  7014.   {$EXTERNALSYM PGK_CONTROL}
  7015.   PGK_CONTROL             = 2;
  7016.   {$EXTERNALSYM PGK_MENU}
  7017.   PGK_MENU                = 4;
  7018.  
  7019. type
  7020.   { This structure is sent along with PGN_SCROLL notifications }
  7021.   {$EXTERNALSYM NMPGSCROLL}
  7022.   NMPGSCROLL = packed record
  7023.     hdr: NMHDR;
  7024.     fwKeys: Word;           { Specifies which keys are down when this notification is send }
  7025.     rcParent: TRect;        { Contains Parent Window Rect }
  7026.     iDir: Integer;          { Scrolling Direction }
  7027.     iXpos: Integer;         { Horizontal scroll position }
  7028.     iYpos: Integer;         { Vertical scroll position }
  7029.     iScroll: Integer;       { [in/out] Amount to scroll }
  7030.   end;
  7031.   PNMPGScroll = ^TNMPGScroll;
  7032.   TNMPGScroll = NMPGSCROLL;
  7033.  
  7034. const
  7035.   { PGN_CALCSIZE Notification Message }
  7036.   {$EXTERNALSYM PGN_CALCSIZE}
  7037.   PGN_CALCSIZE            = PGN_FIRST-2;
  7038.  
  7039.   {$EXTERNALSYM PGF_CALCWIDTH}
  7040.   PGF_CALCWIDTH           = 1;
  7041.   {$EXTERNALSYM PGF_CALCHEIGHT}
  7042.   PGF_CALCHEIGHT          = 2;
  7043.  
  7044. type
  7045.   {$EXTERNALSYM NMPGCALCSIZE}
  7046.   NMPGCALCSIZE = packed record
  7047.     hdr: NMHDR;
  7048.     dwFlag: DWORD;
  7049.     iWidth: Integer;
  7050.     iHeight: Integer;
  7051.   end;
  7052.   PNMPGCalcSize = ^TNMPGCalcSize;
  7053.   TNMPGCalcSize = NMPGCALCSIZE;
  7054.  
  7055. { ======================  Native Font Control ============================== }
  7056.  
  7057. const
  7058.   {$EXTERNALSYM WC_NATIVEFONTCTL}
  7059.   WC_NATIVEFONTCTL            = 'NativeFontCtl';
  7060.  
  7061.   { style definition }
  7062.   {$EXTERNALSYM NFS_EDIT}
  7063.   NFS_EDIT                    = $0001;
  7064.   {$EXTERNALSYM NFS_STATIC}
  7065.   NFS_STATIC                  = $0002;
  7066.   {$EXTERNALSYM NFS_LISTCOMBO}
  7067.   NFS_LISTCOMBO               = $0004;
  7068.   {$EXTERNALSYM NFS_BUTTON}
  7069.   NFS_BUTTON                  = $0008;
  7070.   {$EXTERNALSYM NFS_ALL}
  7071.   NFS_ALL                     = $0010;
  7072.  
  7073. { ====== TrackMouseEvent  ================================================== }
  7074.  
  7075. const
  7076.   {$EXTERNALSYM WM_MOUSEHOVER}
  7077.   WM_MOUSEHOVER                       = $02A1;
  7078.   {$EXTERNALSYM WM_MOUSELEAVE}
  7079.   WM_MOUSELEAVE                       = $02A3;
  7080.  
  7081.   {$EXTERNALSYM TME_HOVER}
  7082.   TME_HOVER           = $00000001;
  7083.   {$EXTERNALSYM TME_LEAVE}
  7084.   TME_LEAVE           = $00000002;
  7085.   {$EXTERNALSYM TME_QUERY}
  7086.   TME_QUERY           = $40000000;
  7087.   {$EXTERNALSYM TME_CANCEL}
  7088.   TME_CANCEL          = $80000000;
  7089.  
  7090.   {$EXTERNALSYM HOVER_DEFAULT}
  7091.   HOVER_DEFAULT       = $FFFFFFFF;
  7092.  
  7093. type
  7094.   {$EXTERNALSYM tagTRACKMOUSEEVENT}
  7095.   tagTRACKMOUSEEVENT = packed record
  7096.     cbSize: DWORD;
  7097.     dwFlags: DWORD;
  7098.     hwndTrack: HWND;
  7099.     dwHoverTime: DWORD;
  7100.   end;
  7101.   PTrackMouseEvent = ^TTrackMouseEvent;
  7102.   TTrackMouseEvent = tagTRACKMOUSEEVENT;
  7103.  
  7104. { Declare _TrackMouseEvent.  This API tries to use the window manager's }
  7105. { implementation of TrackMouseEvent if it is present, otherwise it emulates. }
  7106. {$EXTERNALSYM _TrackMouseEvent}
  7107. function _TrackMouseEvent(lpEventTrack: PTrackMouseEvent): BOOL; stdcall;
  7108.  
  7109. { ====== Flat Scrollbar APIs========================================= }
  7110.  
  7111. const
  7112.   {$EXTERNALSYM WSB_PROP_CYVSCROLL}
  7113.   WSB_PROP_CYVSCROLL      = $00000001;
  7114.   {$EXTERNALSYM WSB_PROP_CXHSCROLL}
  7115.   WSB_PROP_CXHSCROLL      = $00000002;
  7116.   {$EXTERNALSYM WSB_PROP_CYHSCROLL}
  7117.   WSB_PROP_CYHSCROLL      = $00000004;
  7118.   {$EXTERNALSYM WSB_PROP_CXVSCROLL}
  7119.   WSB_PROP_CXVSCROLL      = $00000008;
  7120.   {$EXTERNALSYM WSB_PROP_CXHTHUMB}
  7121.   WSB_PROP_CXHTHUMB       = $00000010;
  7122.   {$EXTERNALSYM WSB_PROP_CYVTHUMB}
  7123.   WSB_PROP_CYVTHUMB       = $00000020;
  7124.   {$EXTERNALSYM WSB_PROP_VBKGCOLOR}
  7125.   WSB_PROP_VBKGCOLOR      = $00000040;
  7126.   {$EXTERNALSYM WSB_PROP_HBKGCOLOR}
  7127.   WSB_PROP_HBKGCOLOR      = $00000080;
  7128.   {$EXTERNALSYM WSB_PROP_VSTYLE}
  7129.   WSB_PROP_VSTYLE         = $00000100;
  7130.   {$EXTERNALSYM WSB_PROP_HSTYLE}
  7131.   WSB_PROP_HSTYLE         = $00000200;
  7132.   {$EXTERNALSYM WSB_PROP_WINSTYLE}
  7133.   WSB_PROP_WINSTYLE       = $00000400;
  7134.   {$EXTERNALSYM WSB_PROP_PALETTE}
  7135.   WSB_PROP_PALETTE        = $00000800;
  7136.   {$EXTERNALSYM WSB_PROP_MASK}
  7137.   WSB_PROP_MASK           = $00000FFF;
  7138.  
  7139.   {$EXTERNALSYM FSB_FLAT_MODE}
  7140.   FSB_FLAT_MODE               = 2;
  7141.   {$EXTERNALSYM FSB_ENCARTA_MODE}
  7142.   FSB_ENCARTA_MODE            = 1;
  7143.   {$EXTERNALSYM FSB_REGULAR_MODE}
  7144.   FSB_REGULAR_MODE            = 0;
  7145.  
  7146. {$EXTERNALSYM FlatSB_EnableScrollBar}
  7147. function FlatSB_EnableScrollBar(hWnd: HWND; wSBflags, wArrows: UINT): BOOL; stdcall;
  7148. {$EXTERNALSYM FlatSB_ShowScrollBar}
  7149. function FlatSB_ShowScrollBar(hWnd: HWND; wBar: Integer; bShow: BOOL): BOOL; stdcall;
  7150.  
  7151. {$EXTERNALSYM FlatSB_GetScrollRange}
  7152. function FlatSB_GetScrollRange(hWnd: HWND; nBar: Integer; var lpMinPos,
  7153.   lpMaxPos: Integer): BOOL; stdcall;
  7154. {$EXTERNALSYM FlatSB_GetScrollInfo}
  7155. function FlatSB_GetScrollInfo(hWnd: HWND; BarFlag: Integer;
  7156.   var ScrollInfo: TScrollInfo): BOOL; stdcall;
  7157. {$EXTERNALSYM FlatSB_GetScrollPos}
  7158. function FlatSB_GetScrollPos(hWnd: HWND; nBar: Integer): Integer; stdcall;
  7159. {$EXTERNALSYM FlatSB_GetScrollProp}
  7160. function FlatSB_GetScrollProp(p1: HWND; propIndex: Integer;
  7161.   p3: PInteger): Bool; stdcall;
  7162.  
  7163. {$EXTERNALSYM FlatSB_SetScrollPos}
  7164. function FlatSB_SetScrollPos(hWnd: HWND; nBar, nPos: Integer;
  7165.   bRedraw: BOOL): Integer; stdcall;
  7166. {$EXTERNALSYM FlatSB_SetScrollInfo}
  7167. function FlatSB_SetScrollInfo(hWnd: HWND; BarFlag: Integer;
  7168.   const ScrollInfo: TScrollInfo; Redraw: BOOL): Integer; stdcall;
  7169. {$EXTERNALSYM FlatSB_SetScrollRange}
  7170. function FlatSB_SetScrollRange(hWnd: HWND; nBar, nMinPos, nMaxPos: Integer;
  7171.   bRedraw: BOOL): BOOL; stdcall;
  7172. {$EXTERNALSYM FlatSB_SetScrollProp}
  7173. function FlatSB_SetScrollProp(p1: HWND; index: Integer; newValue: Integer;
  7174.   p4: Bool): Bool; stdcall;
  7175.  
  7176. {$EXTERNALSYM InitializeFlatSB}
  7177. function InitializeFlatSB(hWnd: HWND): Bool; stdcall;
  7178. {$EXTERNALSYM UninitializeFlatSB}
  7179. procedure UninitializeFlatSB(hWnd: HWND); stdcall;
  7180.  
  7181. implementation
  7182.  
  7183. const
  7184.   cctrl = 'comctl32.dll';
  7185.  
  7186. var
  7187.   ComCtl32DLL: THandle;
  7188.   _InitCommonControlsEx: function(var ICC: TInitCommonControlsEx): Bool stdcall;
  7189.  
  7190. procedure InitCommonControls; external cctrl name 'InitCommonControls';
  7191.  
  7192. procedure InitComCtl;
  7193. begin
  7194.   if ComCtl32DLL = 0 then
  7195.   begin
  7196.     ComCtl32DLL := GetModuleHandle(cctrl);
  7197.     if ComCtl32DLL <> 0 then
  7198.       @_InitCommonControlsEx := GetProcAddress(ComCtl32DLL, 'InitCommonControlsEx');
  7199.   end;
  7200. end;
  7201.  
  7202. function InitCommonControlsEx(var ICC: TInitCommonControlsEx): Bool;
  7203. begin
  7204.   if ComCtl32DLL = 0 then InitComCtl;
  7205.   Result := Assigned(_InitCommonControlsEx) and _InitCommonControlsEx(ICC);
  7206. end;
  7207.  
  7208. { Property Sheets }
  7209. function CreatePropertySheetPageA; external cctrl name 'CreatePropertySheetPageA';
  7210. function CreatePropertySheetPageW; external cctrl name 'CreatePropertySheetPageW';
  7211. function CreatePropertySheetPage; external cctrl name 'CreatePropertySheetPageA';
  7212. function DestroyPropertySheetPage; external cctrl name 'DestroyPropertySheetPage';
  7213. function PropertySheetA; external cctrl name 'PropertySheetA';
  7214. function PropertySheetW; external cctrl name 'PropertySheetW';
  7215. function PropertySheet; external cctrl name 'PropertySheetA';
  7216.  
  7217. { Image List }
  7218. function ImageList_Create; external cctrl name 'ImageList_Create';
  7219. function ImageList_Destroy; external cctrl name 'ImageList_Destroy';
  7220. function ImageList_GetImageCount; external cctrl name 'ImageList_GetImageCount';
  7221. function ImageList_SetImageCount; external cctrl name 'ImageList_SetImageCount';
  7222. function ImageList_Add; external cctrl name 'ImageList_Add';
  7223. function ImageList_ReplaceIcon; external cctrl name 'ImageList_ReplaceIcon';
  7224. function ImageList_SetBkColor; external cctrl name 'ImageList_SetBkColor';
  7225. function ImageList_GetBkColor; external cctrl name 'ImageList_GetBkColor';
  7226. function ImageList_SetOverlayImage; external cctrl name 'ImageList_SetOverlayImage';
  7227.  
  7228. function ImageList_AddIcon(ImageList: HIMAGELIST; Icon: HIcon): Integer;
  7229. begin
  7230.   Result := ImageList_ReplaceIcon(ImageList, -1, Icon);
  7231. end;
  7232.  
  7233. function IndexToOverlayMask(Index: Integer): Integer;
  7234. begin
  7235.   Result := Index shl 8;
  7236. end;
  7237.  
  7238. function ImageList_Draw; external cctrl name 'ImageList_Draw';
  7239.  
  7240. function ImageList_Replace; external cctrl name 'ImageList_Replace';
  7241. function ImageList_AddMasked; external cctrl name 'ImageList_AddMasked';
  7242. function ImageList_DrawEx; external cctrl name 'ImageList_DrawEx';
  7243. function ImageList_DrawIndirect; external cctrl name 'ImageList_DrawIndirect';
  7244. function ImageList_Remove; external cctrl name 'ImageList_Remove';
  7245. function ImageList_GetIcon; external cctrl name 'ImageList_GetIcon';
  7246. function ImageList_LoadImageA; external cctrl name 'ImageList_LoadImageA';
  7247. function ImageList_LoadImageW; external cctrl name 'ImageList_LoadImageW';
  7248. function ImageList_LoadImage; external cctrl name 'ImageList_LoadImageA';
  7249. function ImageList_Copy; external cctrl name 'ImageList_Copy';
  7250. function ImageList_BeginDrag; external cctrl name 'ImageList_BeginDrag';
  7251. function ImageList_EndDrag; external cctrl name 'ImageList_EndDrag';
  7252. function ImageList_DragEnter; external cctrl name 'ImageList_DragEnter';
  7253. function ImageList_DragLeave; external cctrl name 'ImageList_DragLeave';
  7254. function ImageList_DragMove; external cctrl name 'ImageList_DragMove';
  7255. function ImageList_SetDragCursorImage; external cctrl name 'ImageList_SetDragCursorImage';
  7256. function ImageList_DragShowNolock; external cctrl name 'ImageList_DragShowNolock';
  7257. function ImageList_GetDragImage; external cctrl name 'ImageList_GetDragImage';
  7258.  
  7259. { macros }
  7260. procedure ImageList_RemoveAll(ImageList: HIMAGELIST);
  7261. begin
  7262.   ImageList_Remove(ImageList, -1);
  7263. end;
  7264.  
  7265. function ImageList_ExtractIcon(Instance: THandle; ImageList: HIMAGELIST;
  7266.   Image: Integer): HIcon;
  7267. begin
  7268.   Result := ImageList_GetIcon(ImageList, Image, 0);
  7269. end;
  7270.  
  7271. function ImageList_LoadBitmap(Instance: THandle; Bmp: PChar;
  7272.   CX, Grow: Integer; Mask: TColorRef): HIMAGELIST;
  7273. begin
  7274.   Result := ImageList_LoadImage(Instance, Bmp, CX, Grow, Mask,
  7275.     IMAGE_BITMAP, 0);
  7276. end;
  7277.  
  7278. function ImageList_Read; external cctrl name 'ImageList_Read';
  7279. function ImageList_Write; external cctrl name 'ImageList_Write';
  7280.  
  7281. function ImageList_GetIconSize; external cctrl name 'ImageList_GetIconSize';
  7282. function ImageList_SetIconSize; external cctrl name 'ImageList_SetIconSize';
  7283. function ImageList_GetImageInfo; external cctrl name 'ImageList_GetImageInfo';
  7284. function ImageList_Merge; external cctrl name 'ImageList_Merge';
  7285. function ImageList_Duplicate(himl: HIMAGELIST): HIMAGELIST; stdcall; external cctrl name 'ImageList_Duplicate';
  7286.  
  7287. { Headers }
  7288.  
  7289. function Header_GetItemCount(Header: HWnd): Integer;
  7290. begin
  7291.   Result := SendMessage(Header, HDM_GETITEMCOUNT, 0, 0);
  7292. end;
  7293.  
  7294. function Header_InsertItem(Header: HWnd; Index: Integer;
  7295.   const Item: THDItem): Integer;
  7296. begin
  7297.   Result := SendMessage(Header, HDM_INSERTITEM, Index, Longint(@Item));
  7298. end;
  7299.  
  7300. function Header_DeleteItem(Header: HWnd; Index: Integer): Bool;
  7301. begin
  7302.   Result := Bool( SendMessage(Header, HDM_DELETEITEM, Index, 0) );
  7303. end;
  7304.  
  7305. function Header_GetItem(Header: HWnd; Index: Integer; var Item: THDItem): Bool;
  7306. begin
  7307.   Result := Bool( SendMessage(Header, HDM_GETITEM, Index, Longint(@Item)) );
  7308. end;
  7309.  
  7310. function Header_SetItem(Header: HWnd; Index: Integer; const Item: THDItem): Bool;
  7311. begin
  7312.   Result := Bool( SendMessage(Header, HDM_SETITEM, Index, Longint(@Item)) );
  7313. end;
  7314.  
  7315. function Header_Layout(Header: HWnd; Layout: PHDLayout): Bool;
  7316. begin
  7317.   Result := Bool( SendMessage(Header, HDM_LAYOUT, 0, Longint(Layout)) );
  7318. end;
  7319.  
  7320. function Header_GetItemRect(hwnd: HWND; iItem: Integer; lprc: PRect): Integer;
  7321. begin
  7322.   Result := SendMessage(hwnd, HDM_GETITEMRECT, iItem, LPARAM(lprc));
  7323. end;
  7324.  
  7325. function Header_SetImageList(hwnd: HWND; himl: HIMAGELIST): HIMAGELIST;
  7326. begin
  7327.   Result := SendMessage(hwnd, HDM_SETIMAGELIST, 0, LPARAM(himl));
  7328. end;
  7329.  
  7330. function Header_GetImageList(hwnd: HWND): HIMAGELIST;
  7331. begin
  7332.   Result := SendMessage(hwnd, HDM_GETIMAGELIST, 0, 0);
  7333. end;
  7334.  
  7335. function Header_OrderToIndex(hwnd: HWND; i: Integer): Integer;
  7336. begin
  7337.   Result := SendMessage(hwnd, HDM_ORDERTOINDEX, i, 0);
  7338. end;
  7339.  
  7340. function Header_CreateDragImage(hwnd: HWND; i: Integer): HIMAGELIST;
  7341. begin
  7342.   Result := SendMessage(hwnd, HDM_CREATEDRAGIMAGE, i, 0);
  7343. end;
  7344.  
  7345. function Header_GetOrderArray(hwnd: HWND; iCount: Integer; lpi: PInteger): Integer;
  7346. begin
  7347.   Result := SendMessage(hwnd, HDM_GETORDERARRAY, iCount, LPARAM(lpi));
  7348. end;
  7349.  
  7350. function Header_SetOrderArray(hwnd: HWND; iCount: Integer; lpi: PInteger): Integer;
  7351. begin
  7352.   Result := SendMessage(hwnd, HDM_SETORDERARRAY, iCount, LPARAM(lpi));
  7353. end;
  7354.  
  7355. function Header_SetHotDivider(hwnd: HWND; fPos: BOOL; dw: DWORD): Integer;
  7356. begin
  7357.   Result := SendMessage(hwnd, HDM_SETHOTDIVIDER, Integer(fPos), dw);
  7358. end;
  7359.  
  7360. function Header_SetUnicodeFormat(hwnd: HWND; fUnicode: BOOL): Integer;
  7361. begin
  7362.   Result := SendMessage(hwnd, HDM_SETUNICODEFORMAT, Integer(fUnicode), 0);
  7363. end;
  7364.  
  7365. function Header_GetUnicodeFormat(hwnd: HWND): Integer;
  7366. begin
  7367.   Result := SendMessage(hwnd, HDM_GETUNICODEFORMAT, 0, 0);
  7368. end;
  7369.  
  7370. { Toolbar }
  7371.  
  7372. function CreateToolBarEx; external cctrl name 'CreateToolbarEx';
  7373. function CreateMappedBitmap; external cctrl name 'CreateMappedBitmap';
  7374.  
  7375. { Status bar }
  7376. procedure DrawStatusTextA; external cctrl name 'DrawStatusTextA';
  7377. procedure DrawStatusTextW; external cctrl name 'DrawStatusTextW';
  7378. procedure DrawStatusText; external cctrl name 'DrawStatusTextA';
  7379. function CreateStatusWindowA; external cctrl name 'CreateStatusWindowA';
  7380. function CreateStatusWindowW; external cctrl name 'CreateStatusWindowW';
  7381. function CreateStatusWindow; external cctrl name 'CreateStatusWindowA';
  7382.  
  7383. { Menu Help }
  7384. procedure MenuHelp; external cctrl name 'MenuHelp';
  7385. function ShowHideMenuCtl; external cctrl name 'ShowHideMenuCtl';
  7386. procedure GetEffectiveClientRect; external cctrl name 'GetEffectiveClientRect';
  7387.  
  7388. { Drag List Box }
  7389. procedure MakeDragList; external cctrl name 'MakeDragList';
  7390. procedure DrawInsert; external cctrl name 'DrawInsert';
  7391. function LBItemFromPt; external cctrl name 'LBItemFromPt';
  7392.  
  7393. { UpDown control }
  7394. function CreateUpDownControl; external cctrl name 'CreateUpDownControl';
  7395.  
  7396. { List View }
  7397. function ListView_GetUnicodeFormat(hwnd: HWND): BOOL;
  7398. begin
  7399.   Result := BOOL(SendMessage(hwnd, LVM_GETUNICODEFORMAT, 0, 0));
  7400. end;
  7401.  
  7402. function ListView_SetUnicodeFormat(hwnd: HWND; fUnicode: BOOL): Integer;
  7403. begin
  7404.   Result := SendMessage(hwnd, LVM_SETUNICODEFORMAT, Integer(fUnicode), 0);
  7405. end;
  7406.  
  7407. function ListView_GetBkColor(hWnd: HWND): TColorRef;
  7408. begin
  7409.   Result := SendMessage(hWnd, LVM_GETBKCOLOR, 0, 0);
  7410. end;
  7411.  
  7412. function ListView_SetBkColor(hWnd: HWND; clrBk: TColorRef): Bool;
  7413. begin
  7414.   Result := Bool( SendMessage(hWnd, LVM_SETBKCOLOR, 0, clrBk) );
  7415. end;
  7416.  
  7417. function ListView_GetImageList(hWnd: HWND; iImageList: Integer): HIMAGELIST;
  7418. begin
  7419.   Result := HIMAGELIST( SendMessage(hWnd, LVM_GETIMAGELIST, iImageList, 0) );
  7420. end;
  7421.  
  7422. function ListView_SetImageList(hWnd: HWND; himl: HIMAGELIST; iImageList: Integer): HIMAGELIST;
  7423. begin
  7424.   Result := HIMAGELIST( SendMessage(hWnd, LVM_SETIMAGELIST, iImageList, Longint(himl)) );
  7425. end;
  7426.  
  7427. function ListView_GetItemCount(hWnd: HWND): Integer;
  7428. begin
  7429.   Result := SendMessage(hWnd, LVM_GETITEMCOUNT, 0, 0);
  7430. end;
  7431.  
  7432. function IndexToStateImageMask(I: Longint): Longint;
  7433. begin
  7434.   Result := I shl 12;
  7435. end;
  7436.  
  7437. function ListView_GetItemA(hWnd: HWND; var pItem: TLVItemA): Bool;
  7438. begin
  7439.   Result := Bool( SendMessage(hWnd, LVM_GETITEM, 0, Longint(@pItem)) );
  7440. end;
  7441. function ListView_GetItemW(hWnd: HWND; var pItem: TLVItemW): Bool;
  7442. begin
  7443.   Result := Bool( SendMessage(hWnd, LVM_GETITEM, 0, Longint(@pItem)) );
  7444. end;
  7445. function ListView_GetItem(hWnd: HWND; var pItem: TLVItem): Bool;
  7446. begin
  7447.   Result := Bool( SendMessage(hWnd, LVM_GETITEM, 0, Longint(@pItem)) );
  7448. end;
  7449.  
  7450. function ListView_SetItemA(hWnd: HWND; const pItem: TLVItemA): Bool;
  7451. begin
  7452.   Result := Bool( SendMessage(hWnd, LVM_SETITEM, 0, Longint(@pItem)) );
  7453. end;
  7454. function ListView_SetItemW(hWnd: HWND; const pItem: TLVItemW): Bool;
  7455. begin
  7456.   Result := Bool( SendMessage(hWnd, LVM_SETITEM, 0, Longint(@pItem)) );
  7457. end;
  7458. function ListView_SetItem(hWnd: HWND; const pItem: TLVItem): Bool;
  7459. begin
  7460.   Result := Bool( SendMessage(hWnd, LVM_SETITEM, 0, Longint(@pItem)) );
  7461. end;
  7462.  
  7463. function ListView_InsertItemA(hWnd: HWND; const pItem: TLVItemA): Integer;
  7464. begin
  7465.   Result := Integer( SendMessage(hWnd, LVM_INSERTITEM, 0, Longint(@pItem)) );
  7466. end;
  7467. function ListView_InsertItemW(hWnd: HWND; const pItem: TLVItemW): Integer;
  7468. begin
  7469.   Result := Integer( SendMessage(hWnd, LVM_INSERTITEM, 0, Longint(@pItem)) );
  7470. end;
  7471. function ListView_InsertItem(hWnd: HWND; const pItem: TLVItem): Integer;
  7472. begin
  7473.   Result := Integer( SendMessage(hWnd, LVM_INSERTITEM, 0, Longint(@pItem)) );
  7474. end;
  7475.  
  7476. function ListView_DeleteItem(hWnd: HWND; i: Integer): Bool;
  7477. begin
  7478.   Result := Bool( SendMessage(hWnd, LVM_DELETEITEM, i, 0) );
  7479. end;
  7480.  
  7481. function ListView_DeleteAllItems(hWnd: HWND): Bool;
  7482. begin
  7483.   Result := Bool( SendMessage(hWnd, LVM_DELETEALLITEMS, 0, 0) );
  7484. end;
  7485.  
  7486. function ListView_GetCallbackMask(hWnd: HWND): UINT;
  7487. begin
  7488.   Result := SendMessage(hWnd, LVM_GETCALLBACKMASK, 0, 0);
  7489. end;
  7490.  
  7491. function ListView_SetCallbackMask(hWnd: HWND; mask: UINT): Bool;
  7492. begin
  7493.   Result := Bool( SendMessage(hWnd, LVM_SETCALLBACKMASK, mask, 0) );
  7494. end;
  7495.  
  7496. function ListView_GetNextItem(hWnd: HWND; iStart: Integer; Flags: UINT): Integer;
  7497. begin
  7498.   Result := SendMessage(hWnd, LVM_GETNEXTITEM, iStart, MakeLong(Flags, 0));
  7499. end;
  7500.  
  7501. function ListView_FindItemA(hWnd: HWND; iStart: Integer;
  7502.   const plvfi: TLVFindInfoA): Integer;
  7503. begin
  7504.   Result := SendMessage(hWnd, LVM_FINDITEM, iStart, Longint(@plvfi));
  7505. end;
  7506. function ListView_FindItemW(hWnd: HWND; iStart: Integer;
  7507.   const plvfi: TLVFindInfoW): Integer;
  7508. begin
  7509.   Result := SendMessage(hWnd, LVM_FINDITEM, iStart, Longint(@plvfi));
  7510. end;
  7511. function ListView_FindItem(hWnd: HWND; iStart: Integer;
  7512.   const plvfi: TLVFindInfo): Integer;
  7513. begin
  7514.   Result := SendMessage(hWnd, LVM_FINDITEM, iStart, Longint(@plvfi));
  7515. end;
  7516.  
  7517. function ListView_GetItemRect(hWnd: HWND; i: Integer; var prc: TRect;
  7518.   Code: Integer): Bool;
  7519. begin
  7520.   if @prc <> nil then
  7521.   begin
  7522.     prc.left := Code;
  7523.     Result := Bool( SendMessage(hWnd, LVM_GETITEMRECT, i, Longint(@prc)) );
  7524.   end
  7525.   else
  7526.     Result := Bool( SendMessage(hWnd, LVM_GETITEMRECT, i, 0) );
  7527. end;
  7528.  
  7529. function ListView_SetItemPosition(hWnd: HWND; i, x, y: Integer): Bool;
  7530. begin
  7531.   Result := Bool( SendMessage(hWnd, LVM_SETITEMPOSITION, i, MakeLong(x, y)) );
  7532. end;
  7533.  
  7534. function ListView_GetItemPosition(hwndLV: HWND; i: Integer;
  7535.   var ppt: TPoint): Bool;
  7536. begin
  7537.   Result := Bool( SendMessage(hWndLV, LVM_GETITEMPOSITION, i, Longint(@ppt)) );
  7538. end;
  7539.  
  7540. function ListView_GetStringWidthA(hwndLV: HWND; psz: PAnsiChar): Integer;
  7541. begin
  7542.   Result := SendMessage(hwndLV, LVM_GETSTRINGWIDTH, 0, Longint(psz));
  7543. end;
  7544. function ListView_GetStringWidthW(hwndLV: HWND; psz: PWideChar): Integer;
  7545. begin
  7546.   Result := SendMessage(hwndLV, LVM_GETSTRINGWIDTH, 0, Longint(psz));
  7547. end;
  7548. function ListView_GetStringWidth(hwndLV: HWND; psz: PChar): Integer;
  7549. begin
  7550.   Result := SendMessage(hwndLV, LVM_GETSTRINGWIDTH, 0, Longint(psz));
  7551. end;
  7552.  
  7553. function ListView_HitTest(hwndLV: HWND; var pinfo: TLVHitTestInfo): Integer;
  7554. begin
  7555.   Result := SendMessage(hwndLV, LVM_HITTEST, 0, Longint(@pinfo));
  7556. end;
  7557.  
  7558. function ListView_EnsureVisible(hwndLV: HWND; i: Integer; fPartialOK: Bool): Bool;
  7559. begin
  7560.   Result := SendMessage(hwndLV, LVM_ENSUREVISIBLE, i,
  7561.     MakeLong(Integer(fPartialOK), 0)) <> 0;
  7562. end;
  7563.  
  7564. function ListView_Scroll(hwndLV: HWnd; DX, DY: Integer): Bool;
  7565. begin
  7566.   Result := Bool( SendMessage(hwndLV, LVM_SCROLL, DX, DY) );
  7567. end;
  7568.  
  7569. function ListView_RedrawItems(hwndLV: HWND; iFirst, iLast: Integer): Bool;
  7570. begin
  7571.   Result := Bool( SendMessage(hwndLV, LVM_REDRAWITEMS, iFirst, iLast) );
  7572. end;
  7573.  
  7574. function ListView_Arrange(hwndLV: HWND; Code: UINT): Bool;
  7575. begin
  7576.   Result := Bool( SendMessage(hwndLV, LVM_ARRANGE, Code, 0) );
  7577. end;
  7578.  
  7579. function ListView_EditLabelA(hwndLV: HWND; i: Integer): HWND;
  7580. begin
  7581.   Result := HWND( SendMessage(hwndLV, LVM_EDITLABEL, i, 0) );
  7582. end;
  7583. function ListView_EditLabelW(hwndLV: HWND; i: Integer): HWND;
  7584. begin
  7585.   Result := HWND( SendMessage(hwndLV, LVM_EDITLABEL, i, 0) );
  7586. end;
  7587. function ListView_EditLabel(hwndLV: HWND; i: Integer): HWND;
  7588. begin
  7589.   Result := HWND( SendMessage(hwndLV, LVM_EDITLABEL, i, 0) );
  7590. end;
  7591.  
  7592. function ListView_GetEditControl(hwndLV: HWND): HWND;
  7593. begin
  7594.   Result := HWND( SendMessage(hwndLV, LVM_GETEDITCONTROL, 0, 0) );
  7595. end;
  7596.  
  7597. function ListView_GetColumnA(hwnd: HWND; iCol: Integer; var pcol: TLVColumnA): Bool;
  7598. begin
  7599.   Result := Bool( SendMessage(hwnd, LVM_GETCOLUMN, iCol, Longint(@pcol)) );
  7600. end;
  7601. function ListView_GetColumnW(hwnd: HWND; iCol: Integer; var pcol: TLVColumnW): Bool;
  7602. begin
  7603.   Result := Bool( SendMessage(hwnd, LVM_GETCOLUMN, iCol, Longint(@pcol)) );
  7604. end;
  7605. function ListView_GetColumn(hwnd: HWND; iCol: Integer; var pcol: TLVColumn): Bool;
  7606. begin
  7607.   Result := Bool( SendMessage(hwnd, LVM_GETCOLUMN, iCol, Longint(@pcol)) );
  7608. end;
  7609.  
  7610. function ListView_SetColumnA(hwnd: HWND; iCol: Integer; const pcol: TLVColumnA): Bool;
  7611. begin
  7612.   Result := Bool( SendMessage(hwnd, LVM_SETCOLUMN, iCol, Longint(@pcol)) );
  7613. end;
  7614. function ListView_SetColumnW(hwnd: HWND; iCol: Integer; const pcol: TLVColumnW): Bool;
  7615. begin
  7616.   Result := Bool( SendMessage(hwnd, LVM_SETCOLUMN, iCol, Longint(@pcol)) );
  7617. end;
  7618. function ListView_SetColumn(hwnd: HWND; iCol: Integer; const pcol: TLVColumn): Bool;
  7619. begin
  7620.   Result := Bool( SendMessage(hwnd, LVM_SETCOLUMN, iCol, Longint(@pcol)) );
  7621. end;
  7622.  
  7623. function ListView_InsertColumnA(hwnd: HWND; iCol: Integer; const pcol: TLVColumnA): Integer;
  7624. begin
  7625.   Result := SendMessage(hWnd, LVM_INSERTCOLUMN, iCol, Longint(@pcol));
  7626. end;
  7627. function ListView_InsertColumnW(hwnd: HWND; iCol: Integer; const pcol: TLVColumnW): Integer;
  7628. begin
  7629.   Result := SendMessage(hWnd, LVM_INSERTCOLUMN, iCol, Longint(@pcol));
  7630. end;
  7631. function ListView_InsertColumn(hwnd: HWND; iCol: Integer; const pcol: TLVColumn): Integer;
  7632. begin
  7633.   Result := SendMessage(hWnd, LVM_INSERTCOLUMN, iCol, Longint(@pcol));
  7634. end;
  7635.  
  7636. function ListView_DeleteColumn(hwnd: HWND; iCol: Integer): Bool;
  7637. begin
  7638.   Result := Bool( SendMessage(hWnd, LVM_DELETECOLUMN, iCol, 0) );
  7639. end;
  7640.  
  7641. function ListView_GetColumnWidth(hwnd: HWND; iCol: Integer): Integer;
  7642. begin
  7643.   Result := Integer( SendMessage(hwnd, LVM_GETCOLUMNWIDTH, iCol, 0) );
  7644. end;
  7645.  
  7646. function ListView_SetColumnWidth(hwnd: HWnd; iCol: Integer; cx: Integer): Bool;
  7647. begin
  7648.   Result := Bool( SendMessage(hwnd, LVM_SETCOLUMNWIDTH, iCol,
  7649.     MakeLong((cx), 0)) );
  7650. end;
  7651.  
  7652. function ListView_GetHeader(hwnd: HWND): HWND;
  7653. begin
  7654.   Result := SendMessage(hwnd, LVM_GETHEADER, 0, 0);
  7655. end;
  7656.  
  7657. function ListView_CreateDragImage(hwnd: HWND; i: Integer;
  7658.   const lpptUpLeft: TPoint): HIMAGELIST;
  7659. begin
  7660.   Result := HIMAGELIST( SendMessage(hwnd, LVM_CREATEDRAGIMAGE, i,
  7661.     Longint(@lpptUpLeft)));
  7662. end;
  7663.  
  7664. function ListView_GetViewRect(hwnd: HWND; var prc: TRect): Bool;
  7665. begin
  7666.   Result := Bool( SendMessage(hwnd, LVM_GETVIEWRECT, 0, Longint(@prc)) );
  7667. end;
  7668.  
  7669. function ListView_GetTextColor(hwnd: HWND): TColorRef;
  7670. begin
  7671.   Result := SendMessage(hwnd, LVM_GETTEXTCOLOR, 0, 0);
  7672. end;
  7673.  
  7674. function ListView_SetTextColor(hwnd: HWND; clrText: TColorRef): Bool;
  7675. begin
  7676.   Result := Bool( SendMessage(hwnd, LVM_SETTEXTCOLOR, 0, clrText) );
  7677. end;
  7678.  
  7679. function ListView_GetTextBkColor(hwnd: HWND): TColorRef;
  7680. begin
  7681.   Result := SendMessage(hwnd, LVM_GETTEXTBKCOLOR, 0, 0);
  7682. end;
  7683.  
  7684. function ListView_SetTextBkColor(hwnd: HWND; clrTextBk: TColorRef): Bool;
  7685. begin
  7686.   Result := Bool( SendMessage(hwnd, LVM_SETTEXTBKCOLOR, 0, clrTextBk) );
  7687. end;
  7688.  
  7689. function ListView_GetTopIndex(hwndLV: HWND): Integer;
  7690. begin
  7691.   Result := SendMessage(hwndLV, LVM_GETTOPINDEX, 0, 0);
  7692. end;
  7693.  
  7694. function ListView_GetCountPerPage(hwndLV: HWND): Integer;
  7695. begin
  7696.   Result := SendMessage(hwndLV, LVM_GETCOUNTPERPAGE, 0, 0);
  7697. end;
  7698.  
  7699. function ListView_GetOrigin(hwndLV: HWND; var ppt: TPoint): Bool;
  7700. begin
  7701.   Result := Bool( SendMessage(hwndLV, LVM_GETORIGIN, 0, Longint(@ppt)) );
  7702. end;
  7703.  
  7704. function ListView_Update(hwndLV: HWND; i: Integer): Bool;
  7705. begin
  7706.   Result := SendMessage(hwndLV, LVM_UPDATE, i, 0) <> 0;
  7707. end;
  7708.  
  7709. function ListView_SetItemState(hwndLV: HWND; i: Integer; data, mask: UINT): Bool;
  7710. var
  7711.   Item: TLVItem;
  7712. begin
  7713.   Item.stateMask := mask;
  7714.   Item.state := data;
  7715.   Result := Bool( SendMessage(hwndLV, LVM_SETITEMSTATE, i, Longint(@Item)) );
  7716. end;
  7717.  
  7718. function ListView_GetItemState(hwndLV: HWND; i, mask: Integer): Integer;
  7719. begin
  7720.   Result := SendMessage(hwndLV, LVM_GETITEMSTATE, i, mask);
  7721. end;
  7722.  
  7723. function ListView_GetCheckState(hwndLV: HWND; i: Integer): UINT;
  7724. begin
  7725.   Result := (SendMessage(hwndLV, LVM_GETITEMSTATE, i, LVIS_STATEIMAGEMASK) shr 12) - 1 ;
  7726. end;
  7727.  
  7728. procedure ListView_SetCheckState(hwndLV: HWND; i: Integer; Checked: Boolean);
  7729. var
  7730.   Item: TLVItem;
  7731. begin
  7732.   Item.statemask := LVIS_STATEIMAGEMASK;
  7733.   Item.State := ((Integer(Checked) and 1) + 1) shl 12;
  7734.   SendMessage(hwndLV, LVM_SETITEMSTATE, i, Integer(@Item));
  7735. end;
  7736.  
  7737. function ListView_GetItemTextA(hwndLV: HWND; i, iSubItem: Integer;
  7738.   pszText: PAnsiChar; cchTextMax: Integer): Integer;
  7739. var
  7740.   Item: TLVItemA;
  7741. begin
  7742.   Item.iSubItem := iSubItem;
  7743.   Item.cchTextMax := cchTextMax;
  7744.   Item.pszText := pszText;
  7745.   Result := SendMessage(hwndLV, LVM_GETITEMTEXT, i, Longint(@Item));
  7746. end;
  7747. function ListView_GetItemTextW(hwndLV: HWND; i, iSubItem: Integer;
  7748.   pszText: PWideChar; cchTextMax: Integer): Integer;
  7749. var
  7750.   Item: TLVItemW;
  7751. begin
  7752.   Item.iSubItem := iSubItem;
  7753.   Item.cchTextMax := cchTextMax;
  7754.   Item.pszText := pszText;
  7755.   Result := SendMessage(hwndLV, LVM_GETITEMTEXT, i, Longint(@Item));
  7756. end;
  7757. function ListView_GetItemText(hwndLV: HWND; i, iSubItem: Integer;
  7758.   pszText: PChar; cchTextMax: Integer): Integer;
  7759. var
  7760.   Item: TLVItem;
  7761. begin
  7762.   Item.iSubItem := iSubItem;
  7763.   Item.cchTextMax := cchTextMax;
  7764.   Item.pszText := pszText;
  7765.   Result := SendMessage(hwndLV, LVM_GETITEMTEXT, i, Longint(@Item));
  7766. end;
  7767.  
  7768. function ListView_SetItemTextA(hwndLV: HWND; i, iSubItem: Integer;
  7769.   pszText: PAnsiChar): Bool;
  7770. var
  7771.   Item: TLVItemA;
  7772. begin
  7773.   Item.iSubItem := iSubItem;
  7774.   Item.pszText := pszText;
  7775.   Result := Bool( SendMessage(hwndLV, LVM_SETITEMTEXT, i, Longint(@Item)) );
  7776. end;
  7777. function ListView_SetItemTextW(hwndLV: HWND; i, iSubItem: Integer;
  7778.   pszText: PWideChar): Bool;
  7779. var
  7780.   Item: TLVItemW;
  7781. begin
  7782.   Item.iSubItem := iSubItem;
  7783.   Item.pszText := pszText;
  7784.   Result := Bool( SendMessage(hwndLV, LVM_SETITEMTEXT, i, Longint(@Item)) );
  7785. end;
  7786. function ListView_SetItemText(hwndLV: HWND; i, iSubItem: Integer;
  7787.   pszText: PChar): Bool;
  7788. var
  7789.   Item: TLVItem;
  7790. begin
  7791.   Item.iSubItem := iSubItem;
  7792.   Item.pszText := pszText;
  7793.   Result := Bool( SendMessage(hwndLV, LVM_SETITEMTEXT, i, Longint(@Item)) );
  7794. end;
  7795.  
  7796. procedure ListView_SetItemCount(hwndLV: HWND; cItems: Integer);
  7797. begin
  7798.   SendMessage(hwndLV, LVM_SETITEMCOUNT, cItems, 0);
  7799. end;
  7800.  
  7801. procedure ListView_SetItemCountEx(hwndLV: HWND; cItems: Integer; dwFlags: DWORD);
  7802. begin
  7803.   SendMessage(hwndLV, LVM_SETITEMCOUNT, cItems, dwFlags);
  7804. end;
  7805.  
  7806. function ListView_SortItems(hwndLV: HWND; pfnCompare: TLVCompare;
  7807.   lPrm: Longint): Bool;
  7808. begin
  7809.   Result := Bool( SendMessage(hwndLV, LVM_SORTITEMS, lPrm,
  7810.     Longint(@pfnCompare)) );
  7811. end;
  7812.  
  7813. procedure ListView_SetItemPosition32(hwndLV: HWND; i, x, y: Integer);
  7814. var
  7815.   ptNewPos: TPoint;
  7816. begin
  7817.   ptNewPos.x := x;
  7818.   ptNewPos.y := y;
  7819.   SendMessage(hwndLV, LVM_SETITEMPOSITION32, i, Longint(@ptNewPos));
  7820. end;
  7821.  
  7822. function ListView_GetSelectedCount(hwndLV: HWND): UINT;
  7823. begin
  7824.   Result := SendMessage(hwndLV, LVM_GETSELECTEDCOUNT, 0, 0);
  7825. end;
  7826.  
  7827. function ListView_GetItemSpacing(hwndLV: HWND; fSmall: Integer): Longint;
  7828. begin
  7829.   Result := SendMessage(hwndLV, LVM_GETITEMSPACING, fSmall, 0);
  7830. end;
  7831.  
  7832. function ListView_GetISearchStringA(hwndLV: HWND; lpsz: PAnsiChar): Bool;
  7833. begin
  7834.   Result := Bool( SendMessage(hwndLV, LVM_GETISEARCHSTRING, 0,
  7835.     Longint(lpsz)) );
  7836. end;
  7837. function ListView_GetISearchStringW(hwndLV: HWND; lpsz: PWideChar): Bool;
  7838. begin
  7839.   Result := Bool( SendMessage(hwndLV, LVM_GETISEARCHSTRING, 0,
  7840.     Longint(lpsz)) );
  7841. end;
  7842. function ListView_GetISearchString(hwndLV: HWND; lpsz: PChar): Bool;
  7843. begin
  7844.   Result := Bool( SendMessage(hwndLV, LVM_GETISEARCHSTRING, 0,
  7845.     Longint(lpsz)) );
  7846. end;
  7847.  
  7848. function ListView_SetIconSpacing(hwndLV: HWND; cx, cy: Word): DWORD;
  7849. begin
  7850.   Result := SendMessage(hwndLV, LVM_SETICONSPACING, 0, MakeLong(cx, cy));
  7851. end;
  7852.  
  7853. function ListView_SetExtendedListViewStyle(hwndLV: HWND; dw: DWORD): BOOL;
  7854. begin
  7855.   Result := BOOL(SendMessage(hwndLV, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, dw));
  7856. end;
  7857.  
  7858. function ListView_GetExtendedListViewStyle(hwndLV: HWND): DWORD;
  7859. begin
  7860.   Result := SendMessage(hwndLV, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);
  7861. end;
  7862.  
  7863. function ListView_GetSubItemRect(hwndLV: HWND; iItem, iSubItem: Integer;
  7864.   code: DWORD; prc: PRect): BOOL;
  7865. begin
  7866.   if prc <> nil then
  7867.   begin
  7868.     prc^.Top := iSubItem;
  7869.     prc^.Left := code;
  7870.   end;
  7871.   Result := BOOL(SendMessage(hwndLV, LVM_GETSUBITEMRECT, iItem, Longint(prc)));
  7872. end;
  7873.  
  7874. function ListView_SubItemHitTest(hwndLV: HWND; plvhti: PLVHitTestInfo): Integer;
  7875. begin
  7876.   Result := SendMessage(hwndLV, LVM_SUBITEMHITTEST, 0, Longint(plvhti));
  7877. end;
  7878.  
  7879. function ListView_SetColumnOrderArray(hwndLV: HWND; iCount: Integer;
  7880.   pi: PInteger): BOOL;
  7881. begin
  7882.   Result := BOOL(SendMessage(hwndLV, LVM_SETCOLUMNORDERARRAY, iCount,
  7883.     Longint(pi)));
  7884. end;
  7885.  
  7886. function ListView_GetColumnOrderArray(hwndLV: HWND; iCount: Integer;
  7887.   pi: PInteger): BOOL;
  7888. begin
  7889.   Result := BOOL(SendMessage(hwndLV, LVM_GETCOLUMNORDERARRAY, iCount,
  7890.     Longint(pi)));
  7891. end;
  7892.  
  7893. function ListView_SetHotItem(hwndLV: HWND; i: Integer): Integer;
  7894. begin
  7895.   Result := SendMessage(hwndLV, LVM_SETHOTITEM, i, 0);
  7896. end;
  7897.  
  7898. function ListView_GetHotItem(hwndLV: HWND): Integer;
  7899. begin
  7900.   Result := SendMessage(hwndLV, LVM_GETHOTITEM, 0, 0);
  7901. end;
  7902.  
  7903. function ListView_SetHotCursor(hwndLV: HWND; hcur: HCURSOR): HCURSOR;
  7904. begin
  7905.   Result := SendMessage(hwndLV, LVM_SETHOTCURSOR, 0, hcur);
  7906. end;
  7907.  
  7908. function ListView_GetHotCursor(hwndLV: HWND): HCURSOR;
  7909. begin
  7910.   Result := SendMessage(hwndLV, LVM_GETHOTCURSOR, 0, 0);
  7911. end;
  7912.  
  7913. function ListView_ApproximateViewRect(hwndLV: HWND; iWidth, iHeight: Word;
  7914.   iCount: Integer): DWORD;
  7915. begin
  7916.   Result := SendMessage(hwndLV, LVM_APPROXIMATEVIEWRECT, iCount,
  7917.     MakeLParam(iWidth, iHeight));
  7918. end;
  7919.  
  7920. function ListView_SetWorkAreas(hwndLV: HWND; nWorkAreas: Integer; prc: PRect): BOOL;
  7921. begin
  7922.   Result := BOOL(SendMessage(hwndLV, LVM_SETWORKAREA, nWorkAreas, Longint(prc)));
  7923. end;
  7924.  
  7925. function ListView_GetSelectionMark(hwnd: HWND): Integer;
  7926. begin
  7927.   Result := SendMessage(hwnd, LVM_GETSELECTIONMARK, 0, 0);
  7928. end;
  7929.  
  7930. function ListView_SetSelectionMark(hwnd: HWND; i: Integer): Integer;
  7931. begin
  7932.   Result := SendMessage(hwnd, LVM_SETSELECTIONMARK, 0, i);
  7933. end;
  7934.  
  7935. function ListView_GetWorkAreas(hwnd: HWND; nWorkAreas: Integer; prc: PRect): BOOL;
  7936. begin
  7937.   Result := BOOL(SendMessage(hwnd, LVM_GETWORKAREAS, nWorkAreas, Integer(prc)));
  7938. end;
  7939.  
  7940. function ListView_SetHoverTime(hwndLV: HWND; dwHoverTimeMs: DWORD): DWORD;
  7941. begin
  7942.   Result := SendMessage(hwndLV, LVM_SETHOVERTIME, 0, dwHoverTimeMs);
  7943. end;
  7944.  
  7945. function ListView_GetHoverTime(hwndLV: HWND): Integer;
  7946. begin
  7947.   Result := SendMessage(hwndLV, LVM_GETHOVERTIME, 0, 0);
  7948. end;
  7949.  
  7950. function ListView_GetNumberOfWorkAreas(hwnd: HWND; pnWorkAreas: PInteger): Integer;
  7951. begin
  7952.   Result := SendMessage(hwnd, LVM_GETNUMBEROFWORKAREAS, 0, Integer(pnWorkAreas));
  7953. end;
  7954.  
  7955. function ListView_SetToolTips(hwndLV: HWND; hwndNewHwnd: HWND): HWND;
  7956. begin
  7957.   Result := HWND(SendMessage(hwndLV, LVM_SETTOOLTIPS, WPARAM(hwndNewHwnd), 0));
  7958. end;
  7959.  
  7960. function ListView_GetToolTips(hwndLV: HWND): HWND;
  7961. begin
  7962.   Result := HWND(SendMessage(hwndLV, LVM_GETTOOLTIPS, 0, 0));
  7963. end;
  7964.  
  7965. function ListView_SetBkImage(hwnd: HWND; plvbki: PLVBKImage): BOOL;
  7966. begin
  7967.   Result := BOOL(SendMessage(hwnd, LVM_SETBKIMAGE, 0, LPARAM(plvbki)));
  7968. end;
  7969.  
  7970. function ListView_GetBkImage(hwnd: HWND; plvbki: PLVBKImage): BOOL;
  7971. begin
  7972.   Result := BOOL(SendMessage(hwnd, LVM_GETBKIMAGE, 0, LPARAM(plvbki)));
  7973. end;
  7974.  
  7975. { Tree View }
  7976.  
  7977. function TreeView_InsertItem(hwnd: HWND; const lpis: TTVInsertStruct): HTreeItem;
  7978. begin
  7979.   Result := HTreeItem( SendMessage(hwnd, TVM_INSERTITEM, 0, Longint(@lpis)) );
  7980. end;
  7981.  
  7982. function TreeView_DeleteItem(hwnd: HWND; hitem: HTreeItem): Bool;
  7983. begin
  7984.   Result := Bool( SendMessage(hwnd, TVM_DELETEITEM, 0, Longint(hitem)) );
  7985. end;
  7986.  
  7987. function TreeView_DeleteAllItems(hwnd: HWND): Bool;
  7988. begin
  7989.   Result := Bool( SendMessage(hwnd, TVM_DELETEITEM, 0, Longint(TVI_ROOT)) );
  7990. end;
  7991.  
  7992. function TreeView_Expand(hwnd: HWND; hitem: HTreeItem; code: Integer): Bool;
  7993. begin
  7994.   Result := Bool( SendMessage(hwnd, TVM_EXPAND, code, Longint(hitem)) );
  7995. end;
  7996.  
  7997. function TreeView_GetItemRect(hwnd: HWND; hitem: HTreeItem;
  7998.   var prc: TRect; code: Bool): Bool;
  7999. begin
  8000.   HTreeItem(Pointer(@prc)^) := hitem;
  8001.   Result := Bool( SendMessage(hwnd, TVM_GETITEMRECT, Integer(code), Longint(@prc)) );
  8002. end;
  8003.  
  8004. function TreeView_GetCount(hwnd: HWND): UINT;
  8005. begin
  8006.   Result := SendMessage(hwnd, TVM_GETCOUNT, 0, 0);
  8007. end;
  8008.  
  8009. function TreeView_GetIndent(hwnd: HWND): UINT;
  8010. begin
  8011.   Result := SendMessage(hwnd, TVM_GETINDENT, 0, 0);
  8012. end;
  8013.  
  8014. function TreeView_SetIndent(hwnd: HWND; indent: Integer): Bool;
  8015. begin
  8016.   Result := Bool( SendMessage(hwnd, TVM_SETINDENT, indent, 0) );
  8017. end;
  8018.  
  8019. function TreeView_GetImageList(hwnd: HWND; iImage: Integer): HIMAGELIST;
  8020. begin
  8021.   Result := HIMAGELIST( SendMessage(hwnd, TVM_GETIMAGELIST, iImage, 0) );
  8022. end;
  8023.  
  8024. function TreeView_SetImageList(hwnd: HWND; himl: HIMAGELIST;
  8025.   iImage: Integer): HIMAGELIST;
  8026. begin
  8027.   Result := HIMAGELIST( SendMessage(hwnd, TVM_SETIMAGELIST, iImage,
  8028.     Longint(himl)) );
  8029. end;
  8030.  
  8031. function TreeView_GetNextItem(hwnd: HWND; hitem: HTreeItem;
  8032.   code: Integer): HTreeItem;
  8033. begin
  8034.   Result := HTreeItem( SendMessage(hwnd, TVM_GETNEXTITEM, code,
  8035.     Longint(hitem)) );
  8036. end;
  8037.  
  8038. function TreeView_GetChild(hwnd: HWND; hitem: HTreeItem): HTreeItem;
  8039. begin
  8040.   Result := TreeView_GetNextItem(hwnd, hitem, TVGN_CHILD);
  8041. end;
  8042.  
  8043. function TreeView_GetNextSibling(hwnd: HWND; hitem: HTreeItem): HTreeItem;
  8044. begin
  8045.   Result := TreeView_GetNextItem(hwnd, hitem, TVGN_NEXT);
  8046. end;
  8047.  
  8048. function TreeView_GetPrevSibling(hwnd: HWND; hitem: HTreeItem): HTreeItem;
  8049. begin
  8050.   Result := TreeView_GetNextItem(hwnd, hitem, TVGN_PREVIOUS);
  8051. end;
  8052.  
  8053. function TreeView_GetParent(hwnd: HWND; hitem: HTreeItem): HTreeItem;
  8054. begin
  8055.   Result := TreeView_GetNextItem(hwnd, hitem, TVGN_PARENT);
  8056. end;
  8057.  
  8058. function TreeView_GetFirstVisible(hwnd: HWND): HTreeItem;
  8059. begin
  8060.   Result := TreeView_GetNextItem(hwnd, nil,  TVGN_FIRSTVISIBLE);
  8061. end;
  8062.  
  8063. function TreeView_GetNextVisible(hwnd: HWND; hitem: HTreeItem): HTreeItem;
  8064. begin
  8065.   Result := TreeView_GetNextItem(hwnd, hitem, TVGN_NEXTVISIBLE);
  8066. end;
  8067.  
  8068. function TreeView_GetPrevVisible(hwnd: HWND; hitem: HTreeItem): HTreeItem;
  8069. begin
  8070.   Result := TreeView_GetNextItem(hwnd, hitem, TVGN_PREVIOUSVISIBLE);
  8071. end;
  8072.  
  8073. function TreeView_GetSelection(hwnd: HWND): HTreeItem;
  8074. begin
  8075.   Result := TreeView_GetNextItem(hwnd, nil, TVGN_CARET);
  8076. end;
  8077.  
  8078. function TreeView_GetDropHilite(hwnd: HWND): HTreeItem;
  8079. begin
  8080.   Result := TreeView_GetNextItem(hwnd, nil, TVGN_DROPHILITE);
  8081. end;
  8082.  
  8083. function TreeView_GetRoot(hwnd: HWND): HTreeItem;
  8084. begin
  8085.   Result := TreeView_GetNextItem(hwnd, nil, TVGN_ROOT);
  8086. end;
  8087.  
  8088. function TreeView_GetLastVisible(hwnd: HWND): HTreeItem;
  8089. begin
  8090.   Result := TreeView_GetNextItem(hwnd, nil,  TVGN_LASTVISIBLE);
  8091. end;
  8092.  
  8093. function TreeView_Select(hwnd: HWND; hitem: HTreeItem;
  8094.   code: Integer): HTreeItem;
  8095. begin
  8096.   Result := HTreeItem( SendMessage(hwnd, TVM_SELECTITEM, code,
  8097.     Longint(hitem)) );
  8098. end;
  8099.  
  8100. function TreeView_SelectItem(hwnd: HWND; hitem: HTreeItem): HTreeItem;
  8101. begin
  8102.   Result := TreeView_Select(hwnd, hitem, TVGN_CARET);
  8103. end;
  8104.  
  8105. function TreeView_SelectDropTarget(hwnd: HWND; hitem: HTreeItem): HTreeItem;
  8106. begin
  8107.   Result := TreeView_Select(hwnd, hitem, TVGN_DROPHILITE);
  8108. end;
  8109.  
  8110. function TreeView_SelectSetFirstVisible(hwnd: HWND; hitem: HTreeItem): HTreeItem;
  8111. begin
  8112.   Result := TreeView_Select(hwnd, hitem, TVGN_FIRSTVISIBLE);
  8113. end;
  8114.  
  8115. function TreeView_GetItemA(hwnd: HWND; var pitem: TTVItemA): Bool;
  8116. begin
  8117.   Result := Bool( SendMessage(hwnd, TVM_GETITEM, 0, Longint(@pitem)) );
  8118. end;
  8119. function TreeView_GetItemW(hwnd: HWND; var pitem: TTVItemW): Bool;
  8120. begin
  8121.   Result := Bool( SendMessage(hwnd, TVM_GETITEM, 0, Longint(@pitem)) );
  8122. end;
  8123. function TreeView_GetItem(hwnd: HWND; var pitem: TTVItem): Bool;
  8124. begin
  8125.   Result := Bool( SendMessage(hwnd, TVM_GETITEM, 0, Longint(@pitem)) );
  8126. end;
  8127.  
  8128. function TreeView_SetItemA(hwnd: HWND; const pitem: TTVItemA): Bool;
  8129. begin
  8130.   Result := Bool( SendMessage(hwnd, TVM_SETITEM, 0, Longint(@pitem)) );
  8131. end;
  8132. function TreeView_SetItemW(hwnd: HWND; const pitem: TTVItemW): Bool;
  8133. begin
  8134.   Result := Bool( SendMessage(hwnd, TVM_SETITEM, 0, Longint(@pitem)) );
  8135. end;
  8136. function TreeView_SetItem(hwnd: HWND; const pitem: TTVItem): Bool;
  8137. begin
  8138.   Result := Bool( SendMessage(hwnd, TVM_SETITEM, 0, Longint(@pitem)) );
  8139. end;
  8140.  
  8141. function TreeView_EditLabelA(hwnd: HWND; hitem: HTreeItem): HWND;
  8142. begin
  8143.   Result := Windows.HWND( SendMessage(hwnd, TVM_EDITLABEL, 0, Longint(hitem)) );
  8144. end;
  8145. function TreeView_EditLabelW(hwnd: HWND; hitem: HTreeItem): HWND;
  8146. begin
  8147.   Result := Windows.HWND( SendMessage(hwnd, TVM_EDITLABEL, 0, Longint(hitem)) );
  8148. end;
  8149. function TreeView_EditLabel(hwnd: HWND; hitem: HTreeItem): HWND;
  8150. begin
  8151.   Result := Windows.HWND( SendMessage(hwnd, TVM_EDITLABEL, 0, Longint(hitem)) );
  8152. end;
  8153.  
  8154. function TreeView_GetEditControl(hwnd: HWND): HWND;
  8155. begin
  8156.   Result := Windows.HWND( SendMessage(hwnd, TVM_GETEDITCONTROL, 0, 0) );
  8157. end;
  8158.  
  8159. function TreeView_GetVisibleCount(hwnd: HWND): UINT;
  8160. begin
  8161.   Result := SendMessage(hwnd, TVM_GETVISIBLECOUNT, 0, 0);
  8162. end;
  8163.  
  8164. function TreeView_HitTest(hwnd: HWND; var lpht: TTVHitTestInfo): HTreeItem;
  8165. begin
  8166.   Result := HTreeItem( SendMessage(hwnd, TVM_HITTEST, 0, Longint(@lpht)) );
  8167. end;
  8168.  
  8169. function TreeView_CreateDragImage(hwnd: HWND; hitem: HTreeItem): HIMAGELIST;
  8170. begin
  8171.   Result := HIMAGELIST( SendMessage(hwnd, TVM_CREATEDRAGIMAGE, 0,
  8172.     Longint(hitem)) );
  8173. end;
  8174.  
  8175. function TreeView_SortChildren(hwnd: HWND; hitem: HTreeItem;
  8176.   recurse: Integer): Bool;
  8177. begin
  8178.   Result := Bool( SendMessage(hwnd, TVM_SORTCHILDREN, recurse,
  8179.     Longint(hitem)) );
  8180. end;
  8181.  
  8182. function TreeView_EnsureVisible(hwnd: HWND; hitem: HTreeItem): Bool;
  8183. begin
  8184.   Result := Bool( SendMessage(hwnd, TVM_ENSUREVISIBLE, 0, Longint(hitem)) );
  8185. end;
  8186.  
  8187. function TreeView_SortChildrenCB(hwnd: HWND; const psort: TTVSortCB;
  8188.   recurse: Integer): Bool;
  8189. begin
  8190.   Result := Bool( SendMessage(hwnd, TVM_SORTCHILDRENCB, recurse,
  8191.     Longint(@psort)) );
  8192. end;
  8193.  
  8194. function TreeView_EndEditLabelNow(hwnd: HWND; fCancel: Bool): Bool;
  8195. begin
  8196.   Result := Bool( SendMessage(hwnd, TVM_ENDEDITLABELNOW, Integer(fCancel),
  8197.     0) );
  8198. end;
  8199.  
  8200. function TreeView_GetISearchStringA(hwndTV: HWND; lpsz: PAnsiChar): Bool;
  8201. begin
  8202.   Result := Bool( SendMessage(hwndTV, TVM_GETISEARCHSTRING, 0,
  8203.     Longint(lpsz)) );
  8204. end;
  8205. function TreeView_GetISearchStringW(hwndTV: HWND; lpsz: PWideChar): Bool;
  8206. begin
  8207.   Result := Bool( SendMessage(hwndTV, TVM_GETISEARCHSTRING, 0,
  8208.     Longint(lpsz)) );
  8209. end;
  8210. function TreeView_GetISearchString(hwndTV: HWND; lpsz: PChar): Bool;
  8211. begin
  8212.   Result := Bool( SendMessage(hwndTV, TVM_GETISEARCHSTRING, 0,
  8213.     Longint(lpsz)) );
  8214. end;
  8215.  
  8216. function TreeView_SetToolTips(wnd: HWND; hwndTT: HWND): HWND;
  8217. begin
  8218.   Result := HWND(SendMessage(wnd, TVM_SETTOOLTIPS, WPARAM(hwndTT), 0));
  8219. end;
  8220.  
  8221. function TreeView_GetToolTips(wnd: HWND): HWND;
  8222. begin
  8223.   Result := HWND(SendMessage(wnd, TVM_GETTOOLTIPS, 0, 0));
  8224. end;
  8225.  
  8226. function TreeView_SetInsertMark(hwnd: HWND; hItem: Integer; fAfter: BOOL): BOOL;
  8227. begin
  8228.   Result := BOOL(SendMessage(hwnd, TVM_SETINSERTMARK, WPARAM(fAfter), LPARAM(hItem)));
  8229. end;
  8230.  
  8231. function TreeView_SetUnicodeFormat(hwnd: HWND; fUnicode: BOOL): BOOL;
  8232. begin
  8233.   Result := BOOL(SendMessage(hwnd, TVM_SETUNICODEFORMAT, WPARAM(fUnicode), 0));
  8234. end;
  8235.  
  8236. function TreeView_GetUnicodeFormat(hwnd: HWND): BOOL;
  8237. begin
  8238.   Result := BOOL(SendMessage(hwnd, TVM_GETUNICODEFORMAT, 0, 0));
  8239. end;
  8240.  
  8241. function TreeView_SetItemHeight(hwnd: HWND; iHeight: Integer): Integer;
  8242. begin
  8243.   Result := SendMessage(hwnd, TVM_SETITEMHEIGHT, iHeight, 0);
  8244. end;
  8245.  
  8246. function TreeView_GetItemHeight(hwnd: HWND): Integer;
  8247. begin
  8248.   Result := SendMessage(hwnd, TVM_GETITEMHEIGHT, 0, 0);
  8249. end;
  8250.  
  8251. function TreeView_SetBkColor(hwnd: HWND; clr: COLORREF): COLORREF;
  8252. begin
  8253.   Result := COLORREF(SendMessage(hwnd, TVM_SETBKCOLOR, 0, LPARAM(clr)));
  8254. end;
  8255.  
  8256. function TreeView_SetTextColor(hwnd: HWND; clr: COLORREF): COLORREF;
  8257. begin
  8258.   Result := COLORREF(SendMessage(hwnd, TVM_SETTEXTCOLOR, 0, LPARAM(clr)));
  8259. end;
  8260.  
  8261. function TreeView_GetBkColor(hwnd: HWND): COLORREF;
  8262. begin
  8263.   Result := COLORREF(SendMessage(hwnd, TVM_GETBKCOLOR, 0, 0));
  8264. end;
  8265.  
  8266. function TreeView_GetTextColor(hwnd: HWND): COLORREF;
  8267. begin
  8268.   Result := COLORREF(SendMessage(hwnd, TVM_GETTEXTCOLOR, 0, 0));
  8269. end;
  8270.  
  8271. function TreeView_SetScrollTime(hwnd: HWND; uTime: UINT): UINT;
  8272. begin
  8273.   Result := SendMessage(hwnd, TVM_SETSCROLLTIME, uTime, 0);
  8274. end;
  8275.  
  8276. function TreeView_GetScrollTime(hwnd: HWND): UINT;
  8277. begin
  8278.   Result := SendMessage(hwnd, TVM_GETSCROLLTIME, 0, 0);
  8279. end;
  8280.  
  8281. function TreeView_SetInsertMarkColor(hwnd: HWND; clr: COLORREF): COLORREF;
  8282. begin
  8283.   Result := COLORREF(SendMessage(hwnd, TVM_SETINSERTMARKCOLOR, 0, LPARAM(clr)));
  8284. end;
  8285.  
  8286. function TreeView_GetInsertMarkColor(hwnd: HWND): COLORREF;
  8287. begin
  8288.   Result := COLORREF(SendMessage(hwnd, TVM_GETINSERTMARKCOLOR, 0, 0));
  8289. end;
  8290.  
  8291. { Tab control }
  8292.  
  8293. function TabCtrl_HitTest(hwndTC: HWND; pinfo: PTCHitTestInfo): Integer;
  8294. begin
  8295.   Result := SendMessage(hwndTC, TCM_HITTEST, 0, LPARAM(pinfo));
  8296. end;
  8297.  
  8298. function TabCtrl_SetItemExtra(hwndTC: HWND; cb: Integer): BOOL;
  8299. begin
  8300.   Result := BOOL(SendMessage(hwndTC, TCM_SETITEMEXTRA, cb, 0));
  8301. end;
  8302.  
  8303. function TabCtrl_AdjustRect(hwnd: HWND; bLarger: BOOL; prc: PRect): Integer;
  8304. begin
  8305.   Result := SendMessage(hwnd, TCM_ADJUSTRECT, WPARAM(bLarger), LPARAM(prc));
  8306. end;
  8307.  
  8308. function TabCtrl_SetItemSize(hwnd: HWND; x, y: Integer): DWORD;
  8309. begin
  8310.   Result := SendMessage(hwnd, TCM_SETITEMSIZE, 0, MAKELPARAM(x, y));
  8311. end;
  8312.  
  8313. procedure TabCtrl_RemoveImage(hwnd: HWND; i: Integer);
  8314. begin
  8315.   SendMessage(hwnd, TCM_REMOVEIMAGE, i, 0);
  8316. end;
  8317.  
  8318. procedure TabCtrl_SetPadding(hwnd: HWND; cx, cy: Integer);
  8319. begin
  8320.   SendMessage(hwnd, TCM_SETPADDING, 0, MAKELPARAM(cx, cy));
  8321. end;
  8322.  
  8323. function TabCtrl_GetRowCount(hwnd: HWND): Integer;
  8324. begin
  8325.   Result := SendMessage(hwnd, TCM_GETROWCOUNT, 0, 0);
  8326. end;
  8327.  
  8328. function TabCtrl_GetToolTips(wnd: HWND): HWND;
  8329. begin
  8330.   Result := HWND(SendMessage(wnd, TCM_GETTOOLTIPS, 0, 0));
  8331. end;
  8332.  
  8333. procedure TabCtrl_SetToolTips(hwnd: HWND; hwndTT: HWND);
  8334. begin
  8335.   SendMessage(hwnd, TCM_SETTOOLTIPS, WPARAM(hwndTT), 0);
  8336. end;
  8337.  
  8338. function TabCtrl_GetCurFocus(hwnd: HWND): Integer;
  8339. begin
  8340.   Result := SendMessage(hwnd, TCM_GETCURFOCUS, 0, 0);
  8341. end;
  8342.  
  8343. procedure TabCtrl_SetCurFocus(hwnd: HWND; i: Integer);
  8344. begin
  8345.   SendMessage(hwnd,TCM_SETCURFOCUS, i, 0);
  8346. end;
  8347.  
  8348. function TabCtrl_SetMinTabWidth(hwnd: HWND; x: Integer): Integer;
  8349. begin
  8350.   Result := SendMessage(hwnd, TCM_SETMINTABWIDTH, 0, x);
  8351. end;
  8352.  
  8353. procedure TabCtrl_DeselectAll(hwnd: HWND; fExcludeFocus: BOOL);
  8354. begin
  8355.   SendMessage(hwnd, TCM_DESELECTALL, WPARAM(fExcludeFocus), 0)
  8356. end;
  8357.  
  8358. function TabCtrl_HighlightItem(hwnd: HWND; i: Integer; fHighlight: WordBool): BOOL;
  8359. begin
  8360.   Result :=  BOOL(SendMessage(hwnd, TCM_HIGHLIGHTITEM, i, MAKELONG(Word(fHighlight), 0)));
  8361. end;
  8362.  
  8363. function TabCtrl_SetExtendedStyle(hwnd: HWND; dw: DWORD): DWORD;
  8364. begin
  8365.   Result := SendMessage(hwnd, TCM_SETEXTENDEDSTYLE, 0, dw);
  8366. end;
  8367.  
  8368. function TabCtrl_GetExtendedStyle(hwnd: HWND): DWORD;
  8369. begin
  8370.   Result := SendMessage(hwnd, TCM_GETEXTENDEDSTYLE, 0, 0);
  8371. end;
  8372.  
  8373. function TabCtrl_SetUnicodeFormat(hwnd: HWND; fUnicode: BOOL): BOOL;
  8374. begin
  8375.   Result := BOOL(SendMessage(hwnd, TCM_SETUNICODEFORMAT, WPARAM(fUnicode), 0));
  8376. end;
  8377.  
  8378. function TabCtrl_GetUnicodeFormat(hwnd: HWND): BOOL;
  8379. begin
  8380.   Result := BOOL(SendMessage(hwnd, TCM_GETUNICODEFORMAT, 0, 0));
  8381. end;
  8382.  
  8383. function TabCtrl_GetItemRect(hwnd: HWND; i: Integer; var prc: TRect): BOOL;
  8384. begin
  8385.   Result := BOOL(SendMessage(hwnd, TCM_GETITEMRECT, i, LPARAM(@prc)));
  8386. end;
  8387.  
  8388. { Animate control }
  8389.  
  8390. function Animate_Create(hwndP: HWND; id: HMENU; dwStyle: DWORD; hInstance: HINST): HWND;
  8391. begin
  8392.   Result := CreateWindow(ANIMATE_CLASS, nil, dwStyle, 0, 0, 0, 0, hwndP, id,
  8393.     hInstance, nil);
  8394. end;
  8395.  
  8396. function Animate_Open(hwnd: HWND; szName: PChar): BOOL;
  8397. begin
  8398.   Result := BOOL(SendMessage(hwnd, ACM_OPEN, 0, LPARAM(szName)));
  8399. end;
  8400.  
  8401. function Animate_OpenEx(hwnd: HWND; hInst: HINST; szName: PChar): BOOL;
  8402. begin
  8403.   Result := BOOL(SendMessage(hwnd, ACM_OPEN, WPARAM(hInst), LPARAM(szName)));
  8404. end;
  8405.  
  8406. function Animate_Play(hwnd: HWND; from, _to: Word; rep: UINT): BOOL;
  8407. begin
  8408.   Result := BOOL(SendMessage(hwnd, ACM_PLAY, rep, MAKELONG(from, _to)));
  8409. end;
  8410.  
  8411. function Animate_Stop(hwnd: HWND): BOOL;
  8412. begin
  8413.   Result := BOOL(SendMessage(hwnd, ACM_STOP, 0, 0));
  8414. end;
  8415.  
  8416. function Animate_Close(hwnd: HWND): BOOL;
  8417. begin
  8418.   Result := Animate_Open(hwnd, nil);
  8419. end;
  8420.  
  8421. function Animate_Seek(hwnd: HWND; frame: Word): BOOL;
  8422. begin
  8423.   Result := Animate_Play(hwnd, frame, frame, 1);
  8424. end;
  8425.  
  8426. { MonthCal control }
  8427.  
  8428. function MonthCal_GetCurSel(hmc: HWND; var pst: TSystemTime): BOOL;
  8429. begin
  8430.   Result := BOOL(SendMessage(hmc, MCM_GETCURSEL, 0, Longint(@pst)));
  8431. end;
  8432.  
  8433. function MonthCal_SetCurSel(hmc: HWND; const pst: TSystemTime): BOOL;
  8434. begin
  8435.   Result := BOOL(SendMessage(hmc, MCM_SETCURSEL, 0, Longint(@pst)));
  8436. end;
  8437.  
  8438. function MonthCal_GetMaxSelCount(hmc: HWND): DWORD;
  8439. begin
  8440.   Result := SendMessage(hmc, MCM_GETMAXSELCOUNT, 0, 0);
  8441. end;
  8442.  
  8443. function MonthCal_SetMaxSelCount(hmc: HWND; n: UINT): BOOL;
  8444. begin
  8445.   Result := BOOL(SendMessage(hmc, MCM_SETMAXSELCOUNT, n, 0));
  8446. end;
  8447.  
  8448. function MonthCal_GetSelRange(hmc: HWND; rgst: PSystemTime): BOOL;
  8449. begin
  8450.   Result := BOOL(SendMessage(hmc, MCM_GETSELRANGE, 0, Longint(rgst)));
  8451. end;
  8452.  
  8453. function MonthCal_SetSelRange(hmc: HWND; rgst: PSystemTime): BOOL;
  8454. begin
  8455.   Result := BOOL(SendMessage(hmc, MCM_SETSELRANGE, 0, Longint(rgst)));
  8456. end;
  8457.  
  8458. function MonthCal_GetMonthRange(hmc: HWND; gmr: DWORD; rgst: PSystemTime): DWORD;
  8459. begin
  8460.   Result := SendMessage(hmc, MCM_GETMONTHRANGE, gmr, Longint(rgst));
  8461. end;
  8462.  
  8463. function MonthCal_SetDayState(hmc: HWND; cbds: Integer; const rgds: TNMDayState): BOOL;
  8464. begin
  8465.   Result := BOOL(SendMessage(hmc, MCM_SETDAYSTATE, cbds, Longint(@rgds)));
  8466. end;
  8467.  
  8468. function MonthCal_GetMinReqRect(hmc: HWND; var prc: TRect): BOOL;
  8469. begin
  8470.   Result := BOOL(SendMessage(hmc, MCM_GETMINREQRECT, 0, Longint(@prc)));
  8471. end;
  8472.  
  8473. function MonthCal_SetToday(hmc: HWND; const pst: TSystemTime): BOOL;
  8474. begin
  8475.   Result := BOOL(SendMessage(hmc, MCM_SETTODAY, 0, Longint(@pst)));
  8476. end;
  8477.  
  8478. function MonthCal_GetToday(hmc: HWND; var pst: TSystemTime): BOOL;
  8479. begin
  8480.   Result := BOOL(SendMessage(hmc, MCM_GETTODAY, 0, Longint(@pst)));
  8481. end;
  8482.  
  8483. function MonthCal_HitTest(hmc: HWND; var info: TMCHitTestInfo): DWORD;
  8484. begin
  8485.   Result := SendMessage(hmc, MCM_HITTEST, 0, Longint(@info));
  8486. end;
  8487.  
  8488. function MonthCal_SetColor(hmc: HWND; iColor: Integer; clr: TColorRef): TColorRef;
  8489. begin
  8490.   Result := TColorRef(SendMessage(hmc, MCM_SETCOLOR, iColor, clr));
  8491. end;
  8492.  
  8493. function MonthCal_GetColor(hmc: HWND; iColor: Integer): TColorRef;
  8494. begin
  8495.   Result := TColorRef(SendMessage(hmc, MCM_SETCOLOR, iColor, 0));
  8496. end;
  8497.  
  8498. function MonthCal_SetFirstDayOfWeek(hmc: HWND; iDay: Integer): Integer;
  8499. begin
  8500.   Result := SendMessage(hmc, MCM_SETFIRSTDAYOFWEEK, 0, iDay);
  8501. end;
  8502.  
  8503. function MonthCal_GetFirstDayOfWeek(hmc: HWND): Integer;
  8504. begin
  8505.   Result := SendMessage(hmc, MCM_GETFIRSTDAYOFWEEK, 0, 0);
  8506. end;
  8507.  
  8508. function MonthCal_GetRange(hmc: HWND; rgst: PSystemTime): DWORD;
  8509. begin
  8510.   Result := SendMessage(hmc, MCM_GETRANGE, 0, Longint(rgst));
  8511. end;
  8512.  
  8513. function Monthcal_SetRange(hmc: HWND; gdtr: DWORD; rgst: PSystemTime): BOOL;
  8514. begin
  8515.   Result := BOOL(SendMessage(hmc, MCM_SETRANGE, gdtr, Longint(rgst)));
  8516. end;
  8517.  
  8518. function MonthCal_GetMonthDelta(hmc: HWND): Integer;
  8519. begin
  8520.   Result := SendMessage(hmc, MCM_GETMONTHDELTA, 0, 0);
  8521. end;
  8522.  
  8523. function MonthCal_SetMonthDelta(hmc: HWND; n: Integer): Integer;
  8524. begin
  8525.   Result := SendMessage(hmc, MCM_SETMONTHDELTA, n, 0);
  8526. end;
  8527.  
  8528. function MonthCal_GetMaxTodayWidth(hmc: HWND): DWORD;
  8529. begin
  8530.   Result := SendMessage(hmc, MCM_GETMAXTODAYWIDTH, 0, 0);
  8531. end;
  8532.  
  8533. function MonthCal_SetUnicodeFormat(hwnd: HWND; fUnicode: BOOL): BOOL;
  8534. begin
  8535.   Result := BOOL(SendMessage(hwnd, MCM_SETUNICODEFORMAT, WPARAM(fUnicode), 0));
  8536. end;
  8537.  
  8538. function MonthCal_GetUnicodeFormat(hwnd: HWND): BOOL;
  8539. begin
  8540.   Result := BOOL(SendMessage(hwnd, MCM_GETUNICODEFORMAT, 0, 0));
  8541. end;
  8542.  
  8543. { Date/Time Picker }
  8544.  
  8545. function DateTime_GetSystemTime(hdp: HWND; var pst: TSystemTime): DWORD;
  8546. begin
  8547.   Result := SendMessage(hdp, DTM_GETSYSTEMTIME, 0, Longint(@pst));
  8548. end;
  8549.  
  8550. function DateTime_SetSystemTime(hdp: HWND; gd: DWORD; const pst: TSystemTime): BOOL;
  8551. begin
  8552.   Result := BOOL(SendMessage(hdp, DTM_SETSYSTEMTIME, gd, Longint(@pst)));
  8553. end;
  8554.  
  8555. function DateTime_GetRange(hdp: HWND; rgst: PSystemTime): DWORD;
  8556. begin
  8557.   Result := SendMessage(hdp, DTM_GETRANGE, 0, Longint(rgst));
  8558. end;
  8559.  
  8560. function DateTime_SetRange(hdp: HWND; gdtr: DWORD; rgst: PSystemTime): BOOL;
  8561. begin
  8562.   Result := BOOL(SendMessage(hdp, DTM_SETRANGE, gdtr, Longint(rgst)));
  8563. end;
  8564.  
  8565. function DateTime_SetFormatA(hdp: HWND; sz: PAnsiChar): BOOL;
  8566. begin
  8567.   Result := BOOL(SendMessage(hdp, DTM_SETFORMATA, 0, Longint(sz)));
  8568. end;
  8569. function DateTime_SetFormatW(hdp: HWND; sz: PWideChar): BOOL;
  8570. begin
  8571.   Result := BOOL(SendMessage(hdp, DTM_SETFORMATW, 0, Longint(sz)));
  8572. end;
  8573. function DateTime_SetFormat(hdp: HWND; sz: PChar): BOOL;
  8574. begin
  8575.   Result := BOOL(SendMessage(hdp, DTM_SETFORMAT, 0, Longint(sz)));
  8576. end;
  8577.  
  8578. function DateTime_SetMonthCalColor(hdp: HWND; iColor: DWORD; clr: TColorRef): TColorRef;
  8579. begin
  8580.   Result := TColorRef(SendMessage(hdp, DTM_SETMCCOLOR, iColor, clr));
  8581. end;
  8582.  
  8583. function DateTime_GetMonthCalColor(hdp: HWND; iColor: DWORD): TColorRef;
  8584. begin
  8585.   Result := SendMessage(hdp, DTM_GETMCCOLOR, iColor, 0);
  8586. end;
  8587.  
  8588. function DateTime_GetMonthCal(hdp: HWND): HWND;
  8589. begin
  8590.   Result := SendMessage(hdp, DTM_GETMONTHCAL, 0, 0);
  8591. end;
  8592.  
  8593. procedure DateTime_SetMonthCalFont(hdp: HWND; hfont: HFONT; fRedraw: BOOL);
  8594. begin
  8595.   SendMessage(hdp, DTM_SETMCFONT, WPARAM(hfont), LPARAM(fRedraw));
  8596. end;
  8597.  
  8598. function DateTime_GetMonthCalFont(hdp: HWND): HFONT;
  8599. begin
  8600.   Result := HFONT(SendMessage(hdp, DTM_GETMCFONT, 0, 0));
  8601. end;
  8602.  
  8603. { IP Address edit control }
  8604.  
  8605. function MAKEIPRANGE(low, high: Byte): LPARAM;
  8606. begin
  8607.   Result := high;
  8608.   Result := (Result shl 8) + low;
  8609. end;
  8610.  
  8611. function MAKEIPADDRESS(b1, b2, b3, b4: DWORD): LPARAM;
  8612. begin
  8613.   Result := (b1 shl 24) + (b2 shl 16) + (b3 shl 8) + b4;
  8614. end;
  8615.  
  8616. function FIRST_IPADDRESS(x: DWORD): DWORD;
  8617. begin
  8618.   Result := (x shr 24) and $FF;
  8619. end;
  8620.  
  8621. function SECOND_IPADDRESS(x: DWORD): DWORD;
  8622. begin
  8623.   Result := (x shr 16) and $FF;
  8624. end;
  8625.  
  8626. function THIRD_IPADDRESS(x: DWORD): DWORD;
  8627. begin
  8628.   Result := (x shr 8) and $FF;
  8629. end;
  8630.  
  8631. function FOURTH_IPADDRESS(x: DWORD): DWORD;
  8632. begin
  8633.   Result := x and $FF;
  8634. end;
  8635.  
  8636. { Pager control }
  8637.  
  8638. procedure Pager_SetChild(hwnd: HWND; hwndChild: HWND);
  8639. begin
  8640.   SendMessage(hwnd, PGM_SETCHILD, 0, LPARAM(hwndChild));
  8641. end;
  8642.  
  8643. procedure Pager_RecalcSize(hwnd: HWND);
  8644. begin
  8645.   SendMessage(hwnd, PGM_RECALCSIZE, 0, 0);
  8646. end;
  8647.  
  8648. procedure Pager_ForwardMouse(hwnd: HWND; bForward: BOOL);
  8649. begin
  8650.   SendMessage(hwnd, PGM_FORWARDMOUSE, WPARAM(bForward), 0);
  8651. end;
  8652.  
  8653. function Pager_SetBkColor(hwnd: HWND; clr: COLORREF): COLORREF;
  8654. begin
  8655.   Result := COLORREF(SendMessage(hwnd, PGM_SETBKCOLOR, 0, LPARAM(clr)));
  8656. end;
  8657.  
  8658. function Pager_GetBkColor(hwnd: HWND): COLORREF;
  8659. begin
  8660.   Result := COLORREF(SendMessage(hwnd, PGM_GETBKCOLOR, 0, 0));
  8661. end;
  8662.  
  8663. function Pager_SetBorder(hwnd: HWND; iBorder: Integer): Integer;
  8664. begin
  8665.   Result := SendMessage(hwnd, PGM_SETBORDER, 0, iBorder);
  8666. end;
  8667.  
  8668. function Pager_GetBorder(hwnd: HWND): Integer;
  8669. begin
  8670.   Result := SendMessage(hwnd, PGM_GETBORDER, 0, 0);
  8671. end;
  8672.  
  8673. function Pager_SetPos(hwnd: HWND; iPos: Integer): Integer;
  8674. begin
  8675.   Result := SendMessage(hwnd, PGM_SETPOS, 0, iPos);
  8676. end;
  8677.  
  8678. function Pager_GetPos(hwnd: HWND): Integer;
  8679. begin
  8680.   Result := SendMessage(hwnd, PGM_GETPOS, 0, 0);
  8681. end;
  8682.  
  8683. function Pager_SetButtonSize(hwnd: HWND; iSize: Integer): Integer;
  8684. begin
  8685.   Result := SendMessage(hwnd, PGM_SETBUTTONSIZE, 0, iSize);
  8686. end;
  8687.  
  8688. function Pager_GetButtonSize(hwnd: HWND): Integer;
  8689. begin
  8690.   Result := SendMessage(hwnd, PGM_GETBUTTONSIZE, 0,0);
  8691. end;
  8692.  
  8693. function Pager_GetButtonState(hwnd: HWND; iButton: Integer): DWORD;
  8694. begin
  8695.   Result := SendMessage(hwnd, PGM_GETBUTTONSTATE, 0, iButton);
  8696. end;
  8697.  
  8698. procedure Pager_GetDropTarget(hwnd: HWND; ppdt: Pointer{!!});
  8699. begin
  8700.   SendMessage(hwnd, PGM_GETDROPTARGET, 0, LPARAM(ppdt));
  8701. end;
  8702.  
  8703. { TrackMouseEvent }
  8704.  
  8705. function _TrackMouseEvent;              external cctrl name '_TrackMouseEvent';
  8706.  
  8707. { Flat Scrollbar APIs }
  8708.  
  8709. function FlatSB_EnableScrollBar;        external cctrl name 'FlatSB_EnableScrollBar';
  8710. function FlatSB_GetScrollInfo;          external cctrl name 'FlatSB_GetScrollInfo';
  8711. function FlatSB_GetScrollPos;           external cctrl name 'FlatSB_GetScrollPos';
  8712. function FlatSB_GetScrollProp;          external cctrl name 'FlatSB_GetScrollProp';
  8713. function FlatSB_GetScrollRange;         external cctrl name 'FlatSB_GetScrollRange';
  8714. function FlatSB_SetScrollInfo;          external cctrl name 'FlatSB_SetScrollInfo';
  8715. function FlatSB_SetScrollPos;           external cctrl name 'FlatSB_SetScrollPos';
  8716. function FlatSB_SetScrollProp;          external cctrl name 'FlatSB_SetScrollProp';
  8717. function FlatSB_SetScrollRange;         external cctrl name 'FlatSB_SetScrollRange';
  8718. function FlatSB_ShowScrollBar;          external cctrl name 'FlatSB_ShowScrollBar';
  8719. function InitializeFlatSB;              external cctrl name 'InitializeFlatSB';
  8720. procedure UninitializeFlatSB;           external cctrl name 'UninitializeFlatSB';
  8721.  
  8722. end.
  8723.