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