diff options
Diffstat (limited to 'plugins/Utils.pas')
-rw-r--r-- | plugins/Utils.pas/commctrl.pp | 13751 |
1 files changed, 13751 insertions, 0 deletions
diff --git a/plugins/Utils.pas/commctrl.pp b/plugins/Utils.pas/commctrl.pp new file mode 100644 index 0000000000..89a3a9bc4c --- /dev/null +++ b/plugins/Utils.pas/commctrl.pp @@ -0,0 +1,13751 @@ +{ + This file is part of the Free Pascal run time library. + Copyright (c) 1999-2004 by Marco van de Voort + member of the Free Pascal development team. + + See the file COPYING.FPC, included in this distribution, + for details about the copyright. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + + Original copyright statement follows. + + ************************************************************************** + * * + * commctrl.h - - Interface for the Windows Common Controls * + * * + * Version 1.2 * + * * + * Copyright (c) Microsoft Corporation. All rights reserved. * + * * + ************************************************************************** + + Note: This is an initial translation, and probably _full_ of bugs, this + is because my conversion tool was flawed, and a lot of postediting + was needed, which is bound to introduce bugs and inconsequencies + + This is an huge unit, and its maintenance and compability is not + a top-priority. + I prefer patches as bugfix over bugreports, and + preferably patches with lots of fixes at once. + + If you can't make a patch, at least research the bug thoroughly, + and provide as much info as possible (which windows version, + the C prototype from the sdk, etc) + + Help the FPC team, and try to do as much as possible yourself. +} + + +Unit CommCtrl; +Interface + +{$Mode ObjFPC} +Uses Windows,CTypes,ActiveX; + +// -------------------- + +// -------------------- +CONST CommCtrlDLL = 'comctl32.dll'; + +// Some reasonal defaults. +// for XP only set NT to $%0501 and IE to $0600 +// +// The NT conditional is only used for XP/no XP. + +{$DEFINE WIN32_IE=$0500} +{$DEFINE IE3PLUS} +{$DEFINE IE4PLUS} +{$define IE5plus} +{$define WIN32XP} +{$define win32vista} // till WC_STATICA +{$define ie501plus} +{$ifdef win32} + {$define _win32} +{$endif win32} +{$define ie6plus} +{$define ntddi_vista} +{$define NTDDI_WIN7} + +{$ifdef win64} + {$define _win32} +{$endif win64} + +{$DEFINE WIN32_WINNT=0} // NO XP +{$DEFINE __IStream_INTERFACE_DEFINED__} // lpstream defined in activex afaik. + +// Sanity check in source. Not translated: +//if (WIN32_IE < $0400) && defined(WIN32_WINNT) && (WIN32_WINNT >= $0500)} +// #error _WIN32_IE setting conflicts with _WIN32_WINNT setting + +// +// Users of this header may define any number of these constants to avoid +// the definitions of each functional group. +// +// NOTOOLBAR Customizable bitmap-button toolbar control. +// NOUPDOWN Up and Down arrow increment/decrement control. +// NOSTATUSBAR Status bar control. +// NOMENUHELP APIs to help manage menus, especially with a status bar. +// NOTRACKBAR Customizable column-width tracking control. +// NODRAGLIST APIs to make a listbox source and sink drag&drop actions. +// NOPROGRESS Progress gas gauge. +// NOHOTKEY HotKey control +// NOHEADER Header bar control. +// NOIMAGEAPIS ImageList apis. +// NOLISTVIEW ListView control. +// NOTREEVIEW TreeView control. +// NOTABCONTROL Tab control. +// NOANIMATE Animate control. +// NOBUTTON Button control. +// NOSTATIC Static control. +// NOEDIT Edit control. +// NOLISTBOX Listbox control. +// NOCOMBOBOX Combobox control. +// NOSCROLLBAR Scrollbar control. +// +//============================================================================= +// Moved items due to forward defining limitations + +Const + MAX_LINKID_TEXT = 48; + L_MAX_URL_LENGTH = (2048 + 32 + length('://')); +Type + tagLITEM = Record + mask : UINT; + iLink : cint; + state : UINT; + stateMask : UINT; + szID : Array [0..MAX_LINKID_TEXT-1] OF WCHAR; + szUrl : Array [0..L_MAX_URL_LENGTH-1] OF WCHAR; + END; + LITEM = tagLITEM; + PLITEM = ^tagLITEM; + TLITEM = tagLITEM; +// PLITEM = ^tagLITEM; + + + +// include <prsht.h> + +Procedure InitCommonControls; stdcall; external commctrldll name 'InitCommonControls'; + +{$ifdef ie3plus} +TYPE + + tagINITCOMMONCONTROLSEX = Record + dwSize : DWORD; // size of this structure + dwICC : DWORD; // flags indicating which classes to be initialized + END; + _INITCOMMONCONTROLSEX = tagINITCOMMONCONTROLSEX; + LPINITCOMMONCONTROLSEX = ^tagINITCOMMONCONTROLSEX; + TINITCOMMONCONTROLSEX = tagINITCOMMONCONTROLSEX; + PINITCOMMONCONTROLSEX = ^tagINITCOMMONCONTROLSEX; + +CONST + ICC_LISTVIEW_CLASSES = $00000001; // listview, header + ICC_TREEVIEW_CLASSES = $00000002; // treeview, tooltips + ICC_BAR_CLASSES = $00000004; // toolbar, statusbar, trackbar, tooltips + ICC_TAB_CLASSES = $00000008; // tab, tooltips + ICC_UPDOWN_CLASS = $00000010; // updown + ICC_PROGRESS_CLASS = $00000020; // progress + ICC_HOTKEY_CLASS = $00000040; // hotkey + ICC_ANIMATE_CLASS = $00000080; // animate + ICC_WIN95_CLASSES = $000000FF; + ICC_DATE_CLASSES = $00000100; // month picker, date picker, time picker, updown + ICC_USEREX_CLASSES = $00000200; // comboex + ICC_COOL_CLASSES = $00000400; // rebar (coolbar) control +{$ifdef ie4plus} + ICC_INTERNET_CLASSES = $00000800; + ICC_PAGESCROLLER_CLASS = $00001000; // page scroller + ICC_NATIVEFNTCTL_CLASS = $00002000; // native font control +{$ENDIF} +{$ifdef WIN32XP} + ICC_STANDARD_CLASSES = $00004000; + ICC_LINK_CLASS = $00008000; +{$ENDIF} + +function InitCommonControlsEx(var rec : TINITCOMMONCONTROLSEX):BOOL; stdcall; external commctrldll name 'InitCommonControlsEx'; +{$ENDIF} // _WIN32_IE >= 0x0300 + +CONST + ODT_HEADER = 100; + ODT_TAB = 101; + ODT_LISTVIEW = 102; + +//====== WM_NOTIFY codes (NMHDR.code values) ================================== + + +CONST + NM_FIRST = (0- 0); // generic to all controls + NM_LAST = (0- 99); + + LVN_FIRST = (0-100); // listview + LVN_LAST = (0-199); + +// Property sheet reserved (0U-200U) - (0U-299U) - see prsht.h + + HDN_FIRST = (0-300); // header + HDN_LAST = (0-399); + + TVN_FIRST = (0-400); // treeview + TVN_LAST = (0-499); + + TTN_FIRST = (0-520); // tooltips + TTN_LAST = (0-549); + + TCN_FIRST = (0-550); // tab control + TCN_LAST = (0-580); + +// Shell reserved (0U-580U) - (0U-589U) + + CDN_FIRST = (0-601); // common dialog (new) + CDN_LAST = (0-699); + + TBN_FIRST = (0-700); // toolbar + TBN_LAST = (0-720); + + UDN_FIRST = (0-721); // updown + UDN_LAST = (0-740); +{$ifdef ie3plus} + MCN_FIRST = (0-750); // monthcal + MCN_LAST = (0-759); + + DTN_FIRST = (0-760); // datetimepick + DTN_LAST = (0-799); + + CBEN_FIRST = (0-800); // combo box ex + CBEN_LAST = (0-830); + + RBN_FIRST = (0-831); // rebar + RBN_LAST = (0-859); +{$ENDIF} + +{$ifdef ie4plus} + IPN_FIRST = (0-860); // internet address + IPN_LAST = (0-879); // internet address + + SBN_FIRST = (0-880); // status bar + SBN_LAST = (0-899); + + PGN_FIRST = (0-900); // Pager Control + PGN_LAST = (0-950); + +{$ENDIF} + +{$ifdef ie5plus} +{$IFNDEF WMN_FIRST} + WMN_FIRST = (0-1000); + WMN_LAST = (0-1200); +{$ENDIF} +{$ENDIF} + +{$ifdef Win32XP} + BCN_FIRST = (0-1250); + BCN_LAST = (0-1350); +{$ENDIF} + +{$ifdef win32vista} + TRBN_FIRST = cardinal(0-1501); // trackbar + TRBN_LAST = cardinal(0-1519); +{$endif} + MSGF_COMMCTRL_BEGINDRAG = $4200; + MSGF_COMMCTRL_SIZEHEADER = $4201; + MSGF_COMMCTRL_DRAGSELECT = $4202; + MSGF_COMMCTRL_TOOLBARCUST = $4203; + +//====== Ranges for control message IDs ======================================= + + LVM_FIRST = $1000; // ListView messages + TV_FIRST = $1100; // TreeView messages + HDM_FIRST = $1200; // Header messages + TCM_FIRST = $1300; // Tab control messages + +{$ifdef ie4plus} + PGM_FIRST = $1400; // Pager control messages +{$ifdef win32xp}// actually 0x501=2003 or some sp? + ECM_FIRST = $1500; // Edit control messages + BCM_FIRST = $1600; // Button control messages + CBM_FIRST = $1700; // Combobox control messages +{$ENDIF} + CCM_FIRST = $2000; // Common control shared messages + CCM_LAST = (CCM_FIRST + $200); + + + CCM_SETBKCOLOR = (CCM_FIRST + 1); // lParam is bkColor + +TYPE + tagCOLORSCHEME = Record + dwSize : DWORD; + clrBtnHighlight : COLORREF; // highlight color + clrBtnShadow : COLORREF; // shadow color + END; + COLORSCHEME = tagCOLORSCHEME; + LPCOLORSCHEME = ^tagCOLORSCHEME; + TCOLORSCHEME = tagCOLORSCHEME; + PCOLORSCHEME = ^tagCOLORSCHEME; + +CONST + CCM_SETCOLORSCHEME = (CCM_FIRST + 2); // lParam is color scheme + CCM_GETCOLORSCHEME = (CCM_FIRST + 3); // fills in COLORSCHEME pointed to by lParam + CCM_GETDROPTARGET = (CCM_FIRST + 4); + CCM_SETUNICODEFORMAT = (CCM_FIRST + 5); + CCM_GETUNICODEFORMAT = (CCM_FIRST + 6); + +{$ifdef ie5plus} +{$ifdef win32xp} + COMCTL32_VERSION = 6; +{$ELSE} + COMCTL32_VERSION = 5; +{$ENDIF} + + CCM_SETVERSION = (CCM_FIRST + $7); + CCM_GETVERSION = (CCM_FIRST + $8); + CCM_SETNOTIFYWINDOW = (CCM_FIRST + $9); // wParam == hwndParent. +{$ifdef win32xp} + CCM_SETWINDOWTHEME = (CCM_FIRST + $b); + CCM_DPISCALE = (CCM_FIRST + $c); // wParam == Awareness +{$ENDIF} +{$ENDIF} // (_WIN32_IE >= 0x0500) + +{$ENDIF} // (_WIN32_IE >= 0x0400) + +{$ifdef ie4plus} +// for tooltips + INFOTIPSIZE = 1024; +{$ENDIF} + +//====== WM_NOTIFY Macros ===================================================== + +// Macro 8 +Procedure HANDLE_WM_NOTIFY( hwnd : hwnd; wParam : cint;var _lParam : NMHDR ;fn :Pointer); + +// Macro 9 +Function FORWARD_WM_NOTIFY( hwnd : hwnd; idFrom : cint;var pnmhdr : NMHDR ; fn :pointer ):LRESULT; + +//====== Generic WM_NOTIFY notification codes ================================= + + +CONST + NM_OUTOFMEMORY = (NM_FIRST-1); + NM_CLICK = (NM_FIRST-2); // uses NMCLICK struct + NM_DBLCLK = (NM_FIRST-3); + NM_RETURN = (NM_FIRST-4); + NM_RCLICK = (NM_FIRST-5); // uses NMCLICK struct + NM_RDBLCLK = (NM_FIRST-6); + NM_SETFOCUS = (NM_FIRST-7); + NM_KILLFOCUS = (NM_FIRST-8); +{$ifdef ie3plus} + NM_CUSTOMDRAW = (NM_FIRST-12); + NM_HOVER = (NM_FIRST-13); +{$ENDIF} +{$ifdef ie4plus} + NM_NCHITTEST = (NM_FIRST-14); // uses NMMOUSE struct + NM_KEYDOWN = (NM_FIRST-15); // uses NMKEY struct + NM_RELEASEDCAPTURE = (NM_FIRST-16); + NM_SETCURSOR = (NM_FIRST-17); // uses NMMOUSE struct + NM_CHAR = (NM_FIRST-18); // uses NMCHAR struct +{$ENDIF} +{$ifdef ie401plus} + NM_TOOLTIPSCREATED = (NM_FIRST-19); // notify of when the tooltips window is create +{$ENDIF} +{$ifdef ie5plus} + NM_LDOWN = (NM_FIRST-20); + NM_RDOWN = (NM_FIRST-21); + NM_THEMECHANGED = (NM_FIRST-22); +{$ENDIF} +{$ifdef win32vista} + NM_FONTCHANGED = (NM_FIRST-23); + NM_CUSTOMTEXT = (NM_FIRST-24); // uses NMCUSTOMTEXT struct + NM_TVSTATEIMAGECHANGING = (NM_FIRST-24); // uses NMTVSTATEIMAGECHANGING struct, defined after HTREEITEM +{$endif} + +{$IFNDEF CCSIZEOF_STRUCT} + +// Macro 10 +// #define CCSIZEOF_STRUCT(structname, member) (((int)((LPBYTE)(&((structname*)0)->member) - ((LPBYTE)((structname*)0)))) + sizeof(((structname*)0)->member)) +{$ENDIF} + +//====== Generic WM_NOTIFY notification structures ============================ +{$ifdef ie401plus} + +TYPE + + tagNMTOOLTIPSCREATED = Record + hdr : NMHDR; + hwndToolTips : HWND; + END; + NMTOOLTIPSCREATED = tagNMTOOLTIPSCREATED; + LPNMTOOLTIPSCREATED = ^tagNMTOOLTIPSCREATED; + TNMTOOLTIPSCREATED = tagNMTOOLTIPSCREATED; + PNMTOOLTIPSCREATED = ^tagNMTOOLTIPSCREATED; + +{$ENDIF} + +{$ifdef ie4plus} +Type + tagNMMOUSE = Record + hdr : NMHDR; + dwItemSpec : DWORD_PTR; + dwItemData : DWORD_PTR; + pt : POINT; + dwHitInfo : LPARAM; // any specifics about where on the item or control the mouse is + END; + NMMOUSE = tagNMMOUSE; + LPNMMOUSE = ^tagNMMOUSE; + TNMMOUSE = tagNMMOUSE; + PNMMOUSE = ^tagNMMOUSE; + + + NMCLICK = NMMOUSE; + LPNMCLICK = LPNMMOUSE; + +// Generic structure to request an object of a specific type. + + tagNMOBJECTNOTIFY = Record + hdr : NMHDR; + iItem : cint; +{$IFDEF __IID_DEFINED__} + piid : PIID; +{$ELSE} + piid : Pointer; +{$ENDIF} + pObject : Pointer; + hResult : HRESULT; + dwFlags : DWORD; // control specific flags (hints as to where in iItem it hit) + END; + NMOBJECTNOTIFY = tagNMOBJECTNOTIFY; + LPNMOBJECTNOTIFY = ^tagNMOBJECTNOTIFY; + TNMOBJECTNOTIFY = tagNMOBJECTNOTIFY; + PNMOBJECTNOTIFY = ^tagNMOBJECTNOTIFY; + + +// Generic structure for a key + + tagNMKEY = Record + hdr : NMHDR; + nVKey : UINT; + uFlags : UINT; + END; + NMKEY = tagNMKEY; + LPNMKEY = ^tagNMKEY; + TNMKEY = tagNMKEY; + PNMKEY = ^tagNMKEY; + + +// Generic structure for a character + + tagNMCHAR = Record + hdr : NMHDR; + ch : UINT; + dwItemPrev : DWORD; // Item previously selected + dwItemNext : DWORD; // Item to be selected + END; + NMCHAR = tagNMCHAR; + LPNMCHAR = ^tagNMCHAR; + TNMCHAR = tagNMCHAR; + PNMCHAR = ^tagNMCHAR; + +{$ifdef win32vista} + tagNMCUSTOMTEXT = Record + hdr : NMHDR; + hDC : HDC; + lpString : LPCWSTR; + nCount : cint; + lpRect : LPRECT; + uFormat : UINT; + fLink : bool; + end; + + NMCUSTOMTEXT = tagNMCUSTOMTEXT; + LPNMCUSTOMTEXT = ^tagNMCUSTOMTEXT; + TNMCUSTOMTEXT = tagNMCUSTOMTEXT; + PNMCUSTOMTEXT = LPNMCUSTOMTEXT; +{$endif} +{$ENDIF} // _WIN32_IE >= 0x0400 + + +{$ifdef ie3plus} +//==================== CUSTOM DRAW ========================================== + +// custom draw return flags +// values under 0x00010000 are reserved for global custom draw values. +// above that are for specific controls +CONST + CDRF_DODEFAULT = $00000000; + CDRF_NEWFONT = $00000002; + CDRF_SKIPDEFAULT = $00000004; + + + CDRF_NOTIFYPOSTPAINT = $00000010; + CDRF_NOTIFYITEMDRAW = $00000020; +{$ifdef ie4plus} + CDRF_NOTIFYSUBITEMDRAW = $00000020; // flags are the same, we can distinguish by context +{$ENDIF} + CDRF_NOTIFYPOSTERASE = $00000040; + CDRF_NOTIFYITEMERASE = $00000080; // according to lazarus headers. Can't find in sdk 6.0 (Vista sdk) + + +// drawstage flags +// values under 0x00010000 are reserved for global custom draw values. +// above that are for specific controls + CDDS_PREPAINT = $00000001; + CDDS_POSTPAINT = $00000002; + CDDS_PREERASE = $00000003; + CDDS_POSTERASE = $00000004; +// the 0x000010000 bit means it's individual item specific + CDDS_ITEM = $00010000; + CDDS_ITEMPREPAINT = (CDDS_ITEM OR CDDS_PREPAINT); + CDDS_ITEMPOSTPAINT = (CDDS_ITEM OR CDDS_POSTPAINT); + CDDS_ITEMPREERASE = (CDDS_ITEM OR CDDS_PREERASE); + CDDS_ITEMPOSTERASE = (CDDS_ITEM OR CDDS_POSTERASE); +{$ifdef ie4plus} + CDDS_SUBITEM = $00020000; +{$ENDIF} + +// itemState flags + CDIS_SELECTED = $0001; + CDIS_GRAYED = $0002; + CDIS_DISABLED = $0004; + CDIS_CHECKED = $0008; + CDIS_FOCUS = $0010; + CDIS_DEFAULT = $0020; + CDIS_HOT = $0040; + CDIS_MARKED = $0080; + CDIS_INDETERMINATE = $0100; +{$ifdef win32xp} + CDIS_SHOWKEYBOARDCUES = $0200; +{$ENDIF} +{$ifdef win32vista} + CDIS_NEARHOT = $0400; + CDIS_OTHERSIDEHOT = $0800; + CDIS_DROPHILITED = $1000; +{$endif} + +TYPE + + tagNMCUSTOMDRAWINFO = Record + hdr : NMHDR; + dwDrawStage : DWORD; + hdc : HDC; + rc : RECT; + dwItemSpec : DWORD_PTR; // this is control specific, but it's how to specify an item. valid only with CDDS_ITEM bit set + uItemState : UINT; + lItemlParam : LPARAM; + END; + NMCUSTOMDRAW = tagNMCUSTOMDRAWINFO; + LPNMCUSTOMDRAW = ^tagNMCUSTOMDRAWINFO; + TNMCUSTOMDRAWINFO = tagNMCUSTOMDRAWINFO; + PNMCUSTOMDRAWINFO = ^tagNMCUSTOMDRAWINFO; + PNMCustomDraw = PNMCUSTOMDRAWINFO; + TNMCustomDraw = tagNMCUSTOMDRAWINFO; + + tagNMTTCUSTOMDRAW = Record + nmcd : NMCUSTOMDRAW; + uDrawFlags : UINT; + END; + NMTTCUSTOMDRAW = tagNMTTCUSTOMDRAW; + LPNMTTCUSTOMDRAW = ^tagNMTTCUSTOMDRAW; + TNMTTCUSTOMDRAW = tagNMTTCUSTOMDRAW; + PNMTTCUSTOMDRAW = ^tagNMTTCUSTOMDRAW; + + +{$ENDIF} // _WIN32_IE >= 0x0300 + + +//====== IMAGE APIS =========================================================== + +{$IFNDEF NOIMAGEAPIS} + + +CONST + CLR_NONE = DWORD($FFFFFFFF); + CLR_DEFAULT = DWORD($FF000000); + + +{$IFNDEF IMAGELISTDRAWPARAMS} +{$ifdef ie3plus} +TYPE + _IMAGELISTDRAWPARAMS = Record + cbSize : DWORD; + himl : HIMAGELIST; + i : cint; + hdcDst : HDC; + x : cint; + y : cint; + cx : cint; + cy : cint; + xBitmap : cint; // x offest from the upperleft of bitmap + yBitmap : cint; // y offset from the upperleft of bitmap + rgbBk : COLORREF; + rgbFg : COLORREF; + fStyle : UINT; + dwRop : DWORD; +{$ifdef win32xp} + fState : DWORD; + Frame : DWORD; + crEffect : COLORREF; +{$ENDIF} + END; + tagIMAGELISTDRAWPARAMS = _IMAGELISTDRAWPARAMS; + IMAGELISTDRAWPARAMS = _IMAGELISTDRAWPARAMS; + LPIMAGELISTDRAWPARAMS = ^_IMAGELISTDRAWPARAMS; + TIMAGELISTDRAWPARAMS = _IMAGELISTDRAWPARAMS; + PIMAGELISTDRAWPARAMS = ^_IMAGELISTDRAWPARAMS; + +// #define IMAGELISTDRAWPARAMS_V3_SIZE CCSIZEOF_STRUCT(IMAGELISTDRAWPARAMS, dwRop) + +{$ENDIF} // _WIN32_IE >= 0x0300 +{$ENDIF} + + +CONST + ILC_MASK = $00000001; + ILC_COLOR = $00000000; + ILC_COLORDDB = $000000FE; + ILC_COLOR4 = $00000004; + ILC_COLOR8 = $00000008; + ILC_COLOR16 = $00000010; + ILC_COLOR24 = $00000018; + ILC_COLOR32 = $00000020; + ILC_PALETTE = $00000800; // (not implemented) +{$ifdef win32xp} + ILC_MIRROR = $00002000; // Mirror the icons contained, if the process is mirrored + ILC_PERITEMMIRROR = $00008000; // Causes the mirroring code to mirror each item when inserting a set of images, verses the whole strip +{$ENDIF} +{$ifdef win32vista} + ILC_ORIGINALSIZE = $00010000; // Imagelist should accept smaller than set images and apply OriginalSize based on image added + ILC_HIGHQUALITYSCALE = $00020000; // Imagelist should enable use of the high quality scaler. +{$endif} + +function ImageList_Create(cx:cint;cy:cint;flags:UINT;cInitial:cint;cGrow:cint):HIMAGELIST; stdcall; external commctrldll name 'ImageList_Create'; +function ImageList_Destroy(himl:HIMAGELIST):BOOL; stdcall; external commctrldll name 'ImageList_Destroy'; + +function ImageList_GetImageCount(himl:HIMAGELIST):cint; stdcall; external commctrldll name 'ImageList_GetImageCount'; +{$ifdef ie3plus} +function ImageList_SetImageCount(himl:HIMAGELIST;uNewCount:UINT):BOOL; stdcall; external commctrldll name 'ImageList_SetImageCount'; +{$ENDIF} + +function ImageList_Add(himl:HIMAGELIST;hbmImage:HBITMAP;hbmMask:HBITMAP):cint; stdcall; external commctrldll name 'ImageList_Add'; + +function ImageList_ReplaceIcon(himl:HIMAGELIST;i:cint;hicon:HICON):cint; stdcall; external commctrldll name 'ImageList_ReplaceIcon'; +function ImageList_SetBkColor(himl:HIMAGELIST;clrBk:COLORREF):COLORREF; stdcall; external commctrldll name 'ImageList_SetBkColor'; +function ImageList_GetBkColor(himl:HIMAGELIST):COLORREF; stdcall; external commctrldll name 'ImageList_GetBkColor'; +function ImageList_SetOverlayImage(himl:HIMAGELIST;iImage:cint;iOverlay:cint):BOOL; stdcall; external commctrldll name 'ImageList_SetOverlayImage'; + +// Macro 11 +Function ImageList_AddIcon(Himl:HIMAGELIST;hicon:HICON):cint; + +CONST + ILD_NORMAL = $00000000; + ILD_TRANSPARENT = $00000001; + ILD_MASK = $00000010; + ILD_IMAGE = $00000020; +{$ifdef ie3plus} + ILD_ROP = $00000040; +{$ENDIF} + ILD_BLEND25 = $00000002; + ILD_BLEND50 = $00000004; + ILD_OVERLAYMASK = $00000F00; + +// Macro 12 +// #define INDEXTOOVERLAYMASK(i) ((i) << 8) + +CONST + ILD_PRESERVEALPHA = $00001000; // This preserves the alpha channel in dest + ILD_SCALE = $00002000; // Causes the image to be scaled to cx, cy instead of clipped + ILD_DPISCALE = $00004000; +{$ifdef win32vista} + ILD_ASYNC = $00008000; +{$endif} + + ILD_SELECTED = ILD_BLEND50; + ILD_FOCUS = ILD_BLEND25; + ILD_BLEND = ILD_BLEND50; + CLR_HILIGHT = CLR_DEFAULT; + + ILS_NORMAL = $00000000; + ILS_GLOW = $00000001; + ILS_SHADOW = $00000002; + ILS_SATURATE = $00000004; + ILS_ALPHA = $00000008; + +{$ifdef win32vista} + ILGT_NORMAL = $00000000; + ILGT_ASYNC = $00000001; +{$endif} + +function ImageList_Draw(himl:HIMAGELIST;i:cint;hdcDst:HDC;x:cint;y:cint;fStyle:UINT):BOOL; stdcall; external commctrldll name 'ImageList_Draw'; + + +{$IFDEF _WIN32} + +{$ifdef win32vista} +const + HBITMAP_CALLBACK =HBITMAP(-1); // only for SparseImageList +{$endif} +function ImageList_Replace(himl:HIMAGELIST;i:cint;hbmImage:HBITMAP;hbmMask:HBITMAP):BOOL; stdcall; external commctrldll name 'ImageList_Replace'; + +function ImageList_AddMasked(himl:HIMAGELIST;hbmImage:HBITMAP;crMask:COLORREF):cint; stdcall; external commctrldll name 'ImageList_AddMasked'; +function ImageList_DrawEx(himl:HIMAGELIST;i:cint;hdcDst:HDC;x:cint;y:cint;dx:cint;dy:cint;rgbBk:COLORREF;rgbFg:COLORREF;fStyle:UINT):BOOL; stdcall; external commctrldll name 'ImageList_DrawEx'; +{$ifdef ie3plus} +function ImageList_DrawIndirect(pimldp:PIMAGELISTDRAWPARAMS):BOOL; stdcall; external commctrldll name 'ImageList_DrawIndirect'; +{$ENDIF} +function ImageList_Remove(himl:HIMAGELIST;i:cint):BOOL; stdcall; external commctrldll name 'ImageList_Remove'; +function ImageList_GetIcon(himl:HIMAGELIST;i:cint;flags:UINT):HICON; stdcall; external commctrldll name 'ImageList_GetIcon'; +function ImageList_LoadImageA(hi:HINST;lpbmp:LPCSTR;cx:cint;cGrow:cint;crMask:COLORREF;uType:UINT;uFlags:UINT):HIMAGELIST; stdcall; external commctrldll name 'ImageList_LoadImageA'; +function ImageList_LoadImageW(hi:HINST;lpbmp:LPCWSTR;cx:cint;cGrow:cint;crMask:COLORREF;uType:UINT;uFlags:UINT):HIMAGELIST; stdcall; external commctrldll name 'ImageList_LoadImageW'; +function ImageList_LoadImage(hi:HINST;lpbmp:LPCSTR;cx:cint;cGrow:cint;crMask:COLORREF;uType:UINT;uFlags:UINT):HIMAGELIST; stdcall; external commctrldll name 'ImageList_LoadImageA'; +function ImageList_LoadImage(hi:HINST;lpbmp:LPCWSTR;cx:cint;cGrow:cint;crMask:COLORREF;uType:UINT;uFlags:UINT):HIMAGELIST; stdcall; external commctrldll name 'ImageList_LoadImageW'; + +{$IFDEF UNICODE} +// function ImageList_LoadImageW(hi:HINSTANCE;lpbmp:LPCWSTR;cx:cint;cGrow:cint;crMask:COLORREF;uType:UINT;uFlags:UINT):HIMAGELIST; external commctrldll name 'ImageList_LoadImageW'; +{$ELSE} +// function ImageList_LoadImageA(hi:HINSTANCE;lpbmp:LPCSTR;cx:cint;cGrow:cint;crMask:COLORREF;uType:UINT;uFlags:UINT):HIMAGELIST; external commctrldll name 'ImageList_LoadImageA'; +{$ENDIF} + +{$ifdef ie3plus} + +CONST + ILCF_MOVE = ($00000000); + ILCF_SWAP = ($00000001); + +function ImageList_Copy(himlDst:HIMAGELIST;iDst:cint;himlSrc:HIMAGELIST;iSrc:cint;uFlags:UINT):BOOL; stdcall; external commctrldll name 'ImageList_Copy'; +{$ENDIF} + +function ImageList_BeginDrag(himlTrack:HIMAGELIST;iTrack:cint;dxHotspot:cint;dyHotspot:cint):BOOL; stdcall; external commctrldll name 'ImageList_BeginDrag'; +function ImageList_EndDrag:BOOL; stdcall; external commctrldll name 'ImageList_EndDrag'; +function ImageList_DragEnter(hwndLock:HWND;x:cint;y:cint):BOOL; stdcall; external commctrldll name 'ImageList_DragEnter'; +function ImageList_DragLeave(hwndLock:HWND):BOOL; stdcall; external commctrldll name 'ImageList_DragLeave'; +function ImageList_DragMove(x:cint;y:cint):BOOL; stdcall; external commctrldll name 'ImageList_DragMove'; +function ImageList_SetDragCursorImage(himlDrag:HIMAGELIST;iDrag:cint;dxHotspot:cint;dyHotspot:cint):BOOL; stdcall; external commctrldll name 'ImageList_SetDragCursorImage'; + +function ImageList_DragShowNolock(fShow:BOOL):BOOL; stdcall; external commctrldll name 'ImageList_DragShowNolock'; +function ImageList_GetDragImage(ppt:PPOINT;pptHotspot:PPOINT):HIMAGELIST; stdcall; external commctrldll name 'ImageList_GetDragImage'; + +// Macro 13 +Procedure ImageList_RemoveAll(himl:HIMAGELIST); + +// Macro 14 +function ImageList_ExtractIcon(hi:longint; himl:HIMAGELIST;i:longint):HICON; + + +// Macro 15 +Procedure ImageList_LoadBitmap(hi:HInst;bmp:LPCTSTR;cx:cint;cGrow:cint;crMask:COLORREF); + +{$IFDEF __IStream_INTERFACE_DEFINED__} + +function ImageList_Read(pstm:ISTREAM):HIMAGELIST; stdcall; external commctrldll name 'ImageList_Read'; +function ImageList_Write(himl:HIMAGELIST;pstm:ISTREAM):BOOL; stdcall; external commctrldll name 'ImageList_Write'; + +{$ifdef Win32XP} + +CONST + ILP_NORMAL = 0; // Writes or reads the stream using new sematics for this version of comctl32 + ILP_DOWNLEVEL = 1; // Write or reads the stream using downlevel sematics. + + +function ImageList_ReadEx(dwFlags:DWORD;pstm:ISTREAM;riid:REFIID;ppv:PPointer):HRESULT; stdcall; external commctrldll name 'ImageList_ReadEx'; +function ImageList_WriteEx(himl:HIMAGELIST;dwFlags:DWORD;pstm:ISTREAM):HRESULT; stdcall; external commctrldll name 'ImageList_WriteEx'; +{$ENDIF} + +{$ENDIF} + +{$IFNDEF IMAGEINFO} +TYPE + + _IMAGEINFO = Record + hbmImage : HBITMAP; + hbmMask : HBITMAP; + Unused1 : cint; + Unused2 : cint; + rcImage : RECT; + END; + IMAGEINFO = _IMAGEINFO; + LPIMAGEINFO = ^_IMAGEINFO; + TIMAGEINFO = _IMAGEINFO; + PIMAGEINFO = ^_IMAGEINFO; + +{$ENDIF} + +function ImageList_GetIconSize(himl:HIMAGELIST;cx:Pint;cy:Pint):BOOL; stdcall; external commctrldll name 'ImageList_GetIconSize'; +function ImageList_GetIconSize(himl:HIMAGELIST;var cx:cint;var cy:cint):BOOL; stdcall; external commctrldll name 'ImageList_GetIconSize'; +function ImageList_SetIconSize(himl:HIMAGELIST;cx:cint;cy:cint):BOOL; stdcall; external commctrldll name 'ImageList_SetIconSize'; +function ImageList_GetImageInfo(himl:HIMAGELIST;i:cint;pImageInfo:PIMAGEINFO):BOOL; stdcall; external commctrldll name 'ImageList_GetImageInfo'; +function ImageList_GetImageInfo(himl:HIMAGELIST;i:cint;var pImageInfo:_IMAGEINFO):BOOL; stdcall; external commctrldll name 'ImageList_GetImageInfo'; +function ImageList_Merge(himl1:HIMAGELIST;i1:cint;himl2:HIMAGELIST;i2:cint;dx:cint;dy:cint):HIMAGELIST; stdcall; external commctrldll name 'ImageList_Merge'; +{$ifdef ie4plus} +function ImageList_Duplicate(himl:HIMAGELIST):HIMAGELIST; stdcall; external commctrldll name 'ImageList_Duplicate'; +{$ENDIF} + + +{$ENDIF} + + +{$ENDIF} + + +//====== HEADER CONTROL ======================================================= + +{$IFNDEF NOHEADER} + +{$IFDEF _WIN32} + +CONST + WC_HEADERA = 'SysHeader32'; + WC_HEADERW = {L}'SysHeader32'; +{$IFDEF UNICODE} + WC_HEADER = WC_HEADERW; +{$ELSE} + WC_HEADER = WC_HEADERA; +{$ENDIF} + +{$ELSE} + +CONST + WC_HEADER = 'SysHeader'; +{$ENDIF} + +CONST + +// begin_r_commctrl + + HDS_HORZ = $0000; + HDS_BUTTONS = $0002; +{$ifdef ie3plus} + HDS_HOTTRACK = $0004; +{$ENDIF} + HDS_HIDDEN = $0008; + +{$ifdef ie3plus} + HDS_DRAGDROP = $0040; + HDS_FULLDRAG = $0080; +{$ENDIF} +{$ifdef ie5plus} + HDS_FILTERBAR = $0100; +{$ENDIF} + +{$ifdef win32xp} + HDS_FLAT = $0200; +{$ENDIF} +{$ifdef win32vista} + HDS_CHECKBOXES = $0400; + HDS_NOSIZING = $0800; + HDS_OVERFLOW = $1000; +{$endif} +// end_r_commctrl + +{$ifdef ie5plus} + + HDFT_ISSTRING = $0000; // HD_ITEM.pvFilter points to a HD_TEXTFILTER + HDFT_ISNUMBER = $0001; // HD_ITEM.pvFilter points to a INT + + HDFT_HASNOVALUE = $8000; // clear the filter, by setting this bit + +TYPE + + + _HD_TEXTFILTERA = Record + pszText : LPSTR; // [in] pointer to the buffer containing the filter (ANSI) + cchTextMax : cint; // [in] max size of buffer/edit control buffer + END; + HD_TEXTFILTERA = _HD_TEXTFILTERA; + LPHD_TEXTFILTERA = ^_HD_TEXTFILTERA; + THD_TEXTFILTERA = _HD_TEXTFILTERA; + PHD_TEXTFILTERA = ^_HD_TEXTFILTERA; + + + _HD_TEXTFILTERW = Record + pszText : LPWSTR; // [in] pointer to the buffer contiaining the filter (UNICODE) + cchTextMax : cint; // [in] max size of buffer/edit control buffer + END; + HD_TEXTFILTERW = _HD_TEXTFILTERW; + LPHD_TEXTFILTERW = ^_HD_TEXTFILTERW; + THD_TEXTFILTERW = _HD_TEXTFILTERW; + PHD_TEXTFILTERW = ^_HD_TEXTFILTERW; + +{$IFDEF UNICODE} + HD_TEXTFILTER = HD_TEXTFILTERW; + HDTEXTFILTER = HD_TEXTFILTERW; + LPHD_TEXTFILTER = LPHD_TEXTFILTERW; + LPHDTEXTFILTER = LPHD_TEXTFILTERW; +{$ELSE} + HD_TEXTFILTER = HD_TEXTFILTERA; + HDTEXTFILTER = HD_TEXTFILTERA; + LPHD_TEXTFILTER = LPHD_TEXTFILTERA; + LPHDTEXTFILTER = LPHD_TEXTFILTERA; +{$ENDIF} + + +{$ENDIF} // _WIN32_IE >= 0x0500 + +TYPE + + + _HD_ITEMA = Record + mask : UINT; + cxy : cint; + pszText : LPSTR; + hbm : HBITMAP; + cchTextMax : cint; + fmt : cint; + lParam : LPARAM; +{$ifdef ie3plus} + iImage : cint; // index of bitmap in ImageList + iOrder : cint; // where to draw this item +{$ENDIF} +{$ifdef ie5plus} + _type : UINT; // [in] filter type (defined what pvFilter is a pointer to) + pvFilter : Pointer; // [in] fillter data see above +{$ENDIF} +{$ifdef win32vista} + state : UINT; +{$endif} + END; + HDITEMA = _HD_ITEMA; + pHDITEMA = ^_HD_ITEMA; + + LPHDITEMA = ^_HD_ITEMA; + THD_ITEMA = _HD_ITEMA; + PHD_ITEMA = ^_HD_ITEMA; + THDItem = THD_ITEMA; + PHDItem = PHD_ITEMA; + + +// #define HDITEMA_V1_SIZE CCSIZEOF_STRUCT(HDITEMA, lParam) +// #define HDITEMW_V1_SIZE CCSIZEOF_STRUCT(HDITEMW, lParam) + + + _HD_ITEMW = Record + mask : UINT; + cxy : cint; + pszText : LPWSTR; + hbm : HBITMAP; + cchTextMax : cint; + fmt : cint; + lParam : LPARAM; +{$ifdef ie3plus} + iImage : cint; // index of bitmap in ImageList + iOrder : cint; +{$ENDIF} +{$ifdef ie5plus} + _type : UINT; // [in] filter type (defined what pvFilter is a pointer to) + pvFilter : Pointer; // [in] fillter data see above +{$ENDIF} +{$ifdef win32vista} + state : UINT; +{$endif} + END; + HDITEMW = _HD_ITEMW; + pHDITEMW = ^_HD_ITEMW; + LPHDITEMW = ^_HD_ITEMW; + THD_ITEMW = _HD_ITEMW; + PHD_ITEMW = ^_HD_ITEMW; + + +TYPE +{$IFDEF UNICODE} + HDITEM = HDITEMW; + LPHDITEM = LPHDITEMW; +// HDITEM_V1_SIZE = HDITEMW_V1_SIZE; +{$ELSE} + + HDITEM = HDITEMA; + LPHDITEM = LPHDITEMA; +// HDITEM_V1_SIZE = HDITEMA_V1_SIZE; +{$ENDIF} + + HD_ITEM = HDITEM; + + +CONST + + HDI_WIDTH = $0001; + HDI_HEIGHT = HDI_WIDTH; + HDI_TEXT = $0002; + HDI_FORMAT = $0004; + HDI_LPARAM = $0008; + HDI_BITMAP = $0010; +{$ifdef ie3plus} + HDI_IMAGE = $0020; + HDI_DI_SETITEM = $0040; + HDI_ORDER = $0080; +{$ENDIF} +{$ifdef ie5plus} + HDI_FILTER = $0100; +{$ENDIF} +{$ifdef win32vista} + HDI_STATE = $0200; +{$endif} + + HDF_LEFT = $0000; + HDF_RIGHT = $0001; + HDF_CENTER = $0002; + HDF_JUSTIFYMASK = $0003; + HDF_RTLREADING = $0004; + + HDF_OWNERDRAW = $8000; + HDF_STRING = $4000; + HDF_BITMAP = $2000; +{$ifdef ie3plus} + HDF_BITMAP_ON_RIGHT = $1000; + HDF_IMAGE = $0800; +{$ENDIF} + +{$ifdef win32xp} + HDF_SORTUP = $0400; + HDF_SORTDOWN = $0200; +{$ENDIF} +{$ifdef win32vista} + HDF_CHECKBOX = $0040; + HDF_CHECKED = $0080; + HDF_FIXEDWIDTH = $0100; // Can't resize the column; same as LVCFMT_FIXED_WIDTH + HDF_SPLITBUTTON = $1000000; // Column is a split button; same as LVCFMT_SPLITBUTTON +{$endif} + +{$ifdef win32vista} + HDIS_FOCUSED = $00000001; +{$endif} + + + HDM_GETITEMCOUNT = (HDM_FIRST + 0); + +// Macro 16 +Function Header_GetItemCount( hwndHD : hwnd):cint; + +CONST + HDM_INSERTITEMA = (HDM_FIRST + 1); + HDM_INSERTITEMW = (HDM_FIRST + 10); + +{$IFDEF UNICODE} + HDM_INSERTITEM = HDM_INSERTITEMW; +{$ELSE} + HDM_INSERTITEM = HDM_INSERTITEMA; +{$ENDIF} + +// Macro 17 +Function Header_InsertItem( hwndHD : hwnd; i : cint;const phdi : HD_ITEM ):cint; + + +CONST + HDM_DELETEITEM = (HDM_FIRST + 2); + +// Macro 18 +Function Header_DeleteItem( hwndHD : hwnd; i : cint):BOOL; + +CONST + HDM_GETITEMA = (HDM_FIRST + 3); + HDM_GETITEMW = (HDM_FIRST + 11); + +{$IFDEF UNICODE} + HDM_GETITEM = HDM_GETITEMW; +{$ELSE} + HDM_GETITEM = HDM_GETITEMA; +{$ENDIF} + +// Macro 19 +Function Header_GetItem( hwndHD : hwnd; i : cint;var phdi : HD_ITEM ):BOOL; + +CONST + HDM_SETITEMA = (HDM_FIRST + 4); + HDM_SETITEMW = (HDM_FIRST + 12); + +{$IFDEF UNICODE} + HDM_SETITEM = HDM_SETITEMW; +{$ELSE} + HDM_SETITEM = HDM_SETITEMA; +{$ENDIF} + +// Macro 20 +Function Header_SetItem( hwndHD : hwnd; i : cint;const phdi : HD_ITEM ):BOOL; + +TYPE + + _HD_LAYOUT = Record + prc : PRECT; + pwpos : PWINDOWPOS; + END; + HDLAYOUT = _HD_LAYOUT; + LPHDLAYOUT = ^_HD_LAYOUT; + THD_LAYOUT = _HD_LAYOUT; + PHD_LAYOUT = ^_HD_LAYOUT; + +CONST + HDM_LAYOUT = (HDM_FIRST + 5); + +{$ifdef ie3plus} +TYPE + HD_LAYOUT = HDLAYOUT; +{$ELSE} +// HDLAYOUT = HD_LAYOUT; +{$ENDIF} + + +// Macro 21 +Function Header_Layout( hwndHD : hwnd;var playout : HD_LAYOUT ):BOOL; + +CONST + HHT_NOWHERE = $0001; + HHT_ONHEADER = $0002; + HHT_ONDIVIDER = $0004; + HHT_ONDIVOPEN = $0008; +{$ifdef ie5plus} + HHT_ONFILTER = $0010; + HHT_ONFILTERBUTTON = $0020; +{$ENDIF} + HHT_ABOVE = $0100; + HHT_BELOW = $0200; + HHT_TORIGHT = $0400; + HHT_TOLEFT = $0800; +{$ifdef win32vista} + HHT_ONITEMSTATEICON = $1000; + HHT_ONDROPDOWN = $2000; + HHT_ONOVERFLOW = $4000; +{$endif} + +TYPE + _HD_HITTESTINFO = Record + case integer of + 1: (pt : POINT;flags : UINT;iItem : cint); + { delphi } + 2: (point : POINT;dummyflags : UINT;Item : cint); + END; + HDHITTESTINFO = _HD_HITTESTINFO; + HD_HITTESTINFO = _HD_HITTESTINFO; + LPHDHITTESTINFO = ^_HD_HITTESTINFO; + THD_HITTESTINFO = _HD_HITTESTINFO; + PHD_HITTESTINFO = ^_HD_HITTESTINFO; + THDHitTestInfo = THD_HITTESTINFO; + PHDHitTestInfo = LPHDHITTESTINFO; + + +CONST + HDM_HITTEST = (HDM_FIRST + 6); + +{$ifdef ie3plus} + + HDM_GETITEMRECT = (HDM_FIRST + 7); + +// Macro 22 +Function Header_GetItemRect( hwnd : hwnd; iItem : WPARAM; lprc : LPARAM):BOOL; + +CONST + HDM_SETIMAGELIST = (HDM_FIRST + 8); + +// Macro 23 +Function Header_SetImageList( hwnd : hwnd; himl : LPARAM):HIMAGELIST; + +CONST + HDM_GETIMAGELIST = (HDM_FIRST + 9); + +// Macro 24 +Function Header_GetImageList( hwnd : hwnd):HIMAGELIST; + +CONST + HDM_ORDERTOINDEX = (HDM_FIRST + 15); + +// Macro 25 +Function Header_OrderToIndex( hwnd : hwnd; i : WPARAM):cint; + +CONST + HDM_CREATEDRAGIMAGE = (HDM_FIRST + 16); // wparam = which item (by index) + +// Macro 26 +Function Header_CreateDragImage( hwnd : hwnd; i : WPARAM):HIMAGELIST; + +CONST + HDM_GETORDERARRAY = (HDM_FIRST + 17); + +// Macro 27 +Function Header_GetOrderArray( hwnd : hwnd; iCount : WPARAM; lpi : LPARAM):BOOL; + +CONST + HDM_SETORDERARRAY = (HDM_FIRST + 18); + +// Macro 28 +Function Header_SetOrderArray( hwnd : hwnd; iCount : WPARAM; lpi : PInteger):BOOL;inline; + +// lparam = int array of size HDM_GETITEMCOUNT +// the array specifies the order that all items should be displayed. +// e.g. { 2, 0, 1} +// says the index 2 item should be shown in the 0ths position +// index 0 should be shown in the 1st position +// index 1 should be shown in the 2nd position + + +CONST + HDM_SETHOTDIVIDER = (HDM_FIRST + 19); + +// Macro 29 +Function Header_SetHotDivider( hwnd : hwnd; fPos : WPARAM; dw : LPARAM):cint; + +// convenience message for external dragdrop +// wParam = BOOL specifying whether the lParam is a dwPos of the cursor +// position or the index of which divider to hotlight +// lParam = depends on wParam (-1 and wParm = FALSE turns off hotlight) +{$ENDIF} // _WIN32_IE >= 0x0300 + +{$ifdef ie5plus} +CONST + HDM_SETBITMAPMARGIN = (HDM_FIRST + 20); + +// Macro 30 +Function Header_SetBitmapMargin( hwnd : hwnd; iWidth : WPARAM):cint; + +CONST + HDM_GETBITMAPMARGIN = (HDM_FIRST + 21); + +// Macro 31 +Function Header_GetBitmapMargin( hwnd : hwnd):cint; + +{$ENDIF} + + +{$ifdef ie4plus} + +CONST + HDM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT; + +// Macro 32 +Function Header_SetUnicodeFormat( hwnd : hwnd; fUnicode : WPARAM):BOOL; + +CONST + HDM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT; + +// Macro 33 +Function Header_GetUnicodeFormat( hwnd : hwnd):BOOL; + +{$ENDIF} + +{$ifdef ie5plus} +CONST + HDM_SETFILTERCHANGETIMEOUT = (HDM_FIRST+22); + +// Macro 34 +Function Header_SetFilterChangeTimeout( hwnd : hwnd; i : LPARAM):cint; + +CONST + HDM_EDITFILTER = (HDM_FIRST+23); + +// Macro 35 +Function Header_EditFilter( hwnd : hwnd; i : WPARAM; fDiscardChanges :cint ):cint; + + +// Clear filter takes -1 as a column value to indicate that all +// the filter should be cleared. When this happens you will +// only receive a single filter changed notification. + +CONST + HDM_CLEARFILTER = (HDM_FIRST+24); + +// Macro 36 +Function Header_ClearFilter( hwnd : hwnd; i : WPARAM):cint; + +// Macro 37 +Function Header_ClearAllFilters( hwnd : hwnd):cint; + +{$ENDIF} + +{$ifdef win32vista} +// HDM_TRANSLATEACCELERATOR = CCM_TRANSLATEACCELERATOR; // CCM_* not defined anywhere yet in w7 sdk + +const + HDM_GETITEMDROPDOWNRECT = (HDM_FIRST+25); + HDM_GETOVERFLOWRECT = (HDM_FIRST+26); + HDM_GETFOCUSEDITEM = (HDM_FIRST+27); + HDM_SETFOCUSEDITEM = (HDM_FIRST+28); + +// macro 37a through 37d +function Header_GetItemDropDownRect(hwnd : hwnd;iItem:cint; lprc:lprect):bool; +function Header_GetOverflowRect( hwnd : hwnd; lprc:lprect):bool; +function Header_GetFocusedItem (hwnd : hwnd):cint; +function Header_SetFocusedItem (hwnd:hwnd; iItem:cint):BOOL; +{$endif} + +CONST + HDN_ITEMCHANGINGA = (HDN_FIRST-0); + HDN_ITEMCHANGINGW = (HDN_FIRST-20); + HDN_ITEMCHANGEDA = (HDN_FIRST-1); + HDN_ITEMCHANGEDW = (HDN_FIRST-21); + HDN_ITEMCLICKA = (HDN_FIRST-2); + HDN_ITEMCLICKW = (HDN_FIRST-22); + HDN_ITEMDBLCLICKA = (HDN_FIRST-3); + HDN_ITEMDBLCLICKW = (HDN_FIRST-23); + HDN_DIVIDERDBLCLICKA = (HDN_FIRST-5); + HDN_DIVIDERDBLCLICKW = (HDN_FIRST-25); + HDN_BEGINTRACKA = (HDN_FIRST-6); + HDN_BEGINTRACKW = (HDN_FIRST-26); + HDN_ENDTRACKA = (HDN_FIRST-7); + HDN_ENDTRACKW = (HDN_FIRST-27); + HDN_TRACKA = (HDN_FIRST-8); + HDN_TRACKW = (HDN_FIRST-28); +{$ifdef ie3plus} + HDN_GETDISPINFOA = (HDN_FIRST-9); + HDN_GETDISPINFOW = (HDN_FIRST-29); + HDN_BEGINDRAG = (HDN_FIRST-10); + HDN_ENDDRAG = (HDN_FIRST-11); +{$ENDIF} +{$ifdef ie5plus} + HDN_FILTERCHANGE = (HDN_FIRST-12); + HDN_FILTERBTNCLICK = (HDN_FIRST-13); +{$ENDIF} +{$ifdef win32vista} + HDN_BEGINFILTEREDIT = (HDN_FIRST-14); + HDN_ENDFILTEREDIT = (HDN_FIRST-15); + + HDN_ITEMSTATEICONCLICK = (HDN_FIRST-16); + HDN_ITEMKEYDOWN = (HDN_FIRST-17); + HDN_DROPDOWN = (HDN_FIRST-18); + HDN_OVERFLOWCLICK = (HDN_FIRST-19); +{$endif} + +{$IFDEF UNICODE} + HDN_ITEMCHANGING = HDN_ITEMCHANGINGW; + HDN_ITEMCHANGED = HDN_ITEMCHANGEDW; + HDN_ITEMCLICK = HDN_ITEMCLICKW; + HDN_ITEMDBLCLICK = HDN_ITEMDBLCLICKW; + HDN_DIVIDERDBLCLICK = HDN_DIVIDERDBLCLICKW; + HDN_BEGINTRACK = HDN_BEGINTRACKW; + HDN_ENDTRACK = HDN_ENDTRACKW; + HDN_TRACK = HDN_TRACKW; +{$ifdef ie3plus} + HDN_GETDISPINFO = HDN_GETDISPINFOW; +{$ENDIF} +{$ELSE} + HDN_ITEMCHANGING = HDN_ITEMCHANGINGA; + HDN_ITEMCHANGED = HDN_ITEMCHANGEDA; + HDN_ITEMCLICK = HDN_ITEMCLICKA; + HDN_ITEMDBLCLICK = HDN_ITEMDBLCLICKA; + HDN_DIVIDERDBLCLICK = HDN_DIVIDERDBLCLICKA; + HDN_BEGINTRACK = HDN_BEGINTRACKA; + HDN_ENDTRACK = HDN_ENDTRACKA; + HDN_TRACK = HDN_TRACKA; +{$ifdef ie3plus} + HDN_GETDISPINFO = HDN_GETDISPINFOA; +{$ENDIF} +{$ENDIF} + +TYPE + tagNMHEADERA = Record + hdr : NMHDR; + case integer of + 1: (iItem : cint;iButton : cint;pitem : PHDITEMA); + { delphi: } + 2: (Item : cint;Button : cint); + END; + NMHEADERA = tagNMHEADERA; + LPNMHEADERA = ^tagNMHEADERA; + TNMHEADERA = tagNMHEADERA; + PNMHEADERA = ^tagNMHEADERA; + + tagNMHEADERW = Record + hdr : NMHDR; + iItem : cint; + iButton : cint; + pitem : PHDITEMW; + END; + NMHEADERW = tagNMHEADERW; + LPNMHEADERW = ^tagNMHEADERW; + TNMHEADERW = tagNMHEADERW; + PNMHEADERW = ^tagNMHEADERW; + + +{$IFDEF UNICODE} + NMHEADER = NMHEADERW; + LPNMHEADER = LPNMHEADERW; +{$ELSE} + NMHEADER = NMHEADERA; + LPNMHEADER = LPNMHEADERA; +{$ENDIF} + + +{$ifdef ie3plus} + HD_NOTIFYA = NMHEADERA; + HD_NOTIFYW = NMHEADERW; +{$ELSE} +// tagNMHEADERA = _HD_NOTIFY; +// NMHEADERA = HD_NOTIFYA; +// tagHMHEADERW = _HD_NOTIFYW; +// NMHEADERW = HD_NOTIFYW; +{$ENDIF} + + HD_NOTIFY = NMHEADER; + THDNotify = HD_NOTIFY; + PHDNotify = ^HD_NOTIFY; + + tagNMHDDISPINFOW = Record + hdr : NMHDR; + iItem : cint; + mask : UINT; + pszText : LPWSTR; + cchTextMax : cint; + iImage : cint; + lParam : LPARAM; + END; + NMHDDISPINFOW = tagNMHDDISPINFOW; + LPNMHDDISPINFOW = ^tagNMHDDISPINFOW; + TNMHDDISPINFOW = tagNMHDDISPINFOW; + PNMHDDISPINFOW = ^tagNMHDDISPINFOW; + + + tagNMHDDISPINFOA = Record + hdr : NMHDR; + iItem : cint; + mask : UINT; + pszText : LPSTR; + cchTextMax : cint; + iImage : cint; + lParam : LPARAM; + END; + NMHDDISPINFOA = tagNMHDDISPINFOA; + LPNMHDDISPINFOA = ^tagNMHDDISPINFOA; + TNMHDDISPINFOA = tagNMHDDISPINFOA; + PNMHDDISPINFOA = ^tagNMHDDISPINFOA; + + + +{$IFDEF UNICODE} + NMHDDISPINFO = NMHDDISPINFOW; + LPNMHDDISPINFO = LPNMHDDISPINFOW; +{$ELSE} + NMHDDISPINFO = NMHDDISPINFOA; + LPNMHDDISPINFO = LPNMHDDISPINFOA; +{$ENDIF} + +{$ifdef ie5plus} + tagNMHDFILTERBTNCLICK = Record + hdr : NMHDR; + iItem : cint; + rc : RECT; + END; + NMHDFILTERBTNCLICK = tagNMHDFILTERBTNCLICK; + LPNMHDFILTERBTNCLICK = ^tagNMHDFILTERBTNCLICK; + TNMHDFILTERBTNCLICK = tagNMHDFILTERBTNCLICK; + PNMHDFILTERBTNCLICK = ^tagNMHDFILTERBTNCLICK; + +{$ENDIF} + +{$ENDIF} // NOHEADER + + +//====== TOOLBAR CONTROL ====================================================== + +{$IFNDEF NOTOOLBAR} + +{$IFDEF _WIN32} + +CONST + TOOLBARCLASSNAMEW = {L}'ToolbarWindow32'; + TOOLBARCLASSNAMEA = 'ToolbarWindow32'; + +{$IFDEF UNICODE} + TOOLBARCLASSNAME = TOOLBARCLASSNAMEW; +{$ELSE} + TOOLBARCLASSNAME = TOOLBARCLASSNAMEA; +{$ENDIF} + +{$ELSE} +CONST + TOOLBARCLASSNAME = 'ToolbarWindow'; +{$ENDIF} + +TYPE + + _TBBUTTON = Record + iBitmap : cint; + idCommand : cint; + fsState : BYTE; + fsStyle : BYTE; +{$IFDEF _WIN64} + bReserved : ARRAY[0..5] OF BYTE; // padding for alignment +{$ELSE} +{$IFDEF _WIN32} + bReserved : ARRAY[0..1] OF BYTE; // padding for alignment +{$ENDIF} +{$ENDIF} + dwData : DWORD_PTR; + iString : INT_PTR; + END; + TBBUTTON = _TBBUTTON; + PTBBUTTON = {NEAR} ^_TBBUTTON; // ??? + LPTBBUTTON = ^_TBBUTTON; + TTBBUTTON = _TBBUTTON; +// PTBBUTTON = ^_TBBUTTON; + + LPCTBBUTTON = {const} ^TBBUTTON; + + + _COLORMAP = Record + xfrom : COLORREF; + xto : COLORREF; + END; + COLORMAP = _COLORMAP; + LPCOLORMAP = ^_COLORMAP; + TCOLORMAP = _COLORMAP; + PCOLORMAP = ^_COLORMAP; + +function CreateToolbarEx(hwnd:HWND;ws:DWORD;wID:UINT;nBitmaps:cint; + hBMInst:HINST; + wBMID:UINT_PTR;lpButtons:LPCTBBUTTON;iNumButtons:cint;dxButton:cint; + dyButton:cint;dxBitmap:cint;dyBitmap:cint;uStructSize:UINT):HWND; stdcall; external commctrldll name 'CreateToolbarEx'; + +function CreateMappedBitmap(hInstance:HINST;idBitmap:INT_PTR;wFlags:UINT;lpColorMap:LPCOLORMAP;iNumMaps:cint):HBITMAP; stdcall; external commctrldll name 'CreateMappedBitmap'; + +CONST + CMB_MASKED = $02; + TBSTATE_CHECKED = $01; + TBSTATE_PRESSED = $02; + TBSTATE_ENABLED = $04; + TBSTATE_HIDDEN = $08; + TBSTATE_INDETERMINATE = $10; + TBSTATE_WRAP = $20; +{$ifdef ie3plus} + TBSTATE_ELLIPSES = $40; +{$ENDIF} +{$ifdef ie4plus} + TBSTATE_MARKED = $80; +{$ENDIF} + + TBSTYLE_BUTTON = $0000; // obsolete; use BTNS_BUTTON instead + TBSTYLE_SEP = $0001; // obsolete; use BTNS_SEP instead + TBSTYLE_CHECK = $0002; // obsolete; use BTNS_CHECK instead + TBSTYLE_GROUP = $0004; // obsolete; use BTNS_GROUP instead + TBSTYLE_CHECKGROUP = (TBSTYLE_GROUP OR TBSTYLE_CHECK);// obsolete; use BTNS_CHECKGROUP instead +{$ifdef ie3plus} + TBSTYLE_DROPDOWN = $0008; // obsolete; use BTNS_DROPDOWN instead +{$ENDIF} +{$ifdef ie4plus} + TBSTYLE_AUTOSIZE = $0010; // obsolete; use BTNS_AUTOSIZE instead + TBSTYLE_NOPREFIX = $0020; // obsolete; use BTNS_NOPREFIX instead +{$ENDIF} + + TBSTYLE_TOOLTIPS = $0100; + TBSTYLE_WRAPABLE = $0200; + TBSTYLE_ALTDRAG = $0400; +{$ifdef ie3plus} + TBSTYLE_FLAT = $0800; + TBSTYLE_LIST = $1000; + TBSTYLE_CUSTOMERASE = $2000; +{$ENDIF} +{$ifdef ie4plus} + TBSTYLE_REGISTERDROP = $4000; + TBSTYLE_TRANSPARENT = $8000; + TBSTYLE_EX_DRAWDDARROWS = $00000001; +{$ENDIF} + +{$ifdef ie5plus} + BTNS_BUTTON = TBSTYLE_BUTTON; // 0x0000 + BTNS_SEP = TBSTYLE_SEP; // 0x0001 + BTNS_CHECK = TBSTYLE_CHECK; // 0x0002 + BTNS_GROUP = TBSTYLE_GROUP; // 0x0004 + BTNS_CHECKGROUP = TBSTYLE_CHECKGROUP; // (TBSTYLE_GROUP | TBSTYLE_CHECK) + BTNS_DROPDOWN = TBSTYLE_DROPDOWN; // 0x0008 + BTNS_AUTOSIZE = TBSTYLE_AUTOSIZE; // 0x0010; automatically calculate the cx of the button + BTNS_NOPREFIX = TBSTYLE_NOPREFIX; // 0x0020; this button should not have accel prefix +{$ifdef ie501plus} + BTNS_SHOWTEXT = $0040; // ignored unless TBSTYLE_EX_MIXEDBUTTONS is set +{$ENDIF} // 0x0501 + BTNS_WHOLEDROPDOWN = $0080; // draw drop-down arrow, but without split arrow section +{$ENDIF} + +{$ifdef ie501plus} + TBSTYLE_EX_MIXEDBUTTONS = $00000008; + TBSTYLE_EX_HIDECLIPPEDBUTTONS = $00000010; // don't show partially obscured buttons +{$ENDIF} // 0x0501 + + +{$ifdef win32xp} + TBSTYLE_EX_DOUBLEBUFFER = $00000080; // Double Buffer the toolbar +{$ENDIF} + +{$ifdef ie4plus} +// Custom Draw Structure +TYPE + + _NMTBCUSTOMDRAW = Record + nmcd : NMCUSTOMDRAW; + hbrMonoDither : HBRUSH; + hbrLines : HBRUSH; // For drawing lines on buttons + hpenLines : HPEN; // For drawing lines on buttons + clrText : COLORREF; // Color of text + clrMark : COLORREF; // Color of text bk when marked. (only if TBSTATE_MARKED) + clrTextHighlight : COLORREF; // Color of text when highlighted + clrBtnFace : COLORREF; // Background of the button + clrBtnHighlight : COLORREF; // 3D highlight + clrHighlightHotTrack : COLORREF; // In conjunction with fHighlightHotTrack + + rcText : RECT; // Rect for text + nStringBkMode : cint; + nHLStringBkMode : cint; +{$ifdef win32xp} + iListGap : cint; +{$ENDIF} + END; + NMTBCUSTOMDRAW = _NMTBCUSTOMDRAW; + LPNMTBCUSTOMDRAW = ^_NMTBCUSTOMDRAW; + TNMTBCUSTOMDRAW = _NMTBCUSTOMDRAW; + PNMTBCUSTOMDRAW = ^_NMTBCUSTOMDRAW; + + +// Toolbar custom draw return flags + +CONST + TBCDRF_NOEDGES = $00010000; // Don't draw button edges + TBCDRF_HILITEHOTTRACK = $00020000; // Use color of the button bk when hottracked + TBCDRF_NOOFFSET = $00040000; // Don't offset button if pressed + TBCDRF_NOMARK = $00080000; // Don't draw default highlight of image/text for TBSTATE_MARKED + TBCDRF_NOETCHEDEFFECT = $00100000; // Don't draw etched effect for disabled items +{$ENDIF} + +{$ifdef ie5plus} + TBCDRF_BLENDICON = $00200000; // Use ILD_BLEND50 on the icon image + TBCDRF_NOBACKGROUND = $00400000; // Use ILD_BLEND50 on the icon image +{$ENDIF} +{$ifdef win32vista} + TBCDRF_USECDCOLORS = $00800000; // Use CustomDrawColors to RenderText regardless of VisualStyle +{$endif} + +CONST + TB_ENABLEBUTTON = (WM_USER + 1); + TB_CHECKBUTTON = (WM_USER + 2); + TB_PRESSBUTTON = (WM_USER + 3); + TB_HIDEBUTTON = (WM_USER + 4); + TB_INDETERMINATE = (WM_USER + 5); +{$ifdef ie4plus} + TB_MARKBUTTON = (WM_USER + 6); +{$ENDIF} + TB_ISBUTTONENABLED = (WM_USER + 9); + TB_ISBUTTONCHECKED = (WM_USER + 10); + TB_ISBUTTONPRESSED = (WM_USER + 11); + TB_ISBUTTONHIDDEN = (WM_USER + 12); + TB_ISBUTTONINDETERMINATE = (WM_USER + 13); +{$ifdef ie4plus} + TB_ISBUTTONHIGHLIGHTED = (WM_USER + 14); +{$ENDIF} + TB_SETSTATE = (WM_USER + 17); + TB_GETSTATE = (WM_USER + 18); + TB_ADDBITMAP = (WM_USER + 19); + +{$IFDEF _WIN32} + +TYPE + + tagTBADDBITMAP = Record + hInst : HINST; + nID : UINT_PTR; + END; + TBADDBITMAP = tagTBADDBITMAP; + LPTBADDBITMAP = ^tagTBADDBITMAP; + TTBADDBITMAP = tagTBADDBITMAP; + PTBADDBITMAP = ^tagTBADDBITMAP; + + + +CONST + HINST_COMMCTRL = HINST(-1); + IDB_STD_SMALL_COLOR = 0; + IDB_STD_LARGE_COLOR = 1; + IDB_VIEW_SMALL_COLOR = 4; + IDB_VIEW_LARGE_COLOR = 5; +{$ifdef ie3plus} + IDB_HIST_SMALL_COLOR = 8; + IDB_HIST_LARGE_COLOR = 9; +{$ENDIF} +{$ifdef win32vista} + IDB_HIST_NORMAL = 12; + IDB_HIST_HOT = 13; + IDB_HIST_DISABLED = 14; + IDB_HIST_PRESSED = 15; +{$endif} + +// icon indexes for standard bitmap + + STD_CUT = 0; + STD_COPY = 1; + STD_PASTE = 2; + STD_UNDO = 3; + STD_REDOW = 4; + STD_DELETE = 5; + STD_FILENEW = 6; + STD_FILEOPEN = 7; + STD_FILESAVE = 8; + STD_PRINTPRE = 9; + STD_PROPERTIES = 10; + STD_HELP = 11; + STD_FIND = 12; + STD_REPLACE = 13; + STD_PRINT = 14; + +// icon indexes for standard view bitmap + + VIEW_LARGEICONS = 0; + VIEW_SMALLICONS = 1; + VIEW_LIST = 2; + VIEW_DETAILS = 3; + VIEW_SORTNAME = 4; + VIEW_SORTSIZE = 5; + VIEW_SORTDATE = 6; + VIEW_SORTTYPE = 7; + VIEW_PARENTFOLDER = 8; + VIEW_NETCONNECT = 9; + VIEW_NETDISCONNECT = 10; + VIEW_NEWFOLDER = 11; +{$ifdef ie4plus} + VIEW_VIEWMENU = 12; +{$ENDIF} + +{$ifdef ie3plus} + HIST_BACK = 0; + HIST_FORWARD = 1; + HIST_FAVORITES = 2; + HIST_ADDTOFAVORITES = 3; + HIST_VIEWTREE = 4; +{$ENDIF} + +{$ENDIF} + +{$ifdef ie4plus} + TB_ADDBUTTONSA = (WM_USER + 20); + TB_INSERTBUTTONA = (WM_USER + 21); +{$ELSE} + TB_ADDBUTTONS = (WM_USER + 20); + TB_INSERTBUTTON = (WM_USER + 21); +{$ENDIF} + + TB_DELETEBUTTON = (WM_USER + 22); + TB_GETBUTTON = (WM_USER + 23); + TB_BUTTONCOUNT = (WM_USER + 24); + TB_COMMANDTOINDEX = (WM_USER + 25); + +{$IFDEF _WIN32} +TYPE + + tagTBSAVEPARAMSA = Record + hkr : HKEY; + pszSubKey : LPCSTR; + pszValueName : LPCSTR; + END; + TBSAVEPARAMSA = tagTBSAVEPARAMSA; + LPTBSAVEPARAMSA = ^tagTBSAVEPARAMSA; + TTBSAVEPARAMSA = tagTBSAVEPARAMSA; + PTBSAVEPARAMSA = ^tagTBSAVEPARAMSA; + + + tagTBSAVEPARAMSW = Record + hkr : HKEY; + pszSubKey : LPCWSTR; + pszValueName : LPCWSTR; + END; + TBSAVEPARAMSW = tagTBSAVEPARAMSW; + LPTBSAVEPARAMW = ^tagTBSAVEPARAMSW; + TTBSAVEPARAMSW = tagTBSAVEPARAMSW; + PTBSAVEPARAMSW = ^tagTBSAVEPARAMSW; + + +{$IFDEF UNICODE} + TBSAVEPARAMS = TBSAVEPARAMSW; + LPTBSAVEPARAMS = LPTBSAVEPARAMSW; +{$ELSE} + TBSAVEPARAMS = TBSAVEPARAMSA; + LPTBSAVEPARAMS = LPTBSAVEPARAMSA; +{$ENDIF} + +{$ENDIF} // _WIN32 + + +CONST + TB_SAVERESTOREA = (WM_USER + 26); + TB_SAVERESTOREW = (WM_USER + 76); + TB_CUSTOMIZE = (WM_USER + 27); + TB_ADDSTRINGA = (WM_USER + 28); + TB_ADDSTRINGW = (WM_USER + 77); + TB_GETITEMRECT = (WM_USER + 29); + TB_BUTTONSTRUCTSIZE = (WM_USER + 30); + TB_SETBUTTONSIZE = (WM_USER + 31); + TB_SETBITMAPSIZE = (WM_USER + 32); + TB_AUTOSIZE = (WM_USER + 33); + TB_GETTOOLTIPS = (WM_USER + 35); + TB_SETTOOLTIPS = (WM_USER + 36); + TB_SETPARENT = (WM_USER + 37); + TB_SETROWS = (WM_USER + 39); + TB_GETROWS = (WM_USER + 40); + TB_SETCMDID = (WM_USER + 42); + TB_CHANGEBITMAP = (WM_USER + 43); + TB_GETBITMAP = (WM_USER + 44); + TB_GETBUTTONTEXTA = (WM_USER + 45); + TB_GETBUTTONTEXTW = (WM_USER + 75); + TB_REPLACEBITMAP = (WM_USER + 46); +{$ifdef ie3plus} + TB_SETINDENT = (WM_USER + 47); + TB_SETIMAGELIST = (WM_USER + 48); + TB_GETIMAGELIST = (WM_USER + 49); + TB_LOADIMAGES = (WM_USER + 50); + TB_GETRECT = (WM_USER + 51); // wParam is the Cmd instead of index + TB_SETHOTIMAGELIST = (WM_USER + 52); + TB_GETHOTIMAGELIST = (WM_USER + 53); + TB_SETDISABLEDIMAGELIST = (WM_USER + 54); + TB_GETDISABLEDIMAGELIST = (WM_USER + 55); + TB_SETSTYLE = (WM_USER + 56); + TB_GETSTYLE = (WM_USER + 57); + TB_GETBUTTONSIZE = (WM_USER + 58); + TB_SETBUTTONWIDTH = (WM_USER + 59); + TB_SETMAXTEXTROWS = (WM_USER + 60); + TB_GETTEXTROWS = (WM_USER + 61); +{$ENDIF} // _WIN32_IE >= 0x0300 + +CONST +{$IFDEF UNICODE} + + TB_SAVERESTORE = TB_SAVERESTOREW; + TB_ADDSTRING = TB_ADDSTRINGW; +{$ELSE} + TB_GETBUTTONTEXT = TB_GETBUTTONTEXTA; + TB_SAVERESTORE = TB_SAVERESTOREA; + TB_ADDSTRING = TB_ADDSTRINGA; +{$ENDIF} +{$ifdef ie4plus} + +CONST + TB_GETOBJECT = (WM_USER + 62); // wParam == IID, lParam void **ppv + TB_GETHOTITEM = (WM_USER + 71); + TB_SETHOTITEM = (WM_USER + 72); // wParam == iHotItem + TB_SETANCHORHIGHLIGHT = (WM_USER + 73); // wParam == TRUE/FALSE + TB_GETANCHORHIGHLIGHT = (WM_USER + 74); + TB_MAPACCELERATORA = (WM_USER + 78); // wParam == ch, lParam int * pidBtn + +TYPE + TBINSERTMARK = Record + iButton : cint; + dwFlags : DWORD; + END; + LPTBINSERTMARK = ^TBINSERTMARK; + TTBINSERTMARK = TBINSERTMARK; + PTBINSERTMARK = ^TBINSERTMARK; + + +CONST + TBIMHT_AFTER = $00000001; // TRUE = insert After iButton, otherwise before + TBIMHT_BACKGROUND = $00000002; // TRUE iff missed buttons completely + + TB_GETINSERTMARK = (WM_USER + 79); // lParam == LPTBINSERTMARK + TB_SETINSERTMARK = (WM_USER + 80); // lParam == LPTBINSERTMARK + TB_INSERTMARKHITTEST = (WM_USER + 81); // wParam == LPPOINT lParam == LPTBINSERTMARK + TB_MOVEBUTTON = (WM_USER + 82); + TB_GETMAXSIZE = (WM_USER + 83); // lParam == LPSIZE + TB_SETEXTENDEDSTYLE = (WM_USER + 84); // For TBSTYLE_EX_* + TB_GETEXTENDEDSTYLE = (WM_USER + 85); // For TBSTYLE_EX_* + TB_GETPADDING = (WM_USER + 86); + TB_SETPADDING = (WM_USER + 87); + TB_SETINSERTMARKCOLOR = (WM_USER + 88); + TB_GETINSERTMARKCOLOR = (WM_USER + 89); + + TB_SETCOLORSCHEME = CCM_SETCOLORSCHEME; // lParam is color scheme + TB_GETCOLORSCHEME = CCM_GETCOLORSCHEME; // fills in COLORSCHEME pointed to by lParam + + TB_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT; + TB_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT; + + TB_MAPACCELERATORW = (WM_USER + 90); // wParam == ch, lParam int * pidBtn + +CONST +{$IFDEF UNICODE} + TB_MAPACCELERATOR = TB_MAPACCELERATORW; +{$ELSE} + TB_MAPACCELERATOR = TB_MAPACCELERATORA; +{$ENDIF} + +{$ENDIF} // _WIN32_IE >= 0x0400 +TYPE + TBREPLACEBITMAP = Record + hInstOld : HINST; + nIDOld : UINT_PTR; + hInstNew : HINST; + nIDNew : UINT_PTR; + nButtons : cint; + END; + LPTBREPLACEBITMAP = ^TBREPLACEBITMAP; + TTBREPLACEBITMAP = TBREPLACEBITMAP; + PTBREPLACEBITMAP = ^TBREPLACEBITMAP; + + +{$IFDEF _WIN32} + +CONST + TBBF_LARGE = $0001; + TB_GETBITMAPFLAGS = (WM_USER + 41); + +{$ifdef ie4plus} + TBIF_IMAGE = $00000001; + TBIF_TEXT = $00000002; + TBIF_STATE = $00000004; + TBIF_STYLE = $00000008; + TBIF_LPARAM = $00000010; + TBIF_COMMAND = $00000020; + TBIF_SIZE = $00000040; + +{$ifdef ie5plus} + TBIF_BYINDEX = $80000000; // this specifies that the wparam in Get/SetButtonInfo is an index, not id +{$ENDIF} + +TYPE + + TBBUTTONINFOA = Record + cbSize : UINT; + dwMask : DWORD; + idCommand : cint; + iImage : cint; + fsState : BYTE; + fsStyle : BYTE; + cx : WORD; + lParam : DWORD_PTR; + pszText : LPSTR; + cchText : cint; + END; + LPTBBUTTONINFOA = ^TBBUTTONINFOA; + TTBBUTTONINFOA = TBBUTTONINFOA; + PTBBUTTONINFOA = ^TBBUTTONINFOA; + + + TBBUTTONINFOW = Record + cbSize : UINT; + dwMask : DWORD; + idCommand : cint; + iImage : cint; + fsState : BYTE; + fsStyle : BYTE; + cx : WORD; + lParam : DWORD_PTR; + pszText : LPWSTR; + cchText : cint; + END; + LPTBBUTTONINFOW = ^TBBUTTONINFOW; + TTBBUTTONINFOW= TBBUTTONINFOW; + PTBBUTTONINFOW= ^TBBUTTONINFOW; + + +{$IFDEF UNICODE} + TBBUTTONINFO = TBBUTTONINFOW; + LPTBBUTTONINFO = LPTBBUTTONINFOW; +{$ELSE} + TBBUTTONINFO = TBBUTTONINFOA; + LPTBBUTTONINFO = LPTBBUTTONINFOA; +{$ENDIF} + TTBButtonInfo = TBBUTTONINFO; + PTBButtonInfo = LPTBBUTTONINFO; + + +// BUTTONINFO APIs do NOT support the string pool. + +CONST + TB_GETBUTTONINFOW = (WM_USER + 63); + TB_SETBUTTONINFOW = (WM_USER + 64); + TB_GETBUTTONINFOA = (WM_USER + 65); + TB_SETBUTTONINFOA = (WM_USER + 66); + +{$IFDEF UNICODE} +CONST + TB_GETBUTTONINFO = TB_GETBUTTONINFOW; + TB_SETBUTTONINFO = TB_SETBUTTONINFOW; +{$ELSE} +CONST + TB_GETBUTTONINFO = TB_GETBUTTONINFOA; + TB_SETBUTTONINFO = TB_SETBUTTONINFOA; +{$ENDIF} + +CONST + TB_INSERTBUTTONW = (WM_USER + 67); + TB_ADDBUTTONSW = (WM_USER + 68); + + TB_HITTEST = (WM_USER + 69); + +// New post Win95/NT4 for InsertButton and AddButton. if iString member +// is a pointer to a string, it will be handled as a string like listview +// (although LPSTR_TEXTCALLBACK is not supported). + +{$IFDEF UNICODE} +CONST + TB_INSERTBUTTON = TB_INSERTBUTTONW; + TB_ADDBUTTONS = TB_ADDBUTTONSW; +{$ELSE} +CONST + TB_INSERTBUTTON = TB_INSERTBUTTONA; + TB_ADDBUTTONS = TB_ADDBUTTONSA; +{$ENDIF} + + +CONST + TB_SETDRAWTEXTFLAGS = (WM_USER + 70); // wParam == mask lParam == bit values + +{$ENDIF} // _WIN32_IE >= 0x0400 + +{$ifdef ie5plus} + + TB_GETSTRINGW = (WM_USER + 91); + TB_GETSTRINGA = (WM_USER + 92); +{$IFDEF UNICODE} + + TB_GETSTRING = TB_GETSTRINGW; +{$ELSE} + TB_GETSTRING = TB_GETSTRINGA; +{$ENDIF} + + +{$ENDIF} // _WIN32_IE >= 0x0500 + +{$ifdef win32xp} + +CONST + TBMF_PAD = $00000001; + TBMF_BARPAD = $00000002; + TBMF_BUTTONSPACING = $00000004; + +TYPE + + TBMETRICS = Record + cbSize : UINT; + dwMask : DWORD; + cxPad : cint; // PAD + cyPad : cint; + cxBarPad : cint; // BARPAD + cyBarPad : cint; + cxButtonSpacing : cint; // BUTTONSPACING + cyButtonSpacing : cint; + END; + LPTBMETRICS = ^TBMETRICS; + TTBMETRICS = TBMETRICS; + PTBMETRICS = ^TBMETRICS; + +CONST + TB_GETMETRICS = (WM_USER + 101); + TB_SETMETRICS = (WM_USER + 102); +{$ENDIF} + +{$ifdef win32vista} + TB_SETPRESSEDIMAGELIST = (WM_USER + 104); + TB_GETPRESSEDIMAGELIST = (WM_USER + 105); +{$endif} + +{$ifdef win32xp} + TB_SETWINDOWTHEME = CCM_SETWINDOWTHEME; +{$ENDIF} + + TBN_GETBUTTONINFOA = (TBN_FIRST-0); + TBN_BEGINDRAG = (TBN_FIRST-1); + TBN_ENDDRAG = (TBN_FIRST-2); + TBN_BEGINADJUST = (TBN_FIRST-3); + TBN_ENDADJUST = (TBN_FIRST-4); + TBN_RESET = (TBN_FIRST-5); + TBN_QUERYINSERT = (TBN_FIRST-6); + TBN_QUERYDELETE = (TBN_FIRST-7); + TBN_TOOLBARCHANGE = (TBN_FIRST-8); + TBN_CUSTHELP = (TBN_FIRST-9); +{$ifdef ie3plus} + TBN_DROPDOWN = (TBN_FIRST - 10); +{$ENDIF} +{$ifdef ie4plus} + TBN_GETOBJECT = (TBN_FIRST - 12); + +// Structure for TBN_HOTITEMCHANGE notification +// +TYPE + + tagNMTBHOTITEM = Record + hdr : NMHDR; + idOld : cint; + idNew : cint; + dwFlags : DWORD; // HICF_* + END; + NMTBHOTITEM = tagNMTBHOTITEM; + LPNMTBHOTITEM = ^tagNMTBHOTITEM; + TNMTBHOTITEM = tagNMTBHOTITEM; + PNMTBHOTITEM = ^tagNMTBHOTITEM; + + +// Hot item change flags + +CONST + HICF_OTHER = $00000000; + HICF_MOUSE = $00000001; // Triggered by mouse + HICF_ARROWKEYS = $00000002; // Triggered by arrow keys + HICF_ACCELERATOR = $00000004; // Triggered by accelerator + HICF_DUPACCEL = $00000008; // This accelerator is not unique + HICF_ENTERING = $00000010; // idOld is invalid + HICF_LEAVING = $00000020; // idNew is invalid + HICF_RESELECT = $00000040; // hot item reselected + HICF_LMOUSE = $00000080; // left mouse button selected + HICF_TOGGLEDROPDOWN = $00000100; // Toggle button's dropdown state + + + TBN_HOTITEMCHANGE = (TBN_FIRST - 13); + TBN_DRAGOUT = (TBN_FIRST - 14); // this is sent when the user clicks down on a button then drags off the button + TBN_DELETINGBUTTON = (TBN_FIRST - 15); // uses TBNOTIFY + TBN_GETDISPINFOA = (TBN_FIRST - 16); // This is sent when the toolbar needs some display information + TBN_GETDISPINFOW = (TBN_FIRST - 17); // This is sent when the toolbar needs some display information + TBN_GETINFOTIPA = (TBN_FIRST - 18); + TBN_GETINFOTIPW = (TBN_FIRST - 19); + TBN_GETBUTTONINFOW = (TBN_FIRST - 20); +{$ifdef ie5plus} + TBN_RESTORE = (TBN_FIRST - 21); + TBN_SAVE = (TBN_FIRST - 22); + TBN_INITCUSTOMIZE = (TBN_FIRST - 23); + TBNRF_HIDEHELP = $00000001; + TBNRF_ENDCUSTOMIZE = $00000002; +{$ENDIF} // (_WIN32_IE >= 0x0500) + + + +{$ifdef ie5plus} + +TYPE + + tagNMTBSAVE = Record + hdr : NMHDR; + pData : PDWORD; + pCurrent : PDWORD; + cbData : UINT; + iItem : cint; + cButtons : cint; + tbButton : TBBUTTON; + END; + NMTBSAVE = tagNMTBSAVE; + LPNMTBSAVE = ^tagNMTBSAVE; + TNMTBSAVE = tagNMTBSAVE; + PNMTBSAVE = ^tagNMTBSAVE; + + + tagNMTBRESTORE = Record + hdr : NMHDR; + pData : PDWORD; + pCurrent : PDWORD; + cbData : UINT; + iItem : cint; + cButtons : cint; + cbBytesPerRecord : cint; + tbButton : TBBUTTON; + END; + NMTBRESTORE = tagNMTBRESTORE; + LPNMTBRESTORE = ^tagNMTBRESTORE; + TNMTBRESTORE = tagNMTBRESTORE; + PNMTBRESTORE = ^tagNMTBRESTORE; + +{$ENDIF} // (_WIN32_IE >= 0x0500) + + tagNMTBGETINFOTIPA = Record + hdr : NMHDR; + pszText : LPSTR; + cchTextMax : cint; + iItem : cint; + lParam : LPARAM; + END; + NMTBGETINFOTIPA = tagNMTBGETINFOTIPA; + LPNMTBGETINFOTIPA = ^tagNMTBGETINFOTIPA; + TNMTBGETINFOTIPA = tagNMTBGETINFOTIPA; + PNMTBGETINFOTIPA = ^tagNMTBGETINFOTIPA; + + + tagNMTBGETINFOTIPW = Record + hdr : NMHDR; + pszText : LPWSTR; + cchTextMax : cint; + iItem : cint; + lParam : LPARAM; + END; + NMTBGETINFOTIPW = tagNMTBGETINFOTIPW; + LPNMTBGETINFOTIPW = ^tagNMTBGETINFOTIPW; + TNMTBGETINFOTIPW = tagNMTBGETINFOTIPW; + PNMTBGETINFOTIPW = ^tagNMTBGETINFOTIPW; + + +{$IFDEF UNICODE} +CONST + TBN_GETINFOTIP = TBN_GETINFOTIPW; +TYPE + NMTBGETINFOTIP = NMTBGETINFOTIPW; + LPNMTBGETINFOTIP = LPNMTBGETINFOTIPW; +{$ELSE} +CONST + TBN_GETINFOTIP = TBN_GETINFOTIPA; +TYPE + NMTBGETINFOTIP = NMTBGETINFOTIPA; + LPNMTBGETINFOTIP = LPNMTBGETINFOTIPA; +{$ENDIF} + + +CONST + TBNF_IMAGE = $00000001; + TBNF_TEXT = $00000002; + TBNF_DI_SETITEM = $10000000; + +TYPE + + NMTBDISPINFOA = Record + hdr : NMHDR; + dwMask : DWORD; // [in] Specifies the values requested .[out] Client ask the data to be set for future use + idCommand : cint; // [in] id of button we're requesting info for + lParam : DWORD_PTR; // [in] lParam of button + iImage : cint; // [out] image index + pszText : LPSTR; // [out] new text for item + cchText : cint; // [in] size of buffer pointed to by pszText + END; + LPNMTBDISPINFOA = ^NMTBDISPINFOA; + TNMTBDISPINFOA = NMTBDISPINFOA; + PNMTBDISPINFOA = ^NMTBDISPINFOA; + + + NMTBDISPINFOW = Record + hdr : NMHDR; + dwMask : DWORD; //[in] Specifies the values requested .[out] Client ask the data to be set for future use + idCommand : cint; // [in] id of button we're requesting info for + lParam : DWORD_PTR; // [in] lParam of button + iImage : cint; // [out] image index + pszText : LPWSTR; // [out] new text for item + cchText : cint; // [in] size of buffer pointed to by pszText + END; + LPNMTBDISPINFOW = ^NMTBDISPINFOW; + TNMTBDISPINFOW = NMTBDISPINFOW; + PNMTBDISPINFOW = ^NMTBDISPINFOW; + +{$IFDEF UNICODE} +CONST + TBN_GETDISPINFO = TBN_GETDISPINFOW; +TYPE + NMTBDISPINFO = NMTBDISPINFOW; + LPNMTBDISPINFO = LPNMTBDISPINFOW; +{$ELSE} +CONST + TBN_GETDISPINFO = TBN_GETDISPINFOA; +TYPE + NMTBDISPINFO = NMTBDISPINFOA; + LPNMTBDISPINFO = LPNMTBDISPINFOA; +{$ENDIF} + +// Return codes for TBN_DROPDOWN + +CONST + TBDDRET_DEFAULT = 0; + TBDDRET_NODEFAULT = 1; + TBDDRET_TREATPRESSED = 2; // Treat as a standard press button + +{$ENDIF} +{$IFDEF UNICODE} + TBN_GETBUTTONINFO = TBN_GETBUTTONINFOW; +{$ELSE} + TBN_GETBUTTONINFO = TBN_GETBUTTONINFOA; +{$ENDIF} +TYPE + +{$ifdef ie3plus} + tagNMTOOLBARA = Record + hdr : NMHDR; + iItem : cint; + tbButton : TBBUTTON; + cchText : cint; + pszText : LPSTR; +{$ifdef ie5plus} + rcButton : RECT; +{$ENDIF} + END; + NMTOOLBARA = tagNMTOOLBARA; + LPNMTOOLBARA = ^tagNMTOOLBARA; + LPNMTOOLBAR = LPNMTOOLBARA; + TNMTOOLBARA = tagNMTOOLBARA; + PNMTOOLBARA = LPNMTOOLBARA; +{$ENDIF} + LPTBNOTIFY = LPNMTOOLBARA; + TBNOTIFYA = NMTOOLBARA; + + +{$ifdef ie3plus} + tagNMTOOLBARW = Record + hdr : NMHDR; + iItem : cint; + tbButton : TBBUTTON; + cchText : cint; + pszText : LPWSTR; +{$ifdef ie5plus} + rcButton : RECT; +{$ENDIF} + END; + NMTOOLBARW = tagNMTOOLBARW; + LPNMTOOLBARW = ^tagNMTOOLBARW; + TNMTOOLBARW = tagNMTOOLBARW; + PNMTOOLBARW = ^tagNMTOOLBARW; +{$ENDIF} + + +{$ifdef ie3plus} + TBNOTIFYW = NMTOOLBARW; + LPTBNOTIFYA = LPNMTOOLBARA; +{$ELSE} + tagNMTOOLBARA = tagTBNOTIFYA; + NMTOOLBARA = TBNOTIFYA; + LPNMTOOLBARA = LPTBNOTIFYA; + tagNMTOOLBARW = tagTBNOTIFYW; + NMTOOLBARW = TBNOTIFYW; + LPNMTOOLBARW = LPTBNOTIFYW; +{$ENDIF} + + +{$IFDEF UNICODE} + NMTOOLBAR = NMTOOLBARW; + LPNMTOOLBAR = LPNMTOOLBARW; +{$ELSE} + NMTOOLBAR = NMTOOLBARA; + TNMTOOLBAR = NMTOOLBARA; + PNMTOOLBAR = LPNMTOOLBARA; + +{$ENDIF} + + TBNOTIFY = NMTOOLBAR; +{$ENDIF} + +{$ENDIF} // NOTOOLBAR + + LPTBNOTIFYW = LPNMTOOLBARW; + +{$ifdef ie3plus} +//====== REBAR CONTROL ======================================================== + +{$IFNDEF NOREBAR} + +{$IFDEF _WIN32} + +CONST + REBARCLASSNAMEW = {L}'ReBarWindow32'; + REBARCLASSNAMEA = 'ReBarWindow32'; + +{$IFDEF UNICODE} + REBARCLASSNAME = REBARCLASSNAMEW; +{$ELSE} + REBARCLASSNAME = REBARCLASSNAMEA; +{$ENDIF} + +{$ELSE} + +CONST + REBARCLASSNAME = 'ReBarWindow'; +{$ENDIF} + +CONST + RBIM_IMAGELIST = $00000001; + +// begin_r_commctrl + +{$ifdef ie4plus} + RBS_TOOLTIPS = $0100; + RBS_VARHEIGHT = $0200; + RBS_BANDBORDERS = $0400; + RBS_FIXEDORDER = $0800; + RBS_REGISTERDROP = $1000; + RBS_AUTOSIZE = $2000; + RBS_VERTICALGRIPPER = $4000; // this always has the vertical gripper (default for horizontal mode) + RBS_DBLCLKTOGGLE = $8000; +{$ELSE} + RBS_TOOLTIPS = $00000100; + RBS_VARHEIGHT = $00000200; + RBS_BANDBORDERS = $00000400; + RBS_FIXEDORDER = $00000800; +{$ENDIF} // _WIN32_IE >= 0x0400 + + +// end_r_commctrl + +TYPE + + tagREBARINFO = Record + cbSize : UINT; + fMask : UINT; +{$IFNDEF NOIMAGEAPIS} + himl : HIMAGELIST; +{$ELSE} + himl : HANDLE; +{$ENDIF} + END; + REBARINFO = tagREBARINFO; + LPREBARINFO = ^tagREBARINFO; + TREBARINFO = tagREBARINFO; + PREBARINFO = ^tagREBARINFO; + + +CONST + RBBS_BREAK = $00000001; // break to new line + RBBS_FIXEDSIZE = $00000002; // band can't be sized + RBBS_CHILDEDGE = $00000004; // edge around top & bottom of child window + RBBS_HIDDEN = $00000008; // don't show + RBBS_NOVERT = $00000010; // don't show when vertical + RBBS_FIXEDBMP = $00000020; // bitmap doesn't move during band resize +{$ifdef ie4plus } + RBBS_VARIABLEHEIGHT = $00000040; // allow autosizing of this child vertically + RBBS_GRIPPERALWAYS = $00000080; // always show the gripper + RBBS_NOGRIPPER = $00000100; // never show the gripper +{$ifdef ie5plus} + RBBS_USECHEVRON = $00000200; // display drop-down button for this band if it's sized smaller than ideal width +{$ifdef IE501plus} + RBBS_HIDETITLE = $00000400; // keep band title hidden + RBBS_TOPALIGN = $00000800; // keep band title hidden +{$ENDIF} // 0x0501 // +{$ENDIF} // 0x0500 // +{$ENDIF} // 0x0400 // + + RBBIM_STYLE = $00000001; + RBBIM_COLORS = $00000002; + RBBIM_TEXT = $00000004; + RBBIM_IMAGE = $00000008; + RBBIM_CHILD = $00000010; + RBBIM_CHILDSIZE = $00000020; + RBBIM_SIZE = $00000040; + RBBIM_BACKGROUND = $00000080; + RBBIM_ID = $00000100; +{$ifdef ie4plus} + RBBIM_IDEALSIZE = $00000200; + RBBIM_LPARAM = $00000400; + RBBIM_HEADERSIZE = $00000800; // control the size of the header +{$ENDIF} +{$ifdef win32vista} + RBBIM_CHEVRONLOCATION = $00001000; + RBBIM_CHEVRONSTATE = $00002000; +{$endif} + +TYPE + + tagREBARBANDINFOA = Record + cbSize : UINT; + fMask : UINT; + fStyle : UINT; + clrFore : COLORREF; + clrBack : COLORREF; + lpText : LPSTR; + cch : UINT; + iImage : cint; + hwndChild : HWND; + cxMinChild : UINT; + cyMinChild : UINT; + cx : UINT; + hbmBack : HBITMAP; + wID : UINT; +{$ifdef ie4plus} + cyChild : UINT; + cyMaxChild : UINT; + cyIntegral : UINT; + cxIdeal : UINT; + lParam : LPARAM; + cxHeader : UINT; +{$ENDIF} +{$ifdef win32vista} + rcChevronLocation : RECT; // the rect is in client co-ord wrt hwndChild + uChevronState : cUINT; // STATE_SYSTEM_* +{$endif} + END; + REBARBANDINFOA = tagREBARBANDINFOA; + LPREBARBANDINFOA = ^tagREBARBANDINFOA; + TREBARBANDINFOA = tagREBARBANDINFOA; + PREBARBANDINFOA = ^tagREBARBANDINFOA; + + LPCREBARBANDINFOA = ^REBARBANDINFOA; + +// #define REBARBANDINFOA_V3_SIZE CCSIZEOF_STRUCT(REBARBANDINFOA, wID) +// #define REBARBANDINFOW_V3_SIZE CCSIZEOF_STRUCT(REBARBANDINFOW, wID) + + tagREBARBANDINFOW = Record + cbSize : UINT; + fMask : UINT; + fStyle : UINT; + clrFore : COLORREF; + clrBack : COLORREF; + lpText : LPWSTR; + cch : UINT; + iImage : cint; + hwndChild : HWND; + cxMinChild : UINT; + cyMinChild : UINT; + cx : UINT; + hbmBack : HBITMAP; + wID : UINT; +{$ifdef ie4plus} + cyChild : UINT; + cyMaxChild : UINT; + cyIntegral : UINT; + cxIdeal : UINT; + lParam : LPARAM; + cxHeader : UINT; +{$ENDIF} +{$ifdef win32vista} + rcChevronLocation : RECT; // the rect is in client co-ord wrt hwndChild + uChevronState : cUINT; // STATE_SYSTEM_* +{$endif} + + END; + REBARBANDINFOW = tagREBARBANDINFOW; + LPREBARBANDINFOW = ^tagREBARBANDINFOW; + TREBARBANDINFOW = tagREBARBANDINFOW; + PREBARBANDINFOW = ^tagREBARBANDINFOW; + + LPCREBARBANDINFOW = {const} ^REBARBANDINFOW; + +{$IFDEF UNICODE} + REBARBANDINFO = REBARBANDINFOW; + LPREBARBANDINFO = LPREBARBANDINFOW; + LPCREBARBANDINFO = LPCREBARBANDINFOW; + +// REBARBANDINFO_V3_SIZE = REBARBANDINFOW_V3_SIZE; +{$ELSE} + + REBARBANDINFO = REBARBANDINFOA; + LPREBARBANDINFO = LPREBARBANDINFOA; + LPCREBARBANDINFO = LPCREBARBANDINFOA; + + TRebarBandInfo = REBARBANDINFO; + PRebarBandInfo = ^LPREBARBANDINFO; + +// REBARBANDINFO_V3_SIZE = REBARBANDINFOA_V3_SIZE; +{$ENDIF} + +CONST + RB_INSERTBANDA = (WM_USER + 1); + RB_DELETEBAND = (WM_USER + 2); + RB_GETBARINFO = (WM_USER + 3); + RB_SETBARINFO = (WM_USER + 4); +{$ifdef IE4plus} + RB_GETBANDINFO = (WM_USER + 5); + RB_GETBANDINFO_PRE_IE4 = (WM_USER + 5); +{$ENDIF} + RB_SETBANDINFOA = (WM_USER + 6); + RB_SETPARENT = (WM_USER + 7); +{$ifdef ie4plus} + RB_HITTEST = (WM_USER + 8); + RB_GETRECT = (WM_USER + 9); +{$ENDIF} + RB_INSERTBANDW = (WM_USER + 10); + RB_SETBANDINFOW = (WM_USER + 11); + RB_GETBANDCOUNT = (WM_USER + 12); + RB_GETROWCOUNT = (WM_USER + 13); + RB_GETROWHEIGHT = (WM_USER + 14); +{$ifdef ie4plus} + RB_IDTOINDEX = (WM_USER + 16); // wParam == id + RB_GETTOOLTIPS = (WM_USER + 17); + RB_SETTOOLTIPS = (WM_USER + 18); + RB_SETBKCOLOR = (WM_USER + 19); // sets the default BK color + RB_GETBKCOLOR = (WM_USER + 20); // defaults to CLR_NONE + RB_SETTEXTCOLOR = (WM_USER + 21); + RB_GETTEXTCOLOR = (WM_USER + 22); // defaults to 0x00000000 + +{$ifdef Win32XP} + RBSTR_CHANGERECT = $0001; // flags for RB_SIZETORECT +{$ENDIF} + + RB_SIZETORECT = (WM_USER + 23); // resize the rebar/break bands and such to this rect (lparam) +{$ENDIF} // _WIN32_IE >= 0x0400 + + RB_SETCOLORSCHEME = CCM_SETCOLORSCHEME; // lParam is color scheme + RB_GETCOLORSCHEME = CCM_GETCOLORSCHEME; // fills in COLORSCHEME pointed to by lParam + +{$IFDEF UNICODE} + RB_INSERTBAND = RB_INSERTBANDW; + RB_SETBANDINFO = RB_SETBANDINFOW; +{$ELSE} + RB_INSERTBAND = RB_INSERTBANDA; + RB_SETBANDINFO = RB_SETBANDINFOA; +{$ENDIF} + +{$ifdef ie4plus} +// for manual drag control +// lparam == cursor pos + // -1 means do it yourself. + // -2 means use what you had saved before + +CONST + RB_BEGINDRAG = (WM_USER + 24); + RB_ENDDRAG = (WM_USER + 25); + RB_DRAGMOVE = (WM_USER + 26); + RB_GETBARHEIGHT = (WM_USER + 27); + RB_GETBANDINFOW = (WM_USER + 28); + RB_GETBANDINFOA = (WM_USER + 29); + +//TYPE +{$IFDEF UNICODE} +// RB_GETBANDINFO = RB_GETBANDINFOW; +{$ELSE} +// RB_GETBANDINFO = RB_GETBANDINFOA; +{$ENDIF} + +CONST + RB_MINIMIZEBAND = (WM_USER + 30); + RB_MAXIMIZEBAND = (WM_USER + 31); + + RB_GETDROPTARGET = (CCM_GETDROPTARGET); + + RB_GETBANDBORDERS = (WM_USER + 34); // returns in lparam = lprc the amount of edges added to band wparam + + RB_SHOWBAND = (WM_USER + 35); // show/hide band + RB_SETPALETTE = (WM_USER + 37); + RB_GETPALETTE = (WM_USER + 38); + RB_MOVEBAND = (WM_USER + 39); + + RB_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT; + RB_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT; + +{$ENDIF} // _WIN32_IE >= 0x0400 + +{$ifdef win32xp} + RB_GETBANDMARGINS = (WM_USER + 40); + RB_SETWINDOWTHEME = CCM_SETWINDOWTHEME; +{$ENDIF} +{$ifdef win32vista} + RB_SETEXTENDEDSTYLE = (WM_USER + 41); + RB_GETEXTENDEDSTYLE = (WM_USER + 42); +{$endif} + +{$ifdef ie5plus} + RB_PUSHCHEVRON = (WM_USER + 43); +{$ENDIF} // _WIN32_IE >= 0x0500 + +{$ifdef win32vista} + RB_SETBANDWIDTH = (WM_USER + 44); // set width for docked band +{$endif} + + RBN_HEIGHTCHANGE = (RBN_FIRST - 0); + +{$ifdef ie4plus} + RBN_GETOBJECT = (RBN_FIRST - 1); + RBN_LAYOUTCHANGED = (RBN_FIRST - 2); + RBN_AUTOSIZE = (RBN_FIRST - 3); + RBN_BEGINDRAG = (RBN_FIRST - 4); + RBN_ENDDRAG = (RBN_FIRST - 5); + RBN_DELETINGBAND = (RBN_FIRST - 6); // Uses NMREBAR + RBN_DELETEDBAND = (RBN_FIRST - 7); // Uses NMREBAR + RBN_CHILDSIZE = (RBN_FIRST - 8); + +{$ifdef ie5plus} + RBN_CHEVRONPUSHED = (RBN_FIRST - 10); +{$ENDIF} // _WIN32_IE >= 0x0500 +{$ifdef win32vista} + RBN_SPLITTERDRAG = (RBN_FIRST - 11); +{$endif} + +{$ifdef ie5plus} + RBN_MINMAX = (RBN_FIRST - 21); +{$ENDIF} + +{$ifdef Win32XP} + RBN_AUTOBREAK = (RBN_FIRST - 22); +{$ENDIF} + +TYPE + + tagNMREBARCHILDSIZE = Record + hdr : NMHDR; + uBand : UINT; + wID : UINT; + rcChild : RECT; + rcBand : RECT; + END; + NMREBARCHILDSIZE = tagNMREBARCHILDSIZE; + LPNMREBARCHILDSIZE = ^tagNMREBARCHILDSIZE; + TNMREBARCHILDSIZE = tagNMREBARCHILDSIZE; + PNMREBARCHILDSIZE = ^tagNMREBARCHILDSIZE; + + + tagNMREBAR = Record + hdr : NMHDR; + dwMask : DWORD; // RBNM_* + uBand : UINT; + fStyle : UINT; + wID : UINT; + lParam : LPARAM; + END; + NMREBAR = tagNMREBAR; + LPNMREBAR = ^tagNMREBAR; + TNMREBAR = tagNMREBAR; + PNMREBAR = ^tagNMREBAR; + +// Mask flags for NMREBAR + +CONST + RBNM_ID = $00000001; + RBNM_STYLE = $00000002; + RBNM_LPARAM = $00000004; + +TYPE + + tagNMRBAUTOSIZE = Record + hdr : NMHDR; + fChanged : BOOL; + rcTarget : RECT; + rcActual : RECT; + END; + NMRBAUTOSIZE = tagNMRBAUTOSIZE; + LPNMRBAUTOSIZE = ^tagNMRBAUTOSIZE; + TNMRBAUTOSIZE = tagNMRBAUTOSIZE; + PNMRBAUTOSIZE = ^tagNMRBAUTOSIZE; + + +{$ifdef ie5plus} + tagNMREBARCHEVRON = Record + hdr : NMHDR; + uBand : UINT; + wID : UINT; + lParam : LPARAM; + rc : RECT; + lParamNM : LPARAM; + END; + NMREBARCHEVRON = tagNMREBARCHEVRON; + LPNMREBARCHEVRON = ^tagNMREBARCHEVRON; + TNMREBARCHEVRON = tagNMREBARCHEVRON; + PNMREBARCHEVRON = ^tagNMREBARCHEVRON; + +{$ENDIF} +{$ifdef win32vista} + tagNMREBARSPLITTER = record + hdr: NMHDR; + rcSizing: RECT; + end; + NMREBARSPLITTER = tagNMREBARSPLITTER; + LPNMREBARSPLITTER = ^tagNMREBARSPLITTER; + TNMREBARSPLITTER = tagNMREBARSPLITTER; + PNMREBARSPLITTER = LPNMREBARSPLITTER; +{$endif} + +{$ifdef Win32XP} +CONST + RBAB_AUTOSIZE = $0001; // These are not flags and are all mutually exclusive + RBAB_ADDBAND = $0002; + +TYPE + + tagNMREBARAUTOBREAK = Record + hdr : NMHDR; + uBand : UINT; + wID : UINT; + lParam : LPARAM; + uMsg : UINT; + fStyleCurrent : UINT; + fAutoBreak : BOOL; + END; + NMREBARAUTOBREAK = tagNMREBARAUTOBREAK; + LPNMREBARAUTOBREAK = ^tagNMREBARAUTOBREAK; + TNMREBARAUTOBREAK = tagNMREBARAUTOBREAK; + PNMREBARAUTOBREAK = ^tagNMREBARAUTOBREAK; + +{$ENDIF} + +CONST + RBHT_NOWHERE = $0001; + RBHT_CAPTION = $0002; + RBHT_CLIENT = $0003; + RBHT_GRABBER = $0004; +{$ifdef ie5plus} + RBHT_CHEVRON = $0008; +{$ENDIF} +{$ifdef win32vista} + RBHT_SPLITTER = $0010; +{$endif} + +TYPE + _RB_HITTESTINFO = Record + pt : POINT; + flags : UINT; + iBand : cint; + END; + RBHITTESTINFO = _RB_HITTESTINFO; + LPRBHITTESTINFO = ^_RB_HITTESTINFO; + TRB_HITTESTINFO = _RB_HITTESTINFO; + PRB_HITTESTINFO = ^_RB_HITTESTINFO; + PRBHitTestInfo = PRB_HITTESTINFO; + TRBHitTestInfo = TRB_HITTESTINFO; + + +{$ENDIF} // _WIN32_IE >= 0x0400 +{$ENDIF} // NOREBAR +{$ENDIF} // _WIN32_IE >= 0x0300 + +//====== TOOLTIPS CONTROL ===================================================== + +{$IFNDEF NOTOOLTIPS} + +{$IFDEF _WIN32} + +CONST + TOOLTIPS_CLASSW = {L}'tooltips_class32'; + TOOLTIPS_CLASSA = 'tooltips_class32'; + +{$IFDEF UNICODE} + TOOLTIPS_CLASS = TOOLTIPS_CLASSW; +{$ELSE} + TOOLTIPS_CLASS = TOOLTIPS_CLASSA; +{$ENDIF} + +{$ELSE} + +CONST + TOOLTIPS_CLASS = 'tooltips_class'; +{$ENDIF} + + + +TYPE + + tagTOOLINFOA = Record + cbSize : UINT; + uFlags : UINT; + hwnd : HWND; + uId : UINT_PTR; + rect : RECT; + hinst : HINST; + lpszText : LPSTR; +{$ifdef ie3plus} + lParam : LPARAM; +{$ENDIF} +{$ifdef Win32XP} + lpReserved : Pointer; +{$ENDIF} + END; + TTTOOLINFOA = tagTOOLINFOA; + PTOOLINFOA = {near} ^tagTOOLINFOA; + LPTTTOOLINFOA = ^tagTOOLINFOA; + TTOOLINFOA = tagTOOLINFOA; + LPTOOLINFOA = ^tagTOOLINFOA; + + + tagTOOLINFOW = Record + cbSize : UINT; + uFlags : UINT; + hwnd : HWND; + uId : UINT_PTR; + rect : RECT; + hinst : HINST; + lpszText : LPWSTR; +{$ifdef ie3plus} + lParam : LPARAM; +{$ENDIF} +{$ifdef Win32XP} + lpReserved : Pointer; +{$ENDIF} + END; + TTTOOLINFOW = tagTOOLINFOW; + PTOOLINFOW = {near} ^tagTOOLINFOW; + LPTTTOOLINFOW = ^tagTOOLINFOW; + TTOOLINFOW = tagTOOLINFOW; + LPTOOLINFOW = ^tagTOOLINFOW; + + +{$IFDEF UNICODE} + TTTOOLINFO = TTTOOLINFOW; + PTOOLINFO = PTOOLINFOW; + LPTTTOOLINFO = LPTTTOOLINFOW; +// TTTOOLINFO_V1_SIZE = TTTOOLINFOW_V1_SIZE; +{$ELSE} + PTOOLINFO = PTOOLINFOA; + TTTOOLINFO = TTTOOLINFOA; + LPTTTOOLINFO = LPTTTOOLINFOA; +// TTTOOLINFO_V1_SIZE = TTTOOLINFOA_V1_SIZE; +{$ENDIF} + + +TYPE + +{$ifdef ie3plus} +// LPTOOLINFOA = LPTTTOOLINFOA; +// LPTOOLINFOW = LPTTTOOLINFOW; + TOOLINFOA = TTTOOLINFOA; + TOOLINFOW = TTTOOLINFOW; +{$ELSE} +// TTTOOLINFOA = TOOLINFOA; +// LPTTTOOLINFOA = LPTOOLINFOA; +// TTTOOLINFOW = TOOLINFOW; +// LPTTTOOLINFOW = LPTOOLINFOW; +{$ENDIF} + + + + LPTOOLINFO = LPTTTOOLINFO; + + TOOLINFO = TTTOOLINFO; + +// #define TTTOOLINFOA_V1_SIZE CCSIZEOF_STRUCT(TTTOOLINFOA, lpszText) +// #define TTTOOLINFOW_V1_SIZE CCSIZEOF_STRUCT(TTTOOLINFOW, lpszText) +// #define TTTOOLINFOA_V2_SIZE CCSIZEOF_STRUCT(TTTOOLINFOA, lParam) +// #define TTTOOLINFOW_V2_SIZE CCSIZEOF_STRUCT(TTTOOLINFOW, lParam) +// #define TTTOOLINFOA_V3_SIZE CCSIZEOF_STRUCT(TTTOOLINFOA, lpReserved) +// #define TTTOOLINFOW_V3_SIZE CCSIZEOF_STRUCT(TTTOOLINFOW, lpReserved) + + +CONST +// begin_r_commctrl + + TTS_ALWAYSTIP = $01; + TTS_NOPREFIX = $02; +{$ifdef ie5plus} + TTS_NOANIMATE = $10; + TTS_NOFADE = $20; + TTS_BALLOON = $40; + TTS_CLOSE = $80; +{$ENDIF} +{$ifdef win32vista} + TTS_USEVISUALSTYLE = $100; // Use themed hyperlinks +{$endif} + +// end_r_commctrl + + TTF_IDISHWND = $0001; + +// Use this to center around trackpoint in trackmode +// -OR- to center around tool in normal mode. +// Use TTF_ABSOLUTE to place the tip exactly at the track coords when +// in tracking mode. TTF_ABSOLUTE can be used in conjunction with TTF_CENTERTIP +// to center the tip absolutely about the track point. + + TTF_CENTERTIP = $0002; + TTF_RTLREADING = $0004; + TTF_SUBCLASS = $0010; +{$ifdef ie3plus} + TTF_TRACK = $0020; + TTF_ABSOLUTE = $0080; + TTF_TRANSPARENT = $0100; +{$ifdef ie501plus} + TTF_PARSELINKS = $1000; +{$ENDIF} // _WIN32_IE >= 0x0501 + TTF_DI_SETITEM = $8000; // valid only on the TTN_NEEDTEXT callback +{$ENDIF} // _WIN32_IE >= 0x0300 + + + TTDT_AUTOMATIC = 0; + TTDT_RESHOW = 1; + TTDT_AUTOPOP = 2; + TTDT_INITIAL = 3; + +// ToolTip Icons (Set with TTM_SETTITLE) + TTI_NONE = 0; + TTI_INFO = 1; + TTI_WARNING = 2; + TTI_ERROR = 3; +{$ifdef win32vista} + TTI_INFO_LARGE = 4; + TTI_WARNING_LARGE = 5; + TTI_ERROR_LARGE = 6; +{$endif} + +// Tool Tip Messages + TTM_ACTIVATE = (WM_USER + 1); + TTM_SETDELAYTIME = (WM_USER + 3); + TTM_ADDTOOLA = (WM_USER + 4); + TTM_ADDTOOLW = (WM_USER + 50); + TTM_DELTOOLA = (WM_USER + 5); + TTM_DELTOOLW = (WM_USER + 51); + TTM_NEWTOOLRECTA = (WM_USER + 6); + TTM_NEWTOOLRECTW = (WM_USER + 52); + TTM_RELAYEVENT = (WM_USER + 7); + + TTM_GETTOOLINFOA = (WM_USER + 8); + TTM_GETTOOLINFOW = (WM_USER + 53); + + TTM_SETTOOLINFOA = (WM_USER + 9); + TTM_SETTOOLINFOW = (WM_USER + 54); + + TTM_HITTESTA = (WM_USER + 10); + TTM_HITTESTW = (WM_USER + 55); + TTM_GETTEXTA = (WM_USER + 11); + TTM_GETTEXTW = (WM_USER + 56); + TTM_UPDATETIPTEXTA = (WM_USER + 12); + TTM_UPDATETIPTEXTW = (WM_USER + 57); + TTM_GETTOOLCOUNT = (WM_USER + 13); + TTM_ENUMTOOLSA = (WM_USER + 14); + TTM_ENUMTOOLSW = (WM_USER + 58); + TTM_GETCURRENTTOOLA = (WM_USER + 15); + TTM_GETCURRENTTOOLW = (WM_USER + 59); + TTM_WINDOWFROMPOINT = (WM_USER + 16); +{$ifdef ie3plus} + TTM_TRACKACTIVATE = (WM_USER + 17); // wParam = TRUE/FALSE start end lparam = LPTOOLINFO + TTM_TRACKPOSITION = (WM_USER + 18); // lParam = dwPos + TTM_SETTIPBKCOLOR = (WM_USER + 19); + TTM_SETTIPTEXTCOLOR = (WM_USER + 20); + TTM_GETDELAYTIME = (WM_USER + 21); + TTM_GETTIPBKCOLOR = (WM_USER + 22); + TTM_GETTIPTEXTCOLOR = (WM_USER + 23); + TTM_SETMAXTIPWIDTH = (WM_USER + 24); + TTM_GETMAXTIPWIDTH = (WM_USER + 25); + TTM_SETMARGIN = (WM_USER + 26); // lParam = lprc + TTM_GETMARGIN = (WM_USER + 27); // lParam = lprc + TTM_POP = (WM_USER + 28); +{$ENDIF} +{$ifdef ie4plus} + TTM_UPDATE = (WM_USER + 29); +{$ENDIF} +{$ifdef ie5plus} + TTM_GETBUBBLESIZE = (WM_USER + 30); + TTM_ADJUSTRECT = (WM_USER + 31); + TTM_SETTITLEA = (WM_USER + 32); // wParam = TTI_*, lParam = char* szTitle + TTM_SETTITLEW = (WM_USER + 33); // wParam = TTI_*, lParam = wchar* szTitle +{$ENDIF} + +{$ifdef Win32XP} + TTM_POPUP = (WM_USER + 34); + TTM_GETTITLE = (WM_USER + 35); // wParam = 0, lParam = TTGETTITLE* + +TYPE + + _TTGETTITLE = Record + dwSize : DWORD; + uTitleBitmap : UINT; + cch : UINT; + pszTitle : PWCHAR; + END; + TTGETTITLE = _TTGETTITLE; + PTTGETTITLE = ^_TTGETTITLE; + TTTGETTITLE = _TTGETTITLE; + PTTTGETTITLE = ^TTTGETTITLE; + +{$ENDIF} + +const +{$IFDEF UNICODE} + TTM_ADDTOOL = TTM_ADDTOOLW; + TTM_DELTOOL = TTM_DELTOOLW; + TTM_NEWTOOLRECT = TTM_NEWTOOLRECTW; + TTM_GETTOOLINFO = TTM_GETTOOLINFOW; + TTM_SETTOOLINFO = TTM_SETTOOLINFOW; + TTM_HITTEST = TTM_HITTESTW; + TTM_GETTEXT = TTM_GETTEXTW; + TTM_UPDATETIPTEXT = TTM_UPDATETIPTEXTW; + TTM_ENUMTOOLS = TTM_ENUMTOOLSW; + TTM_GETCURRENTTOOL = TTM_GETCURRENTTOOLW; +{$ifdef ie5plus} + TTM_SETTITLE = TTM_SETTITLEW; +{$ENDIF} +{$ELSE} + TTM_ADDTOOL = TTM_ADDTOOLA; + TTM_DELTOOL = TTM_DELTOOLA; + TTM_NEWTOOLRECT = TTM_NEWTOOLRECTA; + TTM_GETTOOLINFO = TTM_GETTOOLINFOA; + TTM_SETTOOLINFO = TTM_SETTOOLINFOA; + TTM_HITTEST = TTM_HITTESTA; + TTM_GETTEXT = TTM_GETTEXTA; + TTM_UPDATETIPTEXT = TTM_UPDATETIPTEXTA; + TTM_ENUMTOOLS = TTM_ENUMTOOLSA; + TTM_GETCURRENTTOOL = TTM_GETCURRENTTOOLA; +{$ifdef ie5plus} + TTM_SETTITLE = TTM_SETTITLEA; +{$ENDIF} +{$ENDIF} + +{$ifdef win32xp} +CONST + TTM_SETWINDOWTHEME = CCM_SETWINDOWTHEME; +{$ENDIF} + + +TYPE + + + _TT_HITTESTINFOA = Record + hwnd : HWND; + pt : POINT; + ti : TTTOOLINFOA; + END; + TTHITTESTINFOA = _TT_HITTESTINFOA; + LPTTHITTESTINFOA = ^_TT_HITTESTINFOA; + TTT_HITTESTINFOA = _TT_HITTESTINFOA; + PTT_HITTESTINFOA = ^_TT_HITTESTINFOA; + + + + _TT_HITTESTINFOW = Record + hwnd : HWND; + pt : POINT; + ti : TTTOOLINFOW; + END; + TTHITTESTINFOW = _TT_HITTESTINFOW; + LPTTHITTESTINFOW = ^_TT_HITTESTINFOW; + TTT_HITTESTINFOW = _TT_HITTESTINFOW; + PTT_HITTESTINFOW = ^_TT_HITTESTINFOW; + +{$IFDEF UNICODE} + TTHITTESTINFO = TTHITTESTINFOW; + LPTTHITTESTINFO = LPTTHITTESTINFOW; +{$ELSE} + TTHITTESTINFO = TTHITTESTINFOA; + LPTTHITTESTINFO = LPTTHITTESTINFOA; +{$ENDIF} + LPHITTESTINFO = LPTTHITTESTINFO; +{$ifdef ie3plus} + LPHITTESTINFOW = LPTTHITTESTINFOW; + LPHITTESTINFOA = LPTTHITTESTINFOA; +{$ELSE} +// LPTTHITTESTINFOA = LPHITTESTINFOA; +// LPTTHITTESTINFOW = LPHITTESTINFOW; +{$ENDIF} + +CONST + TTN_GETDISPINFOA = (TTN_FIRST - 0); + TTN_GETDISPINFOW = (TTN_FIRST - 10); + TTN_SHOW = (TTN_FIRST - 1); + TTN_POP = (TTN_FIRST - 2); + TTN_LINKCLICK = (TTN_FIRST - 3); + +CONST +{$IFDEF UNICODE} + TTN_GETDISPINFO = TTN_GETDISPINFOW; +{$ELSE} + TTN_GETDISPINFO = TTN_GETDISPINFOA; +{$ENDIF} + +CONST + TTN_NEEDTEXT = TTN_GETDISPINFO; + + + TTN_NEEDTEXTA = TTN_GETDISPINFOA; + TTN_NEEDTEXTW = TTN_GETDISPINFOW; + + + + + +TYPE + + +// #define NMTTDISPINFOA_V1_SIZE CCSIZEOF_STRUCT(NMTTDISPINFOA, uFlags) +// #define NMTTDISPINFOW_V1_SIZE CCSIZEOF_STRUCT(NMTTDISPINFOW, uFlags) + + tagNMTTDISPINFOA = Record + hdr : NMHDR; + lpszText : LPSTR; + szText : Array[0..79] of char; + hinst : HINST; + uFlags : UINT; +{$ifdef ie3plus} + lParam : LPARAM; +{$ENDIF} + END; + NMTTDISPINFOA = tagNMTTDISPINFOA; + LPNMTTDISPINFOA = ^tagNMTTDISPINFOA; + TNMTTDISPINFOA = tagNMTTDISPINFOA; + PNMTTDISPINFOA = ^tagNMTTDISPINFOA; + + + tagNMTTDISPINFOW = Record + hdr : NMHDR; + lpszText : LPWSTR; + szText : Array[0..79] of WCHAR; + hinst : HINST; + uFlags : UINT; +{$ifdef ie3plus} + lParam : LPARAM; +{$ENDIF} + END; + NMTTDISPINFOW = tagNMTTDISPINFOW; + LPNMTTDISPINFOW = ^tagNMTTDISPINFOW; + TNMTTDISPINFOW = tagNMTTDISPINFOW; + PNMTTDISPINFOW = ^tagNMTTDISPINFOW; + +{$ifdef ie3plus} + TOOLTIPTEXTW = NMTTDISPINFOW; + TOOLTIPTEXTA = NMTTDISPINFOA; + LPTOOLTIPTEXTA = LPNMTTDISPINFOA; + LPTOOLTIPTEXTW = LPNMTTDISPINFOW; + TTOOLTIPTEXTW = NMTTDISPINFOW; + PTOOLTIPTEXTW = LPNMTTDISPINFOW; +{$ELSE} +// tagNMTTDISPINFOA = tagTOOLTIPTEXTA; + NMTTDISPINFOA = TOOLTIPTEXTA; +// LPNMTTDISPINFOA = LPTOOLTIPTEXTA; + tagNMTTDISPINFOW = tagTOOLTIPTEXTW; + NMTTDISPINFOW = TOOLTIPTEXTW; + LPNMTTDISPINFOW = LPTOOLTIPTEXTW; +{$ENDIF} + +TYPE + +{$IFDEF UNICODE} + NMTTDISPINFO = NMTTDISPINFOW; + LPNMTTDISPINFO = LPNMTTDISPINFOW; +// NMTTDISPINFO_V1_SIZE = NMTTDISPINFOW_V1_SIZE; +{$ELSE} + NMTTDISPINFO = NMTTDISPINFOA; + LPNMTTDISPINFO = LPNMTTDISPINFOA; +// NMTTDISPINFO_V1_SIZE = NMTTDISPINFOA_V1_SIZE; +{$ENDIF} + + TOOLTIPTEXT = NMTTDISPINFO; + LPTOOLTIPTEXT = LPNMTTDISPINFO; + +{$ENDIF} // NOTOOLTIPS + + +//====== STATUS BAR CONTROL =================================================== + +{$IFNDEF NOSTATUSBAR} + +// begin_r_commctrl +CONST + SBARS_SIZEGRIP = $0100; +{$ifdef ie5plus} + SBARS_TOOLTIPS = $0800; +{$ENDIF} + +{$ifdef ie4plus} +// this is a status bar flag, preference to SBARS_TOOLTIPS + SBT_TOOLTIPS = $0800; +{$ENDIF} + +// end_r_commctrl + +procedure DrawStatusTextA(hDC:HDC;lprc:LPRECT;pszText:LPCSTR;uFlags:UINT); stdcall; external commctrldll name 'DrawStatusTextA'; +Procedure DrawStatusTextW(hDC:HDC;lprc:LPRECT;pszText:LPCWSTR;uFlags:UINT); stdcall; external commctrldll name 'DrawStatusTextW'; + +function CreateStatusWindowA(style:LONG;lpszText:LPCSTR;hwndParent:HWND;wID:UINT):HWND; stdcall; external commctrldll name 'CreateStatusWindowA'; +function CreateStatusWindowW(style:LONG;lpszText:LPCWSTR;hwndParent:HWND;wID:UINT):HWND; stdcall; external commctrldll name 'CreateStatusWindowW'; + +function CreateStatusWindow(style:LONG;lpszText:LPCSTR;hwndParent:HWND;wID:UINT):HWND; stdcall; external commctrldll name 'CreateStatusWindowA'; +procedure DrawStatusText(hDC:HDC;lprc:LPRECT;pszText:LPCSTR;uFlags:UINT); stdcall; external commctrldll name 'DrawStatusTextA'; +function CreateStatusWindow(style:LONG;lpszText:LPCWSTR;hwndParent:HWND;wID:UINT):HWND; stdcall; external commctrldll name 'CreateStatusWindowW'; +Procedure DrawStatusText(hDC:HDC;lprc:LPRECT;pszText:LPCWSTR;uFlags:UINT); stdcall; external commctrldll name 'DrawStatusTextW'; + +CONST +{$IFDEF _WIN32} + STATUSCLASSNAMEW = {L}'msctls_statusbar32'; + STATUSCLASSNAMEA = 'msctls_statusbar32'; + +{$IFDEF UNICODE} + STATUSCLASSNAME = STATUSCLASSNAMEW; +{$ELSE} + STATUSCLASSNAME = STATUSCLASSNAMEA; +{$ENDIF} +{$ELSE} + STATUSCLASSNAME = 'msctls_statusbar'; +{$ENDIF} + + SB_SETTEXTA = (WM_USER+1); + SB_SETTEXTW = (WM_USER+11); + SB_GETTEXTA = (WM_USER+2); + SB_GETTEXTW = (WM_USER+13); + SB_GETTEXTLENGTHA = (WM_USER+3); + SB_GETTEXTLENGTHW = (WM_USER+12); + + + SB_SETPARTS = (WM_USER+4); + SB_GETPARTS = (WM_USER+6); + SB_GETBORDERS = (WM_USER+7); + SB_SETMINHEIGHT = (WM_USER+8); + SB_SIMPLE = (WM_USER+9); + SB_GETRECT = (WM_USER+10); +{$ifdef ie3plus} + SB_ISSIMPLE = (WM_USER+14); +{$ENDIF} +{$ifdef ie4plus} + SB_SETICON = (WM_USER+15); + SB_SETTIPTEXTA = (WM_USER+16); + SB_SETTIPTEXTW = (WM_USER+17); + SB_GETTIPTEXTA = (WM_USER+18); + SB_GETTIPTEXTW = (WM_USER+19); + SB_GETICON = (WM_USER+20); + SB_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT; + SB_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT; +{$ENDIF} +{$IFDEF UNICODE} + SB_GETTEXT = SB_GETTEXTW; + SB_SETTEXT = SB_SETTEXTW; + SB_GETTEXTLENGTH = SB_GETTEXTLENGTHW; +{$ifdef ie4plus} + SB_SETTIPTEXT = SB_SETTIPTEXTW; + SB_GETTIPTEXT = SB_GETTIPTEXTW; +{$ENDIF} +{$ELSE} + SB_GETTEXT = SB_GETTEXTA; + SB_SETTEXT = SB_SETTEXTA; + SB_GETTEXTLENGTH = SB_GETTEXTLENGTHA; +{$ifdef ie4plus} + SB_SETTIPTEXT = SB_SETTIPTEXTA; + SB_GETTIPTEXT = SB_GETTIPTEXTA; +{$ENDIF} +{$ENDIF} + + SBT_OWNERDRAW = $1000; + SBT_NOBORDERS = $0100; + SBT_POPOUT = $0200; + SBT_RTLREADING = $0400; +{$ifdef ie5plus} + SBT_NOTABPARSING = $0800; +{$ENDIF} + + SB_SETBKCOLOR = CCM_SETBKCOLOR; // lParam = bkColor + +/// status bar notifications +{$ifdef ie4plus} + SBN_SIMPLEMODECHANGE = (SBN_FIRST - 0); +{$ENDIF} + +{$ifdef ie5plus} +// refers to the data saved for simple mode + SB_SIMPLEID = $00ff; +{$ENDIF} + +{$ENDIF} // NOSTATUSBAR + +//====== MENU HELP ============================================================ + +{$IFNDEF NOMENUHELP} + +Procedure MenuHelp(uMsg:UINT;wParam:WPARAM;lParam:LPARAM;hMainMenu:HMENU;hInst:HINST;hwndStatus:HWND;lpwIDs:PUINT); stdcall; external commctrldll name 'MenuHelp'; +function ShowHideMenuCtl(hWnd:HWND;uFlags:UINT_PTR;lpInfo:LPINT):BOOL; stdcall; external commctrldll name 'ShowHideMenuCtl'; +Procedure GetEffectiveClientRect(hWnd:HWND;lprc:LPRECT;lpInfo:LPINT); stdcall; external commctrldll name 'GetEffectiveClientRect'; + +CONST + MINSYSCOMMAND = SC_SIZE; +{$ENDIF} + + +//====== TRACKBAR CONTROL ===================================================== + +{$IFNDEF NOTRACKBAR} + +CONST + +{$IFDEF _WIN32} + + TRACKBAR_CLASSA = 'msctls_trackbar32'; + TRACKBAR_CLASSW = {L}'msctls_trackbar32'; + +{$IFDEF UNICODE} + TRACKBAR_CLASS = TRACKBAR_CLASSW; +{$ELSE} + TRACKBAR_CLASS = TRACKBAR_CLASSA; +{$ENDIF} +{$ELSE} + TRACKBAR_CLASS = 'msctls_trackbar'; +{$ENDIF} + +// begin_r_commctrl + + TBS_AUTOTICKS = $0001; + TBS_VERT = $0002; + TBS_HORZ = $0000; + TBS_TOP = $0004; + TBS_BOTTOM = $0000; + TBS_LEFT = $0004; + TBS_RIGHT = $0000; + TBS_BOTH = $0008; + TBS_NOTICKS = $0010; + TBS_ENABLESELRANGE = $0020; + TBS_FIXEDLENGTH = $0040; + TBS_NOTHUMB = $0080; +{$ifdef ie3plus} + TBS_TOOLTIPS = $0100; +{$ENDIF} +{$ifdef ie5plus} + TBS_REVERSED = $0200; // Accessibility hint: the smaller number (usually the min value) means "high" and the larger number (usually the max value) means "low" +{$ENDIF} + +{$ifdef ie501plus} + TBS_DOWNISLEFT = $0400; // Down=Left and Up=Right (default is Down=Right and Up=Left) +{$ENDIF} +{$ifdef win32vista} + TBS_NOTIFYBEFOREMOVE = $0800; // Trackbar should notify parent before repositioning the slider due to user action (enables snapping) +{$endif} +{$ifdef NTDDI_VISTA} + TBS_TRANSPARENTBKGND = $1000; // Background is painted by the parent via WM_PRINTCLIENT +{$endif} + +// end_r_commctrl + + TBM_GETPOS = (WM_USER); + TBM_GETRANGEMIN = (WM_USER+1); + TBM_GETRANGEMAX = (WM_USER+2); + TBM_GETTIC = (WM_USER+3); + TBM_SETTIC = (WM_USER+4); + TBM_SETPOS = (WM_USER+5); + TBM_SETRANGE = (WM_USER+6); + TBM_SETRANGEMIN = (WM_USER+7); + TBM_SETRANGEMAX = (WM_USER+8); + TBM_CLEARTICS = (WM_USER+9); + TBM_SETSEL = (WM_USER+10); + TBM_SETSELSTART = (WM_USER+11); + TBM_SETSELEND = (WM_USER+12); + TBM_GETPTICS = (WM_USER+14); + TBM_GETTICPOS = (WM_USER+15); + TBM_GETNUMTICS = (WM_USER+16); + TBM_GETSELSTART = (WM_USER+17); + TBM_GETSELEND = (WM_USER+18); + TBM_CLEARSEL = (WM_USER+19); + TBM_SETTICFREQ = (WM_USER+20); + TBM_SETPAGESIZE = (WM_USER+21); + TBM_GETPAGESIZE = (WM_USER+22); + TBM_SETLINESIZE = (WM_USER+23); + TBM_GETLINESIZE = (WM_USER+24); + TBM_GETTHUMBRECT = (WM_USER+25); + TBM_GETCHANNELRECT = (WM_USER+26); + TBM_SETTHUMBLENGTH = (WM_USER+27); + TBM_GETTHUMBLENGTH = (WM_USER+28); +{$ifdef ie3plus} + TBM_SETTOOLTIPS = (WM_USER+29); + TBM_GETTOOLTIPS = (WM_USER+30); + TBM_SETTIPSIDE = (WM_USER+31); +// TrackBar Tip Side flags + TBTS_TOP = 0; + TBTS_LEFT = 1; + TBTS_BOTTOM = 2; + TBTS_RIGHT = 3; + + TBM_SETBUDDY = (WM_USER+32); // wparam = BOOL fLeft; (or right) + TBM_GETBUDDY = (WM_USER+33); // wparam = BOOL fLeft; (or right) +{$ENDIF} +{$ifdef ie4plus} + TBM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT; + TBM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT; +{$ENDIF} + + + TB_LINEUP = 0; + TB_LINEDOWN = 1; + TB_PAGEUP = 2; + TB_PAGEDOWN = 3; + TB_THUMBPOSITION = 4; + TB_THUMBTRACK = 5; + TB_TOP = 6; + TB_BOTTOM = 7; + TB_ENDTRACK = 8; + + +{$ifdef ie3plus} +// custom draw item specs + TBCD_TICS = $0001; + TBCD_THUMB = $0002; + TBCD_CHANNEL = $0003; +{$ENDIF} +{$ifdef win32vista} + TRBN_THUMBPOSCHANGING = (TRBN_FIRST-1); +{$endif} +{$ENDIF} // trackbar + +//====== DRAG LIST CONTROL ==================================================== + +{$IFNDEF NODRAGLIST} +TYPE + + tagDRAGLISTINFO = Record + uNotification : UINT; + hWnd : HWND; + ptCursor : POINT; + END; + DRAGLISTINFO = tagDRAGLISTINFO; + LPDRAGLISTINFO = ^tagDRAGLISTINFO; + TDRAGLISTINFO = tagDRAGLISTINFO; + PDRAGLISTINFO = ^tagDRAGLISTINFO; + + + +CONST + DL_BEGINDRAG = (WM_USER+133); + DL_DRAGGING = (WM_USER+134); + DL_DROPPED = (WM_USER+135); + DL_CANCELDRAG = (WM_USER+136); + + DL_CURSORSET = 0; + DL_STOPCURSOR = 1; + DL_COPYCURSOR = 2; + DL_MOVECURSOR = 3; + + DRAGLISTMSGSTRING = 'commctrl_DragListMsg'; // TEXT("commctrl_DragListMsg"); + +function MakeDragList(hLB:HWND):BOOL; stdcall; external commctrldll name 'MakeDragList'; +Procedure DrawInsert(handParent:HWND;hLB:HWND;nItem:cint); stdcall; external commctrldll name 'DrawInsert'; +function LBItemFromPt(hLB:HWND;pt:POINT;bAutoScroll:BOOL):cint; stdcall; external commctrldll name 'LBItemFromPt'; + +{$ENDIF} + +//====== UPDOWN CONTROL ======================================================= + +{$IFNDEF NOUPDOWN} +CONST +{$IFDEF _WIN32} + + UPDOWN_CLASSA = 'msctls_updown32'; + UPDOWN_CLASSW = {L}'msctls_updown32'; + +{$IFDEF UNICODE} + UPDOWN_CLASS = UPDOWN_CLASSW; +{$ELSE} + UPDOWN_CLASS = UPDOWN_CLASSA; +{$ENDIF} +{$ELSE} + UPDOWN_CLASS = 'msctls_updown'; +{$ENDIF} + +TYPE + + _UDACCEL = Record + nSec : UINT; + nInc : UINT; + END; + UDACCEL = _UDACCEL; + LPUDACCEL = ^_UDACCEL; + TUDACCEL = _UDACCEL; + PUDACCEL = ^_UDACCEL; + +CONST + UD_MAXVAL = $7fff; + UD_MINVAL = (-UD_MAXVAL); + +// begin_r_commctrl + + UDS_WRAP = $0001; + UDS_SETBUDDYINT = $0002; + UDS_ALIGNRIGHT = $0004; + UDS_ALIGNLEFT = $0008; + UDS_AUTOBUDDY = $0010; + UDS_ARROWKEYS = $0020; + UDS_HORZ = $0040; + UDS_NOTHOUSANDS = $0080; +{$ifdef ie3plus} + UDS_HOTTRACK = $0100; +{$ENDIF} + +// end_r_commctrl + + UDM_SETRANGE = (WM_USER+101); + UDM_GETRANGE = (WM_USER+102); + UDM_SETPOS = (WM_USER+103); + UDM_GETPOS = (WM_USER+104); + UDM_SETBUDDY = (WM_USER+105); + UDM_GETBUDDY = (WM_USER+106); + UDM_SETACCEL = (WM_USER+107); + UDM_GETACCEL = (WM_USER+108); + UDM_SETBASE = (WM_USER+109); + UDM_GETBASE = (WM_USER+110); +{$ifdef ie4plus} + UDM_SETRANGE32 = (WM_USER+111); + UDM_GETRANGE32 = (WM_USER+112); // wParam & lParam are LPINT + UDM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT; + UDM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT; +{$ENDIF} +{$ifdef ie5plus} + UDM_SETPOS32 = (WM_USER+113); + UDM_GETPOS32 = (WM_USER+114); +{$ENDIF} + +function CreateUpDownControl(dwStyle:DWORD;x:cint;y:cint;cx:cint;cy:cint;hParent:HWND;nID:cint;hInst:HINST;hBuddy:HWND;nUpper:cint;nLower:cint;nPos:cint):HWND; stdcall; external commctrldll name 'CreateUpDownControl'; + +TYPE + _NM_UPDOWN = Record + hdr : NMHDR; + iPos : cint; + iDelta : cint; + END; + NMUPDOWN = _NM_UPDOWN; + LPNMUPDOWN = ^_NM_UPDOWN; + TNM_UPDOWN = _NM_UPDOWN; + PNM_UPDOWN = ^_NM_UPDOWN; + +{$ifdef ie3plus} + NM_UPDOWN = NMUPDOWN; + LPNM_UPDOWN = LPNMUPDOWN; +{$ELSE} + NMUPDOWN = NM_UPDOWN; + LPNMUPDOWN = LPNM_UPDOWN; +{$ENDIF} + +CONST + UDN_DELTAPOS = (UDN_FIRST - 1); + +{$ENDIF} // NOUPDOWN + + +//====== PROGRESS CONTROL ===================================================== + +{$IFNDEF NOPROGRESS} + +CONST + +{$IFDEF _WIN32} + + PROGRESS_CLASSA = 'msctls_progress32'; + PROGRESS_CLASSW = {L}'msctls_progress32'; + +{$IFDEF UNICODE} + PROGRESS_CLASS = PROGRESS_CLASSW; +{$ELSE} + PROGRESS_CLASS = PROGRESS_CLASSA; +{$ENDIF} + +{$ELSE} + PROGRESS_CLASS = 'msctls_progress'; +{$ENDIF} + +// begin_r_commctrl + +{$ifdef ie3plus} + PBS_SMOOTH = $01; + PBS_VERTICAL = $04; +{$ENDIF} + +// end_r_commctrl + + PBM_SETRANGE = (WM_USER+1); + PBM_SETPOS = (WM_USER+2); + PBM_DELTAPOS = (WM_USER+3); + PBM_SETSTEP = (WM_USER+4); + PBM_STEPIT = (WM_USER+5); +{$ifdef ie3plus} + PBM_SETRANGE32 = (WM_USER+6); // lParam = high, wParam = low + +TYPE + PBRANGE = Record + iLow : cint; + iHigh : cint; + END; + PPBRANGE = ^PBRANGE; + TPBRANGE = PBRANGE; +// PPBRANGE = ^PBRANGE; + + +CONST + PBM_GETRANGE = (WM_USER+7); // wParam = return (TRUE ? low : high). lParam = PPBRANGE or NULL + PBM_GETPOS = (WM_USER+8); +{$ifdef ie4plus} + PBM_SETBARCOLOR = (WM_USER+9); // lParam = bar color +{$ENDIF} // _WIN32_IE >= 0x0400 + PBM_SETBKCOLOR = CCM_SETBKCOLOR; // lParam = bkColor +{$ENDIF} // _WIN32_IE >= 0x0300 + +{$ifdef win32xp} //_WIN32_WINNT >= 0x0501 + PBS_MARQUEE = $08; + PBM_SETMARQUEE = (WM_USER+10); +{$endif} //_WIN32_WINNT >= 0x0501 + +{$ifdef win32vista} + PBS_SMOOTHREVERSE = $10; +{$endif} + +{$ifdef win32vista} + + PBM_GETSTEP = (WM_USER+13); + PBM_GETBKCOLOR = (WM_USER+14); + PBM_GETBARCOLOR = (WM_USER+15); + PBM_SETSTATE = (WM_USER+16); // wParam = PBST_[State] (NORMAL, ERROR, PAUSED) + PBM_GETSTATE = (WM_USER+17); + + PBST_NORMAL = $0001; + PBST_ERROR = $0002; + PBST_PAUSED = $0003; +{$endif} + +// end_r_commctrl + + +{$ENDIF} // NOPROGRESS + + +//====== HOTKEY CONTROL ======================================================= + +{$IFNDEF NOHOTKEY} + HOTKEYF_SHIFT = $01; + HOTKEYF_CONTROL = $02; + HOTKEYF_ALT = $04; +{$IFDEF _MAC} + HOTKEYF_EXT = $80; +{$ELSE} + HOTKEYF_EXT = $08; +{$ENDIF} + HKCOMB_NONE = $0001; + HKCOMB_S = $0002; + HKCOMB_C = $0004; + HKCOMB_A = $0008; + HKCOMB_SC = $0010; + HKCOMB_SA = $0020; + HKCOMB_CA = $0040; + HKCOMB_SCA = $0080; + + HKM_SETHOTKEY = (WM_USER+1); + HKM_GETHOTKEY = (WM_USER+2); + HKM_SETRULES = (WM_USER+3); + +{$IFDEF _WIN32} + HOTKEY_CLASSA = 'msctls_hotkey32'; + HOTKEY_CLASSW = widestring('msctls_hotkey32'); +{$IFDEF UNICODE} + HOTKEY_CLASS = HOTKEY_CLASSW; +{$ELSE} + HOTKEY_CLASS = HOTKEY_CLASSA; +{$ENDIF} +{$ELSE} + HOTKEY_CLASS = 'msctls_hotkey'; +{$ENDIF} + +{$ENDIF} // NOHOTKEY + HOTKEYCLASS = HOTKEY_CLASSA; + +// begin_r_commctrl + +//====== COMMON CONTROL STYLES ================================================ + + CCS_TOP = DWORD($00000001){L}; + CCS_NOMOVEY = DWORD($00000002){L}; + CCS_BOTTOM = DWORD($00000003){L}; + CCS_NORESIZE = DWORD($00000004){L}; + CCS_NOPARENTALIGN = DWORD($00000008){L}; + CCS_ADJUSTABLE = DWORD($00000020){L}; + CCS_NODIVIDER = DWORD($00000040){L}; +{$ifdef ie3plus} + CCS_VERT = DWORD($00000080){L}; + CCS_LEFT = (CCS_VERT OR CCS_TOP); + CCS_RIGHT = (CCS_VERT OR CCS_BOTTOM); + CCS_NOMOVEX = (CCS_VERT OR CCS_NOMOVEY); +{$ENDIF} + +// end_r_commctrl + +//====== LISTVIEW CONTROL ===================================================== + +{$IFNDEF NOLISTVIEW} + +{$IFDEF _WIN32} + WC_LISTVIEWA = 'SysListView32'; + WC_LISTVIEWW = {L}'SysListView32'; +{$IFDEF UNICODE} + WC_LISTVIEW = WC_LISTVIEWW; +{$ELSE} + WC_LISTVIEW = WC_LISTVIEWA; +{$ENDIF} +{$ELSE} + WC_LISTVIEW = 'SysListView'; +{$ENDIF} + +// begin_r_commctrl + + LVS_ICON = $0000; + LVS_REPORT = $0001; + LVS_SMALLICON = $0002; + LVS_LIST = $0003; + LVS_TYPEMASK = $0003; + LVS_SINGLESEL = $0004; + LVS_SHOWSELALWAYS = $0008; + LVS_SORTASCENDING = $0010; + LVS_SORTDESCENDING = $0020; + LVS_SHAREIMAGELISTS = $0040; + LVS_NOLABELWRAP = $0080; + LVS_AUTOARRANGE = $0100; + LVS_EDITLABELS = $0200; +{$ifdef ie3plus} + LVS_OWNERDATA = $1000; +{$ENDIF} + LVS_NOSCROLL = $2000; + + LVS_TYPESTYLEMASK = $fc00; + + LVS_ALIGNTOP = $0000; + LVS_ALIGNLEFT = $0800; + LVS_ALIGNMASK = $0c00; + + LVS_OWNERDRAWFIXED = $0400; + LVS_NOCOLUMNHEADER = $4000; + LVS_NOSORTHEADER = $8000; + +// end_r_commctrl + +{$ifdef ie4plus} + LVM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT; + +// Macro 38 +Function ListView_SetUnicodeFormat( hwnd : hwnd; fUnicode : WPARAM):BOOL; + +CONST + LVM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT; + +// Macro 39 +Function ListView_GetUnicodeFormat( hwnd : hwnd):BOOL; + +{$ENDIF} +CONST + LVM_GETBKCOLOR = (LVM_FIRST + 0); + +// Macro 40 +Function ListView_GetBkColor( hwnd : hwnd):COLORREF; + +CONST + LVM_SETBKCOLOR = (LVM_FIRST + 1); + +// Macro 41 +Function ListView_SetBkColor( hwnd : hwnd; clrBk : COLORREF):BOOL; + +CONST + LVM_GETIMAGELIST = (LVM_FIRST + 2); + +// Macro 42 +Function ListView_GetImageList( hwnd : hwnd; iImageList : CINT):HIMAGELIST; + +CONST + LVSIL_NORMAL = 0; + LVSIL_SMALL = 1; + LVSIL_STATE = 2; + LVSIL_GROUPHEADER = 3; + LVM_SETIMAGELIST = (LVM_FIRST + 3); + +// Macro 43 +Function ListView_SetImageList( hwnd : hwnd; himl : HIMAGELIST; iImageList : WPARAM):HIMAGELIST; + +CONST + LVM_GETITEMCOUNT = (LVM_FIRST + 4); + +// Macro 44 +Function ListView_GetItemCount( hwnd : hwnd):cint; + +CONST + LVIF_TEXT = $0001; + LVIF_IMAGE = $0002; + LVIF_PARAM = $0004; + LVIF_STATE = $0008; +{$ifdef ie3plus} + LVIF_INDENT = $0010; + LVIF_NORECOMPUTE = $0800; +{$ENDIF} +{$ifdef win32xp} + LVIF_GROUPID = $0100; + LVIF_COLUMNS = $0200; +{$ENDIF} +{$ifdef win32vista} + LVIF_COLFMT = $00010000; // The piColFmt member is valid in addition to puColumns +{$endif} + + LVIS_FOCUSED = $0001; + LVIS_SELECTED = $0002; + LVIS_CUT = $0004; + LVIS_DROPHILITED = $0008; + LVIS_GLOW = $0010; + LVIS_ACTIVATING = $0020; + + LVIS_OVERLAYMASK = $0F00; + LVIS_STATEIMAGEMASK = $F000; + +// Macro 45 +// #define INDEXTOSTATEIMAGEMASK(i) ((i) << 12) + + +CONST + I_INDENTCALLBACK = (-1); +{$ENDIF} + + +{$ifdef win32xp} + +CONST + I_GROUPIDCALLBACK = (-1); + I_GROUPIDNONE = (-2); +{$ENDIF} + + +// #define LVITEMA_V1_SIZE CCSIZEOF_STRUCT(LVITEMA, lParam) +// #define LVITEMW_V1_SIZE CCSIZEOF_STRUCT(LVITEMW, lParam) + +TYPE + tagLVITEMA = Record + mask : UINT; + iItem : cint; + iSubItem : cint; + state : UINT; + stateMask : UINT; + pszText : LPSTR; + cchTextMax : cint; + iImage : cint; + lParam : LPARAM; +{$ifdef ie3plus} + iIndent : cint; +{$ENDIF} +{$ifdef win32xp} + iGroupId : cint; + cColumns : UINT; // tile view columns + puColumns : PUINT; +{$ENDIF} +{$ifdef win32vista} + piColFmt : pcint; + iGroup : cint; // readonly. only valid for owner data. +{$endif} + END; + LVITEMA = tagLVITEMA; + LPLVITEMA = ^tagLVITEMA; + TLVITEMA = tagLVITEMA; + PLVITEMA = ^tagLVITEMA; + + + tagLVITEMW = Record + mask : UINT; + iItem : cint; + iSubItem : cint; + state : UINT; + stateMask : UINT; + pszText : LPWSTR; + cchTextMax : cint; + iImage : cint; + lParam : LPARAM; +{$ifdef ie3plus} + iIndent : cint; +{$ENDIF} +{$ifdef win32xp} + iGroupId : cint; + cColumns : UINT; // tile view columns + puColumns : PUINT; +{$ENDIF} +{$ifdef win32vista} + piColFmt : pcint; + iGroup : cint; // readonly. only valid for owner data. +{$endif} + END; + + LVITEMW = tagLVITEMW; + LPLVITEMW = ^tagLVITEMW; + TLVITEMW = tagLVITEMW; + PLVITEMW = ^tagLVITEMW; + +{$IFDEF UNICODE} + LVITEM = LVITEMW; + LPLVITEM = LPLVITEMW; + +// LVITEM_V1_SIZE = LVITEMW_V1_SIZE; +{$ELSE} + +TYPE + LVITEM = LVITEMA; + LPLVITEM = LPLVITEMA; + +// LVITEM_V1_SIZE = LVITEMA_V1_SIZE; +{$ENDIF} + +Type +{$ifdef ie3plus} + + LV_ITEMA = LVITEMA; + LV_ITEMW = LVITEMW; +{$ELSE} + + tagLVITEMA = _LV_ITEMA; + LVITEMA = LV_ITEMA; + tagLVITEMW = _LV_ITEMW; + LVITEMW = LV_ITEMW; +{$ENDIF} + LV_ITEM = LVITEM; + TLVItem = LVITEM; + PLVItem = LPLVITEM; + TLV_ITEM = LVITEM; + PLV_ITEM = PLVITEM; +CONST + LPSTR_TEXTCALLBACKW = LPWSTR(-1); + LPSTR_TEXTCALLBACKA = LPSTR (-1); +{$IFDEF UNICODE} + LPSTR_TEXTCALLBACK = LPSTR_TEXTCALLBACKW; +{$ELSE} + LPSTR_TEXTCALLBACK = LPSTR_TEXTCALLBACKA; +{$ENDIF} + + +CONST + I_IMAGECALLBACK = (-1); +{$ifdef ie501plus} + I_IMAGENONE = (-2); +{$ENDIF} // 0x0501 + +{$ifdef win32xp} +// For tileview + I_COLUMNSCALLBACK = UINT(-1); +{$ENDIF} + + LVM_GETITEMA = (LVM_FIRST + 5); + LVM_GETITEMW = (LVM_FIRST + 75); + +{$IFDEF UNICODE} + LVM_GETITEM = LVM_GETITEMW; +{$ELSE} + LVM_GETITEM = LVM_GETITEMA; +{$ENDIF} + +// Macro 46 +Function ListView_GetItem( hwnd : hwnd;var pitem : LV_ITEM ):BOOL; + +CONST + LVM_SETITEMA = (LVM_FIRST + 6); + LVM_SETITEMW = (LVM_FIRST + 76); + +{$IFDEF UNICODE} + LVM_SETITEM = LVM_SETITEMW; +{$ELSE} + LVM_SETITEM = LVM_SETITEMA; +{$ENDIF} + +// Macro 47 +Function ListView_SetItem( hwnd : hwnd;const pitem : LV_ITEM ):BOOL; + + +CONST + LVM_INSERTITEMA = (LVM_FIRST + 7); + LVM_INSERTITEMW = (LVM_FIRST + 77); +{$IFDEF UNICODE} + LVM_INSERTITEM = LVM_INSERTITEMW; +{$ELSE} + LVM_INSERTITEM = LVM_INSERTITEMA; +{$ENDIF} + +// Macro 48 +Function ListView_InsertItem( hwnd : hwnd;Const pitem : LV_ITEM ):cint; + +CONST + LVM_DELETEITEM = (LVM_FIRST + 8); + +// Macro 49 +Function ListView_DeleteItem( hwnd : hwnd; i : cint):BOOL; + +CONST + LVM_DELETEALLITEMS = (LVM_FIRST + 9); + +// Macro 50 +Function ListView_DeleteAllItems( hwnd : hwnd):BOOL; + +CONST + LVM_GETCALLBACKMASK = (LVM_FIRST + 10); + +// Macro 51 +Function ListView_GetCallbackMask( hwnd : hwnd):BOOL; + + +CONST + LVM_SETCALLBACKMASK = (LVM_FIRST + 11); + +// Macro 52 +Function ListView_SetCallbackMask( hwnd : hwnd; mask : UINT):BOOL; + + +CONST + LVNI_ALL = $0000; + LVNI_FOCUSED = $0001; + LVNI_SELECTED = $0002; + LVNI_CUT = $0004; + LVNI_DROPHILITED = $0008; + + LVNI_ABOVE = $0100; + LVNI_BELOW = $0200; + LVNI_TOLEFT = $0400; + LVNI_TORIGHT = $0800; + + + LVM_GETNEXTITEM = (LVM_FIRST + 12); + +// Macro 53 +Function ListView_GetNextItem( hwnd : hwnd; i : cint; flags : cint ):cint; + +CONST + LVFI_PARAM = $0001; + LVFI_STRING = $0002; + LVFI_PARTIAL = $0008; + LVFI_WRAP = $0020; + LVFI_NEARESTXY = $0040; + + +TYPE + + tagLVFINDINFOA = Record + flags : UINT; + psz : LPCSTR; + lParam : LPARAM; + pt : POINT; + vkDirection : UINT; + END; + LVFINDINFOA = tagLVFINDINFOA; + LPFINDINFOA = ^tagLVFINDINFOA; + TLVFINDINFOA = tagLVFINDINFOA; + PLVFINDINFOA = ^tagLVFINDINFOA; + + + tagLVFINDINFOW = Record + flags : UINT; + psz : LPCWSTR; + lParam : LPARAM; + pt : POINT; + vkDirection : UINT; + END; + LVFINDINFOW = tagLVFINDINFOW; + LPFINDINFOW = ^tagLVFINDINFOW; + TLVFINDINFOW = tagLVFINDINFOW; + PLVFINDINFOW = ^tagLVFINDINFOW; + +{$IFDEF UNICODE} + LVFINDINFO = LVFINDINFOW; +{$ELSE} + LVFINDINFO = LVFINDINFOA; +{$ENDIF} + +{$ifdef ie3plus} + LV_FINDINFOA = LVFINDINFOA; + LV_FINDINFOW = LVFINDINFOW; +{$ELSE} + tagLVFINDINFOA = _LV_FINDINFOA; + LVFINDINFOA = LV_FINDINFOA; + tagLVFINDINFOW = _LV_FINDINFOW; + LVFINDINFOW = LV_FINDINFOW; +{$ENDIF} + + TLVFindInfo = LVFINDINFO; + PLVFindInfo = ^LVFindInfo; + + LV_FINDINFO = LVFINDINFO; + +CONST + LVM_FINDITEMA = (LVM_FIRST + 13); + LVM_FINDITEMW = (LVM_FIRST + 83); +{$IFDEF UNICODE} + LVM_FINDITEM = LVM_FINDITEMW; +{$ELSE} + LVM_FINDITEM = LVM_FINDITEMA; +{$ENDIF} + +// Macro 54 +Function ListView_FindItem( hwnd : hwnd; iStart : cint;const plvfi : LV_FINDINFO ):cint; + +CONST + LVIR_BOUNDS = 0; + LVIR_ICON = 1; + LVIR_LABEL = 2; + LVIR_SELECTBOUNDS = 3; + + + LVM_GETITEMRECT = (LVM_FIRST + 14); + +// Macro 55 NI +Function ListView_GetItemRect( hwnd : hwnd; i : cint;var prc : TRect;code : cint):BOOL; + +CONST + LVM_SETITEMPOSITION = (LVM_FIRST + 15); + +// Macro 56 +Function ListView_SetItemPosition( hwndLV : hwnd; i : cint; x : cint ; y : cint ):BOOL; + +CONST + LVM_GETITEMPOSITION = (LVM_FIRST + 16); + +// Macro 57 +Function ListView_GetItemPosition( hwndLV : hwnd; i : cint;var ppt : POINT ):BOOL; + +CONST + LVM_GETSTRINGWIDTHA = (LVM_FIRST + 17); + LVM_GETSTRINGWIDTHW = (LVM_FIRST + 87); +{$IFDEF UNICODE} + LVM_GETSTRINGWIDTH = LVM_GETSTRINGWIDTHW; +{$ELSE} + LVM_GETSTRINGWIDTH = LVM_GETSTRINGWIDTHA; +{$ENDIF} + +// Macro 58 +Function ListView_GetStringWidth( hwndLV : hwnd; psz : LPCTSTR):cint; + +CONST + LVHT_NOWHERE = $0001; + LVHT_ONITEMICON = $0002; + LVHT_ONITEMLABEL = $0004; + LVHT_ONITEMSTATEICON = $0008; + LVHT_ONITEM = (LVHT_ONITEMICON OR LVHT_ONITEMLABEL OR LVHT_ONITEMSTATEICON); + + LVHT_ABOVE = $0008; + LVHT_BELOW = $0010; + LVHT_TORIGHT = $0020; + LVHT_TOLEFT = $0040; + + + +// #define LVHITTESTINFO_V1_SIZE CCSIZEOF_STRUCT(LVHITTESTINFO, iItem) + +TYPE + + tagLVHITTESTINFO = Record + pt : POINT; + flags : UINT; + iItem : cint; +{$ifdef ie3plus} + iSubItem : cint; // this is was NOT in win95. valid only for LVM_SUBITEMHITTEST +{$ENDIF} +{$ifdef win32vista} + iGroup : cint; // readonly. index of group. only valid for owner data. + // supports single item in multiple groups. +{$endif} + END; + LVHITTESTINFO = tagLVHITTESTINFO; + LPLVHITTESTINFO = ^tagLVHITTESTINFO; + TLVHITTESTINFO = tagLVHITTESTINFO; + PLVHITTESTINFO = ^tagLVHITTESTINFO; + +{$ifdef ie3plus} + LV_HITTESTINFO = LVHITTESTINFO; +{$ELSE} + tagLVHITTESTINFO = _LV_HITTESTINFO; + LVHITTESTINFO = LV_HITTESTINFO; +{$ENDIF} + +CONST + LVM_HITTEST = (LVM_FIRST + 18); + +// Macro 59 +Function ListView_HitTest( hwndLV : hwnd;var pinfo : LV_HITTESTINFO ):cint; + +CONST + LVM_ENSUREVISIBLE = (LVM_FIRST + 19); + +// Macro 60 +Function ListView_EnsureVisible( hwndLV : hwnd; i : cint; fPartialOK : cint ):BOOL;inline; +Function ListView_EnsureVisible( hwndLV : hwnd; i : cint; fPartialOK : BOOL ):BOOL;inline; + +CONST + LVM_SCROLL = (LVM_FIRST + 20); + +// Macro 61 +Function ListView_Scroll( hwndLV : hwnd; dx : cint; dy : cint):BOOL; + +CONST + LVM_REDRAWITEMS = (LVM_FIRST + 21); + +// Macro 62 +Function ListView_RedrawItems( hwndLV : hwnd; iFirst : cint; iLast : cint):BOOL; + +CONST + LVA_DEFAULT = $0000; + LVA_ALIGNLEFT = $0001; + LVA_ALIGNTOP = $0002; + LVA_ALIGNRIGHT = $0003; + LVA_ALIGNBOTTOM = $0004; + LVA_SNAPTOGRID = $0005; + LVA_SORTASCENDING = $0100; + LVA_SORTDESCENDING = $0200; + LVM_ARRANGE = (LVM_FIRST + 22); + +// Macro 63 +Function ListView_Arrange( hwndLV : hwnd; code : UINT):BOOL; + +CONST + LVM_EDITLABELA = (LVM_FIRST + 23); + LVM_EDITLABELW = (LVM_FIRST + 118); +{$IFDEF UNICODE} + + LVM_EDITLABEL = LVM_EDITLABELW; +{$ELSE} + LVM_EDITLABEL = LVM_EDITLABELA; +{$ENDIF} + +// Macro 64 +Function ListView_EditLabel( hwndLV : hwnd; i : cint):HWND; + +CONST + LVM_GETEDITCONTROL = (LVM_FIRST + 24); + +// Macro 65 +Function ListView_GetEditControl( hwndLV : hwnd):HWND; + + +// #define LVCOLUMNA_V1_SIZE CCSIZEOF_STRUCT(LVCOLUMNA, iSubItem) +// #define LVCOLUMNW_V1_SIZE CCSIZEOF_STRUCT(LVCOLUMNW, iSubItem) + +TYPE + + tagLVCOLUMNA = Record + mask : UINT; + fmt : cint; + cx : cint; + pszText : LPSTR; + cchTextMax : cint; + iSubItem : cint; +{$ifdef ie3plus} + iImage : cint; + iOrder : cint; +{$ENDIF} +{$ifdef win32vista} + cxmin : cint; // min snap point + cxDefault : cint; // default snap point + cxIdeal : cint; // read only. ideal may not eqaul current width if auto sized (LVS_EX_AUTOSIZECOLUMNS) to a lesser width. +{$endif} + END; + LVCOLUMNA = tagLVCOLUMNA; + LPLVCOLUMNA = ^tagLVCOLUMNA; + TLVCOLUMNA = tagLVCOLUMNA; + PLVCOLUMNA = ^tagLVCOLUMNA; + + + tagLVCOLUMNW = Record + mask : UINT; + fmt : cint; + cx : cint; + pszText : LPWSTR; + cchTextMax : cint; + iSubItem : cint; +{$ifdef ie3plus} + iImage : cint; + iOrder : cint; +{$ENDIF} +{$ifdef win32vista} + cxmin : cint; // min snap point + cxDefault : cint; // default snap point + cxIdeal : cint; // read only. ideal may not eqaul current width if auto sized (LVS_EX_AUTOSIZECOLUMNS) to a lesser width. +{$endif} + END; + LVCOLUMNW = tagLVCOLUMNW; + LPLVCOLUMNW = ^tagLVCOLUMNW; + TLVCOLUMNW = tagLVCOLUMNW; + PLVCOLUMNW = ^tagLVCOLUMNW; + + +{$IFDEF UNICODE} + LVCOLUMN = LVCOLUMNW; + LPLVCOLUMN = LPLVCOLUMNW; +// LVCOLUMN_V1_SIZE = LVCOLUMNW_V1_SIZE; +{$ELSE} + LVCOLUMN = LVCOLUMNA; + LPLVCOLUMN = LPLVCOLUMNA; +// LVCOLUMN_V1_SIZE = LVCOLUMNA_V1_SIZE; +{$ENDIF} + +{$ifdef ie3plus} + LV_COLUMNA = LVCOLUMNA; + LV_COLUMNW = LVCOLUMNW; +{$ELSE} + tagLVCOLUMNA = _LV_COLUMNA; + LVCOLUMNA = LV_COLUMNA; + tagLVCOLUMNW = _LV_COLUMNW; + LVCOLUMNW = LV_COLUMNW; +{$ENDIF} + + + LV_COLUMN = LVCOLUMN; + TLVColumn = LVCOLUMN; + PLVColumn = LPLVCOLUMN; + +CONST + LVCF_FMT = $0001; + LVCF_WIDTH = $0002; + LVCF_TEXT = $0004; + LVCF_SUBITEM = $0008; +{$ifdef ie3plus} + LVCF_IMAGE = $0010; + LVCF_ORDER = $0020; +{$ENDIF} +{$ifdef win32vista} + LVCF_MINWIDTH = $0040; + LVCF_DEFAULTWIDTH = $0080; + LVCF_IDEALWIDTH = $0100; +{$endif} + + LVCFMT_LEFT = $0000; + LVCFMT_RIGHT = $0001; + LVCFMT_CENTER = $0002; + LVCFMT_JUSTIFYMASK = $0003; + +{$ifdef ie3plus} + LVCFMT_IMAGE = $0800; + LVCFMT_BITMAP_ON_RIGHT = $1000; + LVCFMT_COL_HAS_IMAGES = $8000; +{$ENDIF} +{$ifdef win32vista} + LVCFMT_FIXED_WIDTH = $00100; // Can't resize the column; same as HDF_FIXEDWIDTH + LVCFMT_NO_DPI_SCALE = $40000; // If not set, CCM_DPISCALE will govern scaling up fixed width + LVCFMT_FIXED_RATIO = $80000; // Width will augment with the row height +{$endif} + + LVM_GETCOLUMNA = (LVM_FIRST + 25); + LVM_GETCOLUMNW = (LVM_FIRST + 95); +{$IFDEF UNICODE} + LVM_GETCOLUMN = LVM_GETCOLUMNW; +{$ELSE} + LVM_GETCOLUMN = LVM_GETCOLUMNA; +{$ENDIF} + +// Macro 66 +Function ListView_GetColumn( hwnd : hwnd; iCol : cint;var pcol : LV_COLUMN ):BOOL; + +CONST + LVM_SETCOLUMNA = (LVM_FIRST + 26); + LVM_SETCOLUMNW = (LVM_FIRST + 96); +{$IFDEF UNICODE} + LVM_SETCOLUMN = LVM_SETCOLUMNW; +{$ELSE} + LVM_SETCOLUMN = LVM_SETCOLUMNA; +{$ENDIF} + +// Macro 67 +Function ListView_SetColumn( hwnd : hwnd; iCol : cint;Const pcol : LV_COLUMN ):BOOL; + +CONST + LVM_INSERTCOLUMNA = (LVM_FIRST + 27); + LVM_INSERTCOLUMNW = (LVM_FIRST + 97); + +{$IFDEF UNICODE} // was already not active (spaces) in .h +// # define LVM_INSERTCOLUMN LVM_INSERTCOLUMNW +{$ELSE} +// # define LVM_INSERTCOLUMN LVM_INSERTCOLUMNA +{$ENDIF} + +// Macro 68 +Function ListView_InsertColumn( hwnd : hwnd; iCol : cint;Const pcol : LV_COLUMN ):cint; + +CONST + LVM_DELETECOLUMN = (LVM_FIRST + 28); + +// Macro 69 +Function ListView_DeleteColumn( hwnd : hwnd; iCol : cint):BOOL; + +CONST + LVM_GETCOLUMNWIDTH = (LVM_FIRST + 29); + +// Macro 70 +Function ListView_GetColumnWidth( hwnd : hwnd; iCol : cint):cint; + +CONST + LVSCW_AUTOSIZE = -1; + LVSCW_AUTOSIZE_USEHEADER = -2; + LVM_SETCOLUMNWIDTH = (LVM_FIRST + 30); + +// Macro 71 +Function ListView_SetColumnWidth( hwnd : hwnd; iCol : cint; cx : cint ):BOOL; + + +{$ifdef ie3plus} + +CONST + LVM_GETHEADER = (LVM_FIRST + 31); + +// Macro 72 +Function ListView_GetHeader( hwnd : hwnd):HWND; + +{$ENDIF} + +CONST + LVM_CREATEDRAGIMAGE = (LVM_FIRST + 33); + +// Macro 73 +Function ListView_CreateDragImage( hwnd : hwnd; i : cint; lpptUpLeft : LPPOINT):HIMAGELIST;inline; +Function ListView_CreateDragImage( hwnd : hwnd; i : cint; const lpptUpLeft : POINT):HIMAGELIST;inline; + +CONST + LVM_GETVIEWRECT = (LVM_FIRST + 34); + +// Macro 74 +Function ListView_GetViewRect( hwnd : hwnd;var prc : RECT ):BOOL; + +CONST + LVM_GETTEXTCOLOR = (LVM_FIRST + 35); + +// Macro 75 +Function ListView_GetTextColor( hwnd : hwnd):COLORREF; + +CONST + LVM_SETTEXTCOLOR = (LVM_FIRST + 36); + +// Macro 76 +Function ListView_SetTextColor( hwnd : hwnd; clrText : COLORREF):BOOL; + +CONST + LVM_GETTEXTBKCOLOR = (LVM_FIRST + 37); + +// Macro 77 +Function ListView_GetTextBkColor( hwnd : hwnd):COLORREF; + +CONST + LVM_SETTEXTBKCOLOR = (LVM_FIRST + 38); + +// Macro 78 +Function ListView_SetTextBkColor( hwnd : hwnd; clrTextBk : COLORREF):BOOL; + + +CONST + LVM_GETTOPINDEX = (LVM_FIRST + 39); + +// Macro 79 +Function ListView_GetTopIndex( hwndLV : hwnd):cint; + +CONST + LVM_GETCOUNTPERPAGE = (LVM_FIRST + 40); + +// Macro 80 +Function ListView_GetCountPerPage( hwndLV : hwnd):cint; + +CONST + LVM_GETORIGIN = (LVM_FIRST + 41); + +// Macro 81 +Function ListView_GetOrigin( hwndLV : hwnd;var ppt : POINT ):BOOL; + +CONST + LVM_UPDATE = (LVM_FIRST + 42); + +// Macro 82 +Function ListView_Update( hwndLV : hwnd; i : WPARAM):BOOL; + +CONST + LVM_SETITEMSTATE = (LVM_FIRST + 43); + +// Macro 83 +Procedure ListView_SetItemState(hwndLV :hwnd; i :cint ;data,mask:UINT); + +{$ifdef ie3plus} +// Macro 84 +Procedure ListView_SetCheckState( hwndLV : hwnd; i : cint ; fCheck : bool ); + +{$ENDIF} + + +CONST + LVM_GETITEMSTATE = (LVM_FIRST + 44); + +// Macro 85 +Function ListView_GetItemState( hwndLV : hwnd; i : WPARAM; mask : LPARAM):UINT; + + +{$ifdef ie3plus} + +// Macro 86 +Function ListView_GetCheckState( hwndLV : hwnd; i : WPARAM):UINT; + +{$ENDIF} + +CONST + LVM_GETITEMTEXTA = (LVM_FIRST + 45); + LVM_GETITEMTEXTW = (LVM_FIRST + 115); + +{$IFDEF UNICODE} + LVM_GETITEMTEXT = LVM_GETITEMTEXTW; +{$ELSE} + LVM_GETITEMTEXT = LVM_GETITEMTEXTA; +{$ENDIF} + +// Macro 87 +Procedure ListView_GetItemText(hwndLV:hwnd; i : WPARAM ;iSubItem : cint ;pszText : Pointer;cchTextMax :cint); + +CONST + LVM_SETITEMTEXTA = (LVM_FIRST + 46); + LVM_SETITEMTEXTW = (LVM_FIRST + 116); + +{$IFDEF UNICODE} + LVM_SETITEMTEXT = LVM_SETITEMTEXTW; +{$ELSE} + LVM_SETITEMTEXT = LVM_SETITEMTEXTA; +{$ENDIF} + +// Macro 88 +Procedure ListView_SetItemText(hwndLV:hwnd; i : WPARAM ;iSubItem : cint ;pszText : Pointer); + +{$ifdef ie3plus} +// these flags only apply to LVS_OWNERDATA listviews in report or list mode + +CONST + LVSICF_NOINVALIDATEALL = $00000001; + LVSICF_NOSCROLL = $00000002; +{$ENDIF} + + LVM_SETITEMCOUNT = (LVM_FIRST + 47); + +// Macro 89 +Procedure ListView_SetItemCount( hwndLV : hwnd; cItems : WPARAM); + +{$ifdef ie3plus} + +// Macro 90 +Procedure ListView_SetItemCountEx( hwndLV : hwnd; cItems : WPARAM; dwFlags : LPARAM); + +{$ENDIF} + +TYPE + PFNLVCOMPARE=Function(a,b,c:LPARAM):cint; + TLVCompare = PFNLVCOMPARE; + +CONST + LVM_SORTITEMS = (LVM_FIRST + 48); + +// Macro 91 +Function ListView_SortItems( hwndLV : hwnd;pfnCompare : PFNLVCOMPARE; lPrm : LPARAM):BOOL; + +CONST + LVM_SETITEMPOSITION32 = (LVM_FIRST + 49); + +// Macro 92 +Procedure ListView_SetItemPosition32(hwndLV:hwnd; i:cint;x0,y0:long); + +CONST + LVM_GETSELECTEDCOUNT = (LVM_FIRST + 50); + +// Macro 93 +Function ListView_GetSelectedCount( hwndLV : hwnd):UINT; + +CONST + LVM_GETITEMSPACING = (LVM_FIRST + 51); + +// Macro 94 +Function ListView_GetItemSpacing( hwndLV : hwnd; fSmall : cint ):DWORD; + +CONST + LVM_GETISEARCHSTRINGA = (LVM_FIRST + 52); + LVM_GETISEARCHSTRINGW = (LVM_FIRST + 117); + +{$IFDEF UNICODE} + LVM_GETISEARCHSTRING = LVM_GETISEARCHSTRINGW; +{$ELSE} + LVM_GETISEARCHSTRING = LVM_GETISEARCHSTRINGA; +{$ENDIF} + +// Macro 95 +Function ListView_GetISearchString( hwndLV : hwnd; lpsz : LPTSTR):BOOL; + + +{$ifdef ie3plus} + +CONST + LVM_SETICONSPACING = (LVM_FIRST + 53); +// -1 for cx and cy means we'll use the default (system settings) +// 0 for cx or cy means use the current setting (allows you to change just one param) + +// Macro 96 +Function ListView_SetIconSpacing( hwndLV : hwnd; cx, cy : cint ):DWORD; + +CONST + LVM_SETEXTENDEDLISTVIEWSTYLE = (LVM_FIRST + 54); // optional wParam == mask + +// Macro 97 +Function ListView_SetExtendedListViewStyle( hwndLV : hwnd; dw : cint ):DWORD; + +{$ifdef ie4plus} + +// Macro 98 +Function ListView_SetExtendedListViewStyleEx( hwndLV : hwnd; dwMask, dw : cint ):DWORD; + +{$ENDIF} + +CONST + LVM_GETEXTENDEDLISTVIEWSTYLE = (LVM_FIRST + 55); + +// Macro 99 +Function ListView_GetExtendedListViewStyle( hwndLV : hwnd):DWORD; + +CONST + LVS_EX_GRIDLINES = $00000001; + LVS_EX_SUBITEMIMAGES = $00000002; + LVS_EX_CHECKBOXES = $00000004; + LVS_EX_TRACKSELECT = $00000008; + LVS_EX_HEADERDRAGDROP = $00000010; + LVS_EX_FULLROWSELECT = $00000020; // applies to report mode only + LVS_EX_ONECLICKACTIVATE = $00000040; + LVS_EX_TWOCLICKACTIVATE = $00000080; +{$ifdef ie4plus} + LVS_EX_FLATSB = $00000100; + LVS_EX_REGIONAL = $00000200; + LVS_EX_INFOTIP = $00000400; // listview does InfoTips for you + LVS_EX_UNDERLINEHOT = $00000800; + LVS_EX_UNDERLINECOLD = $00001000; + LVS_EX_MULTIWORKAREAS = $00002000; +{$ENDIF} +{$ifdef ie5plus} + LVS_EX_LABELTIP = $00004000; // listview unfolds partly hidden labels if it does not have infotip text + LVS_EX_BORDERSELECT = $00008000; // border selection style instead of highlight +{$ENDIF} // End (_WIN32_IE >= 0x0500) +{$ifdef win32xp} + LVS_EX_DOUBLEBUFFER = $00010000; + LVS_EX_HIDELABELS = $00020000; + LVS_EX_SINGLEROW = $00040000; + LVS_EX_SNAPTOGRID = $00080000; // Icons automatically snap to grid. + LVS_EX_SIMPLESELECT = $00100000; // Also changes overlay rendering to top right for icon mode. +{$ENDIF} +{$ifdef win32vista} + LVS_EX_JUSTIFYCOLUMNS = $00200000; // Icons are lined up in columns that use up the whole view area. + LVS_EX_TRANSPARENTBKGND = $00400000; // Background is painted by the parent via WM_PRINTCLIENT + LVS_EX_TRANSPARENTSHADOWTEXT = $00800000; // Enable shadow text on transparent backgrounds only (useful with bitmaps) + LVS_EX_AUTOAUTOARRANGE = $01000000; // Icons automatically arrange if no icon positions have been set + LVS_EX_HEADERINALLVIEWS = $02000000; // Display column header in all view modes + LVS_EX_AUTOCHECKSELECT = $08000000; + LVS_EX_AUTOSIZECOLUMNS = $10000000; + LVS_EX_COLUMNSNAPPOINTS = $40000000; + LVS_EX_COLUMNOVERFLOW = $80000000; +{$endif} + + LVM_GETSUBITEMRECT = (LVM_FIRST + 56); + +// Macro 100 +Function ListView_GetSubItemRect( hwnd : hwnd; iItem : cint;iSubItem, code :cint ;prc:LPRECT):BOOL; + +CONST + LVM_SUBITEMHITTEST = (LVM_FIRST + 57); + +// Macro 101 +Function ListView_SubItemHitTest( hwnd : hwnd; plvhti : LPLVHITTESTINFO):cint; + +CONST + LVM_SETCOLUMNORDERARRAY = (LVM_FIRST + 58); + +// Macro 102 +Function ListView_SetColumnOrderArray( hwnd : hwnd; iCount : WPARAM; pi : LPINT):BOOL; + +CONST + LVM_GETCOLUMNORDERARRAY = (LVM_FIRST + 59); + +// Macro 103 +Function ListView_GetColumnOrderArray( hwnd : hwnd; iCount : WPARAM; pi : LPINT):BOOL; + + +CONST + LVM_SETHOTITEM = (LVM_FIRST + 60); + +// Macro 104 +Function ListView_SetHotItem( hwnd : hwnd; i : WPARAM):cint; + +CONST + LVM_GETHOTITEM = (LVM_FIRST + 61); + +// Macro 105 +Function ListView_GetHotItem( hwnd : hwnd):cint; + +CONST + LVM_SETHOTCURSOR = (LVM_FIRST + 62); + +// Macro 106 +Function ListView_SetHotCursor( hwnd : hwnd; hcur : LPARAM):HCURSOR; + +CONST + LVM_GETHOTCURSOR = (LVM_FIRST + 63); + +// Macro 107 +Function ListView_GetHotCursor( hwnd : hwnd):HCURSOR; + +CONST + LVM_APPROXIMATEVIEWRECT = (LVM_FIRST + 64); + +// Macro 108 +Function ListView_ApproximateViewRect( hwnd : hwnd; iWidth, iHeight, iCount : cint ):DWORD; + +{$ENDIF} // _WIN32_IE >= 0x0300 + +{$ifdef ie4plus} + +CONST + LV_MAX_WORKAREAS = 16; + LVM_SETWORKAREAS = (LVM_FIRST + 65); + +// Macro 109 +Function ListView_SetWorkAreas( hwnd : hwnd; nWorkAreas : cint;var prc : RECT ):BOOL;inline; +Function ListView_SetWorkAreas( hwnd : hwnd; nWorkAreas : cint; prc : PRECT ):BOOL;inline; + +CONST + LVM_GETWORKAREAS = (LVM_FIRST + 70); + +// Macro 110 +Function ListView_GetWorkAreas( hwnd : hwnd; nWorkAreas : cint;var prc : RECT ):BOOL; + +CONST + LVM_GETNUMBEROFWORKAREAS = (LVM_FIRST + 73); + +// Macro 111 +Function ListView_GetNumberOfWorkAreas( hwnd : hwnd;var pnWorkAreas : UINT ):BOOL; + +CONST + LVM_GETSELECTIONMARK = (LVM_FIRST + 66); + +// Macro 112 +Function ListView_GetSelectionMark( hwnd : hwnd):cint; + +CONST + LVM_SETSELECTIONMARK = (LVM_FIRST + 67); + +// Macro 113 +Function ListView_SetSelectionMark( hwnd : hwnd; i : LPARAM):cint; + +CONST + LVM_SETHOVERTIME = (LVM_FIRST + 71); + +// Macro 114 +Function ListView_SetHoverTime( hwndLV : hwnd; dwHoverTimeMs : LPARAM):DWORD; + +CONST + LVM_GETHOVERTIME = (LVM_FIRST + 72); + +// Macro 115 +Function ListView_GetHoverTime( hwndLV : hwnd):DWORD; + +CONST + LVM_SETTOOLTIPS = (LVM_FIRST + 74); + +// Macro 116 +Function ListView_SetToolTips( hwndLV : hwnd; hwndNewHwnd : WPARAM):HWND; + +CONST + LVM_GETTOOLTIPS = (LVM_FIRST + 78); + +// Macro 117 +Function ListView_GetToolTips( hwndLV : hwnd):HWND; + +CONST + LVM_SORTITEMSEX = (LVM_FIRST + 81); + +// Macro 118 +Function ListView_SortItemsEx( hwndLV : hwnd; _pfnCompare : PFNLVCOMPARE; _lPrm : LPARAM):BOOL; + +TYPE + + tagLVBKIMAGEA = Record + ulFlags : ULONG; // LVBKIF_* + hbm : HBITMAP; + pszImage : LPSTR; + cchImageMax : UINT; + xOffsetPercent : cint; + yOffsetPercent : cint; + END; + LVBKIMAGEA = tagLVBKIMAGEA; + LPLVBKIMAGEA = ^tagLVBKIMAGEA; + TLVBKIMAGEA = tagLVBKIMAGEA; + PLVBKIMAGEA = ^tagLVBKIMAGEA; + + tagLVBKIMAGEW = Record + ulFlags : ULONG; // LVBKIF_* + hbm : HBITMAP; + pszImage : LPWSTR; + cchImageMax : UINT; + xOffsetPercent : cint; + yOffsetPercent : cint; + END; + LVBKIMAGEW = tagLVBKIMAGEW; + LPLVBKIMAGEW = ^tagLVBKIMAGEW; + TLVBKIMAGEW = tagLVBKIMAGEW; + PLVBKIMAGEW = ^tagLVBKIMAGEW; + +CONST + LVBKIF_SOURCE_NONE = $00000000; + LVBKIF_SOURCE_HBITMAP = $00000001; + LVBKIF_SOURCE_URL = $00000002; + LVBKIF_SOURCE_MASK = $00000003; + LVBKIF_STYLE_NORMAL = $00000000; + LVBKIF_STYLE_TILE = $00000010; + LVBKIF_STYLE_MASK = $00000010; +{$ifdef win32xp} + LVBKIF_FLAG_TILEOFFSET = $00000100; + LVBKIF_TYPE_WATERMARK = $10000000; +{$ENDIF} + + LVM_SETBKIMAGEA = (LVM_FIRST + 68); + LVM_SETBKIMAGEW = (LVM_FIRST + 138); + LVM_GETBKIMAGEA = (LVM_FIRST + 69); + LVM_GETBKIMAGEW = (LVM_FIRST + 139); + +{$ifdef win32xp} + LVM_SETSELECTEDCOLUMN = (LVM_FIRST + 140); + +// Macro 119 +Procedure ListView_SetSelectedColumn( hwnd : hwnd; iCol : WPARAM); + +CONST + LVM_SETTILEWIDTH = (LVM_FIRST + 141); + +// Macro 120 +Procedure ListView_SetTileWidth( hwnd : hwnd; cpWidth : WPARAM); + +CONST + LV_VIEW_ICON = $0000; + LV_VIEW_DETAILS = $0001; + LV_VIEW_SMALLICON = $0002; + LV_VIEW_LIST = $0003; + LV_VIEW_TILE = $0004; + LV_VIEW_MAX = $0004; + LVM_SETVIEW = (LVM_FIRST + 142); + +// Macro 121 +Function ListView_SetView( hwnd : hwnd; iView : DWORD):DWORD; + +CONST + LVM_GETVIEW = (LVM_FIRST + 143); + +// Macro 122 +Function ListView_GetView( hwnd : hwnd):DWORD; + +CONST + LVGF_NONE = $00000000; + LVGF_HEADER = $00000001; + LVGF_FOOTER = $00000002; + LVGF_STATE = $00000004; + LVGF_ALIGN = $00000008; + LVGF_GROUPID = $00000010; + +{$ifdef win32vista} + LVGF_SUBTITLE = $00000100; // pszSubtitle is valid + LVGF_TASK = $00000200; // pszTask is valid + LVGF_DESCRIPTIONTOP = $00000400; // pszDescriptionTop is valid + LVGF_DESCRIPTIONBOTTOM = $00000800; // pszDescriptionBottom is valid + LVGF_TITLEIMAGE = $00001000; // iTitleImage is valid + LVGF_EXTENDEDIMAGE = $00002000; // iExtendedImage is valid + LVGF_ITEMS = $00004000; // iFirstItem and cItems are valid + LVGF_SUBSET = $00008000; // pszSubsetTitle is valid + LVGF_SUBSETITEMS = $00010000; // readonly, cItems holds count of items in visible subset, iFirstItem is valid +{$endif} + + LVGS_NORMAL = $00000000; + LVGS_COLLAPSED = $00000001; + LVGS_HIDDEN = $00000002; + + LVGA_HEADER_LEFT = $00000001; + LVGA_HEADER_CENTER = $00000002; + LVGA_HEADER_RIGHT = $00000004; // Don't forget to validate exclusivity + LVGA_FOOTER_LEFT = $00000008; + LVGA_FOOTER_CENTER = $00000010; + LVGA_FOOTER_RIGHT = $00000020; // Don't forget to validate exclusivity + +TYPE + + tagLVGROUP = Record + cbSize : UINT; + mask : UINT; + pszHeader : LPWSTR; + cchHeader : cint; + pszFooter : LPWSTR; + cchFooter : cint; + iGroupId : cint; + stateMask : UINT; + state : UINT; + uAlign : UINT; +{$ifdef win32vista} + pszSubtitle : LPWSTR; + cchSubtitle : UINT; + pszTask : LPWSTR; + cchTask : UINT; + pszDescriptionTop : LPWSTR; + cchDescriptionTop : UINT; + pszDescriptionBottom: LPWSTR; + cchDescriptionBottom: UINT; + iTitleImage : cint; + iExtendedImage : cint; + iFirstItem : cint; // Read only + cItems : UINT; // Read only + pszSubsetTitle : LPWSTR;// NULL if group is not subset + cchSubsetTitle : UINT; +{$endif} + END; + LVGROUP = tagLVGROUP; + PLVGROUP = ^tagLVGROUP; + TLVGROUP = tagLVGROUP; + + +CONST + LVM_INSERTGROUP = (LVM_FIRST + 145); + +// Macro 123 +Procedure ListView_InsertGroup( hwnd : hwnd; index : WPARAM; pgrp : LPARAM); + +CONST + LVM_SETGROUPINFO = (LVM_FIRST + 147); + +// Macro 124 +Procedure ListView_SetGroupInfo( hwnd : hwnd; iGroupId : WPARAM; pgrp : LPARAM); + +CONST + LVM_GETGROUPINFO = (LVM_FIRST + 149); + +// Macro 125 +Procedure ListView_GetGroupInfo( hwnd : hwnd; iGroupId : WPARAM; pgrp : LPARAM); + +CONST + LVM_REMOVEGROUP = (LVM_FIRST + 150); + +// Macro 126 +Procedure ListView_RemoveGroup( hwnd : hwnd; iGroupId : WPARAM); + +CONST + LVM_MOVEGROUP = (LVM_FIRST + 151); + +// Macro 127 +Procedure ListView_MoveGroup( hwnd : hwnd; iGroupId : WPARAM; toIndex : LPARAM); + +CONST + LVM_MOVEITEMTOGROUP = (LVM_FIRST + 154); + +// Macro 128 +Procedure ListView_MoveItemToGroup( hwnd : hwnd; idItemFrom : WPARAM; idGroupTo : LPARAM); + +CONST + LVGMF_NONE = $00000000; + LVGMF_BORDERSIZE = $00000001; + LVGMF_BORDERCOLOR = $00000002; + LVGMF_TEXTCOLOR = $00000004; + +TYPE + + tagLVGROUPMETRICS = Record + cbSize : UINT; + mask : UINT; + Left : UINT; + Top : UINT; + Right : UINT; + Bottom : UINT; + crLeft : COLORREF; + crTop : COLORREF; + crRight : COLORREF; + crBottom : COLORREF; + crHeader : COLORREF; + crFooter : COLORREF; + END; + LVGROUPMETRICS = tagLVGROUPMETRICS; + PLVGROUPMETRICS = ^tagLVGROUPMETRICS; + TLVGROUPMETRICS = tagLVGROUPMETRICS; + +CONST + LVM_SETGROUPMETRICS = (LVM_FIRST + 155); + +// Macro 129 +Procedure ListView_SetGroupMetrics( hwnd : hwnd; pGroupMetrics : LPARAM); + +CONST + LVM_GETGROUPMETRICS = (LVM_FIRST + 156); + +// Macro 130 +Procedure ListView_GetGroupMetrics( hwnd : hwnd; pGroupMetrics : LPARAM); + +CONST + LVM_ENABLEGROUPVIEW = (LVM_FIRST + 157); + +// Macro 131 +Procedure ListView_EnableGroupView( hwnd : hwnd; fEnable : WPARAM); + +TYPE + PFNLVGROUPCOMPARE = function(i,j:cint;k:pointer):cint; StdCall; + +CONST + LVM_SORTGROUPS = (LVM_FIRST + 158); + +// Macro 132 +Procedure ListView_SortGroups( hwnd : hwnd; _pfnGroupCompate : WPARAM; _plv : LPARAM); + +TYPE + + tagLVINSERTGROUPSORTED = Record + pfnGroupCompare : PFNLVGROUPCOMPARE; + pvData : Pointer; + lvGroup : LVGROUP; + END; + LVINSERTGROUPSORTED = tagLVINSERTGROUPSORTED; + PLVINSERTGROUPSORTED = ^tagLVINSERTGROUPSORTED; + TLVINSERTGROUPSORTED = tagLVINSERTGROUPSORTED; + + +CONST + LVM_INSERTGROUPSORTED = (LVM_FIRST + 159); + +// Macro 133 +Procedure ListView_InsertGroupSorted( hwnd : hwnd; structInsert : WPARAM); + +CONST + LVM_REMOVEALLGROUPS = (LVM_FIRST + 160); + +// Macro 134 +Procedure ListView_RemoveAllGroups( hwnd : hwnd); + +CONST + LVM_HASGROUP = (LVM_FIRST + 161); + +// Macro 135 +Procedure ListView_HasGroup( hwnd : hwnd; dwGroupId : DWORD ); + +CONST + LVTVIF_AUTOSIZE = $00000000; + LVTVIF_FIXEDWIDTH = $00000001; + LVTVIF_FIXEDHEIGHT = $00000002; + LVTVIF_FIXEDSIZE = $00000003; +{$ifdef win32vista} + LVTVIF_EXTENDED = $00000004; +{$endif} + LVTVIM_TILESIZE = $00000001; + LVTVIM_COLUMNS = $00000002; + LVTVIM_LABELMARGIN = $00000004; + + +TYPE + + tagLVTILEVIEWINFO = Record + cbSize : UINT; + dwMask : DWORD; //LVTVIM_* + dwFlags : DWORD; //LVTVIF_* + sizeTile : SIZE; + cLines : cint; + rcLabelMargin : RECT; + END; + LVTILEVIEWINFO = tagLVTILEVIEWINFO; + PLVTILEVIEWINFO = ^tagLVTILEVIEWINFO; + TLVTILEVIEWINFO = tagLVTILEVIEWINFO; + + + tagLVTILEINFO = Record + cbSize : UINT; + iItem : cint; + cColumns : UINT; + puColumns : PUINT; + {$ifdef win32vista} + piColFmt : PCINT; + {$endif} + END; + LVTILEINFO = tagLVTILEINFO; + PLVTILEINFO = ^tagLVTILEINFO; + TLVTILEINFO = tagLVTILEINFO; + + +CONST + LVM_SETTILEVIEWINFO = (LVM_FIRST + 162); + +// Macro 136 +Procedure ListView_SetTileViewInfo( hwnd : hwnd; ptvi : LPARAM); + +CONST + LVM_GETTILEVIEWINFO = (LVM_FIRST + 163); + +// Macro 137 +Procedure ListView_GetTileViewInfo( hwnd : hwnd; ptvi : LPARAM); + +CONST + LVM_SETTILEINFO = (LVM_FIRST + 164); + +// Macro 138 +Procedure ListView_SetTileInfo( hwnd : hwnd; pti : LPARAM); + +CONST + LVM_GETTILEINFO = (LVM_FIRST + 165); + +// Macro 139 +Procedure ListView_GetTileInfo( hwnd : hwnd; pti : LPARAM); + +TYPE + + LVINSERTMARK = Record + cbSize : UINT; + dwFlags : DWORD; + iItem : cint; + dwReserved : DWORD; + END; + LPLVINSERTMARK = ^LVINSERTMARK; + TLVINSERTMARK = LVINSERTMARK; + PLVINSERTMARK = ^LVINSERTMARK; + +CONST + LVIM_AFTER = $00000001; // TRUE = insert After iItem, otherwise before + + LVM_SETINSERTMARK = (LVM_FIRST + 166); + +// Macro 140 +Function ListView_SetInsertMark( hwnd : hwnd; lvim : lparam ):BOOL; + +CONST + LVM_GETINSERTMARK = (LVM_FIRST + 167); + +// Macro 141 +Function ListView_GetInsertMark( hwnd : hwnd; lvim : lparam ):BOOL; + +CONST + LVM_INSERTMARKHITTEST = (LVM_FIRST + 168); + +// Macro 142 +Function ListView_InsertMarkHitTest( hwnd : hwnd; point : LPPOINT; lvim : LPLVINSERTMARK):cint; + +CONST + LVM_GETINSERTMARKRECT = (LVM_FIRST + 169); + +// Macro 143 +Function ListView_GetInsertMarkRect( hwnd : hwnd; rc : LPRECT):cint; + +CONST + LVM_SETINSERTMARKCOLOR = (LVM_FIRST + 170); + +// Macro 144 +Function ListView_SetInsertMarkColor( hwnd : hwnd; color : COLORREF):COLORREF; + +CONST + LVM_GETINSERTMARKCOLOR = (LVM_FIRST + 171); + +// Macro 145 +Function ListView_GetInsertMarkColor( hwnd : hwnd):COLORREF; + +TYPE + + tagLVSETINFOTIP = Record + cbSize : UINT; + dwFlags : DWORD; + pszText : LPWSTR; + iItem : cint; + iSubItem : cint; + END; + LVSETINFOTIP = tagLVSETINFOTIP; + PLVSETINFOTIP = ^tagLVSETINFOTIP; + TLVSETINFOTIP = tagLVSETINFOTIP; + + +CONST + LVM_SETINFOTIP = (LVM_FIRST + 173); + +// Macro 146 +Function ListView_SetInfoTip( hwndLV : hwnd; plvInfoTip : LPARAM):BOOL; + +CONST + LVM_GETSELECTEDCOLUMN = (LVM_FIRST + 174); + +// Macro 147 +Function ListView_GetSelectedColumn( hwnd : hwnd):UINT; + +CONST + LVM_ISGROUPVIEWENABLED = (LVM_FIRST + 175); + +// Macro 148 +Function ListView_IsGroupViewEnabled( hwnd : hwnd):BOOL; + +CONST + LVM_GETOUTLINECOLOR = (LVM_FIRST + 176); + +// Macro 149 +Function ListView_GetOutlineColor( hwnd : hwnd):COLORREF; + +CONST + LVM_SETOUTLINECOLOR = (LVM_FIRST + 177); + +// Macro 150 +Function ListView_SetOutlineColor( hwnd : hwnd; color : COLORREF):COLORREF; + +CONST + LVM_CANCELEDITLABEL = (LVM_FIRST + 179); + +// Macro 151 +Procedure ListView_CancelEditLabel( hwnd : hwnd); + +// These next to methods make it easy to identify an item that can be repositioned +// within listview. For example: Many developers use the lParam to store an identifier that is +// unique. Unfortunatly, in order to find this item, they have to iterate through all of the items +// in the listview. Listview will maintain a unique identifier. The upper bound is the size of a DWORD. + +CONST + LVM_MAPINDEXTOID = (LVM_FIRST + 180); + +// Macro 152 +Function ListView_MapIndexToID( hwnd : hwnd; index : WPARAM):UINT; + +CONST + LVM_MAPIDTOINDEX = (LVM_FIRST + 181); + +// Macro 153 +Function ListView_MapIDToIndex( hwnd : hwnd; id : WPARAM):UINT; + +const LVM_ISITEMVISIBLE = (LVM_FIRST + 182); + +// macro 153b +function ListView_IsItemVisible(hwnd:hwnd; aindex:cuint):cuint; +// (UINT)SNDMSG((hwnd), LVM_ISITEMVISIBLE, (WPARAM)(index), (LPARAM)0) + +{$ENDIF} + +{$ifdef win32vista} +CONST + LVM_GETEMPTYTEXT = (LVM_FIRST + 204); + LVM_GETFOOTERRECT = (LVM_FIRST + 205); + LVM_GETFOOTERINFO = (LVM_FIRST + 206); + LVM_GETFOOTERITEMRECT = (LVM_FIRST + 207); + LVM_GETFOOTERITEM = (LVM_FIRST + 208); + LVM_GETITEMINDEXRECT = (LVM_FIRST + 209); + LVM_SETITEMINDEXSTATE = (LVM_FIRST + 210); + LVM_GETNEXTITEMINDEX = (LVM_FIRST + 211); + +// footer flags + LVFF_ITEMCOUNT = $00000001; + +// footer item flags + LVFIF_TEXT = $00000001; + LVFIF_STATE = $00000002; + +// footer item state + LVFIS_FOCUSED = $0001; + +TYPE + tagLVFOOTERINFO = Record + mask : CUINT; // LVFF_* + pszText : LPWSTR; + cchTextMax: CINT; + cItems : CUINT; + end; + + LVFOOTERINFO = tagLVFOOTERINFO; + LPLVFOOTERINFO = ^tagLVFOOTERINFO; + TLVFOOTERINFO = tagLVFOOTERINFO; + PLVFOOTERINFO = LPLVFOOTERINFO; + + + tagLVFOOTERITEM = Record + mask : CUINT; // LVFIF_* + iItem : CINT; + pszText : LPWSTR; + cchTextMax: CINT; + state : CUINT; // LVFIS_* + stateMask : CUINT; // LVFIS_* + end; + + LVFOOTERITEM = tagLVFOOTERITEM; + LPLVFOOTERITEM = ^tagLVFOOTERITEM; + TLVFOOTERITEM = tagLVFOOTERITEM; + PLVFOOTERITEM = LPLVFOOTERITEM; + +// supports a single item in multiple groups. + tagLVITEMINDEX = Record + iItem : CINT; // listview item index + iGroup : CINT; // group index (must be -1 if group view is not enabled) + end; + LVITEMINDEX = tagLVITEMINDEX; + PLVITEMINDEX = ^tagLVITEMINDEX; + tLVITEMINDEX = TAGLVITEMINDEX; + + +function ListView_SetGroupHeaderImageList(hwnd:HWNd;himl:HIMAGELIST):HIMAGELIST; + +function ListView_GetGroupHeaderImageList(hwnd:HWND):HIMAGELIST; + +function ListView_GetEmptyText(hwnd:HWND;pszText:LPWSTR; cchText:CUINT):BOOL; + +function ListView_GetFooterRect(hwnd:HWND; prc:PRECT):BOOL; + +function ListView_GetFooterInfo(hwnd:HWND;plvfi: LPLVFOOTERINFO ):BOOL; + +function ListView_GetFooterItemRect(hwnd:HWND;iItem:CUINT;prc:PRECT):BOOL; + +function ListView_GetFooterItem(hwnd:HWND;iItem:CUINT; pfi:PLVFOOTERITEM):BOOL; + +function ListView_GetItemIndexRect(hwnd:hwnd; plvii:PLVITEMINDEX; iSubItem:clong; code:clong; prc:LPRECT) :BOOL; + +function ListView_SetItemIndexState(hwndLV:HWND; plvii:PLVITEMINDEX; data:CUINT; mask:CUINT):HRESULT; + +function ListView_GetNextItemIndex(hwnd:HWND;plvii:PLVITEMINDEX; flags:LPARAM):BOOL; + +{$endif} + +Type + +{$IFDEF UNICODE} + LVBKIMAGE = LVBKIMAGEW; + LPLVBKIMAGE = LPLVBKIMAGEW; +CONST + LVM_SETBKIMAGE = LVM_SETBKIMAGEW; + LVM_GETBKIMAGE = LVM_GETBKIMAGEW; +{$ELSE} + LVBKIMAGE = LVBKIMAGEA; + LPLVBKIMAGE = LPLVBKIMAGEA; +CONST + LVM_SETBKIMAGE = LVM_SETBKIMAGEA; + LVM_GETBKIMAGE = LVM_GETBKIMAGEA; +{$ENDIF} + + +// Macro 154 +Function ListView_SetBkImage( hwnd : hwnd; plvbki : LPARAM):BOOL; + +// Macro 155 +Function ListView_GetBkImage( hwnd : hwnd; plvbki : LPARAM):BOOL; + +{$ENDIF} // _WIN32_IE >= 0x0400 + +TYPE + + tagNMLISTVIEW = Record + hdr : NMHDR; + iItem : cint; + iSubItem : cint; + uNewState : UINT; + uOldState : UINT; + uChanged : UINT; + ptAction : POINT; + lParam : LPARAM; + END; + NMLISTVIEW = tagNMLISTVIEW; + LPNMLISTVIEW = ^tagNMLISTVIEW; + TNMLISTVIEW = tagNMLISTVIEW; + PNMLISTVIEW = ^tagNMLISTVIEW; + +{$ifdef IE4plus} +// NMITEMACTIVATE is used instead of NMLISTVIEW in IE >= 0x400 +// therefore all the fields are the same except for extra uKeyFlags +// they are used to store key flags at the time of the single click with +// delayed activation - because by the time the timer goes off a user may +// not hold the keys (shift, ctrl) any more + tagNMITEMACTIVATE = Record + hdr : NMHDR; + iItem : cint; + iSubItem : cint; + uNewState : UINT; + uOldState : UINT; + uChanged : UINT; + ptAction : POINT; + lParam : LPARAM; + uKeyFlags : UINT; + END; + NMITEMACTIVATE = tagNMITEMACTIVATE; + LPNMITEMACTIVATE = ^tagNMITEMACTIVATE; + TNMITEMACTIVATE = tagNMITEMACTIVATE; + PNMITEMACTIVATE = ^tagNMITEMACTIVATE; + +// key flags stored in uKeyFlags + +CONST + LVKF_ALT = $0001; + LVKF_CONTROL = $0002; + LVKF_SHIFT = $0004; +{$ENDIF} //(_WIN32_IE >= 0x0400) +Type + +{$ifdef ie3plus} + LPNM_LISTVIEW = LPNMLISTVIEW; + NM_LISTVIEW = NMLISTVIEW; +{$ELSE} + tagNMLISTVIEW = _NM_LISTVIEW; + NMLISTVIEW = NM_LISTVIEW; + LPNMLISTVIEW = LPNM_LISTVIEW; +{$ENDIF} + + +{$ifdef ie3plus} +// #define NMLVCUSTOMDRAW_V3_SIZE CCSIZEOF_STRUCT(NMLVCUSTOMDRW, clrTextBk) + +TYPE + + tagNMLVCUSTOMDRAW = Record + nmcd : NMCUSTOMDRAW; + clrText : COLORREF; + clrTextBk : COLORREF; +{$ifdef ie4plus} + iSubItem : cint; +{$ENDIF} +{$ifdef win32xp} + dwItemType : DWORD; + + clrFace : COLORREF; + iIconEffect : cint; + iIconPhase : cint; + iPartId : cint; + iStateId : cint; + + rcText : RECT; + uAlign : UINT; // Alignment. Use LVGA_HEADER_CENTER, LVGA_HEADER_RIGHT, LVGA_HEADER_LEFT +{$ENDIF} + END; + NMLVCUSTOMDRAW = tagNMLVCUSTOMDRAW; + LPNMLVCUSTOMDRAW = ^tagNMLVCUSTOMDRAW; + TNMLVCUSTOMDRAW = tagNMLVCUSTOMDRAW; + PNMLVCUSTOMDRAW = ^tagNMLVCUSTOMDRAW; + + +// dwItemType + +CONST + LVCDI_ITEM = $00000000; + LVCDI_GROUP = $00000001; + +// ListView custom draw return values + LVCDRF_NOSELECT = $00010000; + LVCDRF_NOGROUPFRAME = $00020000; + +TYPE + + tagNMLVCACHEHINT = Record + hdr : NMHDR; + iFrom : cint; + iTo : cint; + END; + NMLVCACHEHINT = tagNMLVCACHEHINT; + LPNMLVCACHEHINT = ^tagNMLVCACHEHINT; + TNMLVCACHEHINT = tagNMLVCACHEHINT; + PNMLVCACHEHINT = ^tagNMLVCACHEHINT; + + + LPNM_CACHEHINT = LPNMLVCACHEHINT; + PNM_CACHEHINT = LPNMLVCACHEHINT; + + NM_CACHEHINT = NMLVCACHEHINT; + + tagNMLVFINDITEMA = Record + hdr : NMHDR; + iStart : cint; + lvfi : LVFINDINFOA; + END; + NMLVFINDITEMA = tagNMLVFINDITEMA; + LPNMLVFINDITEMA = ^tagNMLVFINDITEMA; + TNMLVFINDITEMA = tagNMLVFINDITEMA; + PNMLVFINDITEMA = ^tagNMLVFINDITEMA; + + + tagNMLVFINDITEMW = Record + hdr : NMHDR; + iStart : cint; + lvfi : LVFINDINFOW; + END; + NMLVFINDITEMW = tagNMLVFINDITEMW; + LPNMLVFINDITEMW = ^tagNMLVFINDITEMW; + TNMLVFINDITEMW = tagNMLVFINDITEMW; + PNMLVFINDITEMW = ^tagNMLVFINDITEMW; + + + PNM_FINDITEMA = LPNMLVFINDITEMA; + LPNM_FINDITEMA = LPNMLVFINDITEMA; + NM_FINDITEMA = NMLVFINDITEMA; + + PNM_FINDITEMW = LPNMLVFINDITEMW; + LPNM_FINDITEMW = LPNMLVFINDITEMW; + NM_FINDITEMW = NMLVFINDITEMW; + +{$IFDEF UNICODE} + PNM_FINDITEM = PNM_FINDITEMW; + LPNM_FINDITEM = LPNM_FINDITEMW; + NM_FINDITEM = NM_FINDITEMW; + NMLVFINDITEM = NMLVFINDITEMW; + LPNMLVFINDITEM = LPNMLVFINDITEMW; +{$ELSE} + PNM_FINDITEM = PNM_FINDITEMA; + LPNM_FINDITEM = LPNM_FINDITEMA; + NM_FINDITEM = NM_FINDITEMA; + NMLVFINDITEM = NMLVFINDITEMA; + LPNMLVFINDITEM = LPNMLVFINDITEMA; +{$ENDIF} + PNMLVFindItem = LPNMLVFINDITEM; + TNMLVFindItem = NMLVFINDITEM; + + tagNMLVODSTATECHANGE = Record + hdr : NMHDR; + iFrom : cint; + iTo : cint; + uNewState : UINT; + uOldState : UINT; + END; + NMLVODSTATECHANGE = tagNMLVODSTATECHANGE; + LPNMLVODSTATECHANGE = ^tagNMLVODSTATECHANGE; + TNMLVODSTATECHANGE = tagNMLVODSTATECHANGE; + PNMLVODSTATECHANGE = ^tagNMLVODSTATECHANGE; + + + PNM_ODSTATECHANGE = LPNMLVODSTATECHANGE; + LPNM_ODSTATECHANGE = LPNMLVODSTATECHANGE; + + + NM_ODSTATECHANGE = NMLVODSTATECHANGE; +{$ENDIF} // _WIN32_IE >= 0x0300 + +CONST + LVN_ITEMCHANGING = (LVN_FIRST-0); + LVN_ITEMCHANGED = (LVN_FIRST-1); + LVN_INSERTITEM = (LVN_FIRST-2); + LVN_DELETEITEM = (LVN_FIRST-3); + LVN_DELETEALLITEMS = (LVN_FIRST-4); + LVN_BEGINLABELEDITA = (LVN_FIRST-5); + LVN_BEGINLABELEDITW = (LVN_FIRST-75); + LVN_ENDLABELEDITA = (LVN_FIRST-6); + LVN_ENDLABELEDITW = (LVN_FIRST-76); + LVN_COLUMNCLICK = (LVN_FIRST-8); + LVN_BEGINDRAG = (LVN_FIRST-9); + LVN_BEGINRDRAG = (LVN_FIRST-11); + +{$ifdef ie3plus} + LVN_ODCACHEHINT = (LVN_FIRST-13); + LVN_ODFINDITEMA = (LVN_FIRST-52); + LVN_ODFINDITEMW = (LVN_FIRST-79); + + LVN_ITEMACTIVATE = (LVN_FIRST-14); + LVN_ODSTATECHANGED = (LVN_FIRST-15); + +Const +{$IFDEF UNICODE} + LVN_ODFINDITEM = LVN_ODFINDITEMW; +{$ELSE} + LVN_ODFINDITEM = LVN_ODFINDITEMA; +{$ENDIF} +{$ENDIF} // _WIN32_IE >= 0x0300 + + +CONST +{$ifdef ie4plus} + LVN_HOTTRACK = (LVN_FIRST-21); +{$ENDIF} + + LVN_GETDISPINFOA = (LVN_FIRST-50); + LVN_GETDISPINFOW = (LVN_FIRST-77); + LVN_SETDISPINFOA = (LVN_FIRST-51); + LVN_SETDISPINFOW = (LVN_FIRST-78); + +Const +{$IFDEF UNICODE} + LVN_BEGINLABELEDIT = LVN_BEGINLABELEDITW; + LVN_ENDLABELEDIT = LVN_ENDLABELEDITW; + LVN_GETDISPINFO = LVN_GETDISPINFOW; + LVN_SETDISPINFO = LVN_SETDISPINFOW; +{$ELSE} + LVN_BEGINLABELEDIT = LVN_BEGINLABELEDITA; + LVN_ENDLABELEDIT = LVN_ENDLABELEDITA; + LVN_GETDISPINFO = LVN_GETDISPINFOA; + LVN_SETDISPINFO = LVN_SETDISPINFOA; +{$ENDIF} + +CONST + LVIF_DI_SETITEM = $1000; + +TYPE + + tagLVDISPINFO = Record + hdr : NMHDR; + item : LVITEMA; + END; + NMLVDISPINFOA = tagLVDISPINFO; + LPNMLVDISPINFOA = ^tagLVDISPINFO; + TLVDISPINFO = tagLVDISPINFO; + PLVDISPINFO = ^tagLVDISPINFO; + + + tagLVDISPINFOW = Record + hdr : NMHDR; + item : LVITEMW; + END; + NMLVDISPINFOW = tagLVDISPINFOW; + LPNMLVDISPINFOW = ^tagLVDISPINFOW; + TLVDISPINFOW = tagLVDISPINFOW; + PLVDISPINFOW = ^tagLVDISPINFOW; + + +{$IFDEF UNICODE} + NMLVDISPINFO = NMLVDISPINFOW; +{$ELSE} + NMLVDISPINFO = NMLVDISPINFOA; +{$ENDIF} + +{$ifdef ie3plus} + LV_DISPINFOA = NMLVDISPINFOA; + LV_DISPINFOW = NMLVDISPINFOW; +{$ELSE} + tagLVDISPINFO = _LV_DISPINFO; + NMLVDISPINFOA = LV_DISPINFOA; + tagLVDISPINFOW = _LV_DISPINFOW; + NMLVDISPINFOW = LV_DISPINFOW; +{$ENDIF} + + + LV_DISPINFO = NMLVDISPINFO; + +CONST + LVN_KEYDOWN = (LVN_FIRST-55); + + + +{$IFDEF _WIN32} +// include <pshpack1.h> +{$ENDIF} + +TYPE + tagLVKEYDOWN = Record + hdr : NMHDR; + wVKey : WORD; + flags : UINT; + END; + NMLVKEYDOWN = tagLVKEYDOWN; + LPNMLVKEYDOWN = ^tagLVKEYDOWN; + TLVKEYDOWN = tagLVKEYDOWN; + PLVKEYDOWN = ^tagLVKEYDOWN; + + +{$IFDEF _WIN32} +//include <poppack.h> +{$ENDIF} + +{$ifdef ie3plus} +CONST + LVN_MARQUEEBEGIN = (LVN_FIRST-56); +{$ENDIF} + +{$ifdef win32vista} +Type + tagNMLVLIN = Record + hdr: NMHDR; + link: LITEM; + iItem: cint; + iSubItem: cint; + end; + NMLVLINK = tagNMLVLIN; + TNMLVLINK = tagNMLVLIN; + PNMLVLINK = ^tagNMLVLIN; +{$endif} + +{$ifdef ie4plus} +TYPE + + tagNMLVGETINFOTIPA = Record + hdr : NMHDR; + dwFlags : DWORD; + pszText : LPSTR; + cchTextMax : cint; + iItem : cint; + iSubItem : cint; + lParam : LPARAM; + END; + NMLVGETINFOTIPA = tagNMLVGETINFOTIPA; + LPNMLVGETINFOTIPA = ^tagNMLVGETINFOTIPA; + TNMLVGETINFOTIPA = tagNMLVGETINFOTIPA; + PNMLVGETINFOTIPA = ^tagNMLVGETINFOTIPA; + + + tagNMLVGETINFOTIPW = Record + hdr : NMHDR; + dwFlags : DWORD; + pszText : LPWSTR; + cchTextMax : cint; + iItem : cint; + iSubItem : cint; + lParam : LPARAM; + END; + NMLVGETINFOTIPW = tagNMLVGETINFOTIPW; + LPNMLVGETINFOTIPW = ^tagNMLVGETINFOTIPW; + TNMLVGETINFOTIPW = tagNMLVGETINFOTIPW; + PNMLVGETINFOTIPW = ^tagNMLVGETINFOTIPW; + +{$ifdef ie3plus} + LV_KEYDOWN = NMLVKEYDOWN; +{$ELSE} + tagLVKEYDOWN = _LV_KEYDOWN; + NMLVKEYDOWN = LV_KEYDOWN; +{$ENDIF} + + +// NMLVGETINFOTIPA.dwFlag values + +CONST + LVGIT_UNFOLDED = $0001; + + LVN_GETINFOTIPA = (LVN_FIRST-57); + LVN_GETINFOTIPW = (LVN_FIRST-58); + LVN_INCREMENTALSEARCHA = (LVN_FIRST-62); + LVN_INCREMENTALSEARCHW = (LVN_FIRST-63); + + LVNSCH_DEFAULT = -1; + LVNSCH_ERROR = -2; + LVNSCH_IGNORE = -3; + +{$ifdef win32vista} + LVN_COLUMNDROPDOWN = (LVN_FIRST-64); + LVN_COLUMNOVERFLOWCLICK = (LVN_FIRST-66); +{$endif} + +Const +{$IFDEF UNICODE} + LVN_GETINFOTIP = LVN_GETINFOTIPW; +type + NMLVGETINFOTIP = NMLVGETINFOTIPW; + LPNMLVGETINFOTIP = LPNMLVGETINFOTIPW; +{$ELSE} + LVN_GETINFOTIP = LVN_GETINFOTIPA; +type + NMLVGETINFOTIP = NMLVGETINFOTIPA; + LPNMLVGETINFOTIP = LPNMLVGETINFOTIPA; +{$ENDIF} +{$ENDIF} // _WIN32_IE >= 0x0400 + + +{$ifdef win32xp} // actually 2003 + tagNMLVSCROLL = Record + hdr : NMHDR; + dx : cint; + dy : cint; + END; + NMLVSCROLL = tagNMLVSCROLL; + LPNMLVSCROLL = ^tagNMLVSCROLL; + TNMLVSCROLL = tagNMLVSCROLL; + PNMLVSCROLL = ^tagNMLVSCROLL; + + +CONST + LVN_BEGINSCROLL = (LVN_FIRST-80); + LVN_ENDSCROLL = (LVN_FIRST-81); +// {$ENDIF} + +{$ifdef win32vista} + LVN_LINKCLICK = (LVN_FIRST-84); + LVN_GETEMPTYMARKUP = (LVN_FIRST-87); + + EMF_CENTERED = $00000001; // render markup centered in the listview area + +Type + tagNMLVEMPTYMARKUP = Record + hdr : NMHDR; + // out params from client back to listview + dwFlags :DWORD; // EMF_* + szMarkup : array[0..L_MAX_URL_LENGTH-1] of wchar; // markup displayed + end; + NMLVEMPTYMARKUP = tagNMLVEMPTYMARKUP; + TNMLVEMPTYMARKUP = tagNMLVEMPTYMARKUP; + PNMLVEMPTYMARKUP = ^tagNMLVEMPTYMARKUP; + +{$endif} + +{$ENDIF} // NOLISTVIEW + +//====== TREEVIEW CONTROL ===================================================== + +{$IFNDEF NOTREEVIEW} + +CONST +{$IFDEF _WIN32} + WC_TREEVIEWA = 'SysTreeView32'; + WC_TREEVIEWW = {L}'SysTreeView32'; + +{$IFDEF UNICODE} + WC_TREEVIEW = WC_TREEVIEWW; +{$ELSE} + WC_TREEVIEW = WC_TREEVIEWA; +{$ENDIF} +{$ELSE} + WC_TREEVIEW = 'SysTreeView'; +{$ENDIF} + +// begin_r_commctrl + + TVS_HASBUTTONS = $0001; + TVS_HASLINES = $0002; + TVS_LINESATROOT = $0004; + TVS_EDITLABELS = $0008; + TVS_DISABLEDRAGDROP = $0010; + TVS_SHOWSELALWAYS = $0020; +{$ifdef ie3plus} + TVS_RTLREADING = $0040; + + TVS_NOTOOLTIPS = $0080; + TVS_CHECKBOXES = $0100; + TVS_TRACKSELECT = $0200; +{$ifdef ie4plus} + TVS_SINGLEEXPAND = $0400; + TVS_INFOTIP = $0800; + TVS_FULLROWSELECT = $1000; + TVS_NOSCROLL = $2000; + TVS_NONEVENHEIGHT = $4000; +{$ENDIF} +{$ifdef ie5plus} + TVS_NOHSCROLL = $8000; // TVS_NOSCROLL overrides this +{$ENDIF} +{$ifdef win32vista} + TVS_EX_MULTISELECT = $0002; + TVS_EX_DOUBLEBUFFER = $0004; + TVS_EX_NOINDENTSTATE = $0008; + TVS_EX_RICHTOOLTIP = $0010; + TVS_EX_AUTOHSCROLL = $0020; + TVS_EX_FADEINOUTEXPANDOS = $0040; + TVS_EX_PARTIALCHECKBOXES = $0080; + TVS_EX_EXCLUSIONCHECKBOXES = $0100; + TVS_EX_DIMMEDCHECKBOXES = $0200; + TVS_EX_DRAWIMAGEASYNC = $0400; +{$endif} +{$ENDIF} + +// end_r_commctrl + +TYPE + HTREEITEM = ^TREEITEM; + +CONST + TVIF_TEXT = $0001; + TVIF_IMAGE = $0002; + TVIF_PARAM = $0004; + TVIF_STATE = $0008; + TVIF_HANDLE = $0010; + TVIF_SELECTEDIMAGE = $0020; + TVIF_CHILDREN = $0040; +{$ifdef ie4plus} + TVIF_INTEGRAL = $0080; +{$ENDIF} +{$ifdef win32vista} + TVIF_STATEEX = $0100; + TVIF_EXPANDEDIMAGE = $0200; +{$endif} + TVIS_SELECTED = $0002; + TVIS_CUT = $0004; + TVIS_DROPHILITED = $0008; + TVIS_BOLD = $0010; + TVIS_EXPANDED = $0020; + TVIS_EXPANDEDONCE = $0040; +{$ifdef ie3plus} + TVIS_EXPANDPARTIAL = $0080; +{$ENDIF} + + TVIS_OVERLAYMASK = $0F00; + TVIS_STATEIMAGEMASK = $F000; + TVIS_USERMASK = $F000; + +// IE6 + TVIS_EX_FLAT = $0001; +{$ifdef win32vista} + TVIS_EX_DISABLED = $0002; +{$endif} + TVIS_EX_ALL = $0002; +Type + +// Structure for TreeView's NM_TVSTATEIMAGECHANGING notification + tagNMTVSTATEIMAGECHANGING = Record + hdr : NMHDR; + hti : HTREEITEM; + iOldStateImageIndex : cint; + iNewStateImageIndex : cint; + end; + NMTVSTATEIMAGECHANGING = tagNMTVSTATEIMAGECHANGING; + LPNMTVSTATEIMAGECHANGING = ^tagNMTVSTATEIMAGECHANGING; + +Const + I_CHILDRENCALLBACK = (-1); +Type + tagTVITEMA = Record + mask : UINT; + hItem : HTREEITEM; + state : UINT; + stateMask : UINT; + pszText : LPSTR; + cchTextMax : cint; + iImage : cint; + iSelectedImage : cint; + cChildren : cint; + lParam : LPARAM; +{$ifdef ie6plus} + uStateEx : cUINT; + hwnd : HWND; + iExpandedImage : cint; +{$endif} +{$ifdef NTDDI_WIN7} + iPadding : cint; +{$endif} + END; + TVITEMA = tagTVITEMA; + LPTVITEMA = ^tagTVITEMA; + TTVITEMA = tagTVITEMA; + PTVITEMA = ^tagTVITEMA; + + + tagTVITEMW = Record + mask : UINT; + hItem : HTREEITEM; + state : UINT; + stateMask : UINT; + pszText : LPWSTR; + cchTextMax : cint; + iImage : cint; + iSelectedImage : cint; + cChildren : cint; + lParam : LPARAM; +{$ifdef ie6plus} + uStateEx : cUINT; + hwnd : HWND; + iExpandedImage : cint; +{$endif} +{$ifdef NTDDI_WIN7} + iPadding : cint; +{$endif} + END; + TVITEMW = tagTVITEMW; + LPTVITEMW = ^tagTVITEMW; + TTVITEMW = tagTVITEMW; + PTVITEMW = ^tagTVITEMW; + + +{$ifdef ie4plus} +// only used for Get and Set messages. no notifies + tagTVITEMEXA = Record + mask : UINT; + hItem : HTREEITEM; + state : UINT; + stateMask : UINT; + pszText : LPSTR; + cchTextMax : cint; + iImage : cint; + iSelectedImage : cint; + cChildren : cint; + lParam : LPARAM; + iIntegral : cint; + END; + TVITEMEXA = tagTVITEMEXA; + LPTVITEMEXA = ^tagTVITEMEXA; + TTVITEMEXA = tagTVITEMEXA; + PTVITEMEXA = ^tagTVITEMEXA; + +// only used for Get and Set messages. no notifies + tagTVITEMEXW = Record + mask : UINT; + hItem : HTREEITEM; + state : UINT; + stateMask : UINT; + pszText : LPWSTR; + cchTextMax : cint; + iImage : cint; + iSelectedImage : cint; + cChildren : cint; + lParam : LPARAM; + iIntegral : cint; + END; + TVITEMEXW = tagTVITEMEXW; + LPTVITEMEXW = ^tagTVITEMEXW; + TTVITEMEXW = tagTVITEMEXW; + PTVITEMEXW = ^tagTVITEMEXW; + + +TYPE +{$ifdef ie3plus} + LPTV_ITEMW = LPTVITEMW; + LPTV_ITEMA = LPTVITEMA; + TV_ITEMW = TVITEMW; + TV_ITEMA = TVITEMA; +{$ELSE} + tagTVITEMA = _TV_ITEMA; + TVITEMA = TV_ITEMA; + LPTVITEMA = LPTV_ITEMA; + tagTVITEMW = _TV_ITEMW; + TVITEMW = TV_ITEMW; + LPTVITEMW = LPTV_ITEMW; +{$ENDIF} + TTVItem = TVITEMA; + PTVItem = LPTVITEMA; + + + + + +{$IFDEF UNICODE} + TVITEMEX = TVITEMEXW; + LPTVITEMEX = LPTVITEMEXW; +{$ELSE} + TVITEMEX = TVITEMEXA; + LPTVITEMEX = LPTVITEMEXA; +{$ENDIF} // UNICODE + + +{$ENDIF} + +{$IFDEF UNICODE} + TVITEM = TVITEMW; + LPTVITEM = LPTVITEMW; +{$ELSE} + TVITEM = TVITEMA; + LPTVITEM = LPTVITEMA; +{$ENDIF} + + LPTV_ITEM = LPTVITEM; + TV_ITEM = TVITEM; + +CONST + TVI_ROOT = HTREEITEM(ULONG_PTR(-$10000)); + TVI_FIRST = HTREEITEM(ULONG_PTR(-$0FFFF)); + TVI_LAST = HTREEITEM(ULONG_PTR(-$0FFFE)); + TVI_SORT = HTREEITEM(ULONG_PTR(-$0FFFD)); + + + +// #define TVINSERTSTRUCTA_V1_SIZE CCSIZEOF_STRUCT(TVINSERTSTRUCTA, item) +// #define TVINSERTSTRUCTW_V1_SIZE CCSIZEOF_STRUCT(TVINSERTSTRUCTW, item) +Type + tagTVINSERTSTRUCTA = Record + hParent : HTREEITEM; + hInsertAfter : HTREEITEM; +{$ifdef ie4plus} + case boolean of + false: (itemex : TVITEMEXA); + True: (item : TV_ITEMA); +{$ELSE} + item : TV_ITEMA; +{$ENDIF} + END; + TVINSERTSTRUCTA = tagTVINSERTSTRUCTA; + LPTVINSERTSTRUCTA = ^tagTVINSERTSTRUCTA; + TTVINSERTSTRUCTA = tagTVINSERTSTRUCTA; + PTVINSERTSTRUCTA = ^tagTVINSERTSTRUCTA; + TTVINSERTSTRUCT = TTVINSERTSTRUCTA; + PTVINSERTSTRUCT = PTVINSERTSTRUCTA; + + + tagTVINSERTSTRUCTW = Record + hParent : HTREEITEM; + hInsertAfter : HTREEITEM; +{$ifdef ie4plus} + case boolean of + false: (itemex : TVITEMEXW); + True: (item : TV_ITEMW); +{$ELSE} + item : TV_ITEMW; +{$ENDIF} + END; + TVINSERTSTRUCTW = tagTVINSERTSTRUCTW; + LPTVINSERTSTRUCTW = ^tagTVINSERTSTRUCTW; + TTVINSERTSTRUCTW = tagTVINSERTSTRUCTW; + PTVINSERTSTRUCTW = ^tagTVINSERTSTRUCTW; + + +{$IFDEF UNICODE} + TVINSERTSTRUCT = TVINSERTSTRUCTW; + LPTVINSERTSTRUCT = LPTVINSERTSTRUCTW; +// TVINSERTSTRUCT_V1_SIZE = TVINSERTSTRUCTW_V1_SIZE; +{$ELSE} + TVINSERTSTRUCT = TVINSERTSTRUCTA; + LPTVINSERTSTRUCT = LPTVINSERTSTRUCTA; +// TVINSERTSTRUCT_V1_SIZE = TVINSERTSTRUCTA_V1_SIZE; +{$ENDIF} +CONST + TVM_INSERTITEMA = (TV_FIRST + 0); + TVM_INSERTITEMW = (TV_FIRST + 50); +{$IFDEF UNICODE} + TVM_INSERTITEM = TVM_INSERTITEMW; +{$ELSE} + TVM_INSERTITEM = TVM_INSERTITEMA; +{$ENDIF} + +TYPE +{$ifdef ie3plus} + LPTV_INSERTSTRUCTA = LPTVINSERTSTRUCTA; + LPTV_INSERTSTRUCTW = LPTVINSERTSTRUCTW; + TV_INSERTSTRUCTA = TVINSERTSTRUCTA; + TV_INSERTSTRUCTW = TVINSERTSTRUCTW; +{$ELSE} + tagTVINSERTSTRUCTA = _TV_INSERTSTRUCTA; + TVINSERTSTRUCTA = TV_INSERTSTRUCTA; + LPTVINSERTSTRUCTA = LPTV_INSERTSTRUCTA; + tagTVINSERTSTRUCTW = _TV_INSERTSTRUCTW; + TVINSERTSTRUCTW = TV_INSERTSTRUCTW; + LPTVINSERTSTRUCTW = LPTV_INSERTSTRUCTW; +{$ENDIF} + + + TV_INSERTSTRUCT = TVINSERTSTRUCT; + LPTV_INSERTSTRUCT = LPTVINSERTSTRUCT; + + +// Macro 156 +Function TreeView_InsertItem( hwnd : hwnd; lpis : LPTV_INSERTSTRUCT):HTREEITEM;inline; +Function TreeView_InsertItem( hwnd : hwnd; const lpis : TV_INSERTSTRUCT):HTREEITEM;inline; + +CONST + TVM_DELETEITEM = (TV_FIRST + 1); + +// Macro 157 +Function TreeView_DeleteItem( hwnd : hwnd; hitem : HTREEITEM):BOOL; + +// Macro 158 +Function TreeView_DeleteAllItems( hwnd : hwnd):BOOL; + +CONST + TVM_EXPAND = (TV_FIRST + 2); + +// Macro 159 +Function TreeView_Expand( hwnd : hwnd; hitem : HTREEITEM; code : WPARAM):BOOL; + +CONST + TVE_COLLAPSE = $0001; + TVE_EXPAND = $0002; + TVE_TOGGLE = $0003; +{$ifdef ie3plus} + TVE_EXPANDPARTIAL = $4000; +{$ENDIF} + TVE_COLLAPSERESET = $8000; + + + TVM_GETITEMRECT = (TV_FIRST + 4); + +// Macro 160 +Function TreeView_GetItemRect( hwnd : hwnd; hitem: HTREEITEM; code : WPARAM; prc : pRECT):BOOL;inline; +Function TreeView_GetItemRect( hwnd : hwnd; hitem: HTREEITEM; var prc : TRECT;code : Bool):BOOL;inline; + +CONST + TVM_GETCOUNT = (TV_FIRST + 5); + +// Macro 161 +Function TreeView_GetCount( hwnd : hwnd):UINT; + +CONST + TVM_GETINDENT = (TV_FIRST + 6); + +// Macro 162 +Function TreeView_GetIndent( hwnd : hwnd):UINT; + +CONST + TVM_SETINDENT = (TV_FIRST + 7); + +// Macro 163 +Function TreeView_SetIndent( hwnd : hwnd; indent : WPARAM):BOOL; + +CONST + TVM_GETIMAGELIST = (TV_FIRST + 8); + +// Macro 164 +Function TreeView_GetImageList( hwnd : hwnd; iImage : cint ):HIMAGELIST; + +CONST + TVSIL_NORMAL = 0; + TVSIL_STATE = 2; + + + TVM_SETIMAGELIST = (TV_FIRST + 9); + +// Macro 165 +Function TreeView_SetImageList( hwnd : hwnd; himl : HIMAGELIST; iImage : cint):HIMAGELIST; + +CONST + TVM_GETNEXTITEM = (TV_FIRST + 10); + +// Macro 166 +Function TreeView_GetNextItem( hwnd : hwnd; hitem : HTREEITEM; code : WPARAM):HTREEITEM; + +CONST + TVGN_ROOT = $0000; + TVGN_NEXT = $0001; + TVGN_PREVIOUS = $0002; + TVGN_PARENT = $0003; + TVGN_CHILD = $0004; + TVGN_FIRSTVISIBLE = $0005; + TVGN_NEXTVISIBLE = $0006; + TVGN_PREVIOUSVISIBLE = $0007; + TVGN_DROPHILITE = $0008; + TVGN_CARET = $0009; +{$ifdef ie4plus} + TVGN_LASTVISIBLE = $000A; +{$ENDIF} // _WIN32_IE >= 0x0400 +{$ifdef ie6plus} + TVGN_NEXTSELECTED = $000B; +{$endif} +{$ifdef win32xp} // 0x501 + TVSI_NOSINGLEEXPAND = $8000; // Should not conflict with TVGN flags. +{$ENDIF} + +function TreeView_GetChild(hwnd:hwnd; hitem:HTREEITEM) : HTREEITEM;inline; +function TreeView_GetNextSibling(hwnd:hwnd; hitem:HTREEITEM) : HTREEITEM;inline; +function TreeView_GetPrevSibling(hwnd:hwnd; hitem:HTREEITEM) : HTREEITEM;inline; +function TreeView_GetParent(hwnd:hwnd; hitem:HTREEITEM) : HTREEITEM;inline; +function TreeView_GetFirstVisible(hwnd:hwnd) : HTREEITEM;inline; +function TreeView_GetNextVisible(hwnd:hwnd; hitem:HTREEITEM) : HTREEITEM;inline; +function TreeView_GetPrevVisible(hwnd:hwnd; hitem:HTREEITEM) : HTREEITEM;inline; +function TreeView_GetSelection(hwnd:hwnd) : HTREEITEM;inline; +function TreeView_GetDropHilight(hwnd:hwnd) : HTREEITEM;inline; +function TreeView_GetDropHilite(hwnd:hwnd) : HTREEITEM;inline; +function TreeView_GetRoot(hwnd:hwnd) : HTREEITEM;inline; +function TreeView_GetLastVisible(hwnd:hwnd) : HTREEITEM;inline; + +{$ifdef win32vista} +function TreeView_GetNextSelected(hwnd:hwnd; hitem:HTREEITEM):HTREEITEM;inline; +{$endif} + +CONST + TVM_SELECTITEM = (TV_FIRST + 11); + +// Macro 178 +Function TreeView_Select( hwnd : hwnd; hitem : HTREEITEM; code : WPARAM):BOOL; + +// Macro 179 +Procedure TreeView_SelectItem(hwnd:hwnd; hitem:HTREEITEM); + +// Macro 180 +Procedure TreeView_SelectDropTarget(hwnd:hwnd; hitem:HTREEITEM); + +// Macro 181 +Procedure TreeView_SelectSetFirstVisible(hwnd:hwnd; hitem:HTREEITEM); + +CONST + TVM_GETITEMA = (TV_FIRST + 12); + TVM_GETITEMW = (TV_FIRST + 62); + +{$IFDEF UNICODE} + +TYPE + TVM_GETITEM = TVM_GETITEMW; +{$ELSE} + TVM_GETITEM = TVM_GETITEMA; +{$ENDIF} + +// Macro 182 + + +Function TreeView_GetItem( hwnd : hwnd;var pitem : TV_ITEM ):BOOL; + + + + +CONST + TVM_SETITEMA = (TV_FIRST + 13); + TVM_SETITEMW = (TV_FIRST + 63); + +{$IFDEF UNICODE} + +TYPE + TVM_SETITEM = TVM_SETITEMW; +{$ELSE} + TVM_SETITEM = TVM_SETITEMA; +{$ENDIF} + +// Macro 183 + + +Function TreeView_SetItem( hwnd : hwnd;const pitem : TV_ITEM ):BOOL; + + +CONST + TVM_EDITLABELA = (TV_FIRST + 14); + TVM_EDITLABELW = (TV_FIRST + 65); +{$IFDEF UNICODE} + +TYPE + TVM_EDITLABEL = TVM_EDITLABELW; +{$ELSE} + TVM_EDITLABEL = TVM_EDITLABELA; +{$ENDIF} + +// Macro 184 + + +Function TreeView_EditLabel( hwnd : hwnd; hitem : HTREEITEM):HWND; + + + + +CONST + TVM_GETEDITCONTROL = (TV_FIRST + 15); +// Macro 185 + + +Function TreeView_GetEditControl( hwnd : hwnd):HWND; + + + + +CONST + TVM_GETVISIBLECOUNT = (TV_FIRST + 16); +// Macro 186 + + +Function TreeView_GetVisibleCount( hwnd : hwnd):UINT; + + + + +CONST + TVM_HITTEST = (TV_FIRST + 17); + +TYPE + + tagTVHITTESTINFO = Record + pt : POINT; + flags : UINT; + hItem : HTREEITEM; + END; + TVHITTESTINFO = tagTVHITTESTINFO; + LPTVHITTESTINFO = ^tagTVHITTESTINFO; + TTVHITTESTINFO = tagTVHITTESTINFO; + PTVHITTESTINFO = ^tagTVHITTESTINFO; + + +{$ifdef ie3plus} + LPTV_HITTESTINFO = LPTVHITTESTINFO; + TV_HITTESTINFO = TVHITTESTINFO; +{$ELSE} + tagTVHITTESTINFO = _TV_HITTESTINFO; + TVHITTESTINFO = TV_HITTESTINFO; + + LPTVHITTESTINFO = LPTV_HITTESTINFO; +{$ENDIF} + + +CONST + TVHT_NOWHERE = $0001; + TVHT_ONITEMICON = $0002; + TVHT_ONITEMLABEL = $0004; + TVHT_ONITEM = (TVHT_ONITEMICON OR TVHT_ONITEMLABEL OR TVHT_ONITEMSTATEICON); + TVHT_ONITEMINDENT = $0008; + TVHT_ONITEMBUTTON = $0010; + TVHT_ONITEMRIGHT = $0020; + TVHT_ONITEMSTATEICON = $0040; + + TVHT_ABOVE = $0100; + TVHT_BELOW = $0200; + TVHT_TORIGHT = $0400; + TVHT_TOLEFT = $0800; + + + TVM_CREATEDRAGIMAGE = (TV_FIRST + 18); + +// Macro 187 +Function TreeView_HitTest( hwnd : hwnd; lpht : LPTV_HITTESTINFO):HTREEITEM;inline; +Function TreeView_HitTest( hwnd : hwnd; var lpht : TV_HITTESTINFO):HTREEITEM;inline; + + +// Macro 188 + + +Function TreeView_CreateDragImage( hwnd : hwnd; hitem : HTREEITEM):HIMAGELIST; + + + + +CONST + TVM_SORTCHILDREN = (TV_FIRST + 19); +// Macro 189 + + +Function TreeView_SortChildren( hwnd : hwnd; hitem : HTREEITEM; recurse : WPARAM):BOOL; + + + + +CONST + TVM_ENSUREVISIBLE = (TV_FIRST + 20); +// Macro 190 + + +Function TreeView_EnsureVisible( hwnd : hwnd; hitem : HTREEITEM):BOOL; + + + + + +CONST + TVM_ENDEDITLABELNOW = (TV_FIRST + 22); +// Macro 192 + + +Function TreeView_EndEditLabelNow( hwnd : hwnd; fCancel : WPARAM):BOOL;inline; +Function TreeView_EndEditLabelNow( hwnd : hwnd; fCancel : Bool):BOOL;inline; + + + + +CONST + TVM_GETISEARCHSTRINGA = (TV_FIRST + 23); + TVM_GETISEARCHSTRINGW = (TV_FIRST + 64); + +{$IFDEF UNICODE} + +TYPE + TVM_GETISEARCHSTRING= TVM_GETISEARCHSTRINGW; +{$ELSE} + TVM_GETISEARCHSTRING= TVM_GETISEARCHSTRINGA; +{$ENDIF} + +{$ifdef ie3plus} + +CONST + TVM_SETTOOLTIPS = (TV_FIRST + 24); +// Macro 193 + + +Function TreeView_SetToolTips( hwnd : hwnd; hwndTT : WPARAM):HWND; + + +CONST + TVM_GETTOOLTIPS = (TV_FIRST + 25); +// Macro 194 + + +Function TreeView_GetToolTips( hwnd : hwnd):HWND; + +{$ENDIF} + +// Macro 195 + + +Function TreeView_GetISearchString( hwndTV : hwnd; lpsz : LPTSTR):BOOL; + + +{$ifdef ie4plus} + +CONST + TVM_SETINSERTMARK = (TV_FIRST + 26); +// Macro 196 + + +Function TreeView_SetInsertMark( hwnd : hwnd; hItem : LPARAM ; fAfter : WPARAM ):BOOL; + + + +CONST + TVM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT; +// Macro 197 + + +Function TreeView_SetUnicodeFormat( hwnd : hwnd; fUnicode : WPARAM):BOOL; + + + +CONST + TVM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT; +// Macro 198 + + +Function TreeView_GetUnicodeFormat( hwnd : hwnd):BOOL; + + +{$ENDIF} + +{$ifdef ie4plus} + +CONST + TVM_SETITEMHEIGHT = (TV_FIRST + 27); +// Macro 199 + + +Function TreeView_SetItemHeight( hwnd : hwnd; iHeight : WPARAM):cint; + + +CONST + TVM_GETITEMHEIGHT = (TV_FIRST + 28); +// Macro 200 + + +Function TreeView_GetItemHeight( hwnd : hwnd):cint; + + + +CONST + TVM_SETBKCOLOR = (TV_FIRST + 29); +// Macro 201 + + +Function TreeView_SetBkColor( hwnd : hwnd; clr : LPARAM):COLORREF; + + + +CONST + TVM_SETTEXTCOLOR = (TV_FIRST + 30); +// Macro 202 + + +Function TreeView_SetTextColor( hwnd : hwnd; clr : LPARAM):COLORREF; + + + +CONST + TVM_GETBKCOLOR = (TV_FIRST + 31); + +// Macro 203 +Function TreeView_GetBkColor( hwnd : hwnd):COLORREF; + + +CONST + TVM_GETTEXTCOLOR = (TV_FIRST + 32); + +// Macro 204 +Function TreeView_GetTextColor( hwnd : hwnd):COLORREF; + + + +CONST + TVM_SETSCROLLTIME = (TV_FIRST + 33); + +// Macro 205 +Function TreeView_SetScrollTime( hwnd : hwnd; uTime :wparam ):UINT; + + + +CONST + TVM_GETSCROLLTIME = (TV_FIRST + 34); +// Macro 206 + + +Function TreeView_GetScrollTime( hwnd : hwnd):UINT; + + + + +CONST + TVM_SETINSERTMARKCOLOR = (TV_FIRST + 37); +// Macro 207 + + +Function TreeView_SetInsertMarkColor( hwnd : hwnd; clr : LPARAM):COLORREF; + + +CONST + TVM_GETINSERTMARKCOLOR = (TV_FIRST + 38); +// Macro 208 + + +Function TreeView_GetInsertMarkColor( hwnd : hwnd):COLORREF; + + +{$ENDIF} // (_WIN32_IE >= 0x0400) + +{$ifdef ie5plus} +// tvm_?etitemstate only uses mask, state and stateMask. +// so unicode or ansi is irrelevant. +// Macro 209 + +Procedure TreeView_SetItemState(hwndTV:HWND;hti:HTreeItem;data:UINT;_mask:UINT); + + +// Macro 210 + +Procedure TreeView_SetCheckState( hwndTV : hwnd; hti : HTreeItem ; fCheck : bool ); + + +CONST + TVM_GETITEMSTATE = (TV_FIRST + 39); + +// Macro 211 +Function TreeView_GetItemState( hwndTV : hwnd; hti : HTreeItem; statemask : UINT):UINT; + + +// Macro 212 +Function TreeView_GetCheckState( hwndTV : hwnd; hti : HTreeItem):UINT; + + +CONST + TVM_SETLINECOLOR = (TV_FIRST + 40); +// Macro 213 +Function TreeView_SetLineColor( hwnd : hwnd; clr : LPARAM):COLORREF; + +CONST + TVM_GETLINECOLOR = (TV_FIRST + 41); + +// Macro 214 +Function TreeView_GetLineColor( hwnd : hwnd):COLORREF; + + +{$ENDIF} + +{$ifdef Win32XP} + +CONST + TVM_MAPACCIDTOHTREEITEM = (TV_FIRST + 42); + +// Macro 215 +Function TreeView_MapAccIDToHTREEITEM( hwnd : hwnd; id : UINT ):HTREEITEM; + + + +CONST + TVM_MAPHTREEITEMTOACCID = (TV_FIRST + 43); + +// Macro 216 +Function TreeView_MapHTREEITEMToAccID( hwnd : hwnd; htreeitem : WPARAM):UINT; + +{$ENDIF} + +{$ifdef win32vista} +CONST + TVM_GETSELECTEDCOUNT = (TV_FIRST + 70); + TVM_SHOWINFOTIP = (TV_FIRST + 71); + TVM_GETITEMPARTRECT = (TV_FIRST + 72); + +Type + TVITEMPART = (TVGIPR_BUTTON = $0001); + pTVITEMPART = ^TVITEMPART; + + tagTVGETITEMPARTRECTINFO = Record + hti :HTREEITEM ; + prc :PRECT; + partID :TVITEMPART; + end; + TVGETITEMPARTRECTINFO = tagTVGETITEMPARTRECTINFO; + +function TreeView_GetSelectedCount(hwnd:hwnd):DWORD; +// (DWORD)SNDMSG((hwnd), TVM_GETSELECTEDCOUNT, 0, 0) + +function TreeView_ShowInfoTip(hwnd:HWND; hitem:HTREEITEM):DWORD; +// (DWORD)SNDMSG((hwnd), TVM_SHOWINFOTIP, 0, (LPARAM)(hitem)) + +function TreeView_GetItemPartRect(hwnd:HWND; hitem:HTREEITEM; prc:prect; partid:TVITEMPART):bool; +//{ TVGETITEMPARTRECTINFO info; \ +// info.hti = (hitem); \ +// info.prc = (prc); \ +// info.partID = (partid); \ +// (BOOL)SNDMSG((hwnd), TVM_GETITEMPARTRECT, 0, (LPARAM)&info); \ + +{$endif} + + +TYPE + PFNTVCOMPARE =function (lparam1:LPARAM;lparam2:LPARAM;lParamSort:LParam): cint; STDCALL; + TTVCompare = PFNTVCOMPARE; + + + tagTVSORTCB = Record + hParent : HTREEITEM; + lpfnCompare : PFNTVCOMPARE; + lParam : LPARAM; + END; + TVSORTCB = tagTVSORTCB; + LPTVSORTCB = ^tagTVSORTCB; + TTVSORTCB = tagTVSORTCB; + PTVSORTCB = ^tagTVSORTCB; + +{$ifdef ie3plus} + LPTV_SORTCB = LPTVSORTCB; + + + TV_SORTCB = TVSORTCB; +{$ELSE} + tagTVSORTCB = _TV_SORTCB; + TVSORTCB = TV_SORTCB; + + + LPTVSORTCB = LPTV_SORTCB; +{$ENDIF} + + + tagNMTREEVIEWA = Record + hdr : NMHDR; + action : UINT; + itemOld : TVITEMA; + itemNew : TVITEMA; + ptDrag : POINT; + END; + NMTREEVIEWA = tagNMTREEVIEWA; + LPNMTREEVIEWA = ^tagNMTREEVIEWA; + TNMTREEVIEWA = tagNMTREEVIEWA; + PNMTREEVIEWA = ^tagNMTREEVIEWA; + PNMTreeView = PNMTreeViewA; + TNMTreeView = TNMTreeViewA; + + + + tagNMTREEVIEWW = Record + hdr : NMHDR; + action : UINT; + itemOld : TVITEMW; + itemNew : TVITEMW; + ptDrag : POINT; + END; + NMTREEVIEWW = tagNMTREEVIEWW; + LPNMTREEVIEWW = ^tagNMTREEVIEWW; + TNMTREEVIEWW = tagNMTREEVIEWW; + PNMTREEVIEWW = ^tagNMTREEVIEWW; + + + +{$IFDEF UNICODE} + NMTREEVIEW = NMTREEVIEWW; + LPNMTREEVIEW = LPNMTREEVIEWW; +{$ELSE} + NMTREEVIEW = NMTREEVIEWA; + LPNMTREEVIEW = LPNMTREEVIEWA; +{$ENDIF} + +{$ifdef ie3plus} + LPNM_TREEVIEWA = LPNMTREEVIEWA; + LPNM_TREEVIEWW = LPNMTREEVIEWW; + NM_TREEVIEWW = NMTREEVIEWW; + NM_TREEVIEWA = NMTREEVIEWA; +{$ELSE} + tagNMTREEVIEWA = _NM_TREEVIEWA; + tagNMTREEVIEWW = _NM_TREEVIEWW; + NMTREEVIEWA = NM_TREEVIEWA; + NMTREEVIEWW = NM_TREEVIEWW; + LPNMTREEVIEWA = LPNM_TREEVIEWA; + LPNMTREEVIEWW = LPNM_TREEVIEWW; +{$ENDIF} + + LPNM_TREEVIEW = LPNMTREEVIEW; + NM_TREEVIEW = NMTREEVIEW; + + + +CONST + TVN_SELCHANGINGA = (TVN_FIRST-1); + TVN_SELCHANGINGW = (TVN_FIRST-50); + TVN_SELCHANGEDA = (TVN_FIRST-2); + TVN_SELCHANGEDW = (TVN_FIRST-51); + + TVC_UNKNOWN = $0000; + TVC_BYMOUSE = $0001; + TVC_BYKEYBOARD = $0002; + + TVN_GETDISPINFOA = (TVN_FIRST-3); + TVN_GETDISPINFOW = (TVN_FIRST-52); + TVN_SETDISPINFOA = (TVN_FIRST-4); + TVN_SETDISPINFOW = (TVN_FIRST-53); + + TVIF_DI_SETITEM = $1000; + +Type + tagTVDISPINFOA = Record + hdr : NMHDR; + item : TVITEMA; + END; + NMTVDISPINFOA = tagTVDISPINFOA; + LPNMTVDISPINFOA = ^tagTVDISPINFOA; + TTVDISPINFOA = tagTVDISPINFOA; + PTVDISPINFOA = ^tagTVDISPINFOA; + TTVDispInfo = TTVDISPINFOA; + PTVDispInfo = PTVDISPINFOA; + + + tagTVDISPINFOW = Record + hdr : NMHDR; + item : TVITEMW; + END; + NMTVDISPINFOW = tagTVDISPINFOW; + LPNMTVDISPINFOW = ^tagTVDISPINFOW; + TTVDISPINFOW = tagTVDISPINFOW; + PTVDISPINFOW = ^tagTVDISPINFOW; + +{$IFDEF UNICODE} + NMTVDISPINFO = NMTVDISPINFOW; + LPNMTVDISPINFO = LPNMTVDISPINFOW; +{$ELSE} + NMTVDISPINFO = NMTVDISPINFOA; + LPNMTVDISPINFO = LPNMTVDISPINFOA; +{$ENDIF} + +{$ifdef IE6plus} + tagTVDISPINFOEXA = Record + hdr : NMHDR; + item :TVITEMEXA; + end; + NMTVDISPINFOEXA = tagTVDISPINFOEXA; + LPNMTVDISPINFOEXA = ^tagTVDISPINFOEXA; + + tagTVDISPINFOEXW = Record + hdr : NMHDR; + item :TVITEMEXW; + end; + NMTVDISPINFOEXW = tagTVDISPINFOEXW; + LPNMTVDISPINFOEXW = ^tagTVDISPINFOEXW; + +{$IFDEF UNICODE} + NMTVDISPINFOEX = NMTVDISPINFOEXW; + LPNMTVDISPINFOEX = LPNMTVDISPINFOEXW; +{$ELSE} + NMTVDISPINFOEX = NMTVDISPINFOEXA; + LPNMTVDISPINFOEX = LPNMTVDISPINFOEXA; +{$ENDIF} + + TV_DISPINFOEXA = NMTVDISPINFOEXA; + TV_DISPINFOEXW = NMTVDISPINFOEXW; + TV_DISPINFOEX = NMTVDISPINFOEX; + + +{$endif} + +{$ifdef ie3plus} + TV_DISPINFOA = NMTVDISPINFOA; + TV_DISPINFOW = NMTVDISPINFOW; +{$ELSE} + tagTVDISPINFOA = _TV_DISPINFOA; + NMTVDISPINFOA = TV_DISPINFOA; + tagTVDISPINFOW = _TV_DISPINFOW; + NMTVDISPINFOW = TV_DISPINFOW; +{$ENDIF} + TV_DISPINFO = NMTVDISPINFO; + + +CONST + TVM_SORTCHILDRENCB = (TV_FIRST + 21); + +// Macro 191 +Function TreeView_SortChildrenCB( hwnd : hwnd;psort :lpTV_sortcb; recurse : WPARAM):BOOL;inline; +Function TreeView_SortChildrenCB( hwnd : hwnd;const psort :tagTVsortcb; recurse : WPARAM):BOOL;inline; + +CONST + TVN_ITEMEXPANDINGA = (TVN_FIRST-5); + TVN_ITEMEXPANDINGW = (TVN_FIRST-54); + TVN_ITEMEXPANDEDA = (TVN_FIRST-6); + TVN_ITEMEXPANDEDW = (TVN_FIRST-55); + TVN_BEGINDRAGA = (TVN_FIRST-7); + TVN_BEGINDRAGW = (TVN_FIRST-56); + TVN_BEGINRDRAGA = (TVN_FIRST-8); + TVN_BEGINRDRAGW = (TVN_FIRST-57); + TVN_DELETEITEMA = (TVN_FIRST-9); + TVN_DELETEITEMW = (TVN_FIRST-58); + TVN_BEGINLABELEDITA = (TVN_FIRST-10); + TVN_BEGINLABELEDITW = (TVN_FIRST-59); + TVN_ENDLABELEDITA = (TVN_FIRST-11); + TVN_ENDLABELEDITW = (TVN_FIRST-60); + TVN_KEYDOWN = (TVN_FIRST-12); + +{$ifdef ie4plus} + TVN_GETINFOTIPA = (TVN_FIRST-13); + TVN_GETINFOTIPW = (TVN_FIRST-14); + TVN_SINGLEEXPAND = (TVN_FIRST-15); + + TVNRET_DEFAULT = 0; + TVNRET_SKIPOLD = 1; + TVNRET_SKIPNEW = 2; + +{$ifdef win32vista} + TVN_ITEMCHANGINGA = (TVN_FIRST-16); + TVN_ITEMCHANGINGW = (TVN_FIRST-17); + TVN_ITEMCHANGEDA = (TVN_FIRST-18); + TVN_ITEMCHANGEDW = (TVN_FIRST-19); + TVN_ASYNCDRAW = (TVN_FIRST-20); +{$endif} + +{$ENDIF} // 0x400 + + + +{$IFDEF _WIN32} +// #include <pshpack1.h> +{$ENDIF} + +TYPE + + tagTVKEYDOWN = Record + hdr : NMHDR; + wVKey : WORD; + flags : UINT; + END; + NMTVKEYDOWN = tagTVKEYDOWN; + LPNMTVKEYDOWN = ^tagTVKEYDOWN; + TTVKEYDOWN = tagTVKEYDOWN; + PTVKEYDOWN = ^tagTVKEYDOWN; + +{$ifdef ie3plus} + TV_KEYDOWN = NMTVKEYDOWN; +{$ELSE} + tagTVKEYDOWN = _TV_KEYDOWN; + NMTVKEYDOWN = TV_KEYDOWN; +{$ENDIF} + + +{$IFDEF _WIN32} +// #include <poppack.h> +{$ENDIF} + +Const + +{$IFDEF UNICODE} + TVN_SELCHANGING = TVN_SELCHANGINGW; + TVN_SELCHANGED = TVN_SELCHANGEDW; + TVN_GETDISPINFO = TVN_GETDISPINFOW; + TVN_SETDISPINFO = TVN_SETDISPINFOW; + TVN_ITEMEXPANDING = TVN_ITEMEXPANDINGW; + TVN_ITEMEXPANDED = TVN_ITEMEXPANDEDW; + TVN_BEGINDRAG = TVN_BEGINDRAGW; + TVN_BEGINRDRAG = TVN_BEGINRDRAGW; + TVN_DELETEITEM = TVN_DELETEITEMW; + TVN_BEGINLABELEDIT = TVN_BEGINLABELEDITW; + TVN_ENDLABELEDIT = TVN_ENDLABELEDITW; +{$ELSE} + TVN_SELCHANGING = TVN_SELCHANGINGA; + TVN_SELCHANGED = TVN_SELCHANGEDA; + TVN_GETDISPINFO = TVN_GETDISPINFOA; + TVN_SETDISPINFO = TVN_SETDISPINFOA; + TVN_ITEMEXPANDING = TVN_ITEMEXPANDINGA; + TVN_ITEMEXPANDED = TVN_ITEMEXPANDEDA; + TVN_BEGINDRAG = TVN_BEGINDRAGA; + TVN_BEGINRDRAG = TVN_BEGINRDRAGA; + TVN_DELETEITEM = TVN_DELETEITEMA; + TVN_BEGINLABELEDIT = TVN_BEGINLABELEDITA; + TVN_ENDLABELEDIT = TVN_ENDLABELEDITA; +{$ENDIF} + + +{$ifdef ie3plus} +// #define NMTVCUSTOMDRAW_V3_SIZE CCSIZEOF_STRUCT(NMTVCUSTOMDRAW, clrTextBk) +Type + tagNMTVCUSTOMDRAW = Record + nmcd : NMCUSTOMDRAW; + clrText : COLORREF; + clrTextBk : COLORREF; +{$ifdef ie4plus} + iLevel : cint; +{$ENDIF} + END; + NMTVCUSTOMDRAW = tagNMTVCUSTOMDRAW; + LPNMTVCUSTOMDRAW = ^tagNMTVCUSTOMDRAW; + TNMTVCUSTOMDRAW = tagNMTVCUSTOMDRAW; + PNMTVCUSTOMDRAW = ^tagNMTVCUSTOMDRAW; + +{$ENDIF} + + +{$ifdef ie4plus} + +// for tooltips + + tagNMTVGETINFOTIPA = Record + hdr : NMHDR; + pszText : LPSTR; + cchTextMax : cint; + hItem : HTREEITEM; + lParam : LPARAM; + END; + NMTVGETINFOTIPA = tagNMTVGETINFOTIPA; + LPNMTVGETINFOTIPA = ^tagNMTVGETINFOTIPA; + TNMTVGETINFOTIPA = tagNMTVGETINFOTIPA; + PNMTVGETINFOTIPA = ^tagNMTVGETINFOTIPA; + + + tagNMTVGETINFOTIPW = Record + hdr : NMHDR; + pszText : LPWSTR; + cchTextMax : cint; + hItem : HTREEITEM; + lParam : LPARAM; + END; + NMTVGETINFOTIPW = tagNMTVGETINFOTIPW; + LPNMTVGETINFOTIPW = ^tagNMTVGETINFOTIPW; + TNMTVGETINFOTIPW = tagNMTVGETINFOTIPW; + PNMTVGETINFOTIPW = ^tagNMTVGETINFOTIPW; + + +CONST +{$IFDEF UNICODE} + TVN_GETINFOTIP = TVN_GETINFOTIPW; +TYPE + NMTVGETINFOTIP = NMTVGETINFOTIPW; + LPNMTVGETINFOTIP = LPNMTVGETINFOTIPW; +{$ELSE} + TVN_GETINFOTIP = TVN_GETINFOTIPA; +TYPE + NMTVGETINFOTIP = NMTVGETINFOTIPA; + LPNMTVGETINFOTIP = LPNMTVGETINFOTIPA; +{$ENDIF} + +// treeview's customdraw return meaning don't draw images. valid on CDRF_NOTIFYITEMPREPAINT + +CONST + TVCDRF_NOIMAGES = $00010000; + +{$ENDIF} // _WIN32_IE >= 0x0400 + +{$ifdef ie6plus} +Type + tagTVITEMCHANGE = packed record + hdr : NMHDR; + uChanged : UINT; + hItem : HTREEITEM; + uStateNew : UINT; + uStateOld : UINT; + lParam : LPARAM; + end; + NMTVITEMCHANGE = tagTVITEMCHANGE; + PNMTVITEMCHANGE = ^NMTVITEMCHANGE; + + tagNMTVASYNCDRAW = packed record + hdr : NMHDR; + pimldp : PIMAGELISTDRAWPARAMS; { the draw that failed } + hr : HRESULT; { why it failed } + hItem : HTREEITEM; { item that failed to draw icon } + lParam : LPARAM; { its data } + dwRetFlags : DWORD; { Out Params } + iRetImageIndex : longint; { What listview should do on return } + end; { used if ADRF_DRAWIMAGE is returned } + NMTVASYNCDRAW = tagNMTVASYNCDRAW; + PNMTVASYNCDRAW = ^NMTVASYNCDRAW; + +CONST +{$IFDEF UNICODE} + TVN_ITEMCHANGING = TVN_ITEMCHANGINGW; + TVN_ITEMCHANGED = TVN_ITEMCHANGEDW; +{$ELSE} + TVN_ITEMCHANGING = TVN_ITEMCHANGINGA; + TVN_ITEMCHANGED = TVN_ITEMCHANGEDA; +{$ENDIF} +{$endif} + +{$ENDIF} // NOTREEVIEW + +{$ifdef ie3plus} + +{$IFNDEF NOUSEREXCONTROLS} + +//////////////////// ComboBoxEx //////////////////////////////// + + WC_COMBOBOXEXW = {L}'ComboBoxEx32'; + WC_COMBOBOXEXA = 'ComboBoxEx32'; + + +{$IFDEF UNICODE} + WC_COMBOBOXEX = WC_COMBOBOXEXW; +{$ELSE} + WC_COMBOBOXEX = WC_COMBOBOXEXA; +{$ENDIF} + +CONST + CBEIF_TEXT = $00000001; + CBEIF_IMAGE = $00000002; + CBEIF_SELECTEDIMAGE = $00000004; + CBEIF_OVERLAY = $00000008; + CBEIF_INDENT = $00000010; + CBEIF_LPARAM = $00000020; + CBEIF_DI_SETITEM = $10000000; + +TYPE + + tagCOMBOBOXEXITEMA = Record + mask : UINT; + iItem : INT_PTR; + pszText : LPSTR; + cchTextMax : cint; + iImage : cint; + iSelectedImage : cint; + iOverlay : cint; + iIndent : cint; + lParam : LPARAM; + END; + COMBOBOXEXITEMA = tagCOMBOBOXEXITEMA; + PCOMBOBOXEXITEMA = ^tagCOMBOBOXEXITEMA; + TCOMBOBOXEXITEMA = tagCOMBOBOXEXITEMA; +// PCOMBOBOXEXITEMA = ^tagCOMBOBOXEXITEMA; + + PCCOMBOBOXEXITEMA = ^COMBOBOXEXITEMA; + + + tagCOMBOBOXEXITEMW = Record + mask : UINT; + iItem : INT_PTR; + pszText : LPWSTR; + cchTextMax : cint; + iImage : cint; + iSelectedImage : cint; + iOverlay : cint; + iIndent : cint; + lParam : LPARAM; + END; + COMBOBOXEXITEMW = tagCOMBOBOXEXITEMW; + PCOMBOBOXEXITEMW = ^tagCOMBOBOXEXITEMW; + TCOMBOBOXEXITEMW = tagCOMBOBOXEXITEMW; +// PCOMBOBOXEXITEMW = ^tagCOMBOBOXEXITEMW; + + PCCOMBOBOXEXITEMW = ^COMBOBOXEXITEMW; + +{$IFDEF UNICODE} + COMBOBOXEXITEM = COMBOBOXEXITEMW; + PCOMBOBOXEXITEM = PCOMBOBOXEXITEMW; + PCCOMBOBOXEXITEM = PCCOMBOBOXEXITEMW; +{$ELSE} + COMBOBOXEXITEM = COMBOBOXEXITEMA; + PCOMBOBOXEXITEM = PCOMBOBOXEXITEMA; + PCCOMBOBOXEXITEM = PCCOMBOBOXEXITEMA; +{$ENDIF} + TComboBoxExItem = COMBOBOXEXITEM; + + +CONST + CBEM_INSERTITEMA = (WM_USER + 1); + CBEM_SETIMAGELIST = (WM_USER + 2); + CBEM_GETIMAGELIST = (WM_USER + 3); + CBEM_GETITEMA = (WM_USER + 4); + CBEM_SETITEMA = (WM_USER + 5); + CBEM_DELETEITEM = CB_DELETESTRING; + CBEM_GETCOMBOCONTROL = (WM_USER + 6); + CBEM_GETEDITCONTROL = (WM_USER + 7); +{$ifdef ie4plus} + CBEM_SETEXSTYLE = (WM_USER + 8); // use SETEXTENDEDSTYLE instead + CBEM_SETEXTENDEDSTYLE = (WM_USER + 14); // lparam == new style, wParam (optional) == mask + CBEM_GETEXSTYLE = (WM_USER + 9); // use GETEXTENDEDSTYLE instead + CBEM_GETEXTENDEDSTYLE = (WM_USER + 9); + CBEM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT; + CBEM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT; +{$ELSE} + CBEM_SETEXSTYLE = (WM_USER + 8); + CBEM_GETEXSTYLE = (WM_USER + 9); +{$ENDIF} + CBEM_HASEDITCHANGED = (WM_USER + 10); + CBEM_INSERTITEMW = (WM_USER + 11); + CBEM_SETITEMW = (WM_USER + 12); + CBEM_GETITEMW = (WM_USER + 13); + +{$IFDEF UNICODE} + + CBEM_INSERTITEM = CBEM_INSERTITEMW; + CBEM_SETITEM = CBEM_SETITEMW; + CBEM_GETITEM = CBEM_GETITEMW; +{$ELSE} + CBEM_INSERTITEM = CBEM_INSERTITEMA; + CBEM_SETITEM = CBEM_SETITEMA; + CBEM_GETITEM = CBEM_GETITEMA; +{$ENDIF} + +{$ifdef win32xp} + + CBEM_SETWINDOWTHEME = CCM_SETWINDOWTHEME; +{$ENDIF} + + CBES_EX_NOEDITIMAGE = $00000001; + CBES_EX_NOEDITIMAGEINDENT = $00000002; + CBES_EX_PATHWORDBREAKPROC = $00000004; +{$ifdef ie4plus} + CBES_EX_NOSIZELIMIT = $00000008; + CBES_EX_CASESENSITIVE = $00000010; +{$ifdef win32vista} + CBES_EX_TEXTENDELLIPSIS = $00000020; +{$endif} +TYPE + + DummyStruct9 = Record + hdr : NMHDR; + ceItem : COMBOBOXEXITEMA; + END; + NMCOMBOBOXEXA = DummyStruct9; + PNMCOMBOBOXEXA = ^DummyStruct9; + TDummyStruct9 = DummyStruct9; + PDummyStruct9 = ^DummyStruct9; + + + DummyStruct10 = Record + hdr : NMHDR; + ceItem : COMBOBOXEXITEMW; + END; + NMCOMBOBOXEXW = DummyStruct10; + PNMCOMBOBOXEXW = ^DummyStruct10; + TDummyStruct10 = DummyStruct10; + PDummyStruct10 = ^DummyStruct10; + + + +{$ELSE} + DummyStruct11 = Record + hdr : NMHDR; + ceItem : COMBOBOXEXITEM; + END; + NMCOMBOBOXEX = DummyStruct11; + PNMCOMBOBOXEX = ^DummyStruct11; + TDummyStruct11 = DummyStruct11; + PDummyStruct11 = ^DummyStruct11; + + + +CONST + CBEN_GETDISPINFO = (CBEN_FIRST - 0); + +{$ENDIF} // _WIN32_IE >= 0x0400 +CONST +{$ifdef ie4plus} + CBEN_GETDISPINFOA = (CBEN_FIRST - 0); +{$ENDIF} + CBEN_INSERTITEM = (CBEN_FIRST - 1); + CBEN_DELETEITEM = (CBEN_FIRST - 2); + CBEN_BEGINEDIT = (CBEN_FIRST - 4); + CBEN_ENDEDITA = (CBEN_FIRST - 5); + CBEN_ENDEDITW = (CBEN_FIRST - 6); + +{$ifdef ie4plus} + CBEN_GETDISPINFOW = (CBEN_FIRST - 7); +{$ENDIF} + +{$ifdef ie4plus} + CBEN_DRAGBEGINA = (CBEN_FIRST - 8); + CBEN_DRAGBEGINW = (CBEN_FIRST - 9); + +{$IFDEF UNICODE} + + CBEN_DRAGBEGIN = CBEN_DRAGBEGINW; +{$ELSE} + CBEN_DRAGBEGIN = CBEN_DRAGBEGINA; +{$ENDIF} + +{$ENDIF} //(_WIN32_IE >= 0x0400) +TYPE +{$IFDEF UNICODE} + NMCOMBOBOXEX = NMCOMBOBOXEXW; + PNMCOMBOBOXEX = PNMCOMBOBOXEXW; +CONST + CBEN_GETDISPINFO = CBEN_GETDISPINFOW; +{$ELSE} + NMCOMBOBOXEX = NMCOMBOBOXEXA; + PNMCOMBOBOXEX = PNMCOMBOBOXEXA; +CONST + CBEN_GETDISPINFO = CBEN_GETDISPINFOA; +{$ENDIF} + +// lParam specifies why the endedit is happening +{$IFDEF UNICODE} + CBEN_ENDEDIT = CBEN_ENDEDITW; +{$ELSE} + CBEN_ENDEDIT = CBEN_ENDEDITA; +{$ENDIF} + + +CONST + CBENF_KILLFOCUS = 1; + CBENF_RETURN = 2; + CBENF_ESCAPE = 3; + CBENF_DROPDOWN = 4; + + CBEMAXSTRLEN = 260; + +{$ifdef ie4plus} +// CBEN_DRAGBEGIN sends this information ... + +TYPE + + DummyStruct12 = Record + hdr : NMHDR; + iItemid : cint; + szText : Array[0..CBEMAXSTRLEN-1] OF WCHAR; + END; + NMCBEDRAGBEGINW = DummyStruct12; + LPNMCBEDRAGBEGINW = ^DummyStruct12; + PNMCBEDRAGBEGINW = ^DummyStruct12; + TDummyStruct12 = DummyStruct12; + PDummyStruct12 = ^DummyStruct12; + + + + DummyStruct13 = Record + hdr : NMHDR; + iItemid : cint; + szText : Array[0..CBEMAXSTRLEN-1] OF char; + END; + NMCBEDRAGBEGINA = DummyStruct13; + LPNMCBEDRAGBEGINA = ^DummyStruct13; + PNMCBEDRAGBEGINA = ^DummyStruct13; + TDummyStruct13 = DummyStruct13; + PDummyStruct13 = ^DummyStruct13; + + +{$IFDEF UNICODE} + NMCBEDRAGBEGIN = NMCBEDRAGBEGINW; + LPNMCBEDRAGBEGIN = LPNMCBEDRAGBEGINW; + PNMCBEDRAGBEGIN = PNMCBEDRAGBEGINW; +{$ELSE} + NMCBEDRAGBEGIN = NMCBEDRAGBEGINA; + LPNMCBEDRAGBEGIN = LPNMCBEDRAGBEGINA; + PNMCBEDRAGBEGIN = PNMCBEDRAGBEGINA; +{$ENDIF} +{$ENDIF} // _WIN32_IE >= 0x0400 + +// CBEN_ENDEDIT sends this information... +// fChanged if the user actually did anything +// iNewSelection gives what would be the new selection unless the notify is failed +// iNewSelection may be CB_ERR if there's no match + DummyStruct14 = Record + hdr : NMHDR; + fChanged : BOOL; + iNewSelection : cint; + szText : Array[0..CBEMAXSTRLEN-1] OF WCHAR; + iWhy : cint; + END; + NMCBEENDEDITW = DummyStruct14; + LPNMCBEENDEDITW = ^DummyStruct14; + PNMCBEENDEDITW = ^DummyStruct14; + TDummyStruct14 = DummyStruct14; + PDummyStruct14 = ^DummyStruct14; + + + DummyStruct15 = Record + hdr : NMHDR; + fChanged : BOOL; + iNewSelection : cint; + szText : Array[0..CBEMAXSTRLEN-1] OF char; + iWhy : cint; + END; + NMCBEENDEDITA = DummyStruct15; + LPNMCBEENDEDITA = ^DummyStruct15; + PNMCBEENDEDITA = ^DummyStruct15; + TDummyStruct15 = DummyStruct15; + PDummyStruct15 = ^DummyStruct15; + + +{$IFDEF UNICODE} + NMCBEENDEDIT = NMCBEENDEDITW; + LPNMCBEENDEDIT = LPNMCBEENDEDITW; + PNMCBEENDEDIT = PNMCBEENDEDITW; +{$ELSE} + NMCBEENDEDIT = NMCBEENDEDITA; + LPNMCBEENDEDIT = LPNMCBEENDEDITA; + PNMCBEENDEDIT = PNMCBEENDEDITA; +{$ENDIF} + +{$ENDIF} + +{$ENDIF} // _WIN32_IE >= 0x0300 + + + +//====== TAB CONTROL ========================================================== + +{$IFNDEF NOTABCONTROL} + +{$IFDEF _WIN32} + + +CONST + WC_TABCONTROLA = 'SysTabControl32'; + WC_TABCONTROLW = {L}'SysTabControl32'; + +{$IFDEF UNICODE} + +TYPE + WC_TABCONTROL = WC_TABCONTROLW; +{$ELSE} + WC_TABCONTROL = WC_TABCONTROLA; +{$ENDIF} + +{$ELSE} + +CONST + WC_TABCONTROL = 'SysTabControl'; +{$ENDIF} + +// begin_r_commctrl + +{$ifdef ie3plus} + TCS_SCROLLOPPOSITE = $0001; // assumes multiline tab + TCS_BOTTOM = $0002; + TCS_RIGHT = $0002; + TCS_MULTISELECT = $0004; // allow multi-select in button mode +{$ENDIF} +{$ifdef ie4plus} + TCS_FLATBUTTONS = $0008; +{$ENDIF} + TCS_FORCEICONLEFT = $0010; + TCS_FORCELABELLEFT = $0020; +{$ifdef ie3plus} + TCS_HOTTRACK = $0040; + TCS_VERTICAL = $0080; +{$ENDIF} + TCS_TABS = $0000; + TCS_BUTTONS = $0100; + TCS_SINGLELINE = $0000; + TCS_MULTILINE = $0200; + TCS_RIGHTJUSTIFY = $0000; + TCS_FIXEDWIDTH = $0400; + TCS_RAGGEDRIGHT = $0800; + TCS_FOCUSONBUTTONDOWN = $1000; + TCS_OWNERDRAWFIXED = $2000; + TCS_TOOLTIPS = $4000; + TCS_FOCUSNEVER = $8000; + +// end_r_commctrl + +{$ifdef ie4plus} +// EX styles for use with TCM_SETEXTENDEDSTYLE + TCS_EX_FLATSEPARATORS = $00000001; + TCS_EX_REGISTERDROP = $00000002; +{$ENDIF} + + + TCM_GETIMAGELIST = (TCM_FIRST + 2); +// Macro 217 + + +Function TabCtrl_GetImageList( hwnd : hwnd):HIMAGELIST; + + + + +CONST + TCM_SETIMAGELIST = (TCM_FIRST + 3); +// Macro 218 + + +Function TabCtrl_SetImageList( hwnd : hwnd; himl : HIMAGELIST):HIMAGELIST; + + + + +CONST + TCM_GETITEMCOUNT = (TCM_FIRST + 4); +// Macro 219 + + +Function TabCtrl_GetItemCount( hwnd : hwnd):cint; + + + + +CONST + TCIF_TEXT = $0001; + TCIF_IMAGE = $0002; + TCIF_RTLREADING = $0004; + TCIF_PARAM = $0008; +{$ifdef ie3plus} + TCIF_STATE = $0010; + + + TCIS_BUTTONPRESSED = $0001; +{$ENDIF} +{$ifdef ie4plus} + TCIS_HIGHLIGHTED = $0002; +{$ENDIF} +TYPE + + + + + tagTCITEMHEADERA = Record + mask : UINT; + lpReserved1 : UINT; + lpReserved2 : UINT; + pszText : LPSTR; + cchTextMax : cint; + iImage : cint; + END; + TCITEMHEADERA = tagTCITEMHEADERA; + LPTCITEMHEADERA = ^tagTCITEMHEADERA; + TTCITEMHEADERA = tagTCITEMHEADERA; + PTCITEMHEADERA = ^tagTCITEMHEADERA; + + + tagTCITEMHEADERW = Record + mask : UINT; + lpReserved1 : UINT; + lpReserved2 : UINT; + pszText : LPWSTR; + cchTextMax : cint; + iImage : cint; + END; + TCITEMHEADERW = tagTCITEMHEADERW; + LPTCITEMHEADERW = ^tagTCITEMHEADERW; + TTCITEMHEADERW = tagTCITEMHEADERW; + PTCITEMHEADERW = ^tagTCITEMHEADERW; + + +{$IFDEF UNICODE} + TCITEMHEADER = TCITEMHEADERW; + LPTCITEMHEADER = LPTCITEMHEADERW; +{$ELSE} + TCITEMHEADER = TCITEMHEADERA; + LPTCITEMHEADER = LPTCITEMHEADERA; +{$ENDIF} + + +{$ifdef ie3plus} + TC_ITEMHEADERA = TCITEMHEADERA; + TC_ITEMHEADERW = TCITEMHEADERW; +{$ELSE} + tagTCITEMHEADERA = _TC_ITEMHEADERA; + TCITEMHEADERA = TC_ITEMHEADERA; + tagTCITEMHEADERW = _TC_ITEMHEADERW; + TCITEMHEADERW = TC_ITEMHEADERW; +{$ENDIF} + + + TC_ITEMHEADER = TCITEMHEADER; + + + + + + tagTCITEMA = Record + mask : UINT; +{$ifdef ie3plus} + dwState : DWORD; + dwStateMask : DWORD; +{$ELSE} + lpReserved1 : UINT; + lpReserved2 : UINT; +{$ENDIF} + pszText : LPSTR; + cchTextMax : cint; + iImage : cint; + lParam : LPARAM; + END; + TCITEMA = tagTCITEMA; + LPTCITEMA = ^tagTCITEMA; + TTCITEMA = tagTCITEMA; + PTCITEMA = ^tagTCITEMA; + + + tagTCITEMW = Record + mask : UINT; +{$ifdef ie3plus} + dwState : DWORD; + dwStateMask : DWORD; +{$ELSE} + lpReserved1 : UINT; + lpReserved2 : UINT; +{$ENDIF} + pszText : LPWSTR; + cchTextMax : cint; + iImage : cint; + lParam : LPARAM; + END; + TCITEMW = tagTCITEMW; + LPTCITEMW = ^tagTCITEMW; + TTCITEMW = tagTCITEMW; + PTCITEMW = ^tagTCITEMW; + + +{$IFDEF UNICODE} + TCITEM = TCITEMW; + LPTCITEM = LPTCITEMW; +{$ELSE} + TCITEM = TCITEMA; + LPTCITEM = LPTCITEMA; +{$ENDIF} + + +{$ifdef ie3plus} + TC_ITEMA = TCITEMA; + TC_ITEMW = TCITEMW; +{$ELSE} + tagTCITEMA = _TC_ITEMA; + TCITEMA = TC_ITEMA; + tagTCITEMW = _TC_ITEMW; + TCITEMW = TC_ITEMW; +{$ENDIF} + + + TC_ITEM = TCITEM; + + + + +CONST + TCM_GETITEMA = (TCM_FIRST + 5); + TCM_GETITEMW = (TCM_FIRST + 60); + +{$IFDEF UNICODE} + +TYPE + TCM_GETITEM = TCM_GETITEMW; +{$ELSE} + TCM_GETITEM = TCM_GETITEMA; +{$ENDIF} + +// Macro 220 +Function TabCtrl_GetItem( hwnd : hwnd; iItem : cint;var pitem : TC_ITEM ):BOOL; + + + + +CONST + TCM_SETITEMA = (TCM_FIRST + 6); + TCM_SETITEMW = (TCM_FIRST + 61); + +{$IFDEF UNICODE} + +TYPE + TCM_SETITEM = TCM_SETITEMW; +{$ELSE} + TCM_SETITEM = TCM_SETITEMA; +{$ENDIF} + +// Macro 221 +Function TabCtrl_SetItem( hwnd : hwnd; iItem : cint;var pitem : TC_ITEM ):BOOL; + + + + +CONST + TCM_INSERTITEMA = (TCM_FIRST + 7); + TCM_INSERTITEMW = (TCM_FIRST + 62); + +{$IFDEF UNICODE} + TCM_INSERTITEM = TCM_INSERTITEMW; +{$ELSE} + TCM_INSERTITEM = TCM_INSERTITEMA; +{$ENDIF} + +// Macro 222 +Function TabCtrl_InsertItem( hwnd : hwnd; iItem : cint;CONST pitem : TC_ITEM ):cint; + + +CONST + TCM_DELETEITEM = (TCM_FIRST + 8); + +// Macro 223 +Function TabCtrl_DeleteItem( hwnd : hwnd; i : cint):BOOL; + +CONST + TCM_DELETEALLITEMS = (TCM_FIRST + 9); + +// Macro 224 +Function TabCtrl_DeleteAllItems( hwnd : hwnd):BOOL; + +CONST + TCM_GETITEMRECT = (TCM_FIRST + 10); + +// Macro 225 +Function TabCtrl_GetItemRect( hwnd : hwnd; i : cint;var prc : RECT ):BOOL; + +CONST + TCM_GETCURSEL = (TCM_FIRST + 11); +// Macro 226 + +Function TabCtrl_GetCurSel( hwnd : hwnd):cint; + + +CONST + TCM_SETCURSEL = (TCM_FIRST + 12); + +// Macro 227 +Function TabCtrl_SetCurSel( hwnd : hwnd; i : WPARAM):cint; + +CONST + TCHT_NOWHERE = $0001; + TCHT_ONITEMICON = $0002; + TCHT_ONITEMLABEL = $0004; + TCHT_ONITEM = (TCHT_ONITEMICON OR TCHT_ONITEMLABEL); + +TYPE + + tagTCHITTESTINFO = Record + pt : POINT; + flags : UINT; + END; + TCHITTESTINFO = tagTCHITTESTINFO; + LPTCHITTESTINFO = ^tagTCHITTESTINFO; + TTCHITTESTINFO = tagTCHITTESTINFO; + PTCHITTESTINFO = ^tagTCHITTESTINFO; + +{$ifdef ie3plus} + LPTC_HITTESTINFO = LPTCHITTESTINFO; + TC_HITTESTINFO = TCHITTESTINFO; +{$ELSE} + tagTCHITTESTINFO = _TC_HITTESTINFO; + TCHITTESTINFO = TC_HITTESTINFO; + LPTCHITTESTINFO = LPTC_HITTESTINFO; +{$ENDIF} + + +CONST + TCM_HITTEST = (TCM_FIRST + 13); + +// Macro 228 +Function TabCtrl_HitTest( hwndTC : hwnd;var pinfo : TC_HITTESTINFO ):cint;inline; +Function TabCtrl_HitTest( hwndTC : hwnd;pinfo : LPTCHITTESTINFO ):cint;inline; + +CONST + TCM_SETITEMEXTRA = (TCM_FIRST + 14); + +// Macro 229 +Function TabCtrl_SetItemExtra( hwndTC : hwnd; cb : WPARAM):BOOL; + + + + +CONST + TCM_ADJUSTRECT = (TCM_FIRST + 40); + +// Macro 230 +Function TabCtrl_AdjustRect( hwnd : hwnd; bLarger : BOOL;var prc : RECT ):cint; + + + + +CONST + TCM_SETITEMSIZE = (TCM_FIRST + 41); + +// Macro 231 +Function TabCtrl_SetItemSize( hwnd : hwnd; x :wparam ; y : lparam ):DWORD; + +CONST + TCM_REMOVEIMAGE = (TCM_FIRST + 42); + +// Macro 232 +Procedure TabCtrl_RemoveImage( hwnd : hwnd; i : wparam ); + + + + +CONST + TCM_SETPADDING = (TCM_FIRST + 43); + +// Macro 233 +Procedure TabCtrl_SetPadding( hwnd : hwnd; cx : wparam ; cy : lparam ); + + + + +CONST + TCM_GETROWCOUNT = (TCM_FIRST + 44); + +// Macro 234 +Function TabCtrl_GetRowCount( hwnd : hwnd):cint; + + + + +CONST + TCM_GETTOOLTIPS = (TCM_FIRST + 45); + +// Macro 235 +Function TabCtrl_GetToolTips( hwnd : hwnd):HWND; + + + + +CONST + TCM_SETTOOLTIPS = (TCM_FIRST + 46); + +// Macro 236 +Procedure TabCtrl_SetToolTips( hwnd : hwnd; hwndTT : WPARAM); + + + + +CONST + TCM_GETCURFOCUS = (TCM_FIRST + 47); +// Macro 237 + + +Function TabCtrl_GetCurFocus( hwnd : hwnd):cint; + + + +CONST + TCM_SETCURFOCUS = (TCM_FIRST + 48); + +// Macro 238 +Procedure TabCtrl_SetCurFocus( hwnd : hwnd; i : LParam ); + + +{$ifdef ie3plus} + +CONST + TCM_SETMINTABWIDTH = (TCM_FIRST + 49); + +// Macro 239 +Function TabCtrl_SetMinTabWidth( hwnd : hwnd; x : WParam ):cint; + + +CONST + TCM_DESELECTALL = (TCM_FIRST + 50); + +// Macro 240 +Procedure TabCtrl_DeselectAll( hwnd : hwnd; fExcludeFocus : WPARAM ); + +{$ENDIF} + +{$ifdef ie4plus} +CONST + TCM_HIGHLIGHTITEM = (TCM_FIRST + 51); + +// Macro 241 +Function TabCtrl_HighlightItem( hwnd : hwnd; i : WPARAM; fHighlight :bool):BOOL; + + + +CONST + TCM_SETEXTENDEDSTYLE = (TCM_FIRST + 52); // optional wParam == mask + +// Macro 242 +Function TabCtrl_SetExtendedStyle( hwnd : hwnd; dw :LPARAM ):DWORD; + + +CONST + TCM_GETEXTENDEDSTYLE = (TCM_FIRST + 53); + +// Macro 243 +Function TabCtrl_GetExtendedStyle( hwnd : hwnd):DWORD; + + + +CONST + TCM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT; + +// Macro 244 +Function TabCtrl_SetUnicodeFormat( hwnd : hwnd; fUnicode : WPARAM):BOOL; + + + +CONST + TCM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT; + +// Macro 245 +Function TabCtrl_GetUnicodeFormat( hwnd : hwnd):BOOL; + + +{$ENDIF} // _WIN32_IE >= 0x0400 + + +CONST + TCN_KEYDOWN = (TCN_FIRST - 0); + + +{$IFDEF _WIN32} +// #include <pshpack1.h> +{$ENDIF} + +TYPE + + tagTCKEYDOWN = Record + hdr : NMHDR; + wVKey : WORD; + flags : UINT; + END; + NMTCKEYDOWN = tagTCKEYDOWN; + TTCKEYDOWN = tagTCKEYDOWN; + PTCKEYDOWN = ^tagTCKEYDOWN; + +{$ifdef ie3plus} + TC_KEYDOWN = NMTCKEYDOWN; +{$ELSE} + tagTCKEYDOWN = _TC_KEYDOWN; + NMTCKEYDOWN = TC_KEYDOWN; +{$ENDIF} + + +{$IFDEF _WIN32} +// #include <poppack.h> +{$ENDIF} + + +CONST + TCN_SELCHANGE = (TCN_FIRST - 1); + TCN_SELCHANGING = (TCN_FIRST - 2); +{$ifdef ie4plus} + TCN_GETOBJECT = (TCN_FIRST - 3); +{$ENDIF} // _WIN32_IE >= 0x0400 +{$ifdef ie5plus} + TCN_FOCUSCHANGE = (TCN_FIRST - 4); +{$ENDIF} // _WIN32_IE >= 0x0500 +{$ENDIF} // NOTABCONTROL + +//====== ANIMATE CONTROL ====================================================== + +{$IFNDEF NOANIMATE} + +{$IFDEF _WIN32} + + ANIMATE_CLASSW = {L}'SysAnimate32'; + ANIMATE_CLASSA = 'SysAnimate32'; + +{$IFDEF UNICODE} + ANIMATE_CLASS = ANIMATE_CLASSW; +{$ELSE} + ANIMATE_CLASS = ANIMATE_CLASSA; +{$ENDIF} + +// begin_r_commctrl + + +CONST + ACS_CENTER = $0001; + ACS_TRANSPARENT = $0002; + ACS_AUTOPLAY = $0004; +{$ifdef ie3plus} + ACS_TIMER = $0008; // don't use threads... use timers +{$ENDIF} + +// end_r_commctrl + + ACM_OPENA = (WM_USER+100); + ACM_OPENW = (WM_USER+103); + +{$IFDEF UNICODE} + + + ACM_OPEN = ACM_OPENW; +{$ELSE} + ACM_OPEN = ACM_OPENA; +{$ENDIF} + + +CONST + ACM_PLAY = (WM_USER+101); + ACM_STOP = (WM_USER+102); + + + ACN_START = 1; + ACN_STOP = 2; + + +// Macro 246 + + +Function Animate_Create(hwndP :HWND;id:HMENU;dwStyle:dword;hInstance:HINST):HWND; + +// Macro 247 + +// #define Animate_Open(hwnd, szName) (BOOL)SNDMSG(hwnd, ACM_OPEN, 0, (LPARAM)(LPTSTR)(szName)) +// Macro 248 + +// #define Animate_OpenEx(hwnd, hInst, szName) (BOOL)SNDMSG(hwnd, ACM_OPEN, (WPARAM)(hInst), (LPARAM)(LPTSTR)(szName)) +// Macro 249 + +// #define Animate_Play(hwnd, from, to, rep) (BOOL)SNDMSG(hwnd, ACM_PLAY, (WPARAM)(rep), (LPARAM)MAKELONG(from, to)) +// Macro 250 + +// #define Animate_Stop(hwnd) (BOOL)SNDMSG(hwnd, ACM_STOP, 0, 0) +// Macro 251 + +// #define Animate_Close(hwnd) Animate_Open(hwnd, NULL) +// Macro 252 + +// #define Animate_Seek(hwnd, frame) Animate_Play(hwnd, frame, frame, 1) +{$ENDIF} + +{$ENDIF} // NOANIMATE + +{$ifdef ie3plus} +//====== MONTHCAL CONTROL ====================================================== + +{$IFNDEF NOMONTHCAL} +{$IFDEF _WIN32} + + +CONST + MONTHCAL_CLASSW = {L}'SysMonthCal32'; + MONTHCAL_CLASSA = 'SysMonthCal32'; + + +{$IFDEF UNICODE} + MONTHCAL_CLASS = MONTHCAL_CLASSW; +{$ELSE} + MONTHCAL_CLASS = MONTHCAL_CLASSA; +{$ENDIF} + +TYPE +// bit-packed array of "bold" info for a month +// if a bit is on, that day is drawn bold + + MONTHDAYSTATE = DWORD; + LPMONTHDAYSTATE = ^MONTHDAYSTATE; + TMonthDayState = MONTHDAYSTATE; + PMonthDayState = LPMONTHDAYSTATE; + + +CONST + MCM_FIRST = $1000; + +// BOOL MonthCal_GetCurSel(HWND hmc, LPSYSTEMTIME pst) +// returns FALSE if MCS_MULTISELECT +// returns TRUE and sets *pst to the currently selected date otherwise + + + + +CONST + MCM_GETCURSEL = (MCM_FIRST + 1); + +// Macro 253 +// #define MonthCal_GetCurSel(hmc, pst) (BOOL)SNDMSG(hmc, MCM_GETCURSEL, 0, (LPARAM)(pst)) + +function MonthCal_GetCurSel(hwndMC:HWND; lpSysTime :LPSYSTEMTIME):Bool; + +// BOOL MonthCal_SetCurSel(HWND hmc, LPSYSTEMTIME pst) +// returns FALSE if MCS_MULTISELECT +// returns TURE and sets the currently selected date to *pst otherwise + + + +CONST + MCM_SETCURSEL = (MCM_FIRST + 2); + +// Macro 254 +// #define MonthCal_SetCurSel(hmc, pst) (BOOL)SNDMSG(hmc, MCM_SETCURSEL, 0, (LPARAM)(pst)) +// DWORD MonthCal_GetMaxSelCount(HWND hmc) +// returns the maximum number of selectable days allowed + +function MonthCal_SetCurSel(hwndMC:HWND; lpSysTime :LPSYSTEMTIME):Bool;inline; +function MonthCal_SetCurSel(hwndMC:HWND; var lpSysTime :TSYSTEMTIME):Bool;inline; + + +CONST + MCM_GETMAXSELCOUNT = (MCM_FIRST + 3); + +// Macro 255 +// #define MonthCal_GetMaxSelCount(hmc) (DWORD)SNDMSG(hmc, MCM_GETMAXSELCOUNT, 0, 0L) +// BOOL MonthCal_SetMaxSelCount(HWND hmc, UINT n) +// sets the max number days that can be selected iff MCS_MULTISELECT + +function MonthCal_GetMaxSelCount(hwndMC:HWND):Bool; + +CONST + MCM_SETMAXSELCOUNT = (MCM_FIRST + 4); + +// Macro 256 +// #define MonthCal_SetMaxSelCount(hmc, n) (BOOL)SNDMSG(hmc, MCM_SETMAXSELCOUNT, (WPARAM)(n), 0L) + +function MonthCal_SetMaxSelCount(hwndMC:HWND;n:uint):Bool; + +// BOOL MonthCal_GetSelRange(HWND hmc, LPSYSTEMTIME rgst) +// sets rgst[0] to the first day of the selection range +// sets rgst[1] to the last day of the selection range + +CONST + MCM_GETSELRANGE = (MCM_FIRST + 5); + +// Macro 257 +// #define MonthCal_GetSelRange(hmc, rgst) SNDMSG(hmc, MCM_GETSELRANGE, 0, (LPARAM)(rgst)) +// BOOL MonthCal_SetSelRange(HWND hmc, LPSYSTEMTIME rgst) +// selects the range of days from rgst[0] to rgst[1] + +function MonthCal_GetSelRange(hwndMC:HWND; lpSysTime :LPSYSTEMTIME):Bool; + + +CONST + MCM_SETSELRANGE = (MCM_FIRST + 6); + +// Macro 258 +// #define MonthCal_SetSelRange(hmc, rgst) SNDMSG(hmc, MCM_SETSELRANGE, 0, (LPARAM)(rgst)) +// DWORD MonthCal_GetMonthRange(HWND hmc, DWORD gmr, LPSYSTEMTIME rgst) +// if rgst specified, sets rgst[0] to the starting date and +// and rgst[1] to the ending date of the the selectable (non-grayed) +// days if GMR_VISIBLE or all the displayed days (including grayed) +// if GMR_DAYSTATE. +// returns the number of months spanned by the above range. + +function MonthCal_SetSelRange(hwndMC:HWND; lpSysTime :LPSYSTEMTIME):Bool; + + +CONST + MCM_GETMONTHRANGE = (MCM_FIRST + 7); + +// Macro 259 +// #define MonthCal_GetMonthRange(hmc, gmr, rgst) (DWORD)SNDMSG(hmc, MCM_GETMONTHRANGE, (WPARAM)(gmr), (LPARAM)(rgst)) +// BOOL MonthCal_SetDayState(HWND hmc, int cbds, DAYSTATE *rgds) +// cbds is the count of DAYSTATE items in rgds and it must be equal +// to the value returned from MonthCal_GetMonthRange(hmc, GMR_DAYSTATE, NULL) +// This sets the DAYSTATE bits for each month (grayed and non-grayed +// days) displayed in the calendar. The first bit in a month's DAYSTATE +// corresponts to bolding day 1, the second bit affects day 2, etc. + +function MonthCal_GetMonthRange(hwndMC:HWND; gmr: DWORD;lpSysTime :LPSYSTEMTIME):Bool; + + +CONST + MCM_SETDAYSTATE = (MCM_FIRST + 8); + +// Macro 260 +// #define MonthCal_SetDayState(hmc, cbds, rgds) SNDMSG(hmc, MCM_SETDAYSTATE, (WPARAM)(cbds), (LPARAM)(rgds)) +// BOOL MonthCal_GetMinReqRect(HWND hmc, LPRECT prc) +// sets *prc the minimal size needed to display one month +// To display two months, undo the AdjustWindowRect calculation already done to +// this rect, double the width, and redo the AdjustWindowRect calculation -- +// the monthcal control will display two calendars in this window (if you also +// double the vertical size, you will get 4 calendars) +// NOTE: if you want to gurantee that the "Today" string is not clipped, +// get the MCM_GETMAXTODAYWIDTH and use the max of that width and this width + +function MonthCal_SetDayState(hwndMC:HWND; gmr: Longint;lpDay :LPMONTHDAYSTATE):Bool; + + +CONST + MCM_GETMINREQRECT = (MCM_FIRST + 9); + +// Macro 261 +// #define MonthCal_GetMinReqRect(hmc, prc) SNDMSG(hmc, MCM_GETMINREQRECT, 0, (LPARAM)(prc)) +// set colors to draw control with -- see MCSC_ bits below + +function MonthCal_GetMinReqRect(hwndMC:HWND; lpr :LPRect):Bool;inline; +function MonthCal_GetMinReqRect(hwndMC:HWND; var lpr :TRect):Bool;inline; + + +CONST + MCM_SETCOLOR = (MCM_FIRST + 10); + +// Macro 262 +// #define MonthCal_SetColor(hmc, iColor, clr) SNDMSG(hmc, MCM_SETCOLOR, iColor, clr) + +function MonthCal_SetColor(hwndMC:HWND; ic:longint;clr:COLORREF):DWORD;inline; + + +CONST + MCM_GETCOLOR = (MCM_FIRST + 11); + +// Macro 263 +// #define MonthCal_GetColor(hmc, iColor) SNDMSG(hmc, MCM_GETCOLOR, iColor, 0) + +function MonthCal_GetColor(hwndMC:HWND; ic:longint):Bool; + + +CONST + MCSC_BACKGROUND = 0; // the background color (between months) + MCSC_TEXT = 1; // the dates + MCSC_TITLEBK = 2; // background of the title + MCSC_TITLETEXT = 3; + MCSC_MONTHBK = 4; // background within the month cal + MCSC_TRAILINGTEXT = 5; // the text color of header & trailing days + +// set what day is "today" send NULL to revert back to real date + MCM_SETTODAY = (MCM_FIRST + 12); + +// Macro 264 +// #define MonthCal_SetToday(hmc, pst) SNDMSG(hmc, MCM_SETTODAY, 0, (LPARAM)(pst)) +// get what day is "today" +// returns BOOL for success/failure + +function MonthCal_SetToday(hwndMC:HWND; lps:LPSYSTEMTIME):Bool; + + +CONST + MCM_GETTODAY = (MCM_FIRST + 13); + +// Macro 265 +// #define MonthCal_GetToday(hmc, pst) (BOOL)SNDMSG(hmc, MCM_GETTODAY, 0, (LPARAM)(pst)) +// determine what pinfo->pt is over + +function MonthCal_GetToday(hwndMC:HWND; lps:LPSYSTEMTIME):Bool; + + +CONST + MCM_HITTEST = (MCM_FIRST + 14); + +TYPE + + DummyStruct16 = Record + cbSize : UINT; + pt : POINT; + uHit : UINT; // out param + st : SYSTEMTIME; +{$ifdef NTDDI_VISTA} + rc : RECT; + iOffset : cint; + iRow : cint; + iCol : cint; +{$endif} + END; + MCHITTESTINFO = DummyStruct16; + PMCHITTESTINFO = ^DummyStruct16; + TDummyStruct16 = DummyStruct16; + PDummyStruct16 = ^DummyStruct16; + + +// Macro 266 +FUNCTION MonthCal_HitTest( hmc :HWND ; pinfo : PMCHITTESTINFO):DWORD; + + +CONST + MCHT_TITLE = $00010000; + MCHT_CALENDAR = $00020000; + MCHT_TODAYLINK = $00030000; + + MCHT_NEXT = $01000000; // these indicate that hitting + MCHT_PREV = $02000000; // here will go to the next/prev month + + MCHT_NOWHERE = $00000000; + + MCHT_TITLEBK = (MCHT_TITLE); + MCHT_TITLEMONTH = (MCHT_TITLE OR $0001); + MCHT_TITLEYEAR = (MCHT_TITLE OR $0002); + MCHT_TITLEBTNNEXT = (MCHT_TITLE OR MCHT_NEXT OR $0003); + MCHT_TITLEBTNPREV = (MCHT_TITLE OR MCHT_PREV OR $0003); + + MCHT_CALENDARBK = (MCHT_CALENDAR); + MCHT_CALENDARDATE = (MCHT_CALENDAR OR $0001); + MCHT_CALENDARDATENEXT = (MCHT_CALENDARDATE OR MCHT_NEXT); + MCHT_CALENDARDATEPREV = (MCHT_CALENDARDATE OR MCHT_PREV); + MCHT_CALENDARDAY = (MCHT_CALENDAR OR $0002); + MCHT_CALENDARWEEKNUM = (MCHT_CALENDAR OR $0003); + +// set first day of week to iDay: +// 0 for Monday, 1 for Tuesday, ..., 6 for Sunday +// -1 for means use locale info + MCM_SETFIRSTDAYOFWEEK = (MCM_FIRST + 15); +// Macro 267 + + +function MonthCal_SetFirstDayOfWeek( hmc : HWND ; iDay :LONGINT ):DWORD; + + +// DWORD result... low word has the day. high word is bool if this is app set +// or not (FALSE == using locale info) + +CONST + MCM_GETFIRSTDAYOFWEEK = (MCM_FIRST + 16); +// Macro 268 + + +Function MonthCal_GetFirstDayOfWeek( hmc : HWND ):DWORD; + + +// DWORD MonthCal_GetRange(HWND hmc, LPSYSTEMTIME rgst) +// modifies rgst[0] to be the minimum ALLOWABLE systemtime (or 0 if no minimum) +// modifies rgst[1] to be the maximum ALLOWABLE systemtime (or 0 if no maximum) +// returns GDTR_MIN|GDTR_MAX if there is a minimum|maximum limit + +CONST + MCM_GETRANGE = (MCM_FIRST + 17); +// Macro 269 + + +Function MonthCal_GetRange( hmc : HWND ; rgst : LPSYSTEMTIME):DWORD; + + +// BOOL MonthCal_SetRange(HWND hmc, DWORD gdtr, LPSYSTEMTIME rgst) +// if GDTR_MIN, sets the minimum ALLOWABLE systemtime to rgst[0], otherwise removes minimum +// if GDTR_MAX, sets the maximum ALLOWABLE systemtime to rgst[1], otherwise removes maximum +// returns TRUE on success, FALSE on error (such as invalid parameters) + +CONST + MCM_SETRANGE = (MCM_FIRST + 18); +// Macro 270 + + +Function MonthCal_SetRange( hmc : HWND ; gd : DWORD; rgst : LPSYSTEMTIME):BOOL; + + +// int MonthCal_GetMonthDelta(HWND hmc) +// returns the number of months one click on a next/prev button moves by + +CONST + MCM_GETMONTHDELTA = (MCM_FIRST + 19); +// Macro 271 + + +Function MonthCal_GetMonthDelta( hmc :hwnd ):cint; + + +// int MonthCal_SetMonthDelta(HWND hmc, int n) +// sets the month delta to n. n==0 reverts to moving by a page of months +// returns the previous value of n. + +CONST + MCM_SETMONTHDELTA = (MCM_FIRST + 20); +// Macro 272 + + +Function MonthCal_SetMonthDelta( hmc :hwnd ; n :cint ):cint; + + +// DWORD MonthCal_GetMaxTodayWidth(HWND hmc, LPSIZE psz) +// sets *psz to the maximum width/height of the "Today" string displayed +// at the bottom of the calendar (as long as MCS_NOTODAY is not specified) + +CONST + MCM_GETMAXTODAYWIDTH = (MCM_FIRST + 21); +// Macro 273 + + +Function MonthCal_GetMaxTodayWidth( hmc :hwnd ):DWORD; + + +{$ifdef ie4plus} + +CONST + MCM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT; +// Macro 274 + + +Function MonthCal_SetUnicodeFormat( hwnd : hwnd; fUnicode : bool):BOOL; + + +CONST + MCM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT; +// Macro 275 + + +Function MonthCal_GetUnicodeFormat( hwnd : hwnd):BOOL; + +{$ifdef NTDDI_VISTA} +Const +// View + MCMV_MONTH = 0; + MCMV_YEAR = 1; + MCMV_DECADE = 2; + MCMV_CENTURY = 3; + MCMV_MAX = MCMV_CENTURY; + + MCM_GETCURRENTVIEW = (MCM_FIRST + 22); + MCM_GETCALENDARCOUNT = (MCM_FIRST + 23); + MCM_GETCALENDARGRIDINFO = (MCM_FIRST + 24); + MCM_GETCALID = (MCM_FIRST + 27); + MCM_SETCALID = (MCM_FIRST + 28); +// Returns the min rect that will fit the max number of calendars for the passed in rect. + MCM_SIZERECTTOMIN = (MCM_FIRST + 29); + MCM_SETCALENDARBORDER = (MCM_FIRST + 30); + MCM_GETCALENDARBORDER = (MCM_FIRST + 31); + MCM_SETCURRENTVIEW = (MCM_FIRST + 32); + +// Part + MCGIP_CALENDARCONTROL = 0; + MCGIP_NEXT = 1; + MCGIP_PREV = 2; + MCGIP_FOOTER = 3; + MCGIP_CALENDAR = 4; + MCGIP_CALENDARHEADER = 5; + MCGIP_CALENDARBODY = 6; + MCGIP_CALENDARROW = 7; + MCGIP_CALENDARCELL = 8; + + MCGIF_DATE = $00000001; + MCGIF_RECT = $00000002; + MCGIF_NAME = $00000004; + +// Note: iRow of -1 refers to the row header and iCol of -1 refers to the col header. + +Type + tagMCGRIDINFO = record + cbSize : UINT; + dwPart : DWORD; + dwFlags : DWORD; + iCalendar : longint; + iRow : longint; + iCol : longint; + bSelected : BOOL; + stStart : SYSTEMTIME; + stEnd : SYSTEMTIME; + rc : RECT; + pszName : LPWSTR; + cchName : size_t; + end; + MCGRIDINFO = tagMCGRIDINFO; + TPMCGRIDINFO = MCGRIDINFO; + PMCGRIDINFO = ^MCGRIDINFO; + LPMCGRIDINFO = PMCGRIDINFO; + +function MonthCal_GetCurrentView(hmc:HWND):DWORD; +// (DWORD)SNDMSG(hmc, MCM_GETCURRENTVIEW, 0, 0) + +function MonthCal_GetCalendarCount(hmc:HWND):DWORD; +// (DWORD)SNDMSG(hmc, MCM_GETCALENDARCOUNT, 0, 0) + +function MonthCal_GetCalendarGridInfo(hmc:HWND; pmc:pMCGRIDINFO):BOOL; +// (BOOL)SNDMSG(hmc, MCM_GETCALENDARGRIDINFO, 0, (LPARAM)(PMCGRIDINFO)(pmcGridInfo)) + +function MonthCal_GetCALID(hmc:HWND):CALID; +// (CALID)SNDMSG(hmc, MCM_GETCALID, 0, 0) + +function MonthCal_SetCALID(hmc:HWND; calid:cuint):LRESULT; +// SNDMSG(hmc, MCM_SETCALID, (WPARAM)(calid), 0) + +function MonthCal_SizeRectToMin(hmc:HWND; prc:prect):LRESULT; +// SNDMSG(hmc, MCM_SIZERECTTOMIN, 0, (LPARAM)(prc)) + +function MonthCal_SetCalendarBorder(hmc:HWND; fset:bool; xyborder:cint):LRESULT; +// SNDMSG(hmc, MCM_SETCALENDARBORDER, (WPARAM)(fset), (LPARAM)(xyborder)) + +function MonthCal_GetCalendarBorder(hmc:HWND):cint; +// (int)SNDMSG(hmc, MCM_GETCALENDARBORDER, 0, 0) + +function MonthCal_SetCurrentView(hmc:HWND; dwNewView:DWord):BOOL; +// (BOOL)SNDMSG(hmc, MCM_SETCURRENTVIEW, 0, (LPARAM)(dwNewView)) + + +{$endif} + +{$ENDIF} + +// MCN_SELCHANGE is sent whenever the currently displayed date changes +// via month change, year change, keyboard navigation, prev/next button +// +TYPE + + tagNMSELCHANGE = Record + nmhdr : NMHDR; // this must be first, so we don't break WM_NOTIFY + stSelStart : SYSTEMTIME; + stSelEnd : SYSTEMTIME; + END; + NMSELCHANGE = tagNMSELCHANGE; + LPNMSELCHANGE = ^tagNMSELCHANGE; + TNMSELCHANGE = tagNMSELCHANGE; + PNMSELCHANGE = ^tagNMSELCHANGE; + + + +CONST + MCN_SELCHANGE = (MCN_FIRST + 1); + +// MCN_GETDAYSTATE is sent for MCS_DAYSTATE controls whenever new daystate +// information is needed (month or year scroll) to draw bolding information. +// The app must fill in cDayState months worth of information starting from +// stStart date. The app may fill in the array at prgDayState or change +// prgDayState to point to a different array out of which the information +// will be copied. (similar to tooltips) +// +TYPE + + tagNMDAYSTATE = Record + nmhdr : NMHDR; // this must be first, so we don't break WM_NOTIFY + stStart : SYSTEMTIME; + cDayState : cint; + prgDayState : LPMONTHDAYSTATE; // points to cDayState MONTHDAYSTATEs + END; + NMDAYSTATE = tagNMDAYSTATE; + LPNMDAYSTATE = ^tagNMDAYSTATE; + TNMDAYSTATE = tagNMDAYSTATE; + PNMDAYSTATE = ^tagNMDAYSTATE; + + + +CONST + MCN_GETDAYSTATE = (MCN_FIRST + 3); + +// MCN_SELECT is sent whenever a selection has occured (via mouse or keyboard) +// +TYPE + + NMSELECT = NMSELCHANGE; + LPNMSELECT = ^NMSELCHANGE; + + +CONST + MCN_SELECT = (MCN_FIRST + 4); + + +// begin_r_commctrl + + MCS_DAYSTATE = $0001; + MCS_MULTISELECT = $0002; + MCS_WEEKNUMBERS = $0004; +{$ifdef ie4plus} + MCS_NOTODAYCIRCLE = $0008; + MCS_NOTODAY = $0010; +{$ELSE} + MCS_NOTODAY = $0008; +{$ENDIF} +{$ifdef NTDDI_Vista} + MCS_NOTRAILINGDATES = $0040; + MCS_SHORTDAYSOFWEEK = $0080; + MCS_NOSELCHANGEONNAV = $0100; +{$endif} + + GMR_VISIBLE = 0; // visible portion of display + GMR_DAYSTATE = 1; // above plus the grayed out parts of + // partially displayed months + + +{$ENDIF} // _WIN32 +{$ENDIF} // NOMONTHCAL + + +//====== DATETIMEPICK CONTROL ================================================== + +{$IFNDEF NODATETIMEPICK} +{$IFDEF _WIN32} + + DATETIMEPICK_CLASSW = {L}'SysDateTimePick32'; + DATETIMEPICK_CLASSA = 'SysDateTimePick32'; + +{$IFDEF UNICODE} + DATETIMEPICK_CLASS = DATETIMEPICK_CLASSW; +{$ELSE} + DATETIMEPICK_CLASS = DATETIMEPICK_CLASSA; +{$ENDIF} + +{$ifdef NTDDI_VISTA} +Type + tagDATETIMEPICKERINFO = packed record + cbSize : DWORD; + rcCheck : RECT; + stateCheck : DWORD; + rcButton : RECT; + stateButton : DWORD; + hwndEdit : HWND; + hwndUD : HWND; + hwndDropDown : HWND; + end; + DATETIMEPICKERINFO = tagDATETIMEPICKERINFO; + PDATETIMEPICKERINFO = ^DATETIMEPICKERINFO; + LPDATETIMEPICKERINFO = PDATETIMEPICKERINFO; + TDATETIMEPICKERINFO = DATETIMEPICKERINFO; +{$endif} + +CONST + DTM_FIRST = $1000; + +// DWORD DateTimePick_GetSystemtime(HWND hdp, LPSYSTEMTIME pst) +// returns GDT_NONE if "none" is selected (DTS_SHOWNONE only) +// returns GDT_VALID and modifies *pst to be the currently selected value + DTM_GETSYSTEMTIME = (DTM_FIRST + 1); +// Macro 276 + +// #define DateTime_GetSystemtime(hdp, pst) (DWORD)SNDMSG(hdp, DTM_GETSYSTEMTIME, 0, (LPARAM)(pst)) + +// BOOL DateTime_SetSystemtime(HWND hdp, DWORD gd, LPSYSTEMTIME pst) +// if gd==GDT_NONE, sets datetimepick to None (DTS_SHOWNONE only) +// if gd==GDT_VALID, sets datetimepick to *pst +// returns TRUE on success, FALSE on error (such as bad params) + +CONST + DTM_SETSYSTEMTIME = (DTM_FIRST + 2); +// Macro 277 + +// #define DateTime_SetSystemtime(hdp, gd, pst) (BOOL)SNDMSG(hdp, DTM_SETSYSTEMTIME, (WPARAM)(gd), (LPARAM)(pst)) +function DateTime_SetSystemTime(hdp: HWND; gd: DWORD; const pst: TSystemTime): BOOL;inline; + +// DWORD DateTime_GetRange(HWND hdp, LPSYSTEMTIME rgst) +// modifies rgst[0] to be the minimum ALLOWABLE systemtime (or 0 if no minimum) +// modifies rgst[1] to be the maximum ALLOWABLE systemtime (or 0 if no maximum) +// returns GDTR_MIN|GDTR_MAX if there is a minimum|maximum limit + +CONST + DTM_GETRANGE = (DTM_FIRST + 3); +// Macro 278 + +// #define DateTime_GetRange(hdp, rgst) (DWORD)SNDMSG(hdp, DTM_GETRANGE, 0, (LPARAM)(rgst)) + +// BOOL DateTime_SetRange(HWND hdp, DWORD gdtr, LPSYSTEMTIME rgst) +// if GDTR_MIN, sets the minimum ALLOWABLE systemtime to rgst[0], otherwise removes minimum +// if GDTR_MAX, sets the maximum ALLOWABLE systemtime to rgst[1], otherwise removes maximum +// returns TRUE on success, FALSE on error (such as invalid parameters) + +CONST + DTM_SETRANGE = (DTM_FIRST + 4); +// Macro 279 + +// #define DateTime_SetRange(hdp, gd, rgst) (BOOL)SNDMSG(hdp, DTM_SETRANGE, (WPARAM)(gd), (LPARAM)(rgst)) +function DateTime_SetRange(hdp: HWND; gdtr: DWORD; rgst: PSystemTime): BOOL;inline; + +// BOOL DateTime_SetFormat(HWND hdp, LPCTSTR sz) +// sets the display formatting string to sz (see GetDateFormat and GetTimeFormat for valid formatting chars) +// NOTE: 'X' is a valid formatting character which indicates that the application +// will determine how to display information. Such apps must support DTN_WMKEYDOWN, +// DTN_FORMAT, and DTN_FORMATQUERY. + +CONST + DTM_SETFORMATA = (DTM_FIRST + 5); + DTM_SETFORMATW = (DTM_FIRST + 50); + +{$IFDEF UNICODE} + +TYPE + DTM_SETFORMAT = DTM_SETFORMATW; +{$ELSE} + DTM_SETFORMAT = DTM_SETFORMATA; +{$ENDIF} + +// Macro 280 + +// #define DateTime_SetFormat(hdp, sz) (BOOL)SNDMSG(hdp, DTM_SETFORMAT, 0, (LPARAM)(sz)) + + + +CONST + DTM_SETMCCOLOR = (DTM_FIRST + 6); +// Macro 281 + +// #define DateTime_SetMonthCalColor(hdp, iColor, clr) SNDMSG(hdp, DTM_SETMCCOLOR, iColor, clr) +function DateTime_SetMonthCalColor(hdp: HWND; iColor: DWORD; clr: TColorRef): TColorRef;inline; + +CONST + DTM_GETMCCOLOR = (DTM_FIRST + 7); +// Macro 282 + +// #define DateTime_GetMonthCalColor(hdp, iColor) SNDMSG(hdp, DTM_GETMCCOLOR, iColor, 0) + +// HWND DateTime_GetMonthCal(HWND hdp) +// returns the HWND of the MonthCal popup window. Only valid +// between DTN_DROPDOWN and DTN_CLOSEUP notifications. + +CONST + DTM_GETMONTHCAL = (DTM_FIRST + 8); +// Macro 283 + +// #define DateTime_GetMonthCal(hdp) (HWND)SNDMSG(hdp, DTM_GETMONTHCAL, 0, 0) +function DateTime_GetMonthCal(hdp: HWND): HWND;inline; + +{$ifdef ie4plus} + + +CONST + DTM_SETMCFONT = (DTM_FIRST + 9); + +// Macro 284 +procedure DateTime_SetMonthCalFont(hdp:HWND; hfont:HFONT; fRedraw:LPARAM); +// SNDMSG(hdp, DTM_SETMCFONT, (WPARAM)(hfont), (LPARAM)(fRedraw)) + + +CONST + DTM_GETMCFONT = (DTM_FIRST + 10); + +// Macro 285 +function DateTime_GetMonthCalFont(hdp:HWND):HFONT; +// SNDMSG(hdp, DTM_GETMCFONT, 0, 0) + +{$ifdef NTDDI_VISTA} +Const + DTM_SETMCSTYLE = (DTM_FIRST + 11); + DTM_GETMCSTYLE = (DTM_FIRST + 12); + DTM_CLOSEMONTHCAL = (DTM_FIRST + 13); + DTM_GETDATETIMEPICKERINFO = (DTM_FIRST + 14); + DTM_GETIDEALSIZE = (DTM_FIRST + 15); + +function DateTime_SetMonthCalStyle(hdp:HWND; dwStyle:DWord):LResult; +// SNDMSG(hdp, DTM_SETMCSTYLE, 0, (LPARAM)dwStyle) + +function DateTime_GetMonthCalStyle(hdp:HWND):LRESULT; +// SNDMSG(hdp, DTM_GETMCSTYLE, 0, 0) + +function DateTime_CloseMonthCal(hdp:HWND):LRESULT; +// SNDMSG(hdp, DTM_CLOSEMONTHCAL, 0, 0) + +// DateTime_GetDateTimePickerInfo(HWND hdp, DATETIMEPICKERINFO* pdtpi) +// Retrieves information about the selected date time picker. + +function DateTime_GetDateTimePickerInfo(hdp:HWND; pdtpi:PDATETIMEPICKERINFO):LRESULT; +// SNDMSG(hdp, DTM_GETDATETIMEPICKERINFO, 0, (LPARAM)(pdtpi)) + +function DateTime_GetIdealSize(hdp:HWND; ps:PSIZE): LResult; +// (BOOL)SNDMSG((hdp), DTM_GETIDEALSIZE, 0, (LPARAM)(psize)) + +{$endif} + + +{$ENDIF} // _WIN32_IE >= 0x0400 + +// begin_r_commctrl + + +CONST + DTS_UPDOWN = $0001; // use UPDOWN instead of MONTHCAL + DTS_SHOWNONE = $0002; // allow a NONE selection + DTS_SHORTDATEFORMAT = $0000; // use the short date format (app must forward WM_WININICHANGE messages) + DTS_LONGDATEFORMAT = $0004; // use the long date format (app must forward WM_WININICHANGE messages) +{$ifdef ie5plus} + DTS_SHORTDATECENTURYFORMAT = $000C; // short date format with century (app must forward WM_WININICHANGE messages) +{$ENDIF} // (_WIN32_IE >= 0x500) + DTS_TIMEFORMAT = $0009; // use the time format (app must forward WM_WININICHANGE messages) + DTS_APPCANPARSE = $0010; // allow user entered strings (app MUST respond to DTN_USERSTRING) + DTS_RIGHTALIGN = $0020; // right-align popup instead of left-align it + +// end_r_commctrl + + DTN_DATETIMECHANGE = (DTN_FIRST + 1); // the systemtime has changed +TYPE + + tagNMDATETIMECHANGE = Record + nmhdr : NMHDR; + dwFlags : DWORD; // GDT_VALID or GDT_NONE + st : SYSTEMTIME; // valid iff dwFlags==GDT_VALID + END; + NMDATETIMECHANGE = tagNMDATETIMECHANGE; + LPNMDATETIMECHANGE = ^tagNMDATETIMECHANGE; + TNMDATETIMECHANGE = tagNMDATETIMECHANGE; + PNMDATETIMECHANGE = ^tagNMDATETIMECHANGE; + + + +CONST + DTN_USERSTRINGA = (DTN_FIRST + 2); // the user has entered a string + DTN_USERSTRINGW = (DTN_FIRST + 15); +TYPE + + tagNMDATETIMESTRINGA = Record + nmhdr : NMHDR; + pszUserString : LPCSTR; // string user entered + st : SYSTEMTIME; // app fills this in + dwFlags : DWORD; // GDT_VALID or GDT_NONE + END; + NMDATETIMESTRINGA = tagNMDATETIMESTRINGA; + LPNMDATETIMESTRINGA = ^tagNMDATETIMESTRINGA; + TNMDATETIMESTRINGA = tagNMDATETIMESTRINGA; + PNMDATETIMESTRINGA = ^tagNMDATETIMESTRINGA; + + + tagNMDATETIMESTRINGW = Record + nmhdr : NMHDR; + pszUserString : LPCWSTR; // string user entered + st : SYSTEMTIME; // app fills this in + dwFlags : DWORD; // GDT_VALID or GDT_NONE + END; + NMDATETIMESTRINGW = tagNMDATETIMESTRINGW; + LPNMDATETIMESTRINGW = ^tagNMDATETIMESTRINGW; + TNMDATETIMESTRINGW = tagNMDATETIMESTRINGW; + PNMDATETIMESTRINGW = ^tagNMDATETIMESTRINGW; + + +{$IFDEF UNICODE} +CONST + DTN_USERSTRING = DTN_USERSTRINGW; +TYPE + NMDATETIMESTRING = NMDATETIMESTRINGW; + LPNMDATETIMESTRING = LPNMDATETIMESTRINGW; +{$ELSE} +CONST + DTN_USERSTRING = DTN_USERSTRINGA; +TYPE + NMDATETIMESTRING = NMDATETIMESTRINGA; + LPNMDATETIMESTRING = LPNMDATETIMESTRINGA; +{$ENDIF} + TNMDateTimeString = NMDATETIMESTRING; + PNMDateTimeString = LPNMDATETIMESTRING; + + + +CONST + DTN_WMKEYDOWNA = (DTN_FIRST + 3); // modify keydown on app format field (X) + DTN_WMKEYDOWNW = (DTN_FIRST + 16); +TYPE + + tagNMDATETIMEWMKEYDOWNA = Record + nmhdr : NMHDR; + nVirtKey : cint; // virtual key code of WM_KEYDOWN which MODIFIES an X field + pszFormat : LPCSTR; // format substring + st : SYSTEMTIME; // current systemtime, app should modify based on key + END; + NMDATETIMEWMKEYDOWNA = tagNMDATETIMEWMKEYDOWNA; + LPNMDATETIMEWMKEYDOWNA = ^tagNMDATETIMEWMKEYDOWNA; + TNMDATETIMEWMKEYDOWNA = tagNMDATETIMEWMKEYDOWNA; + PNMDATETIMEWMKEYDOWNA = ^tagNMDATETIMEWMKEYDOWNA; + + + tagNMDATETIMEWMKEYDOWNW = Record + nmhdr : NMHDR; + nVirtKey : cint; // virtual key code of WM_KEYDOWN which MODIFIES an X field + pszFormat : LPCWSTR; // format substring + st : SYSTEMTIME; // current systemtime, app should modify based on key + END; + NMDATETIMEWMKEYDOWNW = tagNMDATETIMEWMKEYDOWNW; + LPNMDATETIMEWMKEYDOWNW = ^tagNMDATETIMEWMKEYDOWNW; + TNMDATETIMEWMKEYDOWNW = tagNMDATETIMEWMKEYDOWNW; + PNMDATETIMEWMKEYDOWNW = ^tagNMDATETIMEWMKEYDOWNW; + + +{$IFDEF UNICODE} +CONST + DTN_WMKEYDOWN = DTN_WMKEYDOWNW; +TYPE + NMDATETIMEWMKEYDOWN = NMDATETIMEWMKEYDOWNW; + LPNMDATETIMEWMKEYDOWN= LPNMDATETIMEWMKEYDOWNW; +{$ELSE} +CONST + DTN_WMKEYDOWN = DTN_WMKEYDOWNA; +TYPE + NMDATETIMEWMKEYDOWN = NMDATETIMEWMKEYDOWNA; + LPNMDATETIMEWMKEYDOWN= LPNMDATETIMEWMKEYDOWNA; +{$ENDIF} + + + +CONST + DTN_FORMATA = (DTN_FIRST + 4); // query display for app format field (X) + DTN_FORMATW = (DTN_FIRST + 17); +TYPE + + tagNMDATETIMEFORMATA = Record + nmhdr : NMHDR; + pszFormat : LPCSTR; // format substring + st : SYSTEMTIME; // current systemtime + pszDisplay : LPCSTR; // string to display + szDisplay : Array [0..63] OF CHAR; // buffer pszDisplay originally points at + END; + NMDATETIMEFORMATA = tagNMDATETIMEFORMATA; + LPNMDATETIMEFORMATA = ^tagNMDATETIMEFORMATA; + TNMDATETIMEFORMATA = tagNMDATETIMEFORMATA; + PNMDATETIMEFORMATA = ^tagNMDATETIMEFORMATA; + + + tagNMDATETIMEFORMATW = Record + nmhdr : NMHDR; + pszFormat : LPCWSTR; // format substring + st : SYSTEMTIME; // current systemtime + pszDisplay : LPCWSTR; // string to display + szDisplay : Array [0..63] OF WCHAR; // buffer pszDisplay originally points at + END; + NMDATETIMEFORMATW = tagNMDATETIMEFORMATW; + LPNMDATETIMEFORMATW = ^tagNMDATETIMEFORMATW; + TNMDATETIMEFORMATW = tagNMDATETIMEFORMATW; + PNMDATETIMEFORMATW = ^tagNMDATETIMEFORMATW; + + +{$IFDEF UNICODE} +CONST + DTN_FORMAT = DTN_FORMATW; +TYPE + NMDATETIMEFORMAT = NMDATETIMEFORMATW; + LPNMDATETIMEFORMAT = LPNMDATETIMEFORMATW; +{$ELSE} +CONST + DTN_FORMAT = DTN_FORMATA; +TYPE + NMDATETIMEFORMAT = NMDATETIMEFORMATA; + LPNMDATETIMEFORMAT = LPNMDATETIMEFORMATA; +{$ENDIF} + + + +CONST + DTN_FORMATQUERYA = (DTN_FIRST + 5); // query formatting info for app format field (X) + DTN_FORMATQUERYW = (DTN_FIRST + 18); +TYPE + + tagNMDATETIMEFORMATQUERYA = Record + nmhdr : NMHDR; + pszFormat : LPCSTR; // format substring + szMax : SIZE; // max bounding rectangle app will use for this format string + END; + NMDATETIMEFORMATQUERYA = tagNMDATETIMEFORMATQUERYA; + LPNMDATETIMEFORMATQUERYA = ^tagNMDATETIMEFORMATQUERYA; + TNMDATETIMEFORMATQUERYA = tagNMDATETIMEFORMATQUERYA; + PNMDATETIMEFORMATQUERYA = ^tagNMDATETIMEFORMATQUERYA; + + + tagNMDATETIMEFORMATQUERYW = Record + nmhdr : NMHDR; + pszFormat : LPCWSTR; // format substring + szMax : SIZE; // max bounding rectangle app will use for this format string + END; + NMDATETIMEFORMATQUERYW = tagNMDATETIMEFORMATQUERYW; + LPNMDATETIMEFORMATQUERYW = ^tagNMDATETIMEFORMATQUERYW; + TNMDATETIMEFORMATQUERYW = tagNMDATETIMEFORMATQUERYW; + PNMDATETIMEFORMATQUERYW = ^tagNMDATETIMEFORMATQUERYW; + + +{$IFDEF UNICODE} +CONST + DTN_FORMATQUERY = DTN_FORMATQUERYW; +TYPE + NMDATETIMEFORMATQUERY= NMDATETIMEFORMATQUERYW; + LPNMDATETIMEFORMATQUERY= LPNMDATETIMEFORMATQUERYW; +{$ELSE} +CONST + DTN_FORMATQUERY = DTN_FORMATQUERYA; +TYPE + NMDATETIMEFORMATQUERY= NMDATETIMEFORMATQUERYA; + LPNMDATETIMEFORMATQUERY= LPNMDATETIMEFORMATQUERYA; +{$ENDIF} + + + +CONST + DTN_DROPDOWN = (DTN_FIRST + 6); // MonthCal has dropped down + DTN_CLOSEUP = (DTN_FIRST + 7); // MonthCal is popping up + + + GDTR_MIN = $0001; + GDTR_MAX = $0002; + + GDT_ERROR = -1; + GDT_VALID = 0; + GDT_NONE = 1; + + +{$ENDIF} // _WIN32 +{$ENDIF} // NODATETIMEPICK + + +{$ifdef ie4plus} + +{$IFNDEF NOIPADDRESS} + +/////////////////////////////////////////////// +/// IP Address edit control + +// Messages sent to IPAddress controls + + IPM_CLEARADDRESS = (WM_USER+100); // no parameters + IPM_SETADDRESS = (WM_USER+101); // lparam = TCP/IP address + IPM_GETADDRESS = (WM_USER+102); // lresult = # of non black fields. lparam = LPDWORD for TCP/IP address + IPM_SETRANGE = (WM_USER+103); // wparam = field, lparam = range + IPM_SETFOCUS = (WM_USER+104); // wparam = field + IPM_ISBLANK = (WM_USER+105); // no parameters + + WC_IPADDRESSW = {L}'SysIPAddress32'; + WC_IPADDRESSA = 'SysIPAddress32'; + +{$IFDEF UNICODE} + +TYPE + WC_IPADDRESS = WC_IPADDRESSW; +{$ELSE} + WC_IPADDRESS = WC_IPADDRESSA; +{$ENDIF} + + +CONST + IPN_FIELDCHANGED = (IPN_FIRST - 0); +TYPE + + tagNMIPADDRESS = Record + hdr : NMHDR; + iField : cint; + iValue : cint; + END; + NMIPADDRESS = tagNMIPADDRESS; + LPNMIPADDRESS = ^tagNMIPADDRESS; + TNMIPADDRESS = tagNMIPADDRESS; + PNMIPADDRESS = ^tagNMIPADDRESS; + + +// The following is a useful macro for passing the range values in the +// IPM_SETRANGE message. + +// Macro 286 + +// #define MAKEIPRANGE(low, high) ((LPARAM)(WORD)(((BYTE)(high) << 8) + (BYTE)(low))) + +// And this is a useful macro for making the IP Address to be passed +// as a LPARAM. + +// Macro 287 + +// #define MAKEIPADDRESS(b1,b2,b3,b4) ((LPARAM)(((DWORD)(b1)<<24)+((DWORD)(b2)<<16)+((DWORD)(b3)<<8)+((DWORD)(b4)))) + +// Get individual number +// Macro 288 + +// #define FIRST_IPADDRESS(x) ((x>>24) & 0xff) +// Macro 289 + +// #define SECOND_IPADDRESS(x) ((x>>16) & 0xff) +// Macro 290 + +// #define THIRD_IPADDRESS(x) ((x>>8) & 0xff) +// Macro 291 + +// #define FOURTH_IPADDRESS(x) (x & 0xff) + + +{$ENDIF} // NOIPADDRESS + + +//--------------------------------------------------------------------------------------- +//--------------------------------------------------------------------------------------- +/// ====================== Pager Control ============================= +//--------------------------------------------------------------------------------------- +//--------------------------------------------------------------------------------------- + +{$IFNDEF NOPAGESCROLLER} + +//Pager Class Name + +CONST + WC_PAGESCROLLERW = {L}'SysPager'; + WC_PAGESCROLLERA = 'SysPager'; + +{$IFDEF UNICODE} + +TYPE + WC_PAGESCROLLER = WC_PAGESCROLLERW; +{$ELSE} + WC_PAGESCROLLER = WC_PAGESCROLLERA; +{$ENDIF} + + +//--------------------------------------------------------------------------------------- +// Pager Control Styles +//--------------------------------------------------------------------------------------- +// begin_r_commctrl + + +CONST + PGS_VERT = $00000000; + PGS_HORZ = $00000001; + PGS_AUTOSCROLL = $00000002; + PGS_DRAGNDROP = $00000004; + +// end_r_commctrl + + +//--------------------------------------------------------------------------------------- +// Pager Button State +//--------------------------------------------------------------------------------------- +//The scroll can be in one of the following control State + PGF_INVISIBLE = 0; // Scroll button is not visible + PGF_NORMAL = 1; // Scroll button is in normal state + PGF_GRAYED = 2; // Scroll button is in grayed state + PGF_DEPRESSED = 4; // Scroll button is in depressed state + PGF_HOT = 8; // Scroll button is in hot state + + +// The following identifiers specifies the button control + PGB_TOPORLEFT = 0; + PGB_BOTTOMORRIGHT = 1; + +//--------------------------------------------------------------------------------------- +// Pager Control Messages +//--------------------------------------------------------------------------------------- + PGM_SETCHILD = (PGM_FIRST + 1); // lParam == hwnd +// Macro 292 + + +Procedure Pager_SetChild( hwnd : hwnd; hwndChild : LPARAM); + + + +CONST + PGM_RECALCSIZE = (PGM_FIRST + 2); +// Macro 293 + + +Procedure Pager_RecalcSize( hwnd : hwnd); + + + +CONST + PGM_FORWARDMOUSE = (PGM_FIRST + 3); +// Macro 294 + + +Procedure Pager_ForwardMouse( hwnd : hwnd; bForward : WPARAM); + + + +CONST + PGM_SETBKCOLOR = (PGM_FIRST + 4); +// Macro 295 + + +Function Pager_SetBkColor( hwnd : hwnd; clr : LPARAM):COLORREF; + + + +CONST + PGM_GETBKCOLOR = (PGM_FIRST + 5); +// Macro 296 + + +Function Pager_GetBkColor( hwnd : hwnd):COLORREF; + + + +CONST + PGM_SETBORDER = (PGM_FIRST + 6); +// Macro 297 + + +Function Pager_SetBorder( hwnd : hwnd; iBorder : LPARAM):cint; + + + +CONST + PGM_GETBORDER = (PGM_FIRST + 7); +// Macro 298 + + +Function Pager_GetBorder( hwnd : hwnd):cint; + + + +CONST + PGM_SETPOS = (PGM_FIRST + 8); +// Macro 299 + + +Function Pager_SetPos( hwnd : hwnd; iPos : LPARAM):cint; + + + +CONST + PGM_GETPOS = (PGM_FIRST + 9); +// Macro 300 + + +Function Pager_GetPos( hwnd : hwnd):cint; + + + +CONST + PGM_SETBUTTONSIZE = (PGM_FIRST + 10); +// Macro 301 + + +Function Pager_SetButtonSize( hwnd : hwnd; iSize : LPARAM):cint; + + + +CONST + PGM_GETBUTTONSIZE = (PGM_FIRST + 11); +// Macro 302 + + +Function Pager_GetButtonSize( hwnd : hwnd):cint; + + + +CONST + PGM_GETBUTTONSTATE = (PGM_FIRST + 12); +// Macro 303 + + +Function Pager_GetButtonState( hwnd : hwnd; iButton : LPARAM):DWORD; + + + +CONST + PGM_GETDROPTARGET = CCM_GETDROPTARGET; +// Macro 304 + + +Procedure Pager_GetDropTarget( hwnd : hwnd; ppdt : LPARAM); + +//--------------------------------------------------------------------------------------- +//Pager Control Notification Messages +//--------------------------------------------------------------------------------------- + + +// PGN_SCROLL Notification Message + + +CONST + PGN_SCROLL = (PGN_FIRST-1); + + PGF_SCROLLUP = 1; + PGF_SCROLLDOWN = 2; + PGF_SCROLLLEFT = 4; + PGF_SCROLLRIGHT = 8; + + +//Keys down + PGK_SHIFT = 1; + PGK_CONTROL = 2; + PGK_MENU = 4; + + +{$IFDEF _WIN32} +// #include <pshpack1.h> +{$ENDIF} + +// This structure is sent along with PGN_SCROLL notifications +TYPE + + DummyStruct17 = Record + hdr : NMHDR; + fwKeys : WORD; // Specifies which keys are down when this notification is send + rcParent : RECT; // Contains Parent Window Rect + iDir : cint; // Scrolling Direction + iXpos : cint; // Horizontal scroll position + iYpos : cint; // Vertical scroll position + iScroll : cint; // [in/out] Amount to scroll + END; + NMPGSCROLL = DummyStruct17; + LPNMPGSCROLL = ^DummyStruct17; + TNMPGScroll = NMPGSCROLL; + PNMPGScroll = LPNMPGSCROLL; + + +{$IFDEF _WIN32} +// #include <poppack.h> +{$ENDIF} + +// PGN_CALCSIZE Notification Message + + +CONST + PGN_CALCSIZE = (PGN_FIRST-2); + + PGF_CALCWIDTH = 1; + PGF_CALCHEIGHT = 2; + +TYPE + + DummyStruct18 = Record + hdr : NMHDR; + dwFlag : DWORD; + iWidth : cint; + iHeight : cint; + END; + NMPGCALCSIZE = DummyStruct18; + LPNMPGCALCSIZE = ^DummyStruct18; + TNMPGCalcSize = DummyStruct18; + PNMPGCalcSize = LPNMPGCALCSIZE; + + + +// PGN_HOTITEMCHANGE Notification Message + + +CONST + PGN_HOTITEMCHANGE = (PGN_FIRST-3); + +{ +The PGN_HOTITEMCHANGE notification uses these notification +flags defined in TOOLBAR: + + HICF_ENTERING = $00000010; // idOld is invalid + HICF_LEAVING = $00000020; // idNew is invalid +} + +// Structure for PGN_HOTITEMCHANGE notification +// +TYPE + + tagNMPGHOTITEM = Record + hdr : NMHDR; + idOld : cint; + idNew : cint; + dwFlags : DWORD; // HICF_* + END; + NMPGHOTITEM = tagNMPGHOTITEM; + LPNMPGHOTITEM = ^tagNMPGHOTITEM; + TNMPGHOTITEM = tagNMPGHOTITEM; + PNMPGHOTITEM = ^tagNMPGHOTITEM; + + +{$ENDIF} // NOPAGESCROLLER + +////====================== End Pager Control ========================================== + +// +// === Native Font Control === +// +{$IFNDEF NONATIVEFONTCTL} +//NativeFont Class Name + +CONST + WC_NATIVEFONTCTLW = {L}'NativeFontCtl'; + WC_NATIVEFONTCTLA = 'NativeFontCtl'; + +{$IFDEF UNICODE} + +TYPE + WC_NATIVEFONTCTL = WC_NATIVEFONTCTLW; +{$ELSE} + WC_NATIVEFONTCTL = WC_NATIVEFONTCTLA; +{$ENDIF} + +// begin_r_commctrl + +// style definition + +CONST + NFS_EDIT = $0001; + NFS_STATIC = $0002; + NFS_LISTCOMBO = $0004; + NFS_BUTTON = $0008; + NFS_ALL = $0010; + NFS_USEFONTASSOC = $0020; + +// end_r_commctrl + +{$ENDIF} // NONATIVEFONTCTL +// === End Native Font Control === + +/// ====================== Button Control ============================= + +{$IFNDEF NOBUTTON} + +{$IFDEF _WIN32} + +// Button Class Name + WC_BUTTONA = 'Button'; + WC_BUTTONW = {L}'Button'; + +CONST +{$IFDEF UNICODE} + WC_BUTTON = WC_BUTTONW; +{$ELSE} + WC_BUTTON = WC_BUTTONA; +{$ENDIF} + +{$ELSE} + + WC_BUTTON = 'Button'; +{$ENDIF} + +{$ifdef win32xp} + BUTTON_IMAGELIST_ALIGN_LEFT = 0; + BUTTON_IMAGELIST_ALIGN_RIGHT = 1; + BUTTON_IMAGELIST_ALIGN_TOP = 2; + BUTTON_IMAGELIST_ALIGN_BOTTOM = 3; + BUTTON_IMAGELIST_ALIGN_CENTER = 4; // Doesn't draw text + +TYPE + + DummyStruct19 = Record + himl : HIMAGELIST; // Index: Normal, hot pushed, disabled. If count is less than 4, we use index 1 + margin : RECT; // Margin around icon. + uAlign : UINT; + END; + BUTTON_IMAGELIST = DummyStruct19; + PBUTTON_IMAGELIST = ^DummyStruct19; + TDummyStruct19 = DummyStruct19; + PDummyStruct19 = ^DummyStruct19; + + + +CONST + BCM_GETIDEALSIZE = (BCM_FIRST + $0001); +// Macro 305 + + +Function Button_GetIdealSize( hwnd : hwnd; psize : LPARAM):BOOL; + + + +CONST + BCM_SETIMAGELIST = (BCM_FIRST + $0002); +// Macro 306 + + +Function Button_SetImageList( hwnd : hwnd; pbuttonImagelist : LPARAM):BOOL; + + + +CONST + BCM_GETIMAGELIST = (BCM_FIRST + $0003); +// Macro 307 + + +Function Button_GetImageList( hwnd : hwnd; pbuttonImagelist : LPARAM):BOOL; + + + +CONST + BCM_SETTEXTMARGIN = (BCM_FIRST + $0004); +// Macro 308 + + +Function Button_SetTextMargin( hwnd : hwnd; pmargin : LPARAM):BOOL; + + +CONST + BCM_GETTEXTMARGIN = (BCM_FIRST + $0005); +// Macro 309 + + +Function Button_GetTextMargin( hwnd : hwnd; pmargin : LPARAM):BOOL; + + +TYPE + + tagNMBCHOTITEM = Record + hdr : NMHDR; + dwFlags : DWORD; // HICF_* + END; + NMBCHOTITEM = tagNMBCHOTITEM; + LPNMBCHOTITEM = ^tagNMBCHOTITEM; + TNMBCHOTITEM = tagNMBCHOTITEM; + PNMBCHOTITEM = ^tagNMBCHOTITEM; + + + +CONST + BCN_HOTITEMCHANGE = (BCN_FIRST + $0001); + + BST_HOT = $0200; +{$ifdef win32vista} + BST_DROPDOWNPUSHED = $0400; + +// BUTTON STYLES + BS_SPLITBUTTON = $00000000C; // This block L suffixed (unsigned) + BS_DEFSPLITBUTTON = $00000000D; + BS_COMMANDLINK = $00000000E; + BS_DEFCOMMANDLINK = $00000000F; + +// SPLIT BUTTON INFO mask flags + BCSIF_GLYPH = $00001; + BCSIF_IMAGE = $00002; + BCSIF_STYLE = $00004; + BCSIF_SIZE = $00008; + +// SPLIT BUTTON STYLE flags + BCSS_NOSPLIT = $00001; + BCSS_STRETCH = $00002; + BCSS_ALIGNLEFT = $00004; + BCSS_IMAGE = $00008; + + BCM_SETDROPDOWNSTATE = (BCM_FIRST + $0006); + BCM_SETSPLITINFO = (BCM_FIRST + $0007); + BCM_GETSPLITINFO = (BCM_FIRST + $0008); + BCM_SETNOTE = (BCM_FIRST + $0009); + BCM_GETNOTE = (BCM_FIRST + $000A); + BCM_GETNOTELENGTH = (BCM_FIRST + $000B); + BCM_SETSHIELD = (BCM_FIRST + $000C); + + +// Value to pass to BCM_SETIMAGELIST to indicate that no glyph should be +// displayed + BCCL_NOGLYPH = HIMAGELIST(-1); + + BCN_DROPDOWN = (BCN_FIRST + $0002); +Type + + tagBUTTON_SPLITINFO = record + mask : UINT; + himlGlyph : HIMAGELIST; + uSplitStyle : UINT; + size : SIZE; + end; + BUTTON_SPLITINFO = tagBUTTON_SPLITINFO; + PBUTTON_SPLITINFO = ^BUTTON_SPLITINFO; + LPBUTTON_SPLITINFO = PBUTTON_SPLITINFO; + + { NOTIFICATION MESSAGES } + + tagNMBCDROPDOWN = packed record + hdr : NMHDR; + rcButton : RECT; + end; + NMBCDROPDOWN = tagNMBCDROPDOWN; + PNMBCDROPDOWN = ^NMBCDROPDOWN; + LPNMBCDROPDOWN = PNMBCDROPDOWN; + +// BUTTON MESSAGES + +function Button_SetDropDownState(hwnd:HWND; fDropDown:BOOL) : BOOL; +// (BOOL)SNDMSG((hwnd), BCM_SETDROPDOWNSTATE, (WPARAM)(fDropDown), 0) + +function Button_SetSplitInfo(hwnd:HWND; pInfo:PBUTTON_SPLITINFO):BOOL; +// (BOOL)SNDMSG((hwnd), BCM_SETSPLITINFO, 0, (LPARAM)(pInfo)) + +function Button_GetSplitInfo(hwnd:HWND; pInfo:PBUTTON_SPLITINFO) :BOOL; +// (BOOL)SNDMSG((hwnd), BCM_GETSPLITINFO, 0, (LPARAM)(pInfo)) + +function Button_SetNote(hwnd:HWND; psz:LPCWSTR) :BOOL; +// (BOOL)SNDMSG((hwnd), BCM_SETNOTE, 0, (LPARAM)(psz)) + +function Button_GetNote(hwnd:HWND; psz:LPCWSTR; pcc:cint) :BOOL; +// (BOOL)SNDMSG((hwnd), BCM_GETNOTE, (WPARAM)pcc, (LPARAM)psz) + +function Button_GetNoteLength(hwnd:HWND) :LRESULT; +// (LRESULT)SNDMSG((hwnd), BCM_GETNOTELENGTH, 0, 0) + +// Macro to use on a button or command link to display an elevated icon + +function Button_SetElevationRequiredState(hwnd:HWND; fRequired:BOOL) :LRESULT; +// (LRESULT)SNDMSG((hwnd), BCM_SETSHIELD, 0, (LPARAM)fRequired) + +{$endif} +{$ENDIF} +{$ENDIF} // NOBUTTON + + +/// ===================== End Button Control ========================= + +/// ====================== Static Control ============================= + +{$IFNDEF NOSTATIC} + +const +{$IFDEF _WIN32} + +// Static Class Name + WC_STATICA = 'Static'; + WC_STATICW = {L}'Static'; + +{$IFDEF UNICODE} + +TYPE + WC_STATIC = WC_STATICW; +{$ELSE} + WC_STATIC = WC_STATICA; +{$ENDIF} + +{$ELSE} + +CONST + WC_STATIC = 'Static'; +{$ENDIF} + +{$ENDIF} // NOSTATIC + +/// ===================== End Static Control ========================= + +/// ====================== Edit Control ============================= + +{$IFNDEF NOEDIT} + +{$IFDEF _WIN32} + +// Edit Class Name + WC_EDITA = 'Edit'; + WC_EDITW = {L}'Edit'; + +{$IFDEF UNICODE} + +TYPE + WC_EDIT = WC_EDITW; +{$ELSE} + WC_EDIT = WC_EDITA; +{$ENDIF} + +{$ELSE} + +CONST + WC_EDIT = 'Edit'; +{$ENDIF} + +{$ifdef win32xp} + EM_SETCUEBANNER = (ECM_FIRST + 1); // Set the cue banner with the lParm = LPCWSTR +// Macro 310 + + +Function Edit_SetCueBannerText( hwnd : hwnd; lpcwText : LPARAM):BOOL; + + +CONST + EM_GETCUEBANNER = (ECM_FIRST + 2); // Set the cue banner with the lParm = LPCWSTR +// Macro 311 + + +Function Edit_GetCueBannerText( hwnd : hwnd; lpwText : WPARAM; cchText : LPARAM):BOOL; + + +TYPE + + _tagEDITBALLOONTIP = Record + cbStruct : DWORD; + pszTitle : LPCWSTR; + pszText : LPCWSTR; + ttiIcon : cint; // From TTI_* + END; + EDITBALLOONTIP = _tagEDITBALLOONTIP; + PEDITBALLOONTIP = ^_tagEDITBALLOONTIP; + TEDITBALLOONTIP = _tagEDITBALLOONTIP; + + + +CONST + EM_SHOWBALLOONTIP = (ECM_FIRST + 3); // Show a balloon tip associated to the edit control +// Macro 312 + + +Function Edit_ShowBalloonTip( hwnd : hwnd; peditballoontip : LPARAM):BOOL; + + +CONST + EM_HIDEBALLOONTIP = (ECM_FIRST + 4); // Hide any balloon tip associated with the edit control +// Macro 313 + + +Function Edit_HideBalloonTip( hwnd : hwnd):BOOL; + +{$ifdef win32vista} +const + EM_SETHILITE = (ECM_FIRST + 5); + EM_GETHILITE = (ECM_FIRST + 6); + +// both are "unimplemented" in MSDN, so probably typing is off. +procedure Edit_SetHilite(hwndCtl:hwnd; ichStart:Wparam; ichEnd:lparam); +// ((void)SNDMSG((hwndCtl), EM_SETHILITE, (ichStart), (ichEnd))) + +function Edit_GetHilite(hwndCtl:hwnd):DWORD; +// ((DWORD)SNDMSG((hwndCtl), EM_GETHILITE, 0L, 0L)) +{$endif} + +{$ENDIF} + +{$ENDIF} // NOEDIT + +/// ===================== End Edit Control ========================= + +/// ====================== Listbox Control ============================= + +{$IFNDEF NOLISTBOX} + +{$IFDEF _WIN32} + +// Listbox Class Name + +CONST + WC_LISTBOXA = 'ListBox'; + WC_LISTBOXW = {L}'ListBox'; + +{$IFDEF UNICODE} + +TYPE + WC_LISTBOX = WC_LISTBOXW; +{$ELSE} + WC_LISTBOX = WC_LISTBOXA; +{$ENDIF} + +{$ELSE} + +CONST + WC_LISTBOX = 'ListBox'; +{$ENDIF} + +{$ENDIF} // NOLISTBOX + + +/// ===================== End Listbox Control ========================= + +/// ====================== Combobox Control ============================= + +{$IFNDEF NOCOMBOBOX} + +{$IFDEF _WIN32} + +// Combobox Class Name + WC_COMBOBOXA = 'ComboBox'; + WC_COMBOBOXW = {L}'ComboBox'; + +{$IFDEF UNICODE} + +TYPE + WC_COMBOBOX = WC_COMBOBOXW; +{$ELSE} + WC_COMBOBOX = WC_COMBOBOXA; +{$ENDIF} + +{$ELSE} + +CONST + WC_COMBOBOX = 'ComboBox'; +{$ENDIF} + +{$ENDIF} // NOCOMBOBOX + + +{$ifdef win32xp} + +// custom combobox control messages + CB_SETMINVISIBLE = (CBM_FIRST + 1); + CB_GETMINVISIBLE = (CBM_FIRST + 2); + +// Macro 314 + + +Function ComboBox_SetMinVisible( hwnd : hwnd; iMinVisible : WPARAM):BOOL; + + +// Macro 315 + + +Function ComboBox_GetMinVisible( hwnd : hwnd):cint; + + +{$ENDIF} + +/// ===================== End Combobox Control ========================= + +/// ====================== Scrollbar Control ============================ + +{$IFNDEF NOSCROLLBAR} + +{$IFDEF _WIN32} + +// Scrollbar Class Name + +CONST + WC_SCROLLBARA = 'ScrollBar'; + WC_SCROLLBARW = {L}'ScrollBar'; + +{$IFDEF UNICODE} + +TYPE + WC_SCROLLBAR = WC_SCROLLBARW; +{$ELSE} + WC_SCROLLBAR = WC_SCROLLBARA; +{$ENDIF} + +{$ELSE} + +CONST + WC_SCROLLBAR = 'ScrollBar'; +{$ENDIF} + +{$ENDIF} // NOSCROLLBAR + + +/// ===================== End Scrollbar Control ========================= + + +//====== SysLink control ========================================= + +{$IFDEF _WIN32} +{$ifdef win32xp} + + INVALID_LINK_INDEX = (-1); + + + + WC_LINK = {L}'SysLink'; + + LWS_TRANSPARENT = $0001; + LWS_IGNORERETURN = $0002; + +{$ifdef win32vista} + LWS_NOPREFIX = $0004; + LWS_USEVISUALSTYLE = $0008; + LWS_USECUSTOMTEXT = $0010; + LWS_RIGHT = $0020; +{$endif} + + LIF_ITEMINDEX = $00000001; + LIF_STATE = $00000002; + LIF_ITEMID = $00000004; + LIF_URL = $00000008; + + LIS_FOCUSED = $00000001; + LIS_ENABLED = $00000002; + LIS_VISITED = $00000004; +{$ifdef win32vista} + LIS_HOTTRACK = $00000008; + LIS_DEFAULTCOLORS = $00000010; // Don't use any custom text colors +{$endif} + +TYPE + + + tagLHITTESTINFO = Record + pt : POINT; + item : LITEM; + END; + LHITTESTINFO = tagLHITTESTINFO; + PLHITTESTINFO = ^tagLHITTESTINFO; + TLHITTESTINFO = tagLHITTESTINFO; +// PLHITTESTINFO = ^tagLHITTESTINFO; + + + tagNMLINK = Record + hdr : NMHDR; + item : LITEM; + END; + NMLINK = tagNMLINK; + PNMLINK = ^tagNMLINK; + TNMLINK = tagNMLINK; +// PNMLINK = ^tagNMLINK; + + +// SysLink notifications +// NM_CLICK // wParam: control ID, lParam: PNMLINK, ret: ignored. + +// LinkWindow messages + +CONST + LM_HITTEST = (WM_USER+$300); // wParam: n/a, lparam: PLHITTESTINFO, ret: BOOL + LM_GETIDEALHEIGHT = (WM_USER+$301); // wParam: n/a, lparam: n/a, ret: cy + LM_SETITEM = (WM_USER+$302); // wParam: n/a, lparam: LITEM*, ret: BOOL + LM_GETITEM = (WM_USER+$303); // wParam: n/a, lparam: LITEM*, ret: BOOL + +{$ENDIF} +{$ENDIF} // _WIN32 +//====== End SysLink control ========================================= + + +// +// === MUI APIs === +// +{$IFNDEF NOMUI} +procedure InitMUILanguage(uiLang:LANGID); stdcall; external commctrldll name 'InitMUILanguage'; + + +function GetMUILanguage:LANGID; stdcall; external commctrldll name 'GetMUILanguage'; +{$ENDIF} // NOMUI + +{$ENDIF} // _WIN32_IE >= 0x0400 + +{$IFDEF _WIN32} +//====== TrackMouseEvent ===================================================== + +{$IFNDEF NOTRACKMOUSEEVENT} + +// +// If the messages for TrackMouseEvent have not been defined then define them +// now. +// +{$IFNDEF WM_MOUSEHOVER} + +CONST + WM_MOUSEHOVER = $02A1; + WM_MOUSELEAVE = $02A3; +{$ENDIF} + +// +// If the TRACKMOUSEEVENT structure and associated flags havent been declared +// then declare them now. +// +{$IFNDEF TME_HOVER} + + TME_HOVER = $00000001; + TME_LEAVE = $00000002; +{$ifdef win32xp} + TME_NONCLIENT = $00000010; +{$ENDIF} { WINVER >= 0x0500 } + TME_QUERY = $40000000; + TME_CANCEL = $80000000; + + + + HOVER_DEFAULT = $FFFFFFFF; + +TYPE + + tagTRACKMOUSEEVENT = Record + cbSize : DWORD; + dwFlags : DWORD; + hwndTrack : HWND; + dwHoverTime : DWORD; + END; + TRACKMOUSEEVENT = tagTRACKMOUSEEVENT; + LPTRACKMOUSEEVENT = ^tagTRACKMOUSEEVENT; + TTRACKMOUSEEVENT = tagTRACKMOUSEEVENT; + PTRACKMOUSEEVENT = ^tagTRACKMOUSEEVENT; + + +{$ENDIF} // !TME_HOVER + + + +// +// Declare _TrackMouseEvent. This API tries to use the window manager's +// implementation of TrackMouseEvent if it is present, otherwise it emulates. +// +function _TrackMouseEvent(lpEventTrack:LPTRACKMOUSEEVENT):BOOL; stdcall; external commctrldll name '_TrackMouseEvent'; + +{$ENDIF} // !NOTRACKMOUSEEVENT + +{$ifdef ie4plus} + +//====== Flat Scrollbar APIs========================================= +{$IFNDEF NOFLATSBAPIS} + + +CONST + WSB_PROP_CYVSCROLL = LONG($00000001); + WSB_PROP_CXHSCROLL = LONG($00000002); + WSB_PROP_CYHSCROLL = LONG($00000004); + WSB_PROP_CXVSCROLL = LONG($00000008); + WSB_PROP_CXHTHUMB = LONG($00000010); + WSB_PROP_CYVTHUMB = LONG($00000020); + WSB_PROP_VBKGCOLOR = LONG($00000040); + WSB_PROP_HBKGCOLOR = LONG($00000080); + WSB_PROP_VSTYLE = LONG($00000100); + WSB_PROP_HSTYLE = LONG($00000200); + WSB_PROP_WINSTYLE = LONG($00000400); + WSB_PROP_PALETTE = LONG($00000800); + WSB_PROP_MASK = LONG($00000FFF); + + FSB_FLAT_MODE = 2; + FSB_ENCARTA_MODE = 1; + FSB_REGULAR_MODE = 0; + +function FlatSB_EnableScrollBar(hwnd:HWND;code : cint;p3 : UINT):BOOL; stdcall; external commctrldll name 'FlatSB_EnableScrollBar'; +function FlatSB_ShowScrollBar(hwnd:HWND;code : cint;p3 : BOOL):BOOL; stdcall; external commctrldll name 'FlatSB_ShowScrollBar'; + +function FlatSB_GetScrollRange(hwnd:HWND;code : cint;p3 : LPINT;p4 : LPINT):BOOL; stdcall; external commctrldll name 'FlatSB_GetScrollRange'; +function FlatSB_GetScrollRange(hwnd:HWND;code : cint;var p3,p4 : cint):BOOL; stdcall; external commctrldll name 'FlatSB_GetScrollRange'; +function FlatSB_GetScrollInfo(hwnd:HWND;code : cint;ScrollInfo : LPSCROLLINFO):BOOL; stdcall; external commctrldll name 'FlatSB_GetScrollInfo'; +function FlatSB_GetScrollInfo(hwnd:HWND;code : cint;var ScrollInfo : TSCROLLINFO):BOOL; stdcall; external commctrldll name 'FlatSB_GetScrollInfo'; + +function FlatSB_GetScrollPos(hwnd:HWND;code : cint):cint; stdcall; external commctrldll name 'FlatSB_GetScrollPos'; + + +function FlatSB_GetScrollProp(hwnd:HWND):BOOL; stdcall; external commctrldll name 'FlatSB_GetScrollProp'; +{$IFDEF _WIN64} +function FlatSB_GetScrollPropPtr(hwnd:HWND;propIndex : cint;p3 : LPINT):BOOL; stdcall; external commctrldll name 'FlatSB_GetScrollPropPtr'; +{$ELSE} +function FlatSB_GetScrollPropPtr(hwnd:HWND;code : cint):BOOL; stdcall; external commctrldll name 'FlatSB_GetScrollProp'; +{$ENDIF} + + +function FlatSB_SetScrollPos(hWnd:HWND;nBar,nPos:cint;bRedraw:BOOL):cint; stdcall; external commctrldll name 'FlatSB_SetScrollPos'; + +function FlatSB_SetScrollInfo(hWnd:HWND;BarFlag:cint;const ScrollInfo:TScrollInfo;Redraw:BOOL):cint; stdcall; external commctrldll name 'FlatSB_SetScrollInfo'; + + +function FlatSB_SetScrollRange(hWnd: HWND; nBar,nMinPos,nMaxPos: cint; bRedraw: BOOL):cint; stdcall; external commctrldll name 'FlatSB_SetScrollRange'; +function FlatSB_SetScrollProp(p1: HWND; index : UINT; newValue: INT_PTR; p4: BOOL):BOOL; stdcall; external commctrldll name 'FlatSB_SetScrollProp'; + +function InitializeFlatSB(hWnd:HWND):BOOL; stdcall; external commctrldll name 'InitializeFlatSB'; +function UninitializeFlatSB(hWnd:HWND):HRESULT; stdcall; external commctrldll name 'UninitializeFlatSB'; + +{$ENDIF} // NOFLATSBAPIS + +{$ENDIF} // _WIN32_IE >= 0x0400 + +{$ENDIF} { _WIN32 } + +{$ENDIF} // _WIN32_IE >= 0x0300 + +{$ifdef win32xp} +// +// subclassing stuff +// +TYPE + subclassproc=function (hwnd:HWND;uMsg:cUINT; wParam:WPARAM;lparam:LPARAM;uISubClass : UINT_PTR;dwRefData:DWORD_PTR):LRESULT; stdcall; + +{ + (CALLBACK *SUBCLASSPROC)(HWND hWnd, UINT uMsg, WPARAM wParam, = LRESULT + LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData); + +typedef LRESULT (CALLBACK *SUBCLASSPROC)(HWND hWnd, UINT uMsg, WPARAM wParam, + LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData); + + hwnd:HWND;uMsg:cUINT; wParam:WPARAM;lparam:LPARAM;uISubClass : CUINT_PTR;dwRefData:DWORD_PTR):LRESULT; stdcall; +} + +function SetWindowSubclass(hWnd:HWND;pfnSubclass:SUBCLASSPROC;uIdSubclass:UINT_PTR;dwRefData:DWORD_PTR):BOOL; stdcall; external commctrldll name 'SetWindowSubclass'; +function GetWindowSubclass(hWnd:HWND;pfnSubclass:SUBCLASSPROC;uIdSubclass:UINT_PTR;pdwRefData:PDWORD_PTR):BOOL; stdcall; external commctrldll name 'GetWindowSubclass'; +function RemoveWindowSubclass(hWnd:HWND;pfnSubclass:SUBCLASSPROC;uIdSubclass:UINT_PTR):BOOL; stdcall; external commctrldll name 'RemoveWindowSubclass'; + +function DefSubclassProc(hWnd:HWND;uMsg:UINT;wParam:WPARAM;lParam:LPARAM):LRESULT; stdcall; external commctrldll name 'DefSubclassProc'; +{$ENDIF} + +{$ifdef NTDDI_VISTA} +type _LI_METRIC= ( + + LIM_SMALL=0, // corresponds to SM_CXSMICON/SM_CYSMICON + LIM_LARGE // corresponds to SM_CXICON/SM_CYICON + ); + +Function LoadIconMetric( hinst:HINST; pszName:LPCWStr;lims:cint; var phico: HICON ):HRESULT; stdcall; external commctrldll name 'LoadIconMetric'; +Function LoadIconWithScaleDown( hinst:HINST; pszName:LPCWStr;cx:cint;cy:cint;var phico: HICON ):HRESULT; stdcall; external commctrldll name 'LoadIconMetric'; + +{$endif} + +{$ifdef win32xp} + +function DrawShadowText(hdc:HDC;pszText:LPCWSTR;cch:UINT;prc:PRECT;dwFlags:DWORD;crText:COLORREF;crShadow:COLORREF;ixOffset:cint;iyOffset:cint):cint; stdcall; external commctrldll name 'DrawShadowText'; +{$ENDIF} + +// ===================== Task Dialog ========================= + +Type + PFTASKDIALOGCALLBACK = function(hwnd: HWND; msg: UINT; wParam: WPARAM; lParam: LPARAM; lpRefData: LONG_PTR): HRESULT; stdcall; + + // _TASKDIALOG_FLAGS enum +const + TDF_ENABLE_HYPERLINKS = $0001; + TDF_USE_HICON_MAIN = $0002; + TDF_USE_HICON_FOOTER = $0004; + TDF_ALLOW_DIALOG_CANCELLATION = $0008; + TDF_USE_COMMAND_LINKS = $0010; + TDF_USE_COMMAND_LINKS_NO_ICON = $0020; + TDF_EXPAND_FOOTER_AREA = $0040; + TDF_EXPANDED_BY_DEFAULT = $0080; + TDF_VERIFICATION_FLAG_CHECKED = $0100; + TDF_SHOW_PROGRESS_BAR = $0200; + TDF_SHOW_MARQUEE_PROGRESS_BAR = $0400; + TDF_CALLBACK_TIMER = $0800; + TDF_POSITION_RELATIVE_TO_WINDOW = $1000; + TDF_RTL_LAYOUT = $2000; + TDF_NO_DEFAULT_RADIO_BUTTON = $4000; + TDF_CAN_BE_MINIMIZED = $8000; + +type + TASKDIALOG_FLAGS = Integer; // Note: _TASKDIALOG_FLAGS is an int + + // _TASKDIALOG_MESSAGES enum +const + TDM_NAVIGATE_PAGE = WM_USER+101; + TDM_CLICK_BUTTON = WM_USER+102; // wParam = Button ID + TDM_SET_MARQUEE_PROGRESS_BAR = WM_USER+103; // wParam = 0 (nonMarque) wParam != 0 (Marquee) + TDM_SET_PROGRESS_BAR_STATE = WM_USER+104; // wParam = new progress state + TDM_SET_PROGRESS_BAR_RANGE = WM_USER+105; // lParam = MAKELPARAM(nMinRange, nMaxRange) + TDM_SET_PROGRESS_BAR_POS = WM_USER+106; // wParam = new position + TDM_SET_PROGRESS_BAR_MARQUEE = WM_USER+107; // wParam = 0 (stop marquee), wParam != 0 (start marquee), lparam = speed (milliseconds between repaints) + TDM_SET_ELEMENT_TEXT = WM_USER+108; // wParam = element (TASKDIALOG_ELEMENTS), lParam = new element text (LPCWSTR) + TDM_CLICK_RADIO_BUTTON = WM_USER+110; // wParam = Radio Button ID + TDM_ENABLE_BUTTON = WM_USER+111; // lParam = 0 (disable), lParam != 0 (enable), wParam = Button ID + TDM_ENABLE_RADIO_BUTTON = WM_USER+112; // lParam = 0 (disable), lParam != 0 (enable), wParam = Radio Button ID + TDM_CLICK_VERIFICATION = WM_USER+113; // wParam = 0 (unchecked), 1 (checked), lParam = 1 (set key focus) + TDM_UPDATE_ELEMENT_TEXT = WM_USER+114; // wParam = element (TASKDIALOG_ELEMENTS), lParam = new element text (LPCWSTR) + TDM_SET_BUTTON_ELEVATION_REQUIRED_STATE = WM_USER+115; // wParam = Button ID, lParam = 0 (elevation not required), lParam != 0 (elevation required) + TDM_UPDATE_ICON = WM_USER+116; // wParam = icon element (TASKDIALOG_ICON_ELEMENTS), lParam = new icon (hIcon if TDF_USE_HICON_* was set, PCWSTR otherwise) + + // _TASKDIALOG_NOTIFICATIONS enum +const + TDN_CREATED = 0; + TDN_NAVIGATED = 1; + TDN_BUTTON_CLICKED = 2; // wParam = Button ID + TDN_HYPERLINK_CLICKED = 3; // lParam = (LPCWSTR)pszHREF + TDN_TIMER = 4; // wParam = Milliseconds since dialog created or timer reset + TDN_DESTROYED = 5; + TDN_RADIO_BUTTON_CLICKED = 6; // wParam = Radio Button ID + TDN_DIALOG_CONSTRUCTED = 7; + TDN_VERIFICATION_CLICKED = 8; // wParam = 1 if checkbox checked, 0 if not, lParam is unused and always 0 + TDN_HELP = 9; + TDN_EXPANDO_BUTTON_CLICKED = 10; // wParam = 0 (dialog is now collapsed), wParam != 0 (dialog is now expanded) + +type + _TASKDIALOG_BUTTON = packed record + nButtonID: Integer; + pszButtonText: PCWSTR; + end; + TASKDIALOG_BUTTON = _TASKDIALOG_BUTTON; + TTASKDIALOG_BUTTON = TASKDIALOG_BUTTON; + PTASKDIALOG_BUTTON = ^TASKDIALOG_BUTTON; + + // _TASKDIALOG_ELEMENTS enum +const + TDE_CONTENT = 0; + TDE_EXPANDED_INFORMATION = 1; + TDE_FOOTER = 2; + TDE_MAIN_INSTRUCTION = 3; + + // _TASKDIALOG_ICON_ELEMENTS enum + TDIE_ICON_MAIN = 0; + TDIE_ICON_FOOTER = 1; + + TD_WARNING_ICON = MAKEINTRESOURCEW(Word(-1)); + TD_ERROR_ICON = MAKEINTRESOURCEW(Word(-2)); + TD_INFORMATION_ICON = MAKEINTRESOURCEW(Word(-3)); + TD_SHIELD_ICON = MAKEINTRESOURCEW(Word(-4)); + TD_SHIELD_GRADIENT_ICON = MAKEINTRESOURCEW(Word(-5)); + TD_SHIELD_WARNING_ICON = MAKEINTRESOURCEW(Word(-6)); + TD_SHIELD_ERROR_ICON = MAKEINTRESOURCEW(Word(-7)); + TD_SHIELD_OK_ICON = MAKEINTRESOURCEW(Word(-8)); + TD_SHIELD_GRAY_ICON = MAKEINTRESOURCEW(Word(-9)); + + // _TASKDIALOG_COMMON_BUTTON_FLAGS enum + TDCBF_OK_BUTTON = $0001; // selected control return value IDOK + TDCBF_YES_BUTTON = $0002; // selected control return value IDYES + TDCBF_NO_BUTTON = $0004; // selected control return value IDNO + TDCBF_CANCEL_BUTTON = $0008; // selected control return value IDCANCEL + TDCBF_RETRY_BUTTON = $0010; // selected control return value IDRETRY + TDCBF_CLOSE_BUTTON = $0020; // selected control return value IDCLOSE + +type + TASKDIALOG_COMMON_BUTTON_FLAGS = Integer; // Note: _TASKDIALOG_COMMON_BUTTON_FLAGS is an int + + _TASKDIALOGCONFIG = packed record + cbSize: UINT; + hwndParent: HWND; + hInstance: HINST; // used for MAKEINTRESOURCE() strings + dwFlags: TASKDIALOG_FLAGS; // TASKDIALOG_FLAGS (TDF_XXX) flags + dwCommonButtons: TASKDIALOG_COMMON_BUTTON_FLAGS; // TASKDIALOG_COMMON_BUTTON (TDCBF_XXX) flags + pszWindowTitle: PCWSTR; // string or MAKEINTRESOURCE() + case PtrInt of + 0: (hMainIcon: HICON); + 1: ( + pszMainIcon: PCWSTR; + pszMainInstruction: PCWSTR; + pszContent: PCWSTR; + cButtons: UINT; + pButtons: PTASKDIALOG_BUTTON; + nDefaultButton: Integer; + cRadioButtons: UINT; + pRadioButtons: PTASKDIALOG_BUTTON; + nDefaultRadioButton: Integer; + pszVerificationText: PCWSTR; + pszExpandedInformation: PCWSTR; + pszExpandedControlText: PCWSTR; + pszCollapsedControlText: PCWSTR; + case PtrInt of + 0: (hFooterIcon: HICON); + 1: ( + pszFooterIcon: PCWSTR; + pszFooter: PCWSTR; + pfCallback: PFTASKDIALOGCALLBACK; + lpCallbackData: LONG_PTR; + cxWidth: UINT; // width of the Task Dialog's client area in DLU's. If 0, Task Dialog will calculate the ideal width. + ); + ); + end; + TASKDIALOGCONFIG = _TASKDIALOGCONFIG; + PTASKDIALOGCONFIG = ^TASKDIALOGCONFIG; + TTASKDIALOGCONFIG = TASKDIALOGCONFIG; + +var + TaskDialogIndirect: function(const pTaskConfig: PTASKDIALOGCONFIG; pnButton: PInteger; pnRadioButton: PInteger; pfVerificationFlagChecked: PBOOL): HRESULT; stdcall; + TaskDialog: function(hwndParent: HWND; hInstance: HINST; pszWindowTitle: PCWSTR; pszMainInstruction: PCWSTR; pszContent: PCWSTR; + dwCommonButtons: TASKDIALOG_COMMON_BUTTON_FLAGS; pszIcon: PCWSTR; pnButton: PInteger): HRESULT; stdcall; + + +// ==================== End TaskDialog ======================= + + +IMPLEMENTATION + +// Macro 8 + +//#define HANDLE_WM_NOTIFY(hwnd, wParam, lParam, fn) \ +// (fn)((hwnd), (int)(wParam), (NMHDR *)(lParam)) + +Procedure HANDLE_WM_NOTIFY( hwnd : hwnd; wParam : cint;var _lParam : NMHDR ;fn:Pointer); + +TYPE FnType=procedure ( hwnd : hwnd; wParam : cint;tst:LPARAM); stdcall; + +Begin + fnType(fn)(hwnd, wParam, LPARAM(@_lParam)); +end; + +// Macro 9 + +//#define FORWARD_WM_NOTIFY(hwnd, idFrom, pnmhdr, fn) \ +// (LRESULT)(fn)((hwnd), WM_NOTIFY, (WPARAM)(int)(idFrom), (LPARAM)(NMHDR *)(pnmhdr)) + +Function FORWARD_WM_NOTIFY( hwnd : hwnd; idFrom : cint;var pnmhdr : NMHDR ; fn : pointer ):LRESULT; + +TYPE FnType=Function( hwnd : hwnd; wParam : cint;wparam2:cint;lparam1:lparam):LResult; stdcall; + +Begin + Result:=LRESULT(fntype(fn)(hwnd, WM_NOTIFY, idFrom, LPARAM(@pnmhdr))); +end; + +// Macro 10 +// #define CCSIZEOF_STRUCT(structname, member) (((int)((LPBYTE)(&((structname*)0)->member) - ((LPBYTE)((structname*)0)))) + sizeof(((structname*)0)->member)) + + +// Macro 11 +// #define ImageList_AddIcon(himl, hicon) ImageList_ReplaceIcon(himl, -1, hicon) + +Function ImageList_AddIcon(Himl:HIMAGELIST;hicon:HICON):cint; +Begin + Result:=ImageList_ReplaceIcon(himl,-1,hicon); +end; + + +// Macro 12 +// #define INDEXTOOVERLAYMASK(i) ((i) << 8) + +// Macro 13 +// #define ImageList_RemoveAll(himl) ImageList_Remove(himl, -1) + +Procedure ImageList_RemoveAll(himl:HIMAGELIST); +Begin + ImageList_Remove(himl, -1) +End; + +// Macro 14 +// #define ImageList_ExtractIcon(hi, himl, i) ImageList_GetIcon(himl, i, 0) + +function ImageList_ExtractIcon(hi:longint; himl:HIMAGELIST;i:longint):HICON; + +Begin + result:=ImageList_GetIcon(himl, i,0); +end; + + +// Macro 15 +// #define ImageList_LoadBitmap(hi, lpbmp, cx, cGrow, crMask) +// ImageList_LoadImage(hi, lpbmp, cx, cGrow, crMask, IMAGE_BITMAP, 0) + +Procedure ImageList_LoadBitmap(hi:HINST;bmp:LPCTSTR;cx:cint;cGrow:cint;crMask:COLORREF); + +Begin + ImageList_LoadImage(hi, bmp, cx, cGrow, crMask, IMAGE_BITMAP, 0); +End; + +// Macro 16 +// #define Header_GetItemCount(hwndHD) \ +// (int)SNDMSG((hwndHD), HDM_GETITEMCOUNT, 0, DWord(0)) + +Function Header_GetItemCount( hwndHD : hwnd):cint; + +Begin + Result:=cint(SendMessage((hwndHD), HDM_GETITEMCOUNT, 0, LPARAM(0))) +end; + + +// Macro 17 +//#define Header_InsertItem(hwndHD, i, phdi) \ +// (int)SNDMSG((hwndHD), HDM_INSERTITEM, (WPARAM)(int)(i), (LPARAM)(const HD_ITEM *)(phdi)) + +Function Header_InsertItem( hwndHD : hwnd; i : cint;const phdi : HD_ITEM ):cint; + +Begin + Result:=cint(SendMessage((hwndHD), HDM_INSERTITEM, (i), LPARAM(@phdi))); +end; + +// Macro 18 +//#define Header_DeleteItem(hwndHD, i) \ +// (BOOL)SNDMSG((hwndHD), HDM_DELETEITEM, (WPARAM)(int)(i), LPARAM(0)) + +Function Header_DeleteItem( hwndHD : hwnd; i : cint):BOOL; + +Begin + Result:=BOOL(SendMessage((hwndHD), HDM_DELETEITEM, (i), LPARAM(0))); +end; + + +// Macro 19 +// #define Header_GetItem(hwndHD, i, phdi) \ +// (BOOL)SNDMSG((hwndHD), HDM_GETITEM, (WPARAM)(int)(i), (LPARAM)(HD_ITEM *)(phdi)) + +Function Header_GetItem( hwndHD : hwnd; i : cint;var phdi : HD_ITEM ):BOOL; + +Begin + Result:=BOOL(SendMessage((hwndHD), HDM_GETITEM, (i), LPARAM(@phdi))); +end; + + +// Macro 20 +// #define Header_SetItem(hwndHD, i, phdi) \ +// (BOOL)SNDMSG((hwndHD), HDM_SETITEM, (WPARAM)(int)(i), (LPARAM)(const HD_ITEM *)(phdi)) + +Function Header_SetItem( hwndHD : hwnd; i : cint;const phdi : HD_ITEM ):BOOL; + +Begin + Result:=BOOL(SendMessage((hwndHD), HDM_SETITEM, (i), LPARAM(@phdi))); +end; + + +// Macro 21 +// #define Header_Layout(hwndHD, playout) \ +// (BOOL)SNDMSG((hwndHD), HDM_LAYOUT, 0, (LPARAM)(HD_LAYOUT *)(playout)) + +Function Header_Layout( hwndHD : hwnd;var playout : HD_LAYOUT ):BOOL; + +Begin + Result:=BOOL(SendMessage((hwndHD), HDM_LAYOUT, 0, LPARAM(@playout))) +end; + + +// Macro 22 +// #define Header_GetItemRect(hwnd, iItem, lprc) \ +// (BOOL)SNDMSG((hwnd), HDM_GETITEMRECT, (WPARAM)(iItem), (LPARAM)(lprc)) + +Function Header_GetItemRect( hwnd : hwnd; iItem : WPARAM; lprc : LPARAM):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), HDM_GETITEMRECT, iItem, lprc)); +end; + + +// Macro 23 +// #define Header_SetImageList(hwnd, himl) \ +// (HIMAGELIST)SNDMSG((hwnd), HDM_SETIMAGELIST, 0, (LPARAM)(himl)) + +Function Header_SetImageList( hwnd : hwnd; himl : LPARAM):HIMAGELIST; + +Begin + Result:=HIMAGELIST(SendMessage((hwnd), HDM_SETIMAGELIST, 0, himl)) +end; + + +// Macro 24 +// #define Header_GetImageList(hwnd) \ +// (HIMAGELIST)SNDMSG((hwnd), HDM_GETIMAGELIST, 0, 0) + +Function Header_GetImageList( hwnd : hwnd):HIMAGELIST; + +Begin + Result:=HIMAGELIST(SendMessage((hwnd), HDM_GETIMAGELIST, 0, 0)) +end; + + +// Macro 25 +// #define Header_OrderToIndex(hwnd, i) \ +// (int)SNDMSG((hwnd), HDM_ORDERTOINDEX, (WPARAM)(i), 0) + +Function Header_OrderToIndex( hwnd : hwnd; i : WPARAM):cint; + +Begin + Result:=cint(SendMessage((hwnd), HDM_ORDERTOINDEX, (i), 0)) +end; + + +// Macro 26 +// #define Header_CreateDragImage(hwnd, i) \ +// (HIMAGELIST)SNDMSG((hwnd), HDM_CREATEDRAGIMAGE, (WPARAM)(i), 0) + +Function Header_CreateDragImage( hwnd : hwnd; i : WPARAM):HIMAGELIST; + +Begin + Result:=HIMAGELIST(SendMessage((hwnd), HDM_CREATEDRAGIMAGE, (i), 0)) +end; + + +// Macro 27 +// #define Header_GetOrderArray(hwnd, iCount, lpi) \ +// (BOOL)SNDMSG((hwnd), HDM_GETORDERARRAY, (WPARAM)(iCount), (LPARAM)(lpi)) + +Function Header_GetOrderArray( hwnd : hwnd; iCount : WPARAM; lpi : LPARAM):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), HDM_GETORDERARRAY, iCount, lpi)) +end; + + +// Macro 28 +// #define Header_SetOrderArray(hwnd, iCount, lpi) \ +// (BOOL)SNDMSG((hwnd), HDM_SETORDERARRAY, (WPARAM)(iCount), (LPARAM)(lpi)) + +Function Header_SetOrderArray( hwnd : hwnd; iCount : WPARAM; lpi : PInteger):BOOL;inline; + +Begin + Result:=BOOL(SendMessage((hwnd), HDM_SETORDERARRAY, iCount, LPARAM(lpi))) +end; + + +// Macro 29 +// #define Header_SetHotDivider(hwnd, fPos, dw) \ +// (int)SNDMSG((hwnd), HDM_SETHOTDIVIDER, (WPARAM)(fPos), (LPARAM)(dw)) + +Function Header_SetHotDivider( hwnd : hwnd; fPos : WPARAM; dw : LPARAM):cint; + +Begin + Result:=cint(SendMessage((hwnd), HDM_SETHOTDIVIDER, fPos, dw)) +end; + + +{$ifdef ie5plus} +// Macro 30 +// #define Header_SetBitmapMargin(hwnd, iWidth) \ +// (int)SNDMSG((hwnd), HDM_SETBITMAPMARGIN, (WPARAM)(iWidth), 0) + +Function Header_SetBitmapMargin( hwnd : hwnd; iWidth : WPARAM):cint; + +Begin + Result:=cint(SendMessage((hwnd), HDM_SETBITMAPMARGIN, iWidth, 0)) +end; + + +// Macro 31 +// #define Header_GetBitmapMargin(hwnd) \ +// (int)SNDMSG((hwnd), HDM_GETBITMAPMARGIN, 0, 0) + +Function Header_GetBitmapMargin( hwnd : hwnd):cint; + +Begin + Result:=cint(SendMessage((hwnd), HDM_GETBITMAPMARGIN, 0, 0)) +end; + +{$ENDIF} + +// Macro 32 +// #define Header_SetUnicodeFormat(hwnd, fUnicode) \ +// (BOOL)SNDMSG((hwnd), HDM_SETUNICODEFORMAT, (WPARAM)(fUnicode), 0) + +Function Header_SetUnicodeFormat( hwnd : hwnd; fUnicode : WPARAM):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), HDM_SETUNICODEFORMAT, fUnicode, 0)); +end; + + +// Macro 33 +// #define Header_GetUnicodeFormat(hwnd) \ +// (BOOL)SNDMSG((hwnd), HDM_GETUNICODEFORMAT, 0, 0) + +Function Header_GetUnicodeFormat( hwnd : hwnd):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), HDM_GETUNICODEFORMAT, 0, 0)) +end; + + +{$ifdef IE5plus} +// Macro 34 +// #define Header_SetFilterChangeTimeout(hwnd, i) \ +// (int)SNDMSG((hwnd), HDM_SETFILTERCHANGETIMEOUT, 0, (LPARAM)(i)) + +Function Header_SetFilterChangeTimeout( hwnd : hwnd; i : LPARAM):cint; + +Begin + Result:=cint(SendMessage((hwnd), HDM_SETFILTERCHANGETIMEOUT, 0, (i))) +end; + + +// Macro 35 +// #define Header_EditFilter(hwnd, i, fDiscardChanges) \ +// (int)SNDMSG((hwnd), HDM_EDITFILTER, (WPARAM)(i), MAKELPARAM(fDiscardChanges, 0)) + +Function Header_EditFilter( hwnd : hwnd; i : WPARAM; fDiscardChanges :cint ):cint; + +Begin + Result:=cint(SendMessage((hwnd), HDM_EDITFILTER, (i), MAKELPARAM(fDiscardChanges, 0))); +end; + + +// Macro 36 +// #define Header_ClearFilter(hwnd, i) \ +// (int)SNDMSG((hwnd), HDM_CLEARFILTER, (WPARAM)(i), 0) + +Function Header_ClearFilter( hwnd : hwnd; i : WPARAM):cint; + +Begin + Result:=cint(SendMessage((hwnd), HDM_CLEARFILTER, (i), 0)) +end; + + +// Macro 37 +// #define Header_ClearAllFilters(hwnd) \ +// (int)SNDMSG((hwnd), HDM_CLEARFILTER, (WPARAM)-1, 0) + +Function Header_ClearAllFilters( hwnd : hwnd):cint; + +Begin + Result:=cint(SendMessage((hwnd), HDM_CLEARFILTER, WPARAM(-1), 0)) +end; +{$endif} +{$ifdef win32vista} +// macro 37a ..37d +function Header_GetOverflowRect( hwnd : hwnd; lprc:lprect):bool; +begin + result:=bool(sendmessage(hwnd, HDM_GETOVERFLOWRECT, 0, LPARAM(lprc))); +end; + +function Header_GetFocusedItem(hwnd : hwnd):cint; +begin + Result:=cint(SendMessage((hwnd), HDM_GETFOCUSEDITEM, WPARAM(0), LPARAM(0))); +end; + +function Header_SetFocusedItem(hwnd:hwnd; iItem:cint):BOOL; +begin + result:=bool(sendmessage(hwnd, HDM_SETFOCUSEDITEM, WPARAM(0),LPARAM(iItem))); +end; +function Header_GetItemDropDownRect(hwnd : hwnd;iItem:cint; lprc:lprect):bool; +begin + result:=bool(sendmessage(hwnd, HDM_GETITEMDROPDOWNRECT, WPARAM(iItem), LPARAM(lprc))); +end; +{$endif} + +// Macro 38 +// #define ListView_SetUnicodeFormat(hwnd, fUnicode) \ +// (BOOL)SNDMSG((hwnd), LVM_SETUNICODEFORMAT, (WPARAM)(fUnicode), 0) + +Function ListView_SetUnicodeFormat( hwnd : hwnd; fUnicode : WPARAM):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), LVM_SETUNICODEFORMAT, fUnicode, 0)); +end; + + +// Macro 39 +// #define ListView_GetUnicodeFormat(hwnd) \ +// (BOOL)SNDMSG((hwnd), LVM_GETUNICODEFORMAT, 0, 0) + +Function ListView_GetUnicodeFormat( hwnd : hwnd):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), LVM_GETUNICODEFORMAT, 0, 0)) +end; + + +// Macro 40 +// #define ListView_GetBkColor(hwnd) \ +// (COLORREF)SNDMSG((hwnd), LVM_GETBKCOLOR, 0, LPARAM(0)) + +Function ListView_GetBkColor( hwnd : hwnd):COLORREF; + +Begin + Result:=COLORREF(SendMessage((hwnd), LVM_GETBKCOLOR, 0, LPARAM(0))) +end; + + +// Macro 41 +// #define ListView_SetBkColor(hwnd, clrBk) \ +// (BOOL)SNDMSG((hwnd), LVM_SETBKCOLOR, 0, (LPARAM)(COLORREF)(clrBk)) + +Function ListView_SetBkColor( hwnd : hwnd; clrBk : COLORREF):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), LVM_SETBKCOLOR, 0, clrBk)) +end; + + +// Macro 42 +// #define ListView_GetImageList(hwnd, iImageList) \ +// (HIMAGELIST)SNDMSG((hwnd), LVM_GETIMAGELIST, (WPARAM)(INT)(iImageList), DWord(0)) + +Function ListView_GetImageList( hwnd : hwnd; iImageList : CINT):HIMAGELIST; + +Begin + Result:=HIMAGELIST(SendMessage((hwnd), LVM_GETIMAGELIST, iImageList, LPARAM(0))) +end; + + +// Macro 43 +// #define ListView_SetImageList(hwnd, himl, iImageList) \ +// (HIMAGELIST)SNDMSG((hwnd), LVM_SETIMAGELIST, (WPARAM)(iImageList), (LPARAM)(HIMAGELIST)(himl)) + +Function ListView_SetImageList( hwnd : hwnd; himl : HIMAGELIST; iImageList : WPARAM):HIMAGELIST; + +Begin + Result:=HIMAGELIST(SendMessage((hwnd), LVM_SETIMAGELIST, iImageList, himl)) +end; + + +// Macro 44 +// #define ListView_GetItemCount(hwnd) \ +// (int)SNDMSG((hwnd), LVM_GETITEMCOUNT, 0, DWord(0)) + +Function ListView_GetItemCount( hwnd : hwnd):cint; + +Begin + Result:=cint(SendMessage((hwnd), LVM_GETITEMCOUNT, 0, LPARAM(0))) +end; + + +// Macro 45 +// #define INDEXTOSTATEIMAGEMASK(i) ((i) << 12) + +// Macro 46 +// #define ListView_GetItem(hwnd, pitem) \ +// (BOOL)SNDMSG((hwnd), LVM_GETITEM, 0, (LPARAM)(LV_ITEM *)(pitem)) + +Function ListView_GetItem( hwnd : hwnd;var pitem : LV_ITEM ):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), LVM_GETITEM, 0, LPARAM(@pitem))) +end; + + +// Macro 47 +// #define ListView_SetItem(hwnd, pitem) \ +// (BOOL)SNDMSG((hwnd), LVM_SETITEM, 0, (LPARAM)(const LV_ITEM *)(pitem)) + +Function ListView_SetItem( hwnd : hwnd;const pitem : LV_ITEM ):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), LVM_SETITEM, 0, LPARAM(@pitem))) +end; + + +// Macro 48 +// #define ListView_InsertItem(hwnd, pitem) \ +// (int)SNDMSG((hwnd), LVM_INSERTITEM, 0, (LPARAM)(const LV_ITEM *)(pitem)) + +Function ListView_InsertItem( hwnd : hwnd;Const pitem : LV_ITEM ):cint; + +Begin + Result:=cint(SendMessage((hwnd), LVM_INSERTITEM, 0, LPARAM(@pitem))) +end; + + +// Macro 49 +// #define ListView_DeleteItem(hwnd, i) \ +// (BOOL)SNDMSG((hwnd), LVM_DELETEITEM, (WPARAM)(int)(i), DWord(0)) + +Function ListView_DeleteItem( hwnd : hwnd; i : cint):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), LVM_DELETEITEM, (i), LPARAM(0))) +end; + + +// Macro 50 +// #define ListView_DeleteAllItems(hwnd) \ +// (BOOL)SNDMSG((hwnd), LVM_DELETEALLITEMS, 0, DWord(0)) + +Function ListView_DeleteAllItems( hwnd : hwnd):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), LVM_DELETEALLITEMS, 0, LPARAM(0))) +end; + + +// Macro 51 +// #define ListView_GetCallbackMask(hwnd) \ +// (BOOL)SNDMSG((hwnd), LVM_GETCALLBACKMASK, 0, 0) + +Function ListView_GetCallbackMask( hwnd : hwnd):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), LVM_GETCALLBACKMASK, 0, 0)) +end; + + +// Macro 52 +// #define ListView_SetCallbackMask(hwnd, mask) \ +// (BOOL)SNDMSG((hwnd), LVM_SETCALLBACKMASK, (WPARAM)(UINT)(mask), 0) + +Function ListView_SetCallbackMask( hwnd : hwnd; mask : UINT):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), LVM_SETCALLBACKMASK, mask, 0)) +end; + + +// Macro 53 +// #define ListView_GetNextItem(hwnd, i, flags) \ +// (int)SNDMSG((hwnd), LVM_GETNEXTITEM, (WPARAM)(int)(i), MAKELPARAM((flags), 0)) + +Function ListView_GetNextItem( hwnd : hwnd; i : cint; flags : cint):cint; + +Begin + Result:=cint(SendMessage((hwnd), LVM_GETNEXTITEM, (i), MAKELPARAM((flags), 0))) +end; + + +// Macro 54 +// #define ListView_FindItem(hwnd, iStart, plvfi) \ +// (int)SNDMSG((hwnd), LVM_FINDITEM, (WPARAM)(int)(iStart), (LPARAM)(const LV_FINDINFO *)(plvfi)) + +Function ListView_FindItem( hwnd : hwnd; iStart : cint;const plvfi : LV_FINDINFO ):cint; + +Begin + Result:=cint(SendMessage((hwnd), LVM_FINDITEM, iStart, LPARAM(@plvfi))) +end; + + +// Macro 55 +// #define ListView_GetItemRect(hwnd, i, prc, code) \ +// (BOOL)SNDMSG((hwnd), LVM_GETITEMRECT, (WPARAM)(int)(i), \ +// ((prc) ? (((RECT *)(prc))->left = (code),(LPARAM)(RECT *)(prc)) : (LPARAM)(RECT *)NULL)) + +Function ListView_GetItemRect( hwnd : hwnd; i : cint;var prc : TRect;code : cint):BOOL; +begin + if assigned(@prc) then + begin + prc.left:=Code; + Result:=BOOL(SendMessage(hWnd,LVM_GETITEMRECT,i,LPARAM(@prc))); + end + else + Result:=BOOL(SendMessage(hWnd,LVM_GETITEMRECT,i,0)); +end; + + +// Macro 56 +// #define ListView_SetItemPosition(hwndLV, i, x, y) \ +// (BOOL)SNDMSG((hwndLV), LVM_SETITEMPOSITION, (WPARAM)(int)(i), MAKELPARAM((x), (y))) + +Function ListView_SetItemPosition( hwndLV : hwnd; i : cint; x : cint ; y : cint ):BOOL; + +Begin + Result:=BOOL(SendMessage((hwndLV), LVM_SETITEMPOSITION, (i), MAKELPARAM((x), (y)))) +end; + + +// Macro 57 +// #define ListView_GetItemPosition(hwndLV, i, ppt) \ +// (BOOL)SNDMSG((hwndLV), LVM_GETITEMPOSITION, (WPARAM)(int)(i), (LPARAM)(POINT *)(ppt)) + +Function ListView_GetItemPosition( hwndLV : hwnd; i : cint;var ppt : POINT ):BOOL; + +Begin + Result:=BOOL(SendMessage((hwndLV), LVM_GETITEMPOSITION, (i), LPAram(@ppt))) +end; + +// Macro 58 +// #define ListView_GetStringWidth(hwndLV, psz) \ +// (int)SNDMSG((hwndLV), LVM_GETSTRINGWIDTH, 0, (LPARAM)(LPCTSTR)(psz)) + +Function ListView_GetStringWidth( hwndLV : hwnd; psz : LPCTSTR):cint; + +Begin + Result:=cint(SendMessage((hwndLV), LVM_GETSTRINGWIDTH, 0, LPARAM(psz))) +end; + + +// Macro 59 +// #define ListView_HitTest(hwndLV, pinfo) \ +// (int)SNDMSG((hwndLV), LVM_HITTEST, 0, (LPARAM)(LV_HITTESTINFO *)(pinfo)) + +Function ListView_HitTest( hwndLV : hwnd;var pinfo : LV_HITTESTINFO ):cint; + +Begin + Result:=cint(SendMessage((hwndLV), LVM_HITTEST, 0, LParam(@pinfo))) +end; + + +// Macro 60 +// #define ListView_EnsureVisible(hwndLV, i, fPartialOK) \ +// (BOOL)SNDMSG((hwndLV), LVM_ENSUREVISIBLE, (WPARAM)(int)(i), MAKELPARAM((fPartialOK), 0)) + +Function ListView_EnsureVisible( hwndLV : hwnd; i : cint; fPartialOK : cint ):BOOL;inline; + +Begin + Result:=BOOL(SendMessage((hwndLV), LVM_ENSUREVISIBLE, (i), MAKELPARAM((fPartialOK), 0))) +end; + + +Function ListView_EnsureVisible( hwndLV : hwnd; i : cint; fPartialOK : BOOL ):BOOL;inline; + +Begin + Result:=BOOL(SendMessage((hwndLV), LVM_ENSUREVISIBLE, (i), LPARAM(fPartialOK))) +end; + + +// Macro 61 +// #define ListView_Scroll(hwndLV, dx, dy) \ +// (BOOL)SNDMSG((hwndLV), LVM_SCROLL, (WPARAM)(int)(dx), (LPARAM)(int)(dy)) + +Function ListView_Scroll( hwndLV : hwnd; dx : cint; dy : cint):BOOL; + +Begin + Result:=BOOL(SendMessage((hwndLV), LVM_SCROLL, dx, dy)) +end; + + +// Macro 62 +// #define ListView_RedrawItems(hwndLV, iFirst, iLast) \ +// (BOOL)SNDMSG((hwndLV), LVM_REDRAWITEMS, (WPARAM)(int)(iFirst), (LPARAM)(int)(iLast)) + +Function ListView_RedrawItems( hwndLV : hwnd; iFirst : cint; iLast : cint):BOOL; + +Begin + Result:=BOOL(SendMessage((hwndLV), LVM_REDRAWITEMS, iFirst, iLast)) +end; + + +// Macro 63 +// #define ListView_Arrange(hwndLV, code) \ +// (BOOL)SNDMSG((hwndLV), LVM_ARRANGE, (WPARAM)(UINT)(code), DWord(0)) + +Function ListView_Arrange( hwndLV : hwnd; code : UINT):BOOL; + +Begin + Result:=BOOL(SendMessage((hwndLV), LVM_ARRANGE, code, LPARAM(0))) +end; + + +// Macro 64 +// #define ListView_EditLabel(hwndLV, i) \ +// (HWND)SNDMSG((hwndLV), LVM_EDITLABEL, (WPARAM)(int)(i), DWord(0)) + +Function ListView_EditLabel( hwndLV : hwnd; i : cint):HWND; + +Begin + Result:=HWND(SendMessage((hwndLV), LVM_EDITLABEL, (i), LPARAM(0))) +end; + + +// Macro 65 +// #define ListView_GetEditControl(hwndLV) \ +// (HWND)SNDMSG((hwndLV), LVM_GETEDITCONTROL, 0, DWord(0)) + +Function ListView_GetEditControl( hwndLV : hwnd):HWND; + +Begin + Result:=HWND(SendMessage((hwndLV), LVM_GETEDITCONTROL, 0, LPARAM(0))) +end; + + +// Macro 66 +// #define ListView_GetColumn(hwnd, iCol, pcol) \ +// (BOOL)SNDMSG((hwnd), LVM_GETCOLUMN, (WPARAM)(int)(iCol), (LPARAM)(LV_COLUMN *)(pcol)) + +Function ListView_GetColumn( hwnd : hwnd; iCol : cint;var pcol : LV_COLUMN ):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), LVM_GETCOLUMN, iCol, LPARAM(@pcol))) +end; + + +// Macro 67 +// #define ListView_SetColumn(hwnd, iCol, pcol) \ +// (BOOL)SNDMSG((hwnd), LVM_SETCOLUMN, (WPARAM)(int)(iCol), (LPARAM)(const LV_COLUMN *)(pcol)) + +Function ListView_SetColumn( hwnd : hwnd; iCol : cint; Const pcol : LV_COLUMN ):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), LVM_SETCOLUMN, iCol, LPARAM(@pcol))) +end; + + +// Macro 68 +// #define ListView_InsertColumn(hwnd, iCol, pcol) \ +// (int)SNDMSG((hwnd), LVM_INSERTCOLUMN, (WPARAM)(int)(iCol), (LPARAM)(const LV_COLUMN *)(pcol)) + +Function ListView_InsertColumn( hwnd : hwnd; iCol : cint;const pcol : LV_COLUMN ):cint; + +Begin + Result:=cint(SendMessage((hwnd), LVM_INSERTCOLUMN, iCol, LPARAM(@pcol))) +end; + + +// Macro 69 +// #define ListView_DeleteColumn(hwnd, iCol) \ +// (BOOL)SNDMSG((hwnd), LVM_DELETECOLUMN, (WPARAM)(int)(iCol), 0) + +Function ListView_DeleteColumn( hwnd : hwnd; iCol : cint):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), LVM_DELETECOLUMN, iCol, 0)) +end; + + +// Macro 70 +// #define ListView_GetColumnWidth(hwnd, iCol) \ +// (int)SNDMSG((hwnd), LVM_GETCOLUMNWIDTH, (WPARAM)(int)(iCol), 0) + +Function ListView_GetColumnWidth( hwnd : hwnd; iCol : cint):cint; + +Begin + Result:=cint(SendMessage((hwnd), LVM_GETCOLUMNWIDTH, iCol, 0)) +end; + + +// Macro 71 +// #define ListView_SetColumnWidth(hwnd, iCol, cx) \ +// (BOOL)SNDMSG((hwnd), LVM_SETCOLUMNWIDTH, (WPARAM)(int)(iCol), MAKELPARAM((cx), 0)) + +Function ListView_SetColumnWidth( hwnd : hwnd; iCol : cint; cx :cint ):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), LVM_SETCOLUMNWIDTH, iCol, MAKELPARAM((cx), 0))) +end; + + +// Macro 72 +// #define ListView_GetHeader(hwnd)\ +// (HWND)SNDMSG((hwnd), LVM_GETHEADER, 0, DWord(0)) + +Function ListView_GetHeader( hwnd : hwnd):HWND; + +Begin + Result:=Windows.HWND(SendMessage((hwnd), LVM_GETHEADER, 0, LPARAM(0))); +end; + + +// Macro 73 +// #define ListView_CreateDragImage(hwnd, i, lpptUpLeft) \ +// (HIMAGELIST)SNDMSG((hwnd), LVM_CREATEDRAGIMAGE, (WPARAM)(int)(i), (LPARAM)(LPPOINT)(lpptUpLeft)) + +Function ListView_CreateDragImage( hwnd : hwnd; i : cint; lpptUpLeft : LPPOINT):HIMAGELIST;inline; + +Begin + Result:=HIMAGELIST(SendMessage((hwnd), LVM_CREATEDRAGIMAGE, WPARAM(i), LPARAM(lpptUpLeft))) +end; + +Function ListView_CreateDragImage( hwnd : hwnd; i : cint; const lpptUpLeft : POINT):HIMAGELIST;inline; + +Begin + Result:=HIMAGELIST(SendMessage((hwnd), LVM_CREATEDRAGIMAGE, WPARAM(i), LPARAM(@lpptUpLeft))) +end; + + +// Macro 74 +// #define ListView_GetViewRect(hwnd, prc) \ +// (BOOL)SNDMSG((hwnd), LVM_GETVIEWRECT, 0, (LPARAM)(RECT *)(prc)) + +Function ListView_GetViewRect( hwnd : hwnd;var prc : RECT ):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), LVM_GETVIEWRECT, 0, LPARAM(@prc))) +end; + +// Macro 75 +// #define ListView_GetTextColor(hwnd) \ +// (COLORREF)SNDMSG((hwnd), LVM_GETTEXTCOLOR, 0, DWord(0)) + +Function ListView_GetTextColor( hwnd : hwnd):COLORREF; + +Begin + Result:=COLORREF(SendMessage((hwnd), LVM_GETTEXTCOLOR, 0, LPARAM(0))) +end; + + +// Macro 76 +// #define ListView_SetTextColor(hwnd, clrText) \ +// (BOOL)SNDMSG((hwnd), LVM_SETTEXTCOLOR, 0, (LPARAM)(COLORREF)(clrText)) + +Function ListView_SetTextColor( hwnd : hwnd; clrText : COLORREF):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), LVM_SETTEXTCOLOR, 0, clrText)) +end; + + +// Macro 77 +// #define ListView_GetTextBkColor(hwnd) \ +// (COLORREF)SNDMSG((hwnd), LVM_GETTEXTBKCOLOR, 0, DWord(0)) + +Function ListView_GetTextBkColor( hwnd : hwnd):COLORREF; + +Begin + Result:=COLORREF(SendMessage((hwnd), LVM_GETTEXTBKCOLOR, 0, LPARAM(0))) +end; + + +// Macro 78 +// #define ListView_SetTextBkColor(hwnd, clrTextBk) \ +// (BOOL)SNDMSG((hwnd), LVM_SETTEXTBKCOLOR, 0, (LPARAM)(COLORREF)(clrTextBk)) + +Function ListView_SetTextBkColor( hwnd : hwnd; clrTextBk : COLORREF):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), LVM_SETTEXTBKCOLOR, 0, clrTextBk)) +end; + + +// Macro 79 +// #define ListView_GetTopIndex(hwndLV) \ +// (int)SNDMSG((hwndLV), LVM_GETTOPINDEX, 0, 0) + +Function ListView_GetTopIndex( hwndLV : hwnd):cint; + +Begin + Result:=cint(SendMessage((hwndLV), LVM_GETTOPINDEX, 0, 0)) +end; + + +// Macro 80 +// #define ListView_GetCountPerPage(hwndLV) \ +// (int)SNDMSG((hwndLV), LVM_GETCOUNTPERPAGE, 0, 0) + +Function ListView_GetCountPerPage( hwndLV : hwnd):cint; + +Begin + Result:=cint(SendMessage((hwndLV), LVM_GETCOUNTPERPAGE, 0, 0)) +end; + + +// Macro 81 +// +// #define ListView_GetOrigin(hwndLV, ppt) \ +// (BOOL)SNDMSG((hwndLV), LVM_GETORIGIN, (WPARAM)0, (LPARAM)(POINT *)(ppt)) + +Function ListView_GetOrigin( hwndLV : hwnd;var ppt : POINT ):BOOL; + +Begin + Result:=BOOL(SendMessage((hwndLV), LVM_GETORIGIN, WPARAM(0), LPARAM(@ppt))) +end; + + +// Macro 82 +// #define ListView_Update(hwndLV, i) \ +// (BOOL)SNDMSG((hwndLV), LVM_UPDATE, (WPARAM)(i), DWord(0)) + +Function ListView_Update( hwndLV : hwnd; i : WPARAM):BOOL; + +Begin + Result:=BOOL(SendMessage((hwndLV), LVM_UPDATE, (i), LPARAM(0))) +end; + + +// Macro 83 +// #define ListView_SetItemState(hwndLV, i, data, mask) \ +// { LV_ITEM _ms_lvi;\ +// _ms_lvi.stateMask = mask;\ +// _ms_lvi.state = data;\ +// SNDMSG((hwndLV), LVM_SETITEMSTATE, (WPARAM)(i), (LPARAM)(LV_ITEM *)&_ms_lvi);\ +// } + + +Procedure ListView_SetItemState(hwndLV :hwnd; i :cint ;data,mask:UINT); + +Var _ms_lvi : LV_ITEM; + +Begin + _ms_lvi.stateMask:=mask; + _ms_lvi.state:=data; + SendMessage(hwndLV, LVM_SETITEMSTATE, i,LPARAM(@_ms_lvi)); +end; + + +// Macro 84 +// #define ListView_SetCheckState(hwndLV, i, fCheck) \ +// ListView_SetItemState(hwndLV, i, INDEXTOSTATEIMAGEMASK((fCheck)?2:1), LVIS_STATEIMAGEMASK) + +Procedure ListView_SetCheckState( hwndLV : hwnd; i : cint ; fCheck : BOOL ); + +var j:longint; +Begin + IF not fCheck Then // (or inc(longint(fCheck)) if you like it dirty) + j:=1 + Else + j:=2; +ListView_SetItemState(hwndLV, i, INDEXTOSTATEIMAGEMASK(j), LVIS_STATEIMAGEMASK); +end; + + +// Macro 85 +// #define ListView_GetItemState(hwndLV, i, mask) \ +// (UINT)SNDMSG((hwndLV), LVM_GETITEMSTATE, (WPARAM)(i), (LPARAM)(mask)) + +Function ListView_GetItemState( hwndLV : hwnd; i : WPARAM; mask : LPARAM):UINT; + +Begin + Result:=UINT(SendMessage((hwndLV), LVM_GETITEMSTATE, (i), mask)) +end; + + +// Macro 86 +// #define ListView_GetCheckState(hwndLV, i) \ +// ((((UINT)(SNDMSG((hwndLV), LVM_GETITEMSTATE, (WPARAM)(i), LVIS_STATEIMAGEMASK))) >> 12) -1) + +Function ListView_GetCheckState( hwndLV : hwnd; i : WPARAM):UINT; + +Begin + Result:=(SendMessage((hwndLV), LVM_GETITEMSTATE, (i), LVIS_STATEIMAGEMASK) shr 12) -1; +end; + + +// Macro 87 +// #define ListView_GetItemText(hwndLV, i, iSubItem_, pszText_, cchTextMax_) \ +// { LV_ITEM _ms_lvi;\ +// _ms_lvi.iSubItem = iSubItem_;\ +// _ms_lvi.cchTextMax = cchTextMax_;\ +// _ms_lvi.pszText = pszText_;\ +// SNDMSG((hwndLV), LVM_GETITEMTEXT, (WPARAM)(i), (LPARAM)(LV_ITEM *)&_ms_lvi);\ +// } + +Procedure ListView_GetItemText(hwndLV:hwnd; i : WPARAM ;iSubItem : cint ;pszText : Pointer;cchTextMax :cint); + +Var _ms_lvi : LV_ITEM; + +Begin + _ms_lvi.iSubItem := iSubItem; + _ms_lvi.cchTextMax := cchTextMax; + _ms_lvi.pszText := pszText; // unicode dependant! + SendMessage(hwndLV, LVM_GETITEMTEXT, i, LPARAM(@_ms_LVI)); +end; + + +// Macro 88 +// #define ListView_SetItemText(hwndLV, i, iSubItem_, pszText_) \ +// { LV_ITEM _ms_lvi;\ +// _ms_lvi.iSubItem = iSubItem_;\ +// _ms_lvi.pszText = pszText_;\ +// SNDMSG((hwndLV), LVM_SETITEMTEXT, (WPARAM)(i), (LPARAM)(LV_ITEM *)&_ms_lvi);\ +// } + +Procedure ListView_SetItemText(hwndLV:hwnd; i : WPARAM ;iSubItem : cint ;pszText : Pointer); + +Var _ms_lvi : LV_ITEM; + +Begin + _ms_lvi.iSubItem := iSubItem; + _ms_lvi.pszText := pszText; // unicode dependant! + SendMessage(hwndLV, LVM_SETITEMTEXT, i, LPARAM(@_ms_lvi)); +End; + +// Macro 89 +// #define ListView_SetItemCount(hwndLV, cItems) \ +// SNDMSG((hwndLV), LVM_SETITEMCOUNT, (WPARAM)(cItems), 0) + +Procedure ListView_SetItemCount( hwndLV : hwnd; cItems : WPARAM); + +Begin + SendMessage((hwndLV), LVM_SETITEMCOUNT, cItems, 0) +end; + + +// Macro 90 +// #define ListView_SetItemCountEx(hwndLV, cItems, dwFlags) \ +// SNDMSG((hwndLV), LVM_SETITEMCOUNT, (WPARAM)(cItems), (LPARAM)(dwFlags)) + +Procedure ListView_SetItemCountEx( hwndLV : hwnd; cItems : WPARAM; dwFlags : LPARAM); + +Begin + SendMessage((hwndLV), LVM_SETITEMCOUNT, cItems, dwFlags) +end; + + +// Macro 91 +// #define ListView_SortItems(hwndLV, _pfnCompare, _lPrm) \ +// (BOOL)SNDMSG((hwndLV), LVM_SORTITEMS, (WPARAM)(LPARAM)(_lPrm), \ +// (LPARAM)(PFNLVCOMPARE)(_pfnCompare)) + +Function ListView_SortItems( hwndLV : hwnd;pfnCompare : PFNLVCOMPARE; lPrm : LPARAM):BOOL; + +Begin + Result:=BOOL(SendMessage((hwndLV), LVM_SORTITEMS, lPrm, LPARAM(@pfncompare))); +end; + + +// Macro 92 +// #define ListView_SetItemPosition32(hwndLV, i, x0, y0) \ +// { POINT ptNewPos; \ +// ptNewPos.x = x0; ptNewPos.y = y0; \ +// SNDMSG((hwndLV), LVM_SETITEMPOSITION32, (WPARAM)(int)(i), (LPARAM)&ptNewPos); \ +// } + +Procedure ListView_SetItemPosition32(hwndLV:hwnd; i:cint;x0,y0:long); + +Var ptNewPos:POINT; + +Begin + ptNewPos.X:=x0; ptNewPos.Y:=y0; + SendMessage(hwndlv, LVM_SETITEMPOSITION32, I,LPARAM(@ptNewPos)); +end; + + +// Macro 93 +// #define ListView_GetSelectedCount(hwndLV) \ +// (UINT)SNDMSG((hwndLV), LVM_GETSELECTEDCOUNT, 0, DWord(0)) + +Function ListView_GetSelectedCount( hwndLV : hwnd):UINT; + +Begin + Result:=SendMessage(hwndLV, LVM_GETSELECTEDCOUNT, 0, LPARAM(0)); +end; + +// Macro 94 +// #define ListView_GetItemSpacing(hwndLV, fSmall) \ +// (DWORD)SNDMSG((hwndLV), LVM_GETITEMSPACING, fSmall, DWord(0)) + +Function ListView_GetItemSpacing( hwndLV : hwnd; fSmall : cint ):DWORD; + +Begin + Result:=LPARAM(SendMessage((hwndLV), LVM_GETITEMSPACING, fSmall, LPARAM(0))); +end; + +// Macro 95 +// #define ListView_GetISearchString(hwndLV, lpsz) \ +// (BOOL)SNDMSG((hwndLV), LVM_GETISEARCHSTRING, 0, (LPARAM)(LPTSTR)(lpsz)) + +Function ListView_GetISearchString( hwndLV : hwnd; lpsz : LPTSTR):BOOL; + +Begin + Result:=BOOL(SendMessage((hwndLV), LVM_GETISEARCHSTRING, 0, LPARAM(lpsz))) +end; + +// Macro 96 +// #define ListView_SetIconSpacing(hwndLV, cx, cy) \ +// (DWORD)SNDMSG((hwndLV), LVM_SETICONSPACING, 0, MAKELONG(cx,cy)) + +Function ListView_SetIconSpacing( hwndLV : hwnd; cx,cy : cint ):DWORD; + +Begin + Result:=DWORD(SendMessage((hwndLV), LVM_SETICONSPACING, 0, MAKELONG(cx,cy))) +end; + + +// Macro 97 +// #define ListView_SetExtendedListViewStyle(hwndLV, dw)\ +// (DWORD)SNDMSG((hwndLV), LVM_SETEXTENDEDLISTVIEWSTYLE, 0, dw) + +Function ListView_SetExtendedListViewStyle( hwndLV : hwnd; dw :cint ):DWORD; + +Begin + Result:=DWORD(SendMessage((hwndLV), LVM_SETEXTENDEDLISTVIEWSTYLE, 0, dw)) +end; + + +// Macro 98 +// #define ListView_SetExtendedListViewStyleEx(hwndLV, dwMask, dw)\ +// (DWORD)SNDMSG((hwndLV), LVM_SETEXTENDEDLISTVIEWSTYLE, dwMask, dw) + +Function ListView_SetExtendedListViewStyleEx( hwndLV : hwnd; dwMask, dw : cint ):DWORD; + +Begin + Result:=DWORD(SendMessage((hwndLV), LVM_SETEXTENDEDLISTVIEWSTYLE, dwMask, dw)) +end; + + +// Macro 99 +// #define ListView_GetExtendedListViewStyle(hwndLV)\ +// (DWORD)SNDMSG((hwndLV), LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0) + +Function ListView_GetExtendedListViewStyle( hwndLV : hwnd):DWORD; + +Begin + Result:=DWORD(SendMessage((hwndLV), LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0)) +end; + + +// Macro 100 +// #define ListView_GetSubItemRect(hwnd, iItem, iSubItem, code, prc) \ +// (BOOL)SNDMSG((hwnd), LVM_GETSUBITEMRECT, (WPARAM)(int)(iItem), \ +// ((prc) ? ((((LPRECT)(prc))->top = iSubItem), (((LPRECT)(prc))->left = code), (LPARAM)(prc)) : (LPARAM)(LPRECT)NULL)) + +Function ListView_GetSubItemRect( hwnd : hwnd; iItem : cint;iSubItem, code :cint ;prc:LPRECT):BOOL; + +VAR LastParam : LPRECT; +Begin + if prc<>nil then + begin + prc^.top:=iSubItem; + prc^.left:=code; + lastparam:=prc; + end + else + lastparam:=nil; + Result:=bool(SendMessage((hwnd), LVM_GETSUBITEMRECT, iItem, LPARAM(lastparam))); +End; + +// Macro 101 +// #define ListView_SubItemHitTest(hwnd, plvhti) \ +// (int)SNDMSG((hwnd), LVM_SUBITEMHITTEST, 0, (LPARAM)(LPLVHITTESTINFO)(plvhti)) + +Function ListView_SubItemHitTest( hwnd : hwnd; plvhti : LPLVHITTESTINFO):cint; +Begin + Result:=cint(SendMessage((hwnd), LVM_SUBITEMHITTEST, 0, LParam(plvhti))) +end; + + +// Macro 102 +// #define ListView_SetColumnOrderArray(hwnd, iCount, pi) \ +// (BOOL)SNDMSG((hwnd), LVM_SETCOLUMNORDERARRAY, (WPARAM)(iCount), (LPARAM)(LPINT)(pi)) + +Function ListView_SetColumnOrderArray( hwnd : hwnd; iCount : WPARAM; pi : LPINT):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), LVM_SETCOLUMNORDERARRAY, iCount, LPARAM(pi))); +end; + + +// Macro 103 +// #define ListView_GetColumnOrderArray(hwnd, iCount, pi) \ +// (BOOL)SNDMSG((hwnd), LVM_GETCOLUMNORDERARRAY, (WPARAM)(iCount), (LPARAM)(LPINT)(pi)) + +Function ListView_GetColumnOrderArray( hwnd : hwnd; iCount : WPARAM; pi : LPINT):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), LVM_GETCOLUMNORDERARRAY, iCount, LPARAM(pi))) +end; + + +// Macro 104 +// #define ListView_SetHotItem(hwnd, i) \ +// (int)SNDMSG((hwnd), LVM_SETHOTITEM, (WPARAM)(i), 0) + +Function ListView_SetHotItem( hwnd : hwnd; i : WPARAM):cint; +Begin + Result:=cint(SendMessage((hwnd), LVM_SETHOTITEM, (i), 0)) +end; + +// Macro 105 +// #define ListView_GetHotItem(hwnd) \ +// (int)SNDMSG((hwnd), LVM_GETHOTITEM, 0, 0) + +Function ListView_GetHotItem( hwnd : hwnd):cint; +Begin + Result:=cint(SendMessage((hwnd), LVM_GETHOTITEM, 0, 0)) +end; + +// Macro 106 +// #define ListView_SetHotCursor(hwnd, hcur) \ +// (HCURSOR)SNDMSG((hwnd), LVM_SETHOTCURSOR, 0, (LPARAM)(hcur)) + +Function ListView_SetHotCursor( hwnd : hwnd; hcur : LPARAM):HCURSOR; +Begin + Result:=HCURSOR(SendMessage((hwnd), LVM_SETHOTCURSOR, 0, hcur)) +end; + +// Macro 107 +// #define ListView_GetHotCursor(hwnd) \ +// (HCURSOR)SNDMSG((hwnd), LVM_GETHOTCURSOR, 0, 0) + +Function ListView_GetHotCursor( hwnd : hwnd):HCURSOR; +Begin + Result:=HCURSOR(SendMessage((hwnd), LVM_GETHOTCURSOR, 0, 0)) +end; + + +// Macro 108 +// #define ListView_ApproximateViewRect(hwnd, iWidth, iHeight, iCount) \ +// (DWORD)SNDMSG((hwnd), LVM_APPROXIMATEVIEWRECT, iCount, MAKELPARAM(iWidth, iHeight)) + +Function ListView_ApproximateViewRect( hwnd : hwnd; iWidth, iHeight, iCount : cint ):DWORD; +Begin + Result:=DWORD(SendMessage((hwnd), LVM_APPROXIMATEVIEWRECT, iCount, MAKELPARAM(iWidth, iHeight))); +end; + + +// Macro 109 +// #define ListView_SetWorkAreas(hwnd, nWorkAreas, prc) \ +// (BOOL)SNDMSG((hwnd), LVM_SETWORKAREAS, (WPARAM)(int)(nWorkAreas), (LPARAM)(RECT *)(prc)) + +Function ListView_SetWorkAreas( hwnd : hwnd; nWorkAreas : cint;var prc : RECT ):BOOL;inline; +Begin + Result:=BOOL(SendMessage((hwnd), LVM_SETWORKAREAS, nWorkAreas, LPARAM(@prc))) +end; + + +Function ListView_SetWorkAreas( hwnd : hwnd; nWorkAreas : cint; prc : PRECT ):BOOL;inline; +Begin + Result:=BOOL(SendMessage((hwnd), LVM_SETWORKAREAS, nWorkAreas, LPARAM(prc))) +end; + +// Macro 110 +// #define ListView_GetWorkAreas(hwnd, nWorkAreas, prc) \ +// (BOOL)SNDMSG((hwnd), LVM_GETWORKAREAS, (WPARAM)(int)(nWorkAreas), (LPARAM)(RECT *)(prc)) + +Function ListView_GetWorkAreas( hwnd : hwnd; nWorkAreas : cint;var prc : RECT ):BOOL; +Begin + Result:=BOOL(SendMessage((hwnd), LVM_GETWORKAREAS, nWorkAreas, LPARAM(@prc))) +end; + + +// Macro 111 +// #define ListView_GetNumberOfWorkAreas(hwnd, pnWorkAreas) \ +// (BOOL)SNDMSG((hwnd), LVM_GETNUMBEROFWORKAREAS, 0, (LPARAM)(UINT *)(pnWorkAreas)) + +Function ListView_GetNumberOfWorkAreas( hwnd : hwnd;var pnWorkAreas : UINT ):BOOL; +Begin + Result:=BOOL(SendMessage((hwnd), LVM_GETNUMBEROFWORKAREAS, 0, LPARAM(@pnWorkAreas))) +end; + + +// Macro 112 +// #define ListView_GetSelectionMark(hwnd) \ +// (int)SNDMSG((hwnd), LVM_GETSELECTIONMARK, 0, 0) + +Function ListView_GetSelectionMark( hwnd : hwnd):cint; + +Begin + Result:=cint(SendMessage((hwnd), LVM_GETSELECTIONMARK, 0, 0)) +end; + + +// Macro 113 +// #define ListView_SetSelectionMark(hwnd, i) \ +// (int)SNDMSG((hwnd), LVM_SETSELECTIONMARK, 0, (LPARAM)(i)) + +Function ListView_SetSelectionMark( hwnd : hwnd; i : LPARAM):cint; + +Begin + Result:=cint(SendMessage((hwnd), LVM_SETSELECTIONMARK, 0, (i))) +end; + + +// Macro 114 +// #define ListView_SetHoverTime(hwndLV, dwHoverTimeMs)\ +// (DWORD)SNDMSG((hwndLV), LVM_SETHOVERTIME, 0, (LPARAM)(dwHoverTimeMs)) + +Function ListView_SetHoverTime( hwndLV : hwnd; dwHoverTimeMs : LPARAM):DWORD; + +Begin + Result:=DWORD(SendMessage((hwndLV), LVM_SETHOVERTIME, 0, dwHoverTimeMs)) +end; + + +// Macro 115 +// #define ListView_GetHoverTime(hwndLV)\ +// (DWORD)SNDMSG((hwndLV), LVM_GETHOVERTIME, 0, 0) + +Function ListView_GetHoverTime( hwndLV : hwnd):DWORD; + +Begin + Result:=DWORD(SendMessage((hwndLV), LVM_GETHOVERTIME, 0, 0)) +end; + + +// Macro 116 +// #define ListView_SetToolTips(hwndLV, hwndNewHwnd)\ +// (HWND)SNDMSG((hwndLV), LVM_SETTOOLTIPS, (WPARAM)(hwndNewHwnd), 0) + +Function ListView_SetToolTips( hwndLV : hwnd; hwndNewHwnd : WPARAM):HWND; + +Begin + Result:=HWND(SendMessage((hwndLV), LVM_SETTOOLTIPS, hwndNewHwnd, 0)) +end; + + +// Macro 117 +// #define ListView_GetToolTips(hwndLV)\ +// (HWND)SNDMSG((hwndLV), LVM_GETTOOLTIPS, 0, 0) + +Function ListView_GetToolTips( hwndLV : hwnd):HWND; + +Begin + Result:=HWND(SendMessage((hwndLV), LVM_GETTOOLTIPS, 0, 0)) +end; + + +// Macro 118 +// #define ListView_SortItemsEx(hwndLV, _pfnCompare, _lPrm) \ +// (BOOL)SNDMSG((hwndLV), LVM_SORTITEMSEX, (WPARAM)(LPARAM)(_lPrm), (LPARAM)(PFNLVCOMPARE)(_pfnCompare)) + +Function ListView_SortItemsEx( hwndLV : hwnd; _pfnCompare : PFNLVCOMPARE; _lPrm : LPARAM):BOOL; + +Begin + Result:=BOOL(SendMessage((hwndLV), LVM_SORTITEMSEX, _lPrm, LPAram(@_pfnCompare))) +end; + +{$ifdef win32xp} +// Macro 119 +// #define ListView_SetSelectedColumn(hwnd, iCol) \ +// SNDMSG((hwnd), LVM_SETSELECTEDCOLUMN, (WPARAM)iCol, 0) + +Procedure ListView_SetSelectedColumn( hwnd : hwnd; iCol : WPARAM); + +Begin + SendMessage((hwnd), LVM_SETSELECTEDCOLUMN, iCol, 0) +end; + +// Macro 120 +// #define ListView_SetTileWidth(hwnd, cpWidth) \ +// SNDMSG((hwnd), LVM_SETTILEWIDTH, (WPARAM)cpWidth, 0) + +Procedure ListView_SetTileWidth( hwnd : hwnd; cpWidth : WPARAM); + +Begin + SendMessage((hwnd), LVM_SETTILEWIDTH, cpWidth, 0) +end; + + +// Macro 121 +// #define ListView_SetView(hwnd, iView) \ +// (DWORD)SNDMSG((hwnd), LVM_SETVIEW, (WPARAM)(DWORD)iView, 0) + +Function ListView_SetView( hwnd : hwnd; iView : DWORD):DWORD; + +Begin + Result:=DWORD(SendMessage((hwnd), LVM_SETVIEW, iView, 0)) +end; + + +// Macro 122 +// #define ListView_GetView(hwnd) \ +// (DWORD)SNDMSG((hwnd), LVM_GETVIEW, 0, 0) + +Function ListView_GetView( hwnd : hwnd):DWORD; +Begin + Result:=DWORD(SendMessage((hwnd), LVM_GETVIEW, 0, 0)) +end; + + +// Macro 123 +// #define ListView_InsertGroup(hwnd, index, pgrp) \ +// SNDMSG((hwnd), LVM_INSERTGROUP, (WPARAM)index, (LPARAM)pgrp) + +Procedure ListView_InsertGroup( hwnd : hwnd; index : WPARAM; pgrp : LPARAM); +Begin + SendMessage((hwnd), LVM_INSERTGROUP, index, pgrp) +end; + + +// Macro 124 +// #define ListView_SetGroupInfo(hwnd, iGroupId, pgrp) \ +// SNDMSG((hwnd), LVM_SETGROUPINFO, (WPARAM)iGroupId, (LPARAM)pgrp) + +Procedure ListView_SetGroupInfo( hwnd : hwnd; iGroupId : WPARAM; pgrp : LPARAM); +Begin + SendMessage((hwnd), LVM_SETGROUPINFO, iGroupId, pgrp) +end; + + +// Macro 125 +// #define ListView_GetGroupInfo(hwnd, iGroupId, pgrp) \ +// SNDMSG((hwnd), LVM_GETGROUPINFO, (WPARAM)iGroupId, (LPARAM)pgrp) + +Procedure ListView_GetGroupInfo( hwnd : hwnd; iGroupId : WPARAM; pgrp : LPARAM); +Begin + SendMessage((hwnd), LVM_GETGROUPINFO, iGroupId, pgrp) +end; + + +// Macro 126 +// #define ListView_RemoveGroup(hwnd, iGroupId) \ +// SNDMSG((hwnd), LVM_REMOVEGROUP, (WPARAM)iGroupId, 0) + +Procedure ListView_RemoveGroup( hwnd : hwnd; iGroupId : WPARAM); +Begin + SendMessage((hwnd), LVM_REMOVEGROUP, iGroupId, 0) +end; + + +// Macro 127 +// #define ListView_MoveGroup(hwnd, iGroupId, toIndex) \ +// SNDMSG((hwnd), LVM_MOVEGROUP, (WPARAM)iGroupId, (LPARAM)toIndex) + +Procedure ListView_MoveGroup( hwnd : hwnd; iGroupId : WPARAM; toIndex : LPARAM); +Begin + SendMessage((hwnd), LVM_MOVEGROUP, iGroupId, toIndex) +end; + + +// Macro 128 +// #define ListView_MoveItemToGroup(hwnd, idItemFrom, idGroupTo) \ +// SNDMSG((hwnd), LVM_MOVEITEMTOGROUP, (WPARAM)idItemFrom, (LPARAM)idGroupTo) + +Procedure ListView_MoveItemToGroup( hwnd : hwnd; idItemFrom : WPARAM; idGroupTo : LPARAM); + +Begin + SendMessage((hwnd), LVM_MOVEITEMTOGROUP, idItemFrom, idGroupTo) +end; + + +// Macro 129 +// #define ListView_SetGroupMetrics(hwnd, pGroupMetrics) \ +// SNDMSG((hwnd), LVM_SETGROUPMETRICS, 0, (LPARAM)pGroupMetrics) + +Procedure ListView_SetGroupMetrics( hwnd : hwnd; pGroupMetrics : LPARAM); + +Begin + SendMessage((hwnd), LVM_SETGROUPMETRICS, 0, pGroupMetrics) +end; + + +// Macro 130 +// #define ListView_GetGroupMetrics(hwnd, pGroupMetrics) \ +// SNDMSG((hwnd), LVM_GETGROUPMETRICS, 0, (LPARAM)pGroupMetrics) + +Procedure ListView_GetGroupMetrics( hwnd : hwnd; pGroupMetrics : LPARAM); + +Begin +SendMessage((hwnd), LVM_GETGROUPMETRICS, 0, pGroupMetrics) +end; + + +// Macro 131 +// #define ListView_EnableGroupView(hwnd, fEnable) \ +// SNDMSG((hwnd), LVM_ENABLEGROUPVIEW, (WPARAM)fEnable, 0) + +Procedure ListView_EnableGroupView( hwnd : hwnd; fEnable : WPARAM); + +Begin + SendMessage((hwnd), LVM_ENABLEGROUPVIEW, fEnable, 0) +end; + + +// Macro 132 +// #define ListView_SortGroups(hwnd, _pfnGroupCompate, _plv) \ +// SNDMSG((hwnd), LVM_SORTGROUPS, (WPARAM)_pfnGroupCompate, (LPARAM)_plv) + +Procedure ListView_SortGroups( hwnd : hwnd; _pfnGroupCompate : WPARAM; _plv : LPARAM); + +Begin + SendMessage((hwnd), LVM_SORTGROUPS, _pfnGroupCompate, _plv) +end; + +// Macro 133 +// #define ListView_InsertGroupSorted(hwnd, structInsert) \ +// SNDMSG((hwnd), LVM_INSERTGROUPSORTED, (WPARAM)structInsert, 0) + +Procedure ListView_InsertGroupSorted( hwnd : hwnd; structInsert : WPARAM); + +Begin + SendMessage((hwnd), LVM_INSERTGROUPSORTED, structInsert, 0) +end; + + +// Macro 134 +// #define ListView_RemoveAllGroups(hwnd) \ +// SNDMSG((hwnd), LVM_REMOVEALLGROUPS, 0, 0) + +Procedure ListView_RemoveAllGroups( hwnd : hwnd); + +Begin +SendMessage((hwnd), LVM_REMOVEALLGROUPS, 0, 0) +end; + + +// Macro 135 +// #define ListView_HasGroup(hwnd, dwGroupId) \ +// SNDMSG((hwnd), LVM_HASGROUP, dwGroupId, 0) + +Procedure ListView_HasGroup( hwnd : hwnd; dwGroupId :DWORD ); + +Begin + SendMessage((hwnd), LVM_HASGROUP, dwGroupId, 0) +end; + + +// Macro 136 +// #define ListView_SetTileViewInfo(hwnd, ptvi) \ +// SNDMSG((hwnd), LVM_SETTILEVIEWINFO, 0, (LPARAM)ptvi) + +Procedure ListView_SetTileViewInfo( hwnd : hwnd; ptvi : LPARAM); + +Begin + SendMessage((hwnd), LVM_SETTILEVIEWINFO, 0, ptvi) +end; + + +// Macro 137 +// #define ListView_GetTileViewInfo(hwnd, ptvi) \ +// SNDMSG((hwnd), LVM_GETTILEVIEWINFO, 0, (LPARAM)ptvi) + +Procedure ListView_GetTileViewInfo( hwnd : hwnd; ptvi : LPARAM); + +Begin + SendMessage((hwnd), LVM_GETTILEVIEWINFO, 0, ptvi) +end; + + +// Macro 138 +// #define ListView_SetTileInfo(hwnd, pti) \ +// SNDMSG((hwnd), LVM_SETTILEINFO, 0, (LPARAM)pti) + +Procedure ListView_SetTileInfo( hwnd : hwnd; pti : LPARAM); + +Begin + SendMessage((hwnd), LVM_SETTILEINFO, 0, pti) +end; + + +// Macro 139 +// #define ListView_GetTileInfo(hwnd, pti) \ +// SNDMSG((hwnd), LVM_GETTILEINFO, 0, (LPARAM)pti) + +Procedure ListView_GetTileInfo( hwnd : hwnd; pti : LPARAM); + +Begin + SendMessage((hwnd), LVM_GETTILEINFO, 0, pti) +end; + + +// Macro 140 +// #define ListView_SetInsertMark(hwnd, lvim) \ +// (BOOL)SNDMSG((hwnd), LVM_SETINSERTMARK, (WPARAM) 0, (LPARAM) (lvim)) + +Function ListView_SetInsertMark( hwnd : hwnd; lvim : lparam ):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), LVM_SETINSERTMARK, 0, lvim)); +end; + + +// Macro 141 +// #define ListView_GetInsertMark(hwnd, lvim) \ +// (BOOL)SNDMSG((hwnd), LVM_GETINSERTMARK, (WPARAM) 0, (LPARAM) (lvim)) + +Function ListView_GetInsertMark( hwnd : hwnd; lvim : lparam ):BOOL; +Begin + Result:=BOOL(SendMessage((hwnd), LVM_GETINSERTMARK, WPARAM (0), LPARAM (lvim))); +end; + + +// Macro 142 +// #define ListView_InsertMarkHitTest(hwnd, point, lvim) \ +// (int)SNDMSG((hwnd), LVM_INSERTMARKHITTEST, (WPARAM)(LPPOINT)(point), (LPARAM)(LPLVINSERTMARK)(lvim)) + +Function ListView_InsertMarkHitTest( hwnd : hwnd; point : LPPOINT; lvim : LPLVINSERTMARK):cint; +Begin + Result:=cint(SendMessage((hwnd), LVM_INSERTMARKHITTEST, wparam(point), lparam(lvim))); +end; + + +// Macro 143 +// #define ListView_GetInsertMarkRect(hwnd, rc) \ +// (int)SNDMSG((hwnd), LVM_GETINSERTMARKRECT, (WPARAM)0, (LPARAM)(LPRECT)(rc)) + +Function ListView_GetInsertMarkRect( hwnd : hwnd; rc : LPRECT):cint; +Begin + Result:=cint(SendMessage((hwnd), LVM_GETINSERTMARKRECT, WPARAM(0), LPARAM(rc))) +end; + + +// Macro 144 +// #define ListView_SetInsertMarkColor(hwnd, color) \ +// (COLORREF)SNDMSG((hwnd), LVM_SETINSERTMARKCOLOR, (WPARAM)0, (LPARAM)(COLORREF)(color)) + +Function ListView_SetInsertMarkColor( hwnd : hwnd; color : COLORREF):COLORREF; + +Begin + Result:=COLORREF(SendMessage((hwnd), LVM_SETINSERTMARKCOLOR, WPARAM(0), color)); +end; + +// Macro 145 +// #define ListView_GetInsertMarkColor(hwnd) \ +// (COLORREF)SNDMSG((hwnd), LVM_GETINSERTMARKCOLOR, (WPARAM)0, (LPARAM)0) + +Function ListView_GetInsertMarkColor( hwnd : hwnd):COLORREF; + +Begin + Result:=COLORREF(SendMessage((hwnd), LVM_GETINSERTMARKCOLOR, WPARAM(0), LPARAM(0))); +end; + +// Macro 146 +// #define ListView_SetInfoTip(hwndLV, plvInfoTip)\ +// (BOOL)SNDMSG((hwndLV), LVM_SETINFOTIP, (WPARAM)0, (LPARAM)plvInfoTip) + +Function ListView_SetInfoTip( hwndLV : hwnd; plvInfoTip : LPARAM):BOOL; +Begin + Result:=BOOL(SendMessage((hwndLV), LVM_SETINFOTIP, WPARAM(0), plvInfoTip)); +end; + +// Macro 147 +// #define ListView_GetSelectedColumn(hwnd) \ +// (UINT)SNDMSG((hwnd), LVM_GETSELECTEDCOLUMN, 0, 0) + +Function ListView_GetSelectedColumn( hwnd : hwnd):UINT; +Begin + Result:=UINT(SendMessage((hwnd), LVM_GETSELECTEDCOLUMN, 0, 0)); +end; + +// Macro 148 +// #define ListView_IsGroupViewEnabled(hwnd) \ +// (BOOL)SNDMSG((hwnd), LVM_ISGROUPVIEWENABLED, 0, 0) + +Function ListView_IsGroupViewEnabled( hwnd : hwnd):BOOL; +Begin + Result:=BOOL(SendMessage((hwnd), LVM_ISGROUPVIEWENABLED, 0, 0)); +end; + +// Macro 149 +// #define ListView_GetOutlineColor(hwnd) \ +// (COLORREF)SNDMSG((hwnd), LVM_GETOUTLINECOLOR, 0, 0) + +Function ListView_GetOutlineColor( hwnd : hwnd):COLORREF; +Begin + Result:=COLORREF(SendMessage((hwnd), LVM_GETOUTLINECOLOR, 0, 0)); +end; + + +// Macro 150 +// #define ListView_SetOutlineColor(hwnd, color) \ +// (COLORREF)SNDMSG((hwnd), LVM_SETOUTLINECOLOR, (WPARAM)0, (LPARAM)(COLORREF)(color)) + +Function ListView_SetOutlineColor( hwnd : hwnd; color : COLORREF):COLORREF; +Begin + Result:=COLORREF(SendMessage((hwnd), LVM_SETOUTLINECOLOR, WPARAM(0), color)); +end; + +// Macro 151 +// #define ListView_CancelEditLabel(hwnd) \ +// (VOID)SNDMSG((hwnd), LVM_CANCELEDITLABEL, (WPARAM)0, (LPARAM)0) + +procedure ListView_CancelEditLabel( hwnd : hwnd); +Begin + SendMessage((hwnd), LVM_CANCELEDITLABEL, WPARAM(0), LPARAM(0)); +end; + +// Macro 152 +// #define ListView_MapIndexToID(hwnd, index) \ +// (UINT)SNDMSG((hwnd), LVM_MAPINDEXTOID, (WPARAM)index, (LPARAM)0) + +Function ListView_MapIndexToID( hwnd : hwnd; index : WPARAM):UINT; + +Begin + Result:=UINT(SendMessage((hwnd), LVM_MAPINDEXTOID, index, LPARAM(0))); +end; + +// Macro 153 +// #define ListView_MapIDToIndex(hwnd, id) \ +// (UINT)SNDMSG((hwnd), LVM_MAPIDTOINDEX, (WPARAM)id, (LPARAM)0) + +Function ListView_MapIDToIndex( hwnd : hwnd; id : WPARAM):UINT; +Begin + Result:=UINT(SendMessage((hwnd), LVM_MAPIDTOINDEX, id, LPARAM(0))); +end; + +function ListView_IsItemVisible(hwnd:hwnd; aindex:cuint):cuint; +begin + Result:=UINT(SendMessage((hwnd),LVM_ISITEMVISIBLE, WPARAM(aindex), LPARAM(0))); +end; +{$ENDIF} + +{$ifdef win32vista} + +function ListView_SetGroupHeaderImageList(hwnd:HWNd;himl:HIMAGELIST):HIMAGELIST; +begin + Result:=HIMAGELIST(SendMessage((hwnd),LVM_SETIMAGELIST, WPARAM(LVSIL_GROUPHEADER), LPARAM(HIMAGELIST((himl))))); +end; + +function ListView_GetGroupHeaderImageList(hwnd:HWND):HIMAGELIST; +begin + Result:=HIMAGELIST(SendMessage((hwnd),LVM_GETIMAGELIST, WPARAM(LVSIL_GROUPHEADER),LPARAM(0))); +end; + +function ListView_GetEmptyText(hwnd:HWND;pszText:LPWSTR; cchText:CUINT):BOOL; +begin + Result:=BOOL(SendMessage((hwnd),LVM_GETEMPTYTEXT, WPARAM(cchText), LPARAM(pszText))); +end; + +function ListView_GetFooterRect(hwnd:HWND; prc:PRECT):BOOL; +begin + Result:=BOOL(SendMessage((hwnd),LVM_GETFOOTERRECT, WPARAM(0), LPARAM(prc))); +end; + +function ListView_GetFooterInfo(hwnd:HWND;plvfi: LPLVFOOTERINFO ):BOOL; +begin + Result:=BOOL(SendMessage((hwnd),LVM_GETFOOTERINFO, WPARAM(0), LPARAM(plvfi))); +end; + +function ListView_GetFooterItemRect(hwnd:HWND;iItem:CUINT;prc:PRECT):BOOL; +begin + Result:=BOOL(SendMessage((hwnd),LVM_GETFOOTERITEMRECT, WPARAM(iItem), LPARAM(prc))); +end; + +function ListView_GetFooterItem(hwnd:HWND;iItem:CUINT; pfi:PLVFOOTERITEM):BOOL; +begin + Result:=BOOL(SendMessage((hwnd),LVM_GETFOOTERITEM, WPARAM(iItem), LPARAM(pfi))); +end; + +// (hwnd), LVM_GETITEMINDEXRECT, (WPARAM)(LVITEMINDEX*)(plvii), \ +// ((prc) ? ((((LPRECT)(prc))->top = (iSubItem)), (((LPRECT)(prc))->left = (code)), (LPARAM)(prc)) : (LPARAM)(LPRECT)NULL)) + +function ListView_GetItemIndexRect(hwnd:hwnd; plvii:PLVITEMINDEX; iSubItem:clong; code:clong; prc:LPRECT) :BOOL; +begin + if assigned(prc) then + begin + prc^.top:=iSubItem; + prc^.left:=code; + end; + Result:=BOOL(SendMessage((hwnd), LVM_GETITEMINDEXRECT, WPARAM(pLVITEMINDEX(plvii)), LPARAM(PRC))); +end; + +function ListView_SetItemIndexState(hwndLV:HWND; plvii:PLVITEMINDEX; data:CUINT; mask:CUINT):HRESULT; + var macro_lvi: LV_ITEM ; +begin + macro_lvi.stateMask := (mask); + macro_lvi.state := (data); + Result:=HRESULT(SendMessage((hwndLV),LVM_SETITEMINDEXSTATE, WPARAM(pLVITEMINDEX(plvii)), LPARAM(PLV_ITEM(@macro_lvi)))); +end; + +function ListView_GetNextItemIndex(hwnd:HWND;plvii:PLVITEMINDEX; flags:LPARAM):BOOL; +begin + Result:=BOOL(SendMessage((hwnd),LVM_GETNEXTITEMINDEX, WPARAM(pLVITEMINDEX(plvii)), MAKELPARAM(flags, 0))); +end; +{$endif} + +// Macro 154 +// #define ListView_SetBkImage(hwnd, plvbki) \ +// (BOOL)SNDMSG((hwnd), LVM_SETBKIMAGE, 0, (LPARAM)(plvbki)) + +Function ListView_SetBkImage( hwnd : hwnd; plvbki : LPARAM):BOOL; +Begin + Result:=BOOL(SendMessage((hwnd), LVM_SETBKIMAGE, 0, plvbki)); +end; + +// Macro 155 +// #define ListView_GetBkImage(hwnd, plvbki) \ +// (BOOL)SNDMSG((hwnd), LVM_GETBKIMAGE, 0, (LPARAM)(plvbki)) + +Function ListView_GetBkImage( hwnd : hwnd; plvbki : LPARAM):BOOL; +Begin + Result:=BOOL(SendMessage((hwnd), LVM_GETBKIMAGE, 0, plvbki)); +end; + +// Macro 156 +// #define TreeView_InsertItem(hwnd, lpis) \ +// (HTREEITEM)SNDMSG((hwnd), TVM_INSERTITEM, 0, (LPARAM)(LPTV_INSERTSTRUCT)(lpis)) + +Function TreeView_InsertItem( hwnd : hwnd; lpis : LPTV_INSERTSTRUCT):HTREEITEM;inline; +Begin + Result:=HTREEITEM(SendMessage((hwnd), TVM_INSERTITEM, 0, LPARAM(lpis))); +end; + + +Function TreeView_InsertItem( hwnd : hwnd; const lpis : TV_INSERTSTRUCT):HTREEITEM;inline; +Begin + Result:=HTREEITEM(SendMessage((hwnd), TVM_INSERTITEM, 0, LPARAM(@lpis))); +end; + +// Macro 157 +// #define TreeView_DeleteItem(hwnd, hitem) \ +// (BOOL)SNDMSG((hwnd), TVM_DELETEITEM, 0, (LPARAM)(HTREEITEM)(hitem)) + +Function TreeView_DeleteItem( hwnd : hwnd; hitem : HTREEITEM):BOOL; +Begin + Result:=BOOL(SendMessage((hwnd), TVM_DELETEITEM, 0, LPARAM(hitem))); +end; + + +// Macro 158 +// #define TreeView_DeleteAllItems(hwnd) \ +// (BOOL)SNDMSG((hwnd), TVM_DELETEITEM, 0, (LPARAM)TVI_ROOT) + +Function TreeView_DeleteAllItems( hwnd : hwnd):BOOL; +Begin + Result:=BOOL(SendMessage((hwnd), TVM_DELETEITEM, 0, LPARAM(HTREEITEM(TVI_ROOT)))); +end; + + +// Macro 159 +// #define TreeView_Expand(hwnd, hitem, code) \ +// (BOOL)SNDMSG((hwnd), TVM_EXPAND, (WPARAM)(code), (LPARAM)(HTREEITEM)(hitem)) + +Function TreeView_Expand( hwnd : hwnd; hitem : HTREEITEM; code : WPARAM):BOOL; +Begin + Result:=BOOL(SendMessage((hwnd), TVM_EXPAND, code, lparam(hitem))) +end; + + +// Macro 160 +// #define TreeView_GetItemRect(hwnd, hitem, prc, code) \ +// (*(HTREEITEM *)prc = (hitem), (BOOL)SNDMSG((hwnd), TVM_GETITEMRECT, (WPARAM)(code), (LPARAM)(RECT *)(prc))) + +Function TreeView_GetItemRect( hwnd : hwnd; hitem: HTREEITEM; code : WPARAM; prc : pRECT):BOOL;inline; +Begin + HTREEITEM(prc):=HITEM; + Result:=Bool(SendMessage((hwnd), TVM_GETITEMRECT, code, LPARAM(prc))); +end; + +Function TreeView_GetItemRect( hwnd : hwnd; hitem: HTREEITEM; var prc : TRECT;code : Bool):BOOL;inline; +Begin + HTREEITEM(Pointer(@prc)^):=HITEM; + Result:=Bool(SendMessage((hwnd), TVM_GETITEMRECT, WPARAM(code), LPARAM(@prc))); +end; + +// Macro 161 +// #define TreeView_GetCount(hwnd) \ +// (UINT)SNDMSG((hwnd), TVM_GETCOUNT, 0, 0) + +Function TreeView_GetCount( hwnd : hwnd):UINT; +Begin + Result:=UINT(SendMessage((hwnd), TVM_GETCOUNT, 0, 0)) +end; + +// Macro 162 +// #define TreeView_GetIndent(hwnd) \ +// (UINT)SNDMSG((hwnd), TVM_GETINDENT, 0, 0) + +Function TreeView_GetIndent( hwnd : hwnd):UINT; +Begin + Result:=UINT(SendMessage((hwnd), TVM_GETINDENT, 0, 0)) +end; + + +// Macro 163 +// #define TreeView_SetIndent(hwnd, indent) \ +// (BOOL)SNDMSG((hwnd), TVM_SETINDENT, (WPARAM)(indent), 0) + +Function TreeView_SetIndent( hwnd : hwnd; indent : WPARAM):BOOL; +Begin + Result:=BOOL(SendMessage((hwnd), TVM_SETINDENT, indent, 0)) +end; + + +// Macro 164 +// #define TreeView_GetImageList(hwnd, iImage) \ +// (HIMAGELIST)SNDMSG((hwnd), TVM_GETIMAGELIST, iImage, 0) + +Function TreeView_GetImageList( hwnd : hwnd; iImage : cint ):HIMAGELIST; +Begin + Result:=HIMAGELIST(SendMessage((hwnd), TVM_GETIMAGELIST, iImage, 0)) +end; + + +// Macro 165 +// #define TreeView_SetImageList(hwnd, himl, iImage) \ +// (HIMAGELIST)SNDMSG((hwnd), TVM_SETIMAGELIST, iImage, (LPARAM)(HIMAGELIST)(himl)) + +Function TreeView_SetImageList( hwnd : hwnd; himl : HIMAGELIST; iImage : cint ):HIMAGELIST; +Begin + Result:=HIMAGELIST(SendMessage((hwnd), TVM_SETIMAGELIST, iImage, himl)) +end; + +// Macro 166 +// #define TreeView_GetNextItem(hwnd, hitem, code) \ +// (HTREEITEM)SNDMSG((hwnd), TVM_GETNEXTITEM, (WPARAM)(code), (LPARAM)(HTREEITEM)(hitem)) + +Function TreeView_GetNextItem( hwnd : hwnd; hitem : HTREEITEM; code : WPARAM):HTREEITEM; + +Begin + Result:=HTREEITEM(SendMessage((hwnd), TVM_GETNEXTITEM, code, lparam(hitem))) +end; + + +// Macro 167 + +function TreeView_GetChild(hwnd:hwnd; hitem:HTREEITEM) : HTREEITEM; + +Begin + Result:=TreeView_GetNextItem(hwnd, hitem, TVGN_CHILD) +End; +// Macro 168 + +// #define TreeView_GetNextSibling(hwnd:hwnd; hitem:HTREEITEM); +// (hwnd, hitem) +// TreeView_GetNextItem(hwnd, hitem, TVGN_NEXT) + + + +function TreeView_GetNextSibling(hwnd:hwnd; hitem:HTREEITEM) : HTREEITEM; +// (hwnd, hitem) +// TreeView_GetNextItem(hwnd, hitem, TVGN_NEXT) + +Begin + Result:=TreeView_getNextItem(hwnd,hitem,TVGN_NEXT); +end; + +// Macro 169 +function TreeView_GetPrevSibling(hwnd:hwnd; hitem:HTREEITEM) : HTREEITEM; +begin + Result:=TreeView_GetNextItem(hwnd, hitem, TVGN_PREVIOUS); +end; + +// Macro 170 + +function TreeView_GetParent(hwnd:hwnd; hitem:HTREEITEM) : HTREEITEM; +begin + Result:=TreeView_GetNextItem(hwnd, hitem, TVGN_PARENT) +end; + +// Macro 171 +// #define TreeView_GetFirstVisible(hwnd:hwnd); +// TreeView_GetNextItem(hwnd, NULL, TVGN_FIRSTVISIBLE) + +function TreeView_GetFirstVisible(hwnd:hwnd) : HTREEITEM;inline; +begin + Result:=TreeView_GetNextItem(hwnd, NIL, TVGN_FIRSTVISIBLE) +end; + +// Macro 172 + +//#define TreeView_GetNextVisible(hwnd:hwnd; hitem:HTREEITEM); +//(hwnd, hitem) TreeView_GetNextItem(hwnd, hitem, TVGN_NEXTVISIBLE) +function TreeView_GetNextVisible(hwnd:hwnd; hitem:HTREEITEM) : HTREEITEM;inline; +begin + Result:=TreeView_GetNextItem(hwnd, hitem, TVGN_NEXTVISIBLE) +end; + +// Macro 173 +//#define TreeView_GetPrevVisible(hwnd:hwnd; hitem:HTREEITEM); +// (hwnd, hitem) TreeView_GetNextItem(hwnd, hitem, TVGN_PREVIOUSVISIBLE) + + +function TreeView_GetPrevVisible(hwnd:hwnd; hitem:HTREEITEM) : HTREEITEM;inline; +Begin + Result:=TreeView_GetNextItem(hwnd, hitem, TVGN_PREVIOUSVISIBLE); +end; + +// Macro 174 + +function TreeView_GetSelection(hwnd:hwnd) : HTREEITEM;inline; +begin + Result:=TreeView_GetNextItem(hwnd, NIL, TVGN_CARET); +end; + +// Macro 175 + +//#define TreeView_GetDropHilight(hwnd:hwnd); +//TreeView_GetNextItem(hwnd, NULL, TVGN_DROPHILITE) + +function TreeView_GetDropHilight(hwnd:hwnd) : HTREEITEM;inline; + +begin + Result:=TreeView_GetNextItem(hwnd, NIL, TVGN_DROPHILITE); +end; + +function TreeView_GetDropHilite(hwnd:hwnd) : HTREEITEM;inline; + +begin + Result:=TreeView_GetNextItem(hwnd, NIL, TVGN_DROPHILITE); +end; + + +// Macro 176 + +function TreeView_GetRoot(hwnd:hwnd) : HTREEITEM;inline; + +begin + Result:=TreeView_GetNextItem(hwnd, NIL, TVGN_ROOT); +end; + +// Macro 177 +//#define TreeView_GetLastVisible(hwnd:hwnd); +//TreeView_GetNextItem(hwnd, NULL, TVGN_LASTVISIBLE) + +function TreeView_GetLastVisible(hwnd:hwnd) : HTREEITEM;inline; +begin + Result:=TreeView_GetNextItem(hwnd, NIL, TVGN_LASTVISIBLE) +end; + +// Macro 178 + + +Function TreeView_Select( hwnd : hwnd; hitem : HTREEITEM; code : WPARAM):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), TVM_SELECTITEM, code, LPARAM(hitem))) +end; + +// Macro 179 +// #define TreeView_SelectItem(hwnd, hitem) TreeView_Select(hwnd, hitem, TVGN_CARET) +// Macro 180 +// #define TreeView_SelectDropTarget(hwnd, hitem) TreeView_Select(hwnd, hitem, TVGN_DROPHILITE) +// Macro 181 +// #define TreeView_SelectSetFirstVisible(hwnd, hitem) TreeView_Select(hwnd, hitem, TVGN_FIRSTVISIBLE) + +// Macro 179 +Procedure TreeView_SelectItem(hwnd:hwnd; hitem:HTREEITEM); +Begin + TreeView_Select(hwnd, hitem, TVGN_CARET) +End; + +// Macro 180 +Procedure TreeView_SelectDropTarget(hwnd:hwnd; hitem:HTREEITEM); +Begin + TreeView_Select(hwnd, hitem, TVGN_DROPHILITE) +End; + +// Macro 181 +Procedure TreeView_SelectSetFirstVisible(hwnd:hwnd; hitem:HTREEITEM); +Begin + TreeView_Select(hwnd, hitem, TVGN_FIRSTVISIBLE) +End; + +// Macro 182 +// #define TreeView_GetItem(hwnd, pitem) \ +// (BOOL)SNDMSG((hwnd), TVM_GETITEM, 0, (LPARAM)(TV_ITEM *)(pitem)) + +Function TreeView_GetItem( hwnd : hwnd;var pitem : TV_ITEM ):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), TVM_GETITEM, 0, LPARAM(@pitem))) +end; + + +// Macro 183 + +//#define TreeView_SetItem(hwnd, pitem) \ +// (BOOL)SNDMSG((hwnd), TVM_SETITEM, 0, (LPARAM)(const TV_ITEM *)(pitem)) + +Function TreeView_SetItem( hwnd : hwnd;const pitem : TV_ITEM ):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), TVM_SETITEM, 0, LParam(@pitem))) +end; + + +// Macro 184 + +//#define TreeView_EditLabel(hwnd, hitem) \ +// (HWND)SNDMSG((hwnd), TVM_EDITLABEL, 0, (LPARAM)(HTREEITEM)(hitem)) + +Function TreeView_EditLabel( hwnd : hwnd; hitem : HTREEITEM):HWND; + +Begin + Result:=Windows.HWND(SendMessage((hwnd), TVM_EDITLABEL, 0, LParam(hitem))) +end; + + +// Macro 185 + +//#define TreeView_GetEditControl(hwnd) \ +// (HWND)SNDMSG((hwnd), TVM_GETEDITCONTROL, 0, 0) + +Function TreeView_GetEditControl( hwnd : hwnd):HWND; + +Begin + Result:=Windows.HWND(SendMessage((hwnd), TVM_GETEDITCONTROL, 0, 0)) +end; + + +// Macro 186 + +//#define TreeView_GetVisibleCount(hwnd) \ +// (UINT)SNDMSG((hwnd), TVM_GETVISIBLECOUNT, 0, 0) + +Function TreeView_GetVisibleCount( hwnd : hwnd):UINT; + +Begin + Result:=UINT(SendMessage((hwnd), TVM_GETVISIBLECOUNT, 0, 0)) +end; + + +// Macro 187 + +//#define TreeView_HitTest(hwnd, lpht) \ +// (HTREEITEM)SNDMSG((hwnd), TVM_HITTEST, 0, (LPARAM)(LPTV_HITTESTINFO)(lpht)) + +Function TreeView_HitTest( hwnd : hwnd; lpht : LPTV_HITTESTINFO):HTREEITEM;inline; + +Begin + Result:=HTREEITEM(SendMessage((hwnd), TVM_HITTEST, 0, lparam(lpht))) +end; + + +Function TreeView_HitTest( hwnd : hwnd; var lpht : TV_HITTESTINFO):HTREEITEM;inline; + +Begin + Result:=HTREEITEM(SendMessage((hwnd), TVM_HITTEST, 0, lparam(@lpht))) +end; +// Macro 188 + +//#define TreeView_CreateDragImage(hwnd, hitem) \ +// (HIMAGELIST)SNDMSG((hwnd), TVM_CREATEDRAGIMAGE, 0, (LPARAM)(HTREEITEM)(hitem)) + +Function TreeView_CreateDragImage( hwnd : hwnd; hitem : HTREEITEM):HIMAGELIST; + +Begin + Result:=HIMAGELIST(SendMessage((hwnd), TVM_CREATEDRAGIMAGE, 0, Lparam(hitem))) +end; + + +// Macro 189 + +//#define TreeView_SortChildren(hwnd, hitem, recurse) \ +// (BOOL)SNDMSG((hwnd), TVM_SORTCHILDREN, (WPARAM)(recurse), (LPARAM)(HTREEITEM)(hitem)) + +Function TreeView_SortChildren( hwnd : hwnd; hitem : HTREEITEM; recurse : WPARAM):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), TVM_SORTCHILDREN, recurse, LParam(hitem))) +end; + + +// Macro 190 + +//#define TreeView_EnsureVisible(hwnd, hitem) \ +// (BOOL)SNDMSG((hwnd), TVM_ENSUREVISIBLE, 0, (LPARAM)(HTREEITEM)(hitem)) + +Function TreeView_EnsureVisible( hwnd : hwnd; hitem : HTREEITEM):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), TVM_ENSUREVISIBLE, 0, LParam(hitem))) +end; + + +// Macro 191 + +//#define TreeView_SortChildrenCB(hwnd, psort, recurse) \ +// (BOOL)SNDMSG((hwnd), TVM_SORTCHILDRENCB, (WPARAM)(recurse), \ +// (LPARAM)(LPTV_SORTCB)(psort)) + +Function TreeView_SortChildrenCB( hwnd : hwnd;psort :lpTV_sortcb; recurse : WPARAM):BOOL;inline; + +Begin + Result:=BOOL(SendMessage((hwnd), TVM_SORTCHILDRENCB, recurse, LPARAM(psort))) +end; + + +Function TreeView_SortChildrenCB( hwnd : hwnd;const psort :tagTVsortcb; recurse : WPARAM):BOOL;inline; + +Begin + Result:=BOOL(SendMessage((hwnd), TVM_SORTCHILDRENCB, recurse, LPARAM(@psort))) +end; + + +// Macro 192 + +//#define TreeView_EndEditLabelNow(hwnd, fCancel) \ +// (BOOL)SNDMSG((hwnd), TVM_ENDEDITLABELNOW, (WPARAM)(fCancel), 0) + +Function TreeView_EndEditLabelNow( hwnd : hwnd; fCancel : WPARAM):BOOL;inline; + +Begin + Result:=BOOL(SendMessage((hwnd), TVM_ENDEDITLABELNOW, fCancel, 0)) +end; + + +Function TreeView_EndEditLabelNow( hwnd : hwnd; fCancel : Bool):BOOL;inline; + +Begin + Result:=BOOL(SendMessage((hwnd), TVM_ENDEDITLABELNOW, WPARAM(fCancel), 0)) +end; + + +// Macro 193 + +//#define TreeView_SetToolTips(hwnd, hwndTT) \ +// (HWND)SNDMSG((hwnd), TVM_SETTOOLTIPS, (WPARAM)(hwndTT), 0) + +Function TreeView_SetToolTips( hwnd : hwnd; hwndTT : WPARAM):HWND; + +Begin + Result:=Windows.HWND(SendMessage((hwnd), TVM_SETTOOLTIPS, hwndTT, 0)) +end; + + +// Macro 194 + +//#define TreeView_GetToolTips(hwnd) \ +// (HWND)SNDMSG((hwnd), TVM_GETTOOLTIPS, 0, 0) + +Function TreeView_GetToolTips( hwnd : hwnd):HWND; + +Begin + Result:=Windows.HWND(SendMessage((hwnd), TVM_GETTOOLTIPS, 0, 0)) +end; + + +// Macro 195 + +//#define TreeView_GetISearchString(hwndTV, lpsz) \ +// (BOOL)SNDMSG((hwndTV), TVM_GETISEARCHSTRING, 0, (LPARAM)(LPTSTR)(lpsz)) + +Function TreeView_GetISearchString( hwndTV : hwnd; lpsz : LPTSTR):BOOL; + +Begin + Result:=BOOL(SendMessage((hwndTV), TVM_GETISEARCHSTRING, 0, LPARAM(lpsz))) +end; + + +// Macro 196 + +//#define TreeView_SetInsertMark(hwnd, hItem, fAfter) \ +// (BOOL)SNDMSG((hwnd), TVM_SETINSERTMARK, (WPARAM) (fAfter), (LPARAM) (hItem)) + +Function TreeView_SetInsertMark( hwnd : hwnd; hItem : LParam ; fAfter : WParam ):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), TVM_SETINSERTMARK, (fAfter), (hItem))) +end; + + +// Macro 197 + +//#define TreeView_SetUnicodeFormat(hwnd, fUnicode) \ +// (BOOL)SNDMSG((hwnd), TVM_SETUNICODEFORMAT, (WPARAM)(fUnicode), 0) + +Function TreeView_SetUnicodeFormat( hwnd : hwnd; fUnicode : WPARAM):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), TVM_SETUNICODEFORMAT, fUnicode, 0)) +end; + + +// Macro 198 + +//#define TreeView_GetUnicodeFormat(hwnd) \ +// (BOOL)SNDMSG((hwnd), TVM_GETUNICODEFORMAT, 0, 0) + +Function TreeView_GetUnicodeFormat( hwnd : hwnd):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), TVM_GETUNICODEFORMAT, 0, 0)) +end; + + +// Macro 199 + +//#define TreeView_SetItemHeight(hwnd, iHeight) \ +// (int)SNDMSG((hwnd), TVM_SETITEMHEIGHT, (WPARAM)(iHeight), 0) + +Function TreeView_SetItemHeight( hwnd : hwnd; iHeight : WPARAM):cint; + +Begin + Result:=cint(SendMessage((hwnd), TVM_SETITEMHEIGHT, iHeight, 0)) +end; + + +// Macro 200 + +//#define TreeView_GetItemHeight(hwnd) \ +// (int)SNDMSG((hwnd), TVM_GETITEMHEIGHT, 0, 0) + +Function TreeView_GetItemHeight( hwnd : hwnd):cint; + +Begin + Result:=cint(SendMessage((hwnd), TVM_GETITEMHEIGHT, 0, 0)) +end; + + +// Macro 201 + +//#define TreeView_SetBkColor(hwnd, clr) \ +// (COLORREF)SNDMSG((hwnd), TVM_SETBKCOLOR, 0, (LPARAM)(clr)) + +Function TreeView_SetBkColor( hwnd : hwnd; clr : LPARAM):COLORREF; + +Begin + Result:=COLORREF(SendMessage((hwnd), TVM_SETBKCOLOR, 0, clr)) +end; + + +// Macro 202 + +//#define TreeView_SetTextColor(hwnd, clr) \ +// (COLORREF)SNDMSG((hwnd), TVM_SETTEXTCOLOR, 0, (LPARAM)(clr)) + +Function TreeView_SetTextColor( hwnd : hwnd; clr : LPARAM):COLORREF; + +Begin + Result:=COLORREF(SendMessage((hwnd), TVM_SETTEXTCOLOR, 0, clr)) +end; + + +// Macro 203 + +//#define TreeView_GetBkColor(hwnd) \ +// (COLORREF)SNDMSG((hwnd), TVM_GETBKCOLOR, 0, 0) + +Function TreeView_GetBkColor( hwnd : hwnd):COLORREF; + +Begin + Result:=COLORREF(SendMessage((hwnd), TVM_GETBKCOLOR, 0, 0)) +end; + + +// Macro 204 + +//#define TreeView_GetTextColor(hwnd) \ +// (COLORREF)SNDMSG((hwnd), TVM_GETTEXTCOLOR, 0, 0) + +Function TreeView_GetTextColor( hwnd : hwnd):COLORREF; + +Begin + Result:=COLORREF(SendMessage((hwnd), TVM_GETTEXTCOLOR, 0, 0)) +end; + + +// Macro 205 + +//#define TreeView_SetScrollTime(hwnd, uTime) \ +// (UINT)SNDMSG((hwnd), TVM_SETSCROLLTIME, uTime, 0) + +Function TreeView_SetScrollTime( hwnd : hwnd; uTime : wparam ):UINT; + +Begin + Result:=UINT(SendMessage((hwnd), TVM_SETSCROLLTIME, uTime, 0)) +end; + + +// Macro 206 + +//#define TreeView_GetScrollTime(hwnd) \ +// (UINT)SNDMSG((hwnd), TVM_GETSCROLLTIME, 0, 0) + +Function TreeView_GetScrollTime( hwnd : hwnd):UINT; + +Begin + Result:=UINT(SendMessage((hwnd), TVM_GETSCROLLTIME, 0, 0)) +end; + + +// Macro 207 + +//#define TreeView_SetInsertMarkColor(hwnd, clr) \ +// (COLORREF)SNDMSG((hwnd), TVM_SETINSERTMARKCOLOR, 0, (LPARAM)(clr)) + +Function TreeView_SetInsertMarkColor( hwnd : hwnd; clr : LPARAM):COLORREF; + +Begin + Result:=COLORREF(SendMessage((hwnd), TVM_SETINSERTMARKCOLOR, 0, clr)) +end; + + +// Macro 208 + +//#define TreeView_GetInsertMarkColor(hwnd) \ +// (COLORREF)SNDMSG((hwnd), TVM_GETINSERTMARKCOLOR, 0, 0) + +Function TreeView_GetInsertMarkColor( hwnd : hwnd):COLORREF; + +Begin + Result:=COLORREF(SendMessage((hwnd), TVM_GETINSERTMARKCOLOR, 0, 0)) +end; + + +// Macro 209 + +//#define TreeView_SetItemState(hwndTV, hti, data, _mask) \ +// { TVITEM _ms_TVi;\ +// _ms_TVi.mask = TVIF_STATE; \ +// _ms_TVi.hItem = hti; \ +// _ms_TVi.stateMask = _mask;\ +// _ms_TVi.state = data;\ +// SNDMSG((hwndTV), TVM_SETITEM, 0, (LPARAM)(TV_ITEM *)&_ms_TVi);\ +// } + +Procedure TreeView_SetItemState(hwndTV:HWND;hti:HTreeItem;data:UINT;_mask:UINT); + +var _ms_TVi : TVITEM; + +Begin + _ms_TVi.mask:=TVIF_STATE; + _ms_TVi.hItem := hti; + _ms_TVi.stateMask := _mask; + _ms_TVi.state := data; + SendMessage(hwndTV,TVM_SETITEM, 0, LPARAM(@_ms_TVi)); +end; + + +// Macro 210 + +//#define TreeView_SetCheckState(hwndTV, hti, fCheck) \ +// TreeView_SetItemState(hwndTV, hti, INDEXTOSTATEIMAGEMASK((fCheck)?2:1), TVIS_STATEIMAGEMASK) + +Procedure TreeView_SetCheckState( hwndTV : hwnd; hti : HTreeItem ; fCheck : bool ); + +var j : cint; + +Begin + IF not fCheck Then // (or inc(longint(fCheck)) if you like it dirty) + j:=1 + Else + j:=2; + + TreeView_SetItemState(hwndTV, hti, INDEXTOSTATEIMAGEMASK(j), TVIS_STATEIMAGEMASK) +end; + + +{$ifdef IE5plus} + +// Macro 211 + +//#define TreeView_GetItemState(hwndTV, hti, mask) \ +// (UINT)SNDMSG((hwndTV), TVM_GETITEMSTATE, (WPARAM)(hti), (LPARAM)(mask)) + +Function TreeView_GetItemState( hwndTV : hwnd; hti : HTreeItem; statemask : UINT):UINT; + +Begin + Result:=UINT(SendMessage((hwndTV), TVM_GETITEMSTATE, WPARAM(hti), LPARAM(statemask))) +end; + +// Macro 212 +// #define TreeView_GetCheckState(hwndTV, hti) \ +// ((((UINT)(SNDMSG((hwndTV), TVM_GETITEMSTATE, (WPARAM)(hti), TVIS_STATEIMAGEMASK))) >> 12) -1) + +Function TreeView_GetCheckState( hwndTV : hwnd; hti : HTreeItem):UINT; + +Begin + Result:=((UINT(SendMessage((hwndTV), TVM_GETITEMSTATE, wparam(hti), TVIS_STATEIMAGEMASK) shr 12) -1)); +end; + + +// Macro 213 + +// #define TreeView_SetLineColor(hwnd, clr) \ +// (COLORREF)SNDMSG((hwnd), TVM_SETLINECOLOR, 0, (LPARAM)(clr)) + +Function TreeView_SetLineColor( hwnd : hwnd; clr : LPARAM):COLORREF; + +Begin + Result:=COLORREF(SendMessage((hwnd), TVM_SETLINECOLOR, 0, clr)) +end; + + +// Macro 214 + +// #define TreeView_GetLineColor(hwnd) \ +// (COLORREF)SNDMSG((hwnd), TVM_GETLINECOLOR, 0, 0) + +Function TreeView_GetLineColor( hwnd : hwnd):COLORREF; + +Begin + Result:=COLORREF(SendMessage((hwnd), TVM_GETLINECOLOR, 0, 0)) +end; + + +// Macro 215 +// #define TreeView_MapAccIDToHTREEITEM(hwnd, id) \ +// (HTREEITEM)SNDMSG((hwnd), TVM_MAPACCIDTOHTREEITEM, id, 0) + +Function TreeView_MapAccIDToHTREEITEM( hwnd : hwnd; id :uint):HTREEITEM; + +Begin + Result:=HTREEITEM(SendMessage((hwnd), TVM_MAPACCIDTOHTREEITEM, id, 0)) +end; + + +// Macro 216 +// #define TreeView_MapHTREEITEMToAccID(hwnd, htreeitem) \ +// (UINT)SNDMSG((hwnd), TVM_MAPHTREEITEMTOACCID, (WPARAM)htreeitem, 0) + +Function TreeView_MapHTREEITEMToAccID( hwnd : hwnd; htreeitem : WPARAM):UINT; + +Begin + Result:=UINT(SendMessage((hwnd), TVM_MAPHTREEITEMTOACCID, htreeitem, 0)) +end; +{$endif} + +{$ifdef win32vista} +function TreeView_GetSelectedCount(hwnd:hwnd):DWORD; +Begin + Result:=DWORD(SendMessage((hwnd),TVM_GETSELECTEDCOUNT, 0, 0)); +end; + +function TreeView_ShowInfoTip(hwnd:HWND; hitem:HTREEITEM):DWORD; +Begin + Result:=DWORD(SendMessage((hwnd),TVM_SHOWINFOTIP, 0, LPARAM(hitem))); +end; + +function TreeView_GetItemPartRect(hwnd:HWND; hitem:HTREEITEM; prc:prect; partid:TVITEMPART):bool; +var info : TVGETITEMPARTRECTINFO; +Begin + info.hti := (hitem); + info.prc := (prc); + info.partID := (partid); + Result:=BOOL(SendMessage((hwnd), TVM_GETITEMPARTRECT, 0, LPARAM(@info))); +end; +{$endif} + +// Macro 217 + +//#define TabCtrl_GetImageList(hwnd) \ +// (HIMAGELIST)SNDMSG((hwnd), TCM_GETIMAGELIST, 0, DWord(0)) + +Function TabCtrl_GetImageList( hwnd : hwnd):HIMAGELIST; + +Begin + Result:=HIMAGELIST(SendMessage((hwnd), TCM_GETIMAGELIST, 0, LPARAM(0))) +end; + + +// Macro 218 + +//#define TabCtrl_SetImageList(hwnd, himl) \ +// (HIMAGELIST)SNDMSG((hwnd), TCM_SETIMAGELIST, 0, (LPARAM)(HIMAGELIST)(himl)) + +Function TabCtrl_SetImageList( hwnd : hwnd; himl : HIMAGELIST):HIMAGELIST; + +Begin + Result:=HIMAGELIST(SendMessage((hwnd), TCM_SETIMAGELIST, 0, himl)) +end; + + +// Macro 219 + +//#define TabCtrl_GetItemCount(hwnd) \ +// (int)SNDMSG((hwnd), TCM_GETITEMCOUNT, 0, DWord(0)) + +Function TabCtrl_GetItemCount( hwnd : hwnd):cint; + +Begin + Result:=cint(SendMessage((hwnd), TCM_GETITEMCOUNT, 0, LPARAM(0))) +end; + + +// Macro 220 + +//#define TabCtrl_GetItem(hwnd, iItem, pitem) \ +// (BOOL)SNDMSG((hwnd), TCM_GETITEM, (WPARAM)(int)(iItem), (LPARAM)(TC_ITEM *)(pitem)) + +Function TabCtrl_GetItem( hwnd : hwnd; iItem : cint;var pitem : TC_ITEM ):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), TCM_GETITEM, iItem, LPARAM(@pitem))) +end; + + +// Macro 221 + +//#define TabCtrl_SetItem(hwnd, iItem, pitem) \ +// (BOOL)SNDMSG((hwnd), TCM_SETITEM, (WPARAM)(int)(iItem), (LPARAM)(TC_ITEM *)(pitem)) + +Function TabCtrl_SetItem( hwnd : hwnd; iItem : cint;var pitem : TC_ITEM ):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), TCM_SETITEM, iItem, LPARAM(@pitem))) +end; + + +// Macro 222 + +//#define TabCtrl_InsertItem(hwnd, iItem, pitem) \ +// (int)SNDMSG((hwnd), TCM_INSERTITEM, (WPARAM)(int)(iItem), (LPARAM)(const TC_ITEM *)(pitem)) + +Function TabCtrl_InsertItem( hwnd : hwnd; iItem : cint;const pitem : TC_ITEM ):cint; + +Begin + Result:=cint(SendMessage((hwnd), TCM_INSERTITEM, iItem, LPARAM(@pitem))); +end; + + +// Macro 223 + +//#define TabCtrl_DeleteItem(hwnd, i) \ +// (BOOL)SNDMSG((hwnd), TCM_DELETEITEM, (WPARAM)(int)(i), DWord(0)) + +Function TabCtrl_DeleteItem( hwnd : hwnd; i : cint):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), TCM_DELETEITEM, (i), LPARAM(0))) +end; + + +// Macro 224 + +//#define TabCtrl_DeleteAllItems(hwnd) \ +// (BOOL)SNDMSG((hwnd), TCM_DELETEALLITEMS, 0, DWord(0)) + +Function TabCtrl_DeleteAllItems( hwnd : hwnd):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), TCM_DELETEALLITEMS, 0, LPARAM(0))) +end; + + +// Macro 225 + +//#define TabCtrl_GetItemRect(hwnd, i, prc) \ +// (BOOL)SNDMSG((hwnd), TCM_GETITEMRECT, (WPARAM)(int)(i), (LPARAM)(RECT *)(prc)) + +Function TabCtrl_GetItemRect( hwnd : hwnd; i : cint;var prc : RECT ):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), TCM_GETITEMRECT, (i), LPARAM(@prc))) +end; + + +// Macro 226 + +//#define TabCtrl_GetCurSel(hwnd) \ +// (int)SNDMSG((hwnd), TCM_GETCURSEL, 0, 0) + +Function TabCtrl_GetCurSel( hwnd : hwnd):cint; + +Begin + Result:=cint(SendMessage((hwnd), TCM_GETCURSEL, 0, 0)) +end; + + +// Macro 227 + +//#define TabCtrl_SetCurSel(hwnd, i) \ +// (int)SNDMSG((hwnd), TCM_SETCURSEL, (WPARAM)(i), 0) + +Function TabCtrl_SetCurSel( hwnd : hwnd; i : WPARAM):cint; + +Begin + Result:=cint(SendMessage((hwnd), TCM_SETCURSEL, (i), 0)) +end; + + +// Macro 228 + +//#define TabCtrl_HitTest(hwndTC, pinfo) \ +// (int)SNDMSG((hwndTC), TCM_HITTEST, 0, (LPARAM)(TC_HITTESTINFO *)(pinfo)) + +Function TabCtrl_HitTest( hwndTC : hwnd;var pinfo : TC_HITTESTINFO ):cint;inline; + +Begin + Result:=cint(SendMessage((hwndTC), TCM_HITTEST, 0, LPARAM(@pinfo))) +end; + + +Function TabCtrl_HitTest( hwndTC : hwnd;pinfo : LPTCHITTESTINFO ):cint;inline; + +Begin + Result:=cint(SendMessage((hwndTC), TCM_HITTEST, 0, LPARAM(@pinfo))) +end; + + +// Macro 229 + +//#define TabCtrl_SetItemExtra(hwndTC, cb) \ +// (BOOL)SNDMSG((hwndTC), TCM_SETITEMEXTRA, (WPARAM)(cb), DWord(0)) + +Function TabCtrl_SetItemExtra( hwndTC : hwnd; cb : WPARAM):BOOL; + +Begin + Result:=BOOL(SendMessage((hwndTC), TCM_SETITEMEXTRA, cb, LPARAM(0))) +end; + + +// Macro 230 + +//#define TabCtrl_AdjustRect(hwnd, bLarger, prc) \ +// (int)SNDMSG(hwnd, TCM_ADJUSTRECT, (WPARAM)(BOOL)(bLarger), (LPARAM)(RECT *)prc) + +Function TabCtrl_AdjustRect( hwnd : hwnd; bLarger : BOOL;var prc : RECT ):cint; + +Begin + Result:=cint(SendMessage(hwnd, TCM_ADJUSTRECT, Wparam(bLarger), Lparam(@prc))); +end; + + +// Macro 231 + +//#define TabCtrl_SetItemSize(hwnd, x, y) \ +// (DWORD)SNDMSG((hwnd), TCM_SETITEMSIZE, 0, MAKELPARAM(x,y)) + +Function TabCtrl_SetItemSize( hwnd : hwnd; x : wparam ; y : lparam ):DWORD; + +Begin + Result:=DWORD(SendMessage((hwnd), TCM_SETITEMSIZE, 0, MAKELPARAM(x,y))) +end; + + +// Macro 232 + +//#define TabCtrl_RemoveImage(hwnd, i) \ +// (void)SNDMSG((hwnd), TCM_REMOVEIMAGE, i, DWord(0)) + +Procedure TabCtrl_RemoveImage( hwnd : hwnd; i : WPARAM); + +Begin +SendMessage((hwnd), TCM_REMOVEIMAGE, i, LPARAM(0)) +end; + + +// Macro 233 + +//#define TabCtrl_SetPadding(hwnd, cx, cy) \ +// (void)SNDMSG((hwnd), TCM_SETPADDING, 0, MAKELPARAM(cx, cy)) + +Procedure TabCtrl_SetPadding( hwnd : hwnd; cx : WPARAM ; cy : LPARAM ); + +Begin +SendMessage((hwnd), TCM_SETPADDING, 0, MAKELPARAM(cx, cy)) +end; + + +// Macro 234 + +//#define TabCtrl_GetRowCount(hwnd) \ +// (int)SNDMSG((hwnd), TCM_GETROWCOUNT, 0, DWord(0)) + +Function TabCtrl_GetRowCount( hwnd : hwnd):cint; + +Begin + Result:=cint(SendMessage((hwnd), TCM_GETROWCOUNT, 0, LPARAM(0))) +end; + + +// Macro 235 + +//#define TabCtrl_GetToolTips(hwnd) \ +// (HWND)SNDMSG((hwnd), TCM_GETTOOLTIPS, 0, DWord(0)) + +Function TabCtrl_GetToolTips( hwnd : hwnd):HWND; + +Begin + Result:=Windows.HWND(SendMessage((hwnd), TCM_GETTOOLTIPS, 0, LPARAM(0))) +end; + + +// Macro 236 + +//#define TabCtrl_SetToolTips(hwnd, hwndTT) \ +// (void)SNDMSG((hwnd), TCM_SETTOOLTIPS, (WPARAM)(hwndTT), DWord(0)) + +Procedure TabCtrl_SetToolTips( hwnd : hwnd; hwndTT : WPARAM); + +Begin +SendMessage((hwnd), TCM_SETTOOLTIPS, hwndTT, LPARAM(0)) +end; + + +// Macro 237 + +//#define TabCtrl_GetCurFocus(hwnd) \ +// (int)SNDMSG((hwnd), TCM_GETCURFOCUS, 0, 0) + +Function TabCtrl_GetCurFocus( hwnd : hwnd):cint; + +Begin + Result:=cint(SendMessage((hwnd), TCM_GETCURFOCUS, 0, 0)) +end; + + +// Macro 238 + +//#define TabCtrl_SetCurFocus(hwnd, i) \ +// SNDMSG((hwnd),TCM_SETCURFOCUS, i, 0) + +Procedure TabCtrl_SetCurFocus( hwnd : hwnd; i : LPARAM ); + +Begin +SendMessage((hwnd),TCM_SETCURFOCUS, i, 0) +end; + + +// Macro 239 + +//#define TabCtrl_SetMinTabWidth(hwnd, x) \ +// (int)SNDMSG((hwnd), TCM_SETMINTABWIDTH, 0, x) + +Function TabCtrl_SetMinTabWidth( hwnd : hwnd; x : WPARAM ):cint; + +Begin + Result:=cint(SendMessage((hwnd), TCM_SETMINTABWIDTH, 0, x)) +end; + + +// Macro 240 + +//#define TabCtrl_DeselectAll(hwnd, fExcludeFocus)\ +// (void)SNDMSG((hwnd), TCM_DESELECTALL, fExcludeFocus, 0) + +Procedure TabCtrl_DeselectAll( hwnd : hwnd; fExcludeFocus : WPARAM ); + +Begin +SendMessage((hwnd), TCM_DESELECTALL, fExcludeFocus, 0) +end; + + +// Macro 241 + +//#define TabCtrl_HighlightItem(hwnd, i, fHighlight) \ +// (BOOL)SNDMSG((hwnd), TCM_HIGHLIGHTITEM, (WPARAM)(i), (LPARAM)MAKELONG (fHighlight, 0)) + +Function TabCtrl_HighlightItem( hwnd : hwnd; i : WPARAM; fHighlight :bool ):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), TCM_HIGHLIGHTITEM, (i), LPARAM(MAKELONG (cint(fHighlight), 0)))) +end; + + +// Macro 242 + +//#define TabCtrl_SetExtendedStyle(hwnd, dw)\ +// (DWORD)SNDMSG((hwnd), TCM_SETEXTENDEDSTYLE, 0, dw) + +Function TabCtrl_SetExtendedStyle( hwnd : hwnd; dw : LPARAM):DWORD; + +Begin + Result:=DWORD(SendMessage((hwnd), TCM_SETEXTENDEDSTYLE, 0,lparam(dw))) +end; + + +// Macro 243 + +//#define TabCtrl_GetExtendedStyle(hwnd)\ +// (DWORD)SNDMSG((hwnd), TCM_GETEXTENDEDSTYLE, 0, 0) + +Function TabCtrl_GetExtendedStyle( hwnd : hwnd):DWORD; + +Begin + Result:=DWORD(SendMessage((hwnd), TCM_GETEXTENDEDSTYLE, 0, 0)) +end; + + +// Macro 244 + +//#define TabCtrl_SetUnicodeFormat(hwnd, fUnicode) \ +// (BOOL)SNDMSG((hwnd), TCM_SETUNICODEFORMAT, (WPARAM)(fUnicode), 0) + +Function TabCtrl_SetUnicodeFormat( hwnd : hwnd; fUnicode : WPARAM):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), TCM_SETUNICODEFORMAT, fUnicode, 0)) +end; + + +// Macro 245 + +//#define TabCtrl_GetUnicodeFormat(hwnd) \ +// (BOOL)SNDMSG((hwnd), TCM_GETUNICODEFORMAT, 0, 0) + +Function TabCtrl_GetUnicodeFormat( hwnd : hwnd):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), TCM_GETUNICODEFORMAT, 0, 0)); +end; + + +// Macro 246 + +//#define Animate_Create(hwndP, id, dwStyle, hInstance) \ +// CreateWindow(ANIMATE_CLASS, NULL, \ +// dwStyle, 0, 0, 0, 0, hwndP, (HMENU)(id), hInstance, NULL) + +Function Animate_Create(hwndP :HWND;id:HMENU;dwStyle:dword;hInstance:HINST):HWND; + +Begin + result:=CreateWindow(ANIMATE_CLASS, NIL, + dwStyle, 0, 0, 0, 0, hwndP, id, hInstance, NIL); +end; + + +// Macro 247 +//#define Animate_Open(hwnd, szName) (BOOL)SNDMSG(hwnd, ACM_OPEN, 0, (LPARAM)(LPTSTR)(szName)) + +Function Animate_Open(hwndP :HWND;szName:LPTSTR):BOOL; + +Begin + Result:=BOOL(SendMessage(hwndp, ACM_OPEN, 0, LPARAM(szName))); +end; + + +// Macro 248 +//#define Animate_OpenEx(hwnd, hInst, szName) (BOOL)SNDMSG(hwnd, ACM_OPEN, (WPARAM)(hInst), (LPARAM)(LPTSTR)(szName)) + +Function Animate_OpenEx(hwndP :HWND;HInst:HInst; szName:LPTSTR):BOOL; + +Begin + Result:=BOOL(SendMessage(hwndp, ACM_OPEN, hinst, LPARAM(szName))); +end; + + +// Macro 249 +//#define Animate_Play(hwnd, from, to, rep) (BOOL)SNDMSG(hwnd, ACM_PLAY, (WPARAM)(rep), (LPARAM)MAKELONG(from, to)) + +Function Animate_Play(hwndP :HWND;from,_to,rep:uint):BOOL; + +Begin + Result:=BOOL(SendMessage(hwndP, ACM_PLAY, wparam(rep), LPARAM(MAKELONG(From,_to)))); +end; + + +// Macro 250 +//#define Animate_Stop(hwnd) (BOOL)SNDMSG(hwnd, ACM_STOP, 0, 0) + +Function Animate_stop(hwndP :HWND):BOOL; + +Begin + Result:=BOOL(SendMessage(hwndP, ACM_STOP, 0, 0)); +end; + + +// Macro 251 +//#define Animate_Close(hwnd) Animate_Open(hwnd, NULL) + +Function Animate_close(hwndP :HWND):BOOL; + +Begin + Result:=BOOL(Animate_Open(hwndP,NIL)); +end; + + +// Macro 252 +//#define Animate_Seek(hwnd, frame) Animate_Play(hwnd, frame, frame, 1) + +Function Animate_Seek(hwndP :HWND;frame:uint):BOOL; + +Begin + Result:=BOOL(Animate_Play(hwndP,frame,frame,1)); +end; + +// Macro 253 +//#define MonthCal_GetCurSel(hmc, pst) (BOOL)SNDMSG(hmc, MCM_GETCURSEL, 0, (LPARAM)(pst)) + +function MonthCal_GetCurSel(hwndMC:HWND; lpSysTime :LPSYSTEMTIME):Bool; + +begin + Result:=BOOL(SendMessage(hwndmc, MCM_GETCURSEL , 0, LPARAM(lpsystime))); +end; + +// Macro 254 +//#define MonthCal_SetCurSel(hmc, pst) (BOOL)SNDMSG(hmc, MCM_SETCURSEL, 0, (LPARAM)(pst)) + +function MonthCal_SetCurSel(hwndMC:HWND; lpSysTime :LPSYSTEMTIME):Bool; inline; + +begin + Result:=BOOL(SendMessage(hwndmc, MCM_SETCURSEL, 0, LPARAM(lpsystime))); +end; + +function MonthCal_SetCurSel(hwndMC:HWND; var lpSysTime :SYSTEMTIME):Bool; inline; + +begin + Result:=BOOL(SendMessage(hwndmc, MCM_SETCURSEL, 0, LPARAM(@lpsystime))); +end; + +// Macro 255 +//#define MonthCal_GetMaxSelCount(hmc) (DWORD)SNDMSG(hmc, MCM_GETMAXSELCOUNT, 0, DWord(0)) + +function MonthCal_GetMaxSelCount(hwndMC:HWND):Bool; + +begin + Result:=BOOL(SendMessage(hwndmc, MCM_GETMAXSELCOUNT, 0, LPARAM(0))); +end; + +// Macro 256 +//#define MonthCal_SetMaxSelCount(hmc, n) (BOOL)SNDMSG(hmc, MCM_SETMAXSELCOUNT, (WPARAM)(n), DWord(0)) + +function MonthCal_SetMaxSelCount(hwndMC:HWND;n:uint):Bool; + +begin + Result:=BOOL(SendMessage(hwndmc, MCM_SETMAXSELCOUNT,WPARAM(N), LPARAM(0))); +end; + +// Macro 257 +//#define MonthCal_GetSelRange(hmc, rgst) SNDMSG(hmc, MCM_GETSELRANGE, 0, (LPARAM)(rgst)) + +function MonthCal_GetSelRange(hwndMC:HWND; lpSysTime :LPSYSTEMTIME):Bool; + +begin + Result:=BOOL(SendMessage(hwndmc, MCM_GETSELRANGE,WPARAM(0), LPARAM(lpsystime))); +end; + +// Macro 258 +//#define MonthCal_SetSelRange(hmc, rgst) SNDMSG(hmc, MCM_SETSELRANGE, 0, (LPARAM)(rgst)) + +function MonthCal_SetSelRange(hwndMC:HWND; lpSysTime :LPSYSTEMTIME):Bool; + +begin + Result:=BOOL(SendMessage(hwndmc, MCM_SETSELRANGE,WPARAM(0), LPARAM(lpsystime))); +end; + + +// Macro 259 +//#define MonthCal_GetMonthRange(hmc, gmr, rgst) (DWORD)SNDMSG(hmc, MCM_GETMONTHRANGE, (WPARAM)(gmr), (LPARAM)(rgst)) + +function MonthCal_GetMonthRange(hwndMC:HWND; gmr: DWORD;lpSysTime :LPSYSTEMTIME):Bool; + +begin + Result:=BOOL(SendMessage(hwndmc, MCM_GETMONTHRANGE,WPARAM(gmr), LPARAM(lpsystime))); +end; + +// Macro 260 +//#define MonthCal_SetDayState(hmc, cbds, rgds) SNDMSG(hmc, MCM_SETDAYSTATE, (WPARAM)(cbds), (LPARAM)(rgds)) + +function MonthCal_SetDayState(hwndMC:HWND; gmr: Longint;lpDay :LPMONTHDAYSTATE):Bool; + +begin + Result:=BOOL(SendMessage(hwndmc, MCM_SETDAYSTATE,WPARAM(gmr), LPARAM(lpDay))); +end; + +// Macro 261 +// #define MonthCal_GetMinReqRect(hmc, prc) SNDMSG(hmc, MCM_GETMINREQRECT, 0, (LPARAM)(prc)) + +function MonthCal_GetMinReqRect(hwndMC:HWND; lpr :LPRect):Bool;inline; + +begin + Result:=BOOL(SendMessage(hwndmc, MCM_GETMINREQRECT,0, LPARAM(lpr))); +end; + +function MonthCal_GetMinReqRect(hwndMC:HWND;var lpr :TRect):Bool;inline; + +begin + Result:=BOOL(SendMessage(hwndmc, MCM_GETMINREQRECT,0, LPARAM(@lpr))); +end; + +// Macro 262 +// #define MonthCal_SetColor(hmc, iColor, clr) SNDMSG(hmc, MCM_SETCOLOR, iColor, clr) + +function MonthCal_SetColor(hwndMC:HWND; ic:longint;clr:COLORREF):DWORD;inline; + +begin + Result:=DWORD(SendMessage(hwndmc, MCM_SETCOLOR,ic, LPARAM(clr))); +end; + +// Macro 263 +// #define MonthCal_GetColor(hmc, iColor) SNDMSG(hmc, MCM_GETCOLOR, iColor, 0) + +function MonthCal_GetColor(hwndMC:HWND; ic:longint):Bool; + +begin + Result:=BOOL(SendMessage(hwndmc, MCM_GETCOLOR,ic, 0)); +end; + +// Macro 264 +// #define MonthCal_SetToday(hmc, pst) SNDMSG(hmc, MCM_SETTODAY, 0, (LPARAM)(pst)) + +function MonthCal_SetToday(hwndMC:HWND; lps:LPSYSTEMTIME):Bool; + +begin + Result:=BOOL(SendMessage(hwndmc, MCM_SETTODAY,0, LPARAM(lps))); +end; + +// Macro 265 +// #define MonthCal_GetToday(hmc, pst) (BOOL)SNDMSG(hmc, MCM_GETTODAY, 0, (LPARAM)(pst)) + +function MonthCal_GetToday(hwndMC:HWND; lps:LPSYSTEMTIME):Bool; + +begin + Result:=BOOL(SendMessage(hwndmc, MCM_GETTODAY,0, LPARAM(lps))); +end; + + +// Macro 266 +// #define MonthCal_HitTest(hmc, pinfo) \ +// SNDMSG(hmc, MCM_HITTEST, 0, (LPARAM)(PMCHITTESTINFO)(pinfo)) + +FUNCTION MonthCal_HitTest( hmc :HWND ; pinfo : PMCHITTESTINFO):DWORD; + +Begin + Result:=DWORD(SendMessage(hmc, MCM_HITTEST, 0, LPARAM(pinfo))); +end; + + +// Macro 267 +// #define MonthCal_SetFirstDayOfWeek(hmc, iDay) \ +// SNDMSG(hmc, MCM_SETFIRSTDAYOFWEEK, 0, iDay) + +function MonthCal_SetFirstDayOfWeek( hmc : HWND ; iDay :LONGINT ):DWORD; + +Begin + Result:=SendMessage(hmc, MCM_SETFIRSTDAYOFWEEK, 0, iDay); +end; + + +// Macro 268 +// #define MonthCal_GetFirstDayOfWeek(hmc) \ +// (DWORD)SNDMSG(hmc, MCM_GETFIRSTDAYOFWEEK, 0, 0) + +Function MonthCal_GetFirstDayOfWeek( hmc : HWND ):DWORD; + +Begin + Result:=DWORD(SendMessage(hmc, MCM_GETFIRSTDAYOFWEEK, 0, 0)) +end; + + +// Macro 269 +// #define MonthCal_GetRange(hmc, rgst) \ +// (DWORD)SNDMSG(hmc, MCM_GETRANGE, 0, (LPARAM)(rgst)) + +Function MonthCal_GetRange( hmc : HWND ; rgst : LPSYSTEMTIME):DWORD; + +Begin + Result:=DWORD(SendMessage(hmc, MCM_GETRANGE, 0, lparam(rgst))); +end; + + +// Macro 270 +// #define MonthCal_SetRange(hmc, gd, rgst) \ +// (BOOL)SNDMSG(hmc, MCM_SETRANGE, (WPARAM)(gd), (LPARAM)(rgst)) + +Function MonthCal_SetRange( hmc : HWND ; gd : DWORD; rgst : LPSYSTEMTIME):BOOL; + +Begin + Result:=BOOL(SendMessage(hmc, MCM_SETRANGE, gd,LPARAM(rgst))) +end; + + +// Macro 271 +// #define MonthCal_GetMonthDelta(hmc) \ +// (int)SNDMSG(hmc, MCM_GETMONTHDELTA, 0, 0) + +Function MonthCal_GetMonthDelta( hmc :hwnd ):cint; + +Begin + Result:=cint(SendMessage(hmc, MCM_GETMONTHDELTA, 0, 0)) +end; + + +// Macro 272 +// #define MonthCal_SetMonthDelta(hmc, n) \ +// (int)SNDMSG(hmc, MCM_SETMONTHDELTA, n, 0) + +Function MonthCal_SetMonthDelta( hmc :hwnd ; n :cint ):cint; + +Begin + Result:=cint(SendMessage(hmc, MCM_SETMONTHDELTA, n, 0)) +end; + + +// Macro 273 + +// #define MonthCal_GetMaxTodayWidth(hmc) \ +// (DWORD)SNDMSG(hmc, MCM_GETMAXTODAYWIDTH, 0, 0) + +Function MonthCal_GetMaxTodayWidth( hmc :hwnd ):DWORD; + +Begin + Result:=DWORD(SendMessage(hmc, MCM_GETMAXTODAYWIDTH, 0, 0)) +end; + + +// Macro 274 +// #define MonthCal_SetUnicodeFormat(hwnd, fUnicode) \ +// (BOOL)SNDMSG((hwnd), MCM_SETUNICODEFORMAT, (WPARAM)(fUnicode), 0) + +Function MonthCal_SetUnicodeFormat( hwnd : hwnd; fUnicode : bool):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), MCM_SETUNICODEFORMAT, wparam(fUnicode), 0)) +end; + + +// Macro 275 + +// #define MonthCal_GetUnicodeFormat(hwnd) \ +// (BOOL)SNDMSG((hwnd), MCM_GETUNICODEFORMAT, 0, 0) + +Function MonthCal_GetUnicodeFormat( hwnd : hwnd):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), MCM_GETUNICODEFORMAT, 0, 0)) +end; + + +// Macro 276 +// #define DateTime_GetSystemtime(hdp, pst) (DWORD)SNDMSG(hdp, DTM_GETSYSTEMTIME, 0, (LPARAM)(pst)) + +// Macro 277 + +//#define DateTime_SetSystemtime(hdp, gd, pst) (BOOL)SNDMSG(hdp, DTM_SETSYSTEMTIME, (WPARAM)(gd), (LPARAM)(pst)) +function DateTime_SetSystemTime(hdp: HWND; gd: DWORD; const pst: TSystemTime): BOOL;inline; +begin + result:=BOOL(SendMessage(hdp, DTM_SETSYSTEMTIME, WPARAM(gd), LPARAM(@pst))); +end; + +// Macro 278 + +//#define DateTime_GetRange(hdp, rgst) (DWORD)SNDMSG(hdp, DTM_GETRANGE, 0, (LPARAM)(rgst)) + +// Macro 279 + +//#define DateTime_SetRange(hdp, gd, rgst) (BOOL)SNDMSG(hdp, DTM_SETRANGE, (WPARAM)(gd), (LPARAM)(rgst)) +function DateTime_SetRange(hdp: HWND; gdtr: DWORD; rgst: PSystemTime): BOOL;inline; +begin + result:=BOOL(SendMessage(hdp, DTM_SETRANGE, WPARAM(gdtr), LPARAM(rgst))); +end; + +// Macro 280 + +//#define DateTime_SetFormat(hdp, sz) (BOOL)SNDMSG(hdp, DTM_SETFORMAT, 0, (LPARAM)(sz)) + +// Macro 281 + +//#define DateTime_SetMonthCalColor(hdp, iColor, clr) SNDMSG(hdp, DTM_SETMCCOLOR, iColor, clr) +function DateTime_SetMonthCalColor(hdp: HWND; iColor: DWORD; clr: TColorRef): TColorRef;inline; +begin + result:=TColorRef(SendMessage(hdp, DTM_SETMCCOLOR, iColor, clr)); +end; + +// Macro 282 + +//#define DateTime_GetMonthCalColor(hdp, iColor) SNDMSG(hdp, DTM_GETMCCOLOR, iColor, 0) + +// Macro 283 + +//#define DateTime_GetMonthCal(hdp) (HWND)SNDMSG(hdp, DTM_GETMONTHCAL, 0, 0) +function DateTime_GetMonthCal(hdp: HWND): HWND;inline; +begin + result:=HWND(SendMessage(hdp, DTM_GETMONTHCAL, 0, 0)); +end; + +// Macro 284 + +//#define DateTime_SetMonthCalFont(hdp, hfont, fRedraw) SNDMSG(hdp, DTM_SETMCFONT, (WPARAM)(hfont), (LPARAM)(fRedraw)) + +// Macro 285 + +//#define DateTime_GetMonthCalFont(hdp) SNDMSG(hdp, DTM_GETMCFONT, 0, 0) + +// Macro 286 + +//#define MAKEIPRANGE(low, high) ((LPARAM)(WORD)(((BYTE)(high) << 8) + (BYTE)(low))) + +// Macro 287 + +//#define MAKEIPADDRESS(b1,b2,b3,b4) ((LPARAM)(((DWORD)(b1)<<24)+((DWORD)(b2)<<16)+((DWORD)(b3)<<8)+((DWORD)(b4)))) + +// Macro 288 + +//#define FIRST_IPADDRESS(x) ((x>>24) & 0xff) + +// Macro 289 + +//#define SECOND_IPADDRESS(x) ((x>>16) & 0xff) + +// Macro 290 + +//#define THIRD_IPADDRESS(x) ((x>>8) & 0xff) + +// Macro 291 + +//#define FOURTH_IPADDRESS(x) (x & 0xff) + +// Macro 292 + +//#define Pager_SetChild(hwnd, hwndChild) \ +// (void)SNDMSG((hwnd), PGM_SETCHILD, 0, (LPARAM)(hwndChild)) + +Procedure Pager_SetChild( hwnd : hwnd; hwndChild : LPARAM); + +Begin +SendMessage((hwnd), PGM_SETCHILD, 0, hwndChild) +end; + + +// Macro 293 + +//#define Pager_RecalcSize(hwnd) \ +// (void)SNDMSG((hwnd), PGM_RECALCSIZE, 0, 0) + +Procedure Pager_RecalcSize( hwnd : hwnd); + +Begin +SendMessage((hwnd), PGM_RECALCSIZE, 0, 0) +end; + + +// Macro 294 + +//#define Pager_ForwardMouse(hwnd, bForward) \ +// (void)SNDMSG((hwnd), PGM_FORWARDMOUSE, (WPARAM)(bForward), 0) + +Procedure Pager_ForwardMouse( hwnd : hwnd; bForward : WPARAM); + +Begin +SendMessage((hwnd), PGM_FORWARDMOUSE, bForward, 0) +end; + + +// Macro 295 + +//#define Pager_SetBkColor(hwnd, clr) \ +// (COLORREF)SNDMSG((hwnd), PGM_SETBKCOLOR, 0, (LPARAM)(clr)) + +Function Pager_SetBkColor( hwnd : hwnd; clr : LPARAM):COLORREF; + +Begin + Result:=COLORREF(SendMessage((hwnd), PGM_SETBKCOLOR, 0, clr)) +end; + + +// Macro 296 + +//#define Pager_GetBkColor(hwnd) \ +// (COLORREF)SNDMSG((hwnd), PGM_GETBKCOLOR, 0, 0) + +Function Pager_GetBkColor( hwnd : hwnd):COLORREF; + +Begin + Result:=COLORREF(SendMessage((hwnd), PGM_GETBKCOLOR, 0, 0)) +end; + + +// Macro 297 + +//#define Pager_SetBorder(hwnd, iBorder) \ +// (int)SNDMSG((hwnd), PGM_SETBORDER, 0, (LPARAM)(iBorder)) + +Function Pager_SetBorder( hwnd : hwnd; iBorder : LPARAM):cint; + +Begin + Result:=cint(SendMessage((hwnd), PGM_SETBORDER, 0, iBorder)) +end; + + +// Macro 298 +// #define Pager_GetBorder(hwnd) \ +// (int)SNDMSG((hwnd), PGM_GETBORDER, 0, 0) + +Function Pager_GetBorder( hwnd : hwnd):cint; + +Begin + Result:=cint(SendMessage((hwnd), PGM_GETBORDER, 0, 0)) +end; + + +// Macro 299 + +//#define Pager_SetPos(hwnd, iPos) \ +// (int)SNDMSG((hwnd), PGM_SETPOS, 0, (LPARAM)(iPos)) + +Function Pager_SetPos( hwnd : hwnd; iPos : LPARAM):cint; + +Begin + Result:=cint(SendMessage((hwnd), PGM_SETPOS, 0, iPos)) +end; + + +// Macro 300 + +//#define Pager_GetPos(hwnd) \ +// (int)SNDMSG((hwnd), PGM_GETPOS, 0, 0) + +Function Pager_GetPos( hwnd : hwnd):cint; + +Begin + Result:=cint(SendMessage((hwnd), PGM_GETPOS, 0, 0)) +end; + + +// Macro 301 + +//#define Pager_SetButtonSize(hwnd, iSize) \ +// (int)SNDMSG((hwnd), PGM_SETBUTTONSIZE, 0, (LPARAM)(iSize)) + +Function Pager_SetButtonSize( hwnd : hwnd; iSize : LPARAM):cint; + +Begin + Result:=cint(SendMessage((hwnd), PGM_SETBUTTONSIZE, 0, iSize)) +end; + + +// Macro 302 + +//#define Pager_GetButtonSize(hwnd) \ +// (int)SNDMSG((hwnd), PGM_GETBUTTONSIZE, 0,0) + +Function Pager_GetButtonSize( hwnd : hwnd):cint; + +Begin + Result:=cint(SendMessage((hwnd), PGM_GETBUTTONSIZE, 0,0)) +end; + + +// Macro 303 + +//#define Pager_GetButtonState(hwnd, iButton) \ +// (DWORD)SNDMSG((hwnd), PGM_GETBUTTONSTATE, 0, (LPARAM)(iButton)) + +Function Pager_GetButtonState( hwnd : hwnd; iButton : LPARAM):DWORD; + +Begin + Result:=DWORD(SendMessage((hwnd), PGM_GETBUTTONSTATE, 0, iButton)) +end; + + +// Macro 304 +// #define Pager_GetDropTarget(hwnd, ppdt) \ +// (void)SNDMSG((hwnd), PGM_GETDROPTARGET, 0, (LPARAM)(ppdt)) + +Procedure Pager_GetDropTarget( hwnd : hwnd; ppdt : LPARAM); + +Begin +SendMessage((hwnd), PGM_GETDROPTARGET, 0, ppdt) +end; + + +// Macro 305 +// #define Button_GetIdealSize(hwnd, psize)\ +// (BOOL)SNDMSG((hwnd), BCM_GETIDEALSIZE, 0, (LPARAM)(psize)) + +Function Button_GetIdealSize( hwnd : hwnd; psize : LPARAM):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), BCM_GETIDEALSIZE, 0, psize)) +end; + + +// Macro 306 +// #define Button_SetImageList(hwnd, pbuttonImagelist)\ +// (BOOL)SNDMSG((hwnd), BCM_SETIMAGELIST, 0, (LPARAM)(pbuttonImagelist)) + +Function Button_SetImageList( hwnd : hwnd; pbuttonImagelist : LPARAM):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), BCM_SETIMAGELIST, 0, pbuttonImagelist)) +end; + +// Macro 307 +// #define Button_GetImageList(hwnd, pbuttonImagelist)\ +// (BOOL)SNDMSG((hwnd), BCM_GETIMAGELIST, 0, (LPARAM)(pbuttonImagelist)) + +Function Button_GetImageList( hwnd : hwnd; pbuttonImagelist : LPARAM):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), BCM_GETIMAGELIST, 0, pbuttonImagelist)) +end; + + +// Macro 308 +// #define Button_SetTextMargin(hwnd, pmargin)\ +// (BOOL)SNDMSG((hwnd), BCM_SETTEXTMARGIN, 0, (LPARAM)(pmargin)) + +Function Button_SetTextMargin( hwnd : hwnd; pmargin : LPARAM):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), BCM_SETTEXTMARGIN, 0, pmargin)) +end; + + +// Macro 309 +// #define Button_GetTextMargin(hwnd, pmargin)\ +// (BOOL)SNDMSG((hwnd), BCM_GETTEXTMARGIN, 0, (LPARAM)(pmargin)) + +Function Button_GetTextMargin( hwnd : hwnd; pmargin : LPARAM):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), BCM_GETTEXTMARGIN, 0, pmargin)) +end; + + +// Macro 310 +// #define Edit_SetCueBannerText(hwnd, lpcwText) \ +// (BOOL)SNDMSG((hwnd), EM_SETCUEBANNER, 0, (LPARAM)(lpcwText)) + +Function Edit_SetCueBannerText( hwnd : hwnd; lpcwText : LPARAM):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), EM_SETCUEBANNER, 0, lpcwText)) +end; + + +// Macro 311 +//#define Edit_GetCueBannerText(hwnd, lpwText, cchText) \ +// (BOOL)SNDMSG((hwnd), EM_GETCUEBANNER, (WPARAM)(lpwText), (LPARAM)(cchText)) + +Function Edit_GetCueBannerText( hwnd : hwnd; lpwText : WPARAM; cchText : LPARAM):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), EM_GETCUEBANNER, lpwText, cchText)) +end; + + +// Macro 312 +// #define Edit_ShowBalloonTip(hwnd, peditballoontip) \ +// (BOOL)SNDMSG((hwnd), EM_SHOWBALLOONTIP, 0, (LPARAM)(peditballoontip)) + +Function Edit_ShowBalloonTip( hwnd : hwnd; peditballoontip : LPARAM):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), EM_SHOWBALLOONTIP, 0, peditballoontip)) +end; + + +// Macro 313 +// #define Edit_HideBalloonTip(hwnd) \ +// (BOOL)SNDMSG((hwnd), EM_HIDEBALLOONTIP, 0, 0) + +Function Edit_HideBalloonTip( hwnd : hwnd):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), EM_HIDEBALLOONTIP, 0, 0)) +end; + + +// Macro 314 +//#define ComboBox_SetMinVisible(hwnd, iMinVisible) \ +// (BOOL)SNDMSG((hwnd), CB_SETMINVISIBLE, (WPARAM)iMinVisible, 0) + +Function ComboBox_SetMinVisible( hwnd : hwnd; iMinVisible : WPARAM):BOOL; + +Begin + Result:=BOOL(SendMessage((hwnd), CB_SETMINVISIBLE, iMinVisible, 0)) +end; + + +// Macro 315 +// #define ComboBox_GetMinVisible(hwnd) \ +// (int)SNDMSG((hwnd), CB_GETMINVISIBLE, 0, 0) + +Function ComboBox_GetMinVisible( hwnd : hwnd):cint; + +Begin + Result:=cint(SendMessage((hwnd), CB_GETMINVISIBLE, 0, 0)) +end; + +{$ifdef win32vista} +function TreeView_GetNextSelected(hwnd:hwnd; hitem:HTREEITEM):HTREEITEM;inline; +begin + result:=TreeView_GetNextItem(hwnd, hitem, TVGN_NEXTSELECTED) +end; +{$endif} + +{$ifdef win32vista} +function Button_SetDropDownState(hwnd:HWND; fDropDown:BOOL) : BOOL; +Begin + Result:=BOOL(SendMessage((hwnd), BCM_SETDROPDOWNSTATE, WPARAM(fDropDown), 0)); +end; + +function Button_SetSplitInfo(hwnd:HWND; pInfo:PBUTTON_SPLITINFO):BOOL; +Begin + Result:=BOOL(SendMessage((hwnd), BCM_SETSPLITINFO, 0, LPARAM(pInfo))); +end; + +function Button_GetSplitInfo(hwnd:HWND; pInfo:PBUTTON_SPLITINFO) :BOOL; +Begin + Result:=BOOL(SendMessage((hwnd), BCM_GETSPLITINFO, 0, LPARAM(pInfo))); +end; + +function Button_SetNote(hwnd:HWND; psz:LPCWSTR) :BOOL; +Begin + Result:=BOOL(SendMessage((hwnd), BCM_SETNOTE, 0, LPARAM(psz))); +end; + +function Button_GetNote(hwnd:HWND; psz:LPCWSTR; pcc:cint) :BOOL; +Begin + Result:=BOOL(SendMessage((hwnd), BCM_GETNOTE, WPARAM(pcc), LPARAM(psz))); +end; + +function Button_GetNoteLength(hwnd:HWND) :LRESULT; +Begin + Result:=LRESULT(SendMessage((hwnd), BCM_GETNOTELENGTH, 0, 0)); +end; + +// Macro to use on a button or command link to display an elevated icon + +function Button_SetElevationRequiredState(hwnd:HWND; fRequired:BOOL) :LRESULT; +Begin + Result:=LRESULT(SendMessage((hwnd), BCM_SETSHIELD, 0, LPARAM(fRequired))); +end; +{$endif} +{$ifdef win32vista} +procedure Edit_SetHilite(hwndCtl:hwnd; ichStart:Wparam; ichEnd:lparam); +begin + sendmessage(hwndctl, EM_SETHILITE, (ichStart), (ichEnd)); +end; + +function Edit_GetHilite(hwndCtl:hwnd):Dword; +begin + result:=SendMessage((hwndCtl), EM_GETHILITE, 0, 0); +end; +{$endif} + +{$ifdef ntddi_vista} +function MonthCal_GetCurrentView(hmc:HWND):DWORD; +Begin + Result:=DWord(SendMessage(hmc, MCM_GETCURRENTVIEW, 0, 0)); +end; + +function MonthCal_GetCalendarCount(hmc:HWND):DWORD; +Begin + Result:=DWord(SendMessage(hmc,MCM_GETCALENDARCOUNT, 0, 0)); +end; + +function MonthCal_GetCalendarGridInfo(hmc:HWND; pmc:pMCGRIDINFO):BOOL; +Begin + Result:=BOOL(SendMessage(hmc, MCM_GETCALENDARGRIDINFO, 0, LPARAM(PMCGRIDINFO(pmc)))); +end; + +function MonthCal_GetCALID(hmc:HWND):CALID; +Begin + Result:=CALID(SendMessage(hmc, MCM_GETCALID, 0, 0)); +end; + +function MonthCal_SetCALID(hmc:HWND; calid:cuint):LRESULT; +Begin + Result:=LRESULT(SendMessage(hmc, MCM_SETCALID, WPARAM(calid), 0)); +end; + +function MonthCal_SizeRectToMin(hmc:HWND; prc:prect):LRESULT; +Begin + Result:=LRESULT(SendMessage(hmc, MCM_SIZERECTTOMIN, 0, LPARAM(prc))); +end; + +function MonthCal_SetCalendarBorder(hmc:HWND; fset:bool; xyborder:cint):LRESULT; +Begin + Result:=LRESULT(SendMessage(hmc, MCM_SETCALENDARBORDER, WPARAM(fset), LPARAM(xyborder))); +end; + +function MonthCal_GetCalendarBorder(hmc:HWND):cint; +Begin + Result:=cint(SendMessage(hmc, MCM_GETCALENDARBORDER, 0, 0)); +end; + +function MonthCal_SetCurrentView(hmc:HWND; dwNewView:DWord):BOOL; +Begin + Result:=BOOL(SendMessage(hmc, MCM_SETCURRENTVIEW, 0, LPARAM(dwNewView))); +end; + +{$endif} + +{$ifdef NTDDI_VISTA} +function DateTime_SetMonthCalStyle(hdp:HWND; dwStyle:DWord):LResult; +Begin + Result:=LRESULT(SendMessage(hdp,DTM_SETMCSTYLE, 0, LPARAM(dwStyle))); +end; + +function DateTime_GetMonthCalStyle(hdp:HWND):LRESULT; +Begin + Result:=LRESULT(SendMessage(hdp,DTM_GETMCSTYLE, 0, 0)); +end; + +function DateTime_CloseMonthCal(hdp:HWND):LRESULT; +Begin + Result:=LRESULT(SendMessage(hdp,DTM_CLOSEMONTHCAL, 0, 0)); +end; + +// DateTime_GetDateTimePickerInfo(HWND hdp, DATETIMEPICKERINFO* pdtpi) +// Retrieves information about the selected date time picker. + +function DateTime_GetDateTimePickerInfo(hdp:HWND; pdtpi:PDATETIMEPICKERINFO):LRESULT; +Begin + Result:=LRESULT(SendMessage(hdp, DTM_GETDATETIMEPICKERINFO, 0, LPARAM(pdtpi))); +end; + +function DateTime_GetIdealSize(hdp:HWND; ps:PSIZE): LResult; +Begin + Result:=LRESULT(SendMessage(hdp, DTM_GETIDEALSIZE, 0, LPARAM(ps))); +end; + +{$endif} + +// Macro 284 +procedure DateTime_SetMonthCalFont(hdp:HWND; hfont:HFONT; fRedraw:LPARAM); +begin + SendMessage(hdp, DTM_SETMCFONT, WPARAM(hfont), LPARAM(fRedraw)); +end; + +// Macro 285 +function DateTime_GetMonthCalFont(hdp:HWND):HFONT; +begin + Result:=HFONT(SendMessage(hdp, DTM_GETMCFONT, 0, 0)); +end; + +const + comctl32lib = 'comctl32.dll'; + +var + comctl32handle: THandle = 0; + +function _TaskDialogIndirect(const pTaskConfig: PTASKDIALOGCONFIG; pnButton: PInteger; pnRadioButton: PInteger; pfVerificationFlagChecked: PBOOL): HRESULT; stdcall; +begin + Result := E_NOTIMPL; +end; + +function _TaskDialog(hwndParent: HWND; hInstance: HINST; pszWindowTitle: PCWSTR; pszMainInstruction: PCWSTR; pszContent: PCWSTR; + dwCommonButtons: TASKDIALOG_COMMON_BUTTON_FLAGS; pszIcon: PCWSTR; pnButton: PInteger): HRESULT; stdcall; +begin + Result := E_NOTIMPL; +end; + +procedure Initialize; +var + p: Pointer; +begin + // Defaults + Pointer(TaskDialogIndirect) := @_TaskDialogIndirect; + Pointer(TaskDialog) := @_TaskDialog; + + comctl32handle := LoadLibrary(comctl32lib); + if comctl32handle <> 0 then + begin + p := GetProcAddress(comctl32handle, 'TaskDialogIndirect'); + if p <> nil + then Pointer(TaskDialogIndirect) := p; + + p := GetProcAddress(comctl32handle, 'TaskDialog'); + if p <> nil + then Pointer(TaskDialog) := p; + end; +end; + +procedure Finalize; +begin + if comctl32handle <> 0 then + FreeLibrary(comctl32handle); + comctl32handle := 0; +end; + +initialization + Initialize; +Finalization + Finalize; +End. |