Browse Source

new winunits packages

peter 20 years ago
parent
commit
676e194eea

+ 48 - 94
packages/extra/Makefile

@@ -1,5 +1,5 @@
 #
 #
-# Don't edit, this file is generated by FPCMake Version 1.9.8 [2005/02/09]
+# Don't edit, this file is generated by FPCMake Version 1.9.8 [2005/03/28]
 #
 #
 default: all
 default: all
 MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-emx i386-watcom i386-netwlibc m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos powerpc-linux powerpc-netbsd powerpc-macos powerpc-darwin powerpc-morphos sparc-linux sparc-netbsd sparc-solaris x86_64-linux x86_64-freebsd arm-linux
 MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-emx i386-watcom i386-netwlibc m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos powerpc-linux powerpc-netbsd powerpc-macos powerpc-darwin powerpc-morphos sparc-linux sparc-netbsd sparc-solaris x86_64-linux x86_64-freebsd arm-linux
@@ -237,7 +237,7 @@ ifeq ($(FULL_TARGET),i386-go32v2)
 override TARGET_DIRS+=unzip
 override TARGET_DIRS+=unzip
 endif
 endif
 ifeq ($(FULL_TARGET),i386-win32)
 ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_DIRS+=unzip opengl gtk gtk2 zlib mmsystem tcl cdrom fpgtk winver
+override TARGET_DIRS+=unzip opengl gtk gtk2 zlib tcl cdrom fpgtk winunits
 endif
 endif
 ifeq ($(FULL_TARGET),i386-os2)
 ifeq ($(FULL_TARGET),i386-os2)
 override TARGET_DIRS+=os2units rexx unzip zlib x11 gtk libpng tcl imlib fpgtk
 override TARGET_DIRS+=os2units rexx unzip zlib x11 gtk libpng tcl imlib fpgtk
@@ -1026,7 +1026,7 @@ export UPXPROG
 ZIPOPT=-9
 ZIPOPT=-9
 ZIPEXT=.zip
 ZIPEXT=.zip
 ifeq ($(USETAR),bz2)
 ifeq ($(USETAR),bz2)
-TAROPT=vI
+TAROPT=vj
 TAREXT=.tar.bz2
 TAREXT=.tar.bz2
 else
 else
 TAROPT=vz
 TAROPT=vz
@@ -1372,11 +1372,10 @@ TARGET_DIRS_OPENGL=1
 TARGET_DIRS_GTK=1
 TARGET_DIRS_GTK=1
 TARGET_DIRS_GTK2=1
 TARGET_DIRS_GTK2=1
 TARGET_DIRS_ZLIB=1
 TARGET_DIRS_ZLIB=1
-TARGET_DIRS_MMSYSTEM=1
 TARGET_DIRS_TCL=1
 TARGET_DIRS_TCL=1
 TARGET_DIRS_CDROM=1
 TARGET_DIRS_CDROM=1
 TARGET_DIRS_FPGTK=1
 TARGET_DIRS_FPGTK=1
-TARGET_DIRS_WINVER=1
+TARGET_DIRS_WINUNITS=1
 endif
 endif
 ifeq ($(FULL_TARGET),i386-os2)
 ifeq ($(FULL_TARGET),i386-os2)
 TARGET_DIRS_OS2UNITS=1
 TARGET_DIRS_OS2UNITS=1
@@ -2789,95 +2788,50 @@ newt:
 	$(MAKE) -C newt all
 	$(MAKE) -C newt all
 .PHONY: newt_all newt_debug newt_smart newt_release newt_units newt_examples newt_shared newt_install newt_sourceinstall newt_exampleinstall newt_distinstall newt_zipinstall newt_zipsourceinstall newt_zipexampleinstall newt_zipdistinstall newt_clean newt_distclean newt_cleanall newt_info newt_makefiles newt
 .PHONY: newt_all newt_debug newt_smart newt_release newt_units newt_examples newt_shared newt_install newt_sourceinstall newt_exampleinstall newt_distinstall newt_zipinstall newt_zipsourceinstall newt_zipexampleinstall newt_zipdistinstall newt_clean newt_distclean newt_cleanall newt_info newt_makefiles newt
 endif
 endif
-ifdef TARGET_DIRS_MMSYSTEM
-mmsystem_all:
-	$(MAKE) -C mmsystem all
-mmsystem_debug:
-	$(MAKE) -C mmsystem debug
-mmsystem_smart:
-	$(MAKE) -C mmsystem smart
-mmsystem_release:
-	$(MAKE) -C mmsystem release
-mmsystem_units:
-	$(MAKE) -C mmsystem units
-mmsystem_examples:
-	$(MAKE) -C mmsystem examples
-mmsystem_shared:
-	$(MAKE) -C mmsystem shared
-mmsystem_install:
-	$(MAKE) -C mmsystem install
-mmsystem_sourceinstall:
-	$(MAKE) -C mmsystem sourceinstall
-mmsystem_exampleinstall:
-	$(MAKE) -C mmsystem exampleinstall
-mmsystem_distinstall:
-	$(MAKE) -C mmsystem distinstall
-mmsystem_zipinstall:
-	$(MAKE) -C mmsystem zipinstall
-mmsystem_zipsourceinstall:
-	$(MAKE) -C mmsystem zipsourceinstall
-mmsystem_zipexampleinstall:
-	$(MAKE) -C mmsystem zipexampleinstall
-mmsystem_zipdistinstall:
-	$(MAKE) -C mmsystem zipdistinstall
-mmsystem_clean:
-	$(MAKE) -C mmsystem clean
-mmsystem_distclean:
-	$(MAKE) -C mmsystem distclean
-mmsystem_cleanall:
-	$(MAKE) -C mmsystem cleanall
-mmsystem_info:
-	$(MAKE) -C mmsystem info
-mmsystem_makefiles:
-	$(MAKE) -C mmsystem makefiles
-mmsystem:
-	$(MAKE) -C mmsystem all
-.PHONY: mmsystem_all mmsystem_debug mmsystem_smart mmsystem_release mmsystem_units mmsystem_examples mmsystem_shared mmsystem_install mmsystem_sourceinstall mmsystem_exampleinstall mmsystem_distinstall mmsystem_zipinstall mmsystem_zipsourceinstall mmsystem_zipexampleinstall mmsystem_zipdistinstall mmsystem_clean mmsystem_distclean mmsystem_cleanall mmsystem_info mmsystem_makefiles mmsystem
-endif
-ifdef TARGET_DIRS_WINVER
-winver_all:
-	$(MAKE) -C winver all
-winver_debug:
-	$(MAKE) -C winver debug
-winver_smart:
-	$(MAKE) -C winver smart
-winver_release:
-	$(MAKE) -C winver release
-winver_units:
-	$(MAKE) -C winver units
-winver_examples:
-	$(MAKE) -C winver examples
-winver_shared:
-	$(MAKE) -C winver shared
-winver_install:
-	$(MAKE) -C winver install
-winver_sourceinstall:
-	$(MAKE) -C winver sourceinstall
-winver_exampleinstall:
-	$(MAKE) -C winver exampleinstall
-winver_distinstall:
-	$(MAKE) -C winver distinstall
-winver_zipinstall:
-	$(MAKE) -C winver zipinstall
-winver_zipsourceinstall:
-	$(MAKE) -C winver zipsourceinstall
-winver_zipexampleinstall:
-	$(MAKE) -C winver zipexampleinstall
-winver_zipdistinstall:
-	$(MAKE) -C winver zipdistinstall
-winver_clean:
-	$(MAKE) -C winver clean
-winver_distclean:
-	$(MAKE) -C winver distclean
-winver_cleanall:
-	$(MAKE) -C winver cleanall
-winver_info:
-	$(MAKE) -C winver info
-winver_makefiles:
-	$(MAKE) -C winver makefiles
-winver:
-	$(MAKE) -C winver all
-.PHONY: winver_all winver_debug winver_smart winver_release winver_units winver_examples winver_shared winver_install winver_sourceinstall winver_exampleinstall winver_distinstall winver_zipinstall winver_zipsourceinstall winver_zipexampleinstall winver_zipdistinstall winver_clean winver_distclean winver_cleanall winver_info winver_makefiles winver
+ifdef TARGET_DIRS_WINUNITS
+winunits_all:
+	$(MAKE) -C winunits all
+winunits_debug:
+	$(MAKE) -C winunits debug
+winunits_smart:
+	$(MAKE) -C winunits smart
+winunits_release:
+	$(MAKE) -C winunits release
+winunits_units:
+	$(MAKE) -C winunits units
+winunits_examples:
+	$(MAKE) -C winunits examples
+winunits_shared:
+	$(MAKE) -C winunits shared
+winunits_install:
+	$(MAKE) -C winunits install
+winunits_sourceinstall:
+	$(MAKE) -C winunits sourceinstall
+winunits_exampleinstall:
+	$(MAKE) -C winunits exampleinstall
+winunits_distinstall:
+	$(MAKE) -C winunits distinstall
+winunits_zipinstall:
+	$(MAKE) -C winunits zipinstall
+winunits_zipsourceinstall:
+	$(MAKE) -C winunits zipsourceinstall
+winunits_zipexampleinstall:
+	$(MAKE) -C winunits zipexampleinstall
+winunits_zipdistinstall:
+	$(MAKE) -C winunits zipdistinstall
+winunits_clean:
+	$(MAKE) -C winunits clean
+winunits_distclean:
+	$(MAKE) -C winunits distclean
+winunits_cleanall:
+	$(MAKE) -C winunits cleanall
+winunits_info:
+	$(MAKE) -C winunits info
+winunits_makefiles:
+	$(MAKE) -C winunits makefiles
+winunits:
+	$(MAKE) -C winunits all
+.PHONY: winunits_all winunits_debug winunits_smart winunits_release winunits_units winunits_examples winunits_shared winunits_install winunits_sourceinstall winunits_exampleinstall winunits_distinstall winunits_zipinstall winunits_zipsourceinstall winunits_zipexampleinstall winunits_zipdistinstall winunits_clean winunits_distclean winunits_cleanall winunits_info winunits_makefiles winunits
 endif
 endif
 ifdef TARGET_DIRS_OS2UNITS
 ifdef TARGET_DIRS_OS2UNITS
 os2units_all:
 os2units_all:

+ 1 - 1
packages/extra/Makefile.fpc

@@ -19,7 +19,7 @@ dirs_openbsd=unzip zlib \
              x11 opengl gtk syslog \
              x11 opengl gtk syslog \
              forms svgalib ggi libpng libgd \
              forms svgalib ggi libpng libgd \
              utmp bfd gdbm ncurses fpgtk tcl imlib gnome1
              utmp bfd gdbm ncurses fpgtk tcl imlib gnome1
-dirs_win32=unzip opengl gtk gtk2 zlib mmsystem tcl cdrom fpgtk winver
+dirs_win32=unzip opengl gtk gtk2 zlib tcl cdrom fpgtk winunits
 dirs_os2=os2units \
 dirs_os2=os2units \
          rexx \
          rexx \
          unzip zlib \
          unzip zlib \

+ 0 - 1720
packages/extra/mmsystem/Makefile

@@ -1,1720 +0,0 @@
-#
-# Don't edit, this file is generated by FPCMake Version 1.9.8 [2005/02/09]
-#
-default: all
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-emx i386-watcom i386-netwlibc m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos powerpc-linux powerpc-netbsd powerpc-macos powerpc-darwin powerpc-morphos sparc-linux sparc-netbsd sparc-solaris x86_64-linux x86_64-freebsd arm-linux
-BSDs = freebsd netbsd openbsd darwin
-UNIXs = linux $(BSDs) solaris qnx
-LIMIT83fs = go32v2 os2 emx watcom
-FORCE:
-.PHONY: FORCE
-override PATH:=$(patsubst %/,%,$(subst \,/,$(PATH)))
-ifneq ($(findstring darwin,$(OSTYPE)),)
-inUnix=1 #darwin
-SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
-else
-ifeq ($(findstring ;,$(PATH)),)
-inUnix=1
-SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
-else
-SEARCHPATH:=$(subst ;, ,$(PATH))
-endif
-endif
-SEARCHPATH+=$(patsubst %/,%,$(subst \,/,$(dir $(MAKE))))
-PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(SEARCHPATH))))
-ifeq ($(PWD),)
-PWD:=$(strip $(wildcard $(addsuffix /pwd,$(SEARCHPATH))))
-ifeq ($(PWD),)
-$(error You need the GNU utils package to use this Makefile)
-else
-PWD:=$(firstword $(PWD))
-SRCEXEEXT=
-endif
-else
-PWD:=$(firstword $(PWD))
-SRCEXEEXT=.exe
-endif
-ifndef inUnix
-ifeq ($(OS),Windows_NT)
-inWinNT=1
-else
-ifdef OS2_SHELL
-inOS2=1
-endif
-endif
-else
-ifneq ($(findstring cygdrive,$(PATH)),)
-inCygWin=1
-endif
-endif
-ifdef inUnix
-SRCBATCHEXT=.sh
-else
-ifdef inOS2
-SRCBATCHEXT=.cmd
-else
-SRCBATCHEXT=.bat
-endif
-endif
-ifdef inUnix
-PATHSEP=/
-else
-PATHSEP:=$(subst /,\,/)
-ifdef inCygWin
-PATHSEP=/
-endif
-endif
-ifdef PWD
-BASEDIR:=$(subst \,/,$(shell $(PWD)))
-ifdef inCygWin
-ifneq ($(findstring /cygdrive/,$(BASEDIR)),)
-BASENODIR:=$(patsubst /cygdrive%,%,$(BASEDIR))
-BASEDRIVE:=$(firstword $(subst /, ,$(BASENODIR)))
-BASEDIR:=$(subst /cygdrive/$(BASEDRIVE)/,$(BASEDRIVE):/,$(BASEDIR))
-endif
-endif
-else
-BASEDIR=.
-endif
-ifdef inOS2
-ifndef ECHO
-ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
-ifeq ($(ECHO),)
-ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
-ifeq ($(ECHO),)
-ECHO=echo
-else
-ECHO:=$(firstword $(ECHO))
-endif
-else
-ECHO:=$(firstword $(ECHO))
-endif
-endif
-export ECHO
-endif
-override DEFAULT_FPCDIR=../../..
-ifndef FPC
-ifdef PP
-FPC=$(PP)
-endif
-endif
-ifndef FPC
-FPCPROG:=$(strip $(wildcard $(addsuffix /fpc$(SRCEXEEXT),$(SEARCHPATH))))
-ifneq ($(FPCPROG),)
-FPCPROG:=$(firstword $(FPCPROG))
-FPC:=$(shell $(FPCPROG) -PB)
-ifneq ($(findstring Error,$(FPC)),)
-override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
-endif
-else
-override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
-endif
-endif
-override FPC:=$(subst $(SRCEXEEXT),,$(FPC))
-override FPC:=$(subst \,/,$(FPC))$(SRCEXEEXT)
-FOUNDFPC:=$(strip $(wildcard $(FPC)))
-ifeq ($(FOUNDFPC),)
-FOUNDFPC=$(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))
-ifeq ($(FOUNDFPC),)
-$(error Compiler $(FPC) not found)
-endif
-endif
-ifndef FPC_COMPILERINFO
-FPC_COMPILERINFO:=$(shell $(FPC) -iVSPTPSOTO)
-endif
-ifndef FPC_VERSION
-FPC_VERSION:=$(word 1,$(FPC_COMPILERINFO))
-endif
-export FPC FPC_VERSION FPC_COMPILERINFO
-unexport CHECKDEPEND ALLDEPENDENCIES
-ifndef CPU_TARGET
-ifdef CPU_TARGET_DEFAULT
-CPU_TARGET=$(CPU_TARGET_DEFAULT)
-endif
-endif
-ifndef OS_TARGET
-ifdef OS_TARGET_DEFAULT
-OS_TARGET=$(OS_TARGET_DEFAULT)
-endif
-endif
-ifneq ($(words $(FPC_COMPILERINFO)),5)
-FPC_COMPILERINFO+=$(shell $(FPC) -iSP)
-FPC_COMPILERINFO+=$(shell $(FPC) -iTP)
-FPC_COMPILERINFO+=$(shell $(FPC) -iSO)
-FPC_COMPILERINFO+=$(shell $(FPC) -iTO)
-endif
-ifndef CPU_SOURCE
-CPU_SOURCE:=$(word 2,$(FPC_COMPILERINFO))
-endif
-ifndef CPU_TARGET
-CPU_TARGET:=$(word 3,$(FPC_COMPILERINFO))
-endif
-ifndef OS_SOURCE
-OS_SOURCE:=$(word 4,$(FPC_COMPILERINFO))
-endif
-ifndef OS_TARGET
-OS_TARGET:=$(word 5,$(FPC_COMPILERINFO))
-endif
-FULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
-FULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
-ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
-TARGETSUFFIX=$(OS_TARGET)
-SOURCESUFFIX=$(OS_SOURCE)
-else
-TARGETSUFFIX=$(FULL_TARGET)
-SOURCESUFFIX=$(FULL_SOURCE)
-endif
-ifneq ($(FULL_TARGET),$(FULL_SOURCE))
-CROSSCOMPILE=1
-endif
-ifeq ($(findstring makefile,$(MAKECMDGOALS)),)
-ifeq ($(findstring $(FULL_TARGET),$(MAKEFILETARGETS)),)
-$(error The Makefile doesn't support target $(FULL_TARGET), please run fpcmake first)
-endif
-endif
-ifneq ($(findstring $(OS_TARGET),$(BSDs)),)
-BSDhier=1
-endif
-ifeq ($(OS_TARGET),linux)
-linuxHier=1
-endif
-export OS_TARGET OS_SOURCE CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE TARGETSUFFIX SOURCESUFFIX CROSSCOMPILE
-ifdef FPCDIR
-override FPCDIR:=$(subst \,/,$(FPCDIR))
-ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
-override FPCDIR=wrong
-endif
-else
-override FPCDIR=wrong
-endif
-ifdef DEFAULT_FPCDIR
-ifeq ($(FPCDIR),wrong)
-override FPCDIR:=$(subst \,/,$(DEFAULT_FPCDIR))
-ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
-override FPCDIR=wrong
-endif
-endif
-endif
-ifeq ($(FPCDIR),wrong)
-ifdef inUnix
-override FPCDIR=/usr/local/lib/fpc/$(FPC_VERSION)
-ifeq ($(wildcard $(FPCDIR)/units),)
-override FPCDIR=/usr/lib/fpc/$(FPC_VERSION)
-endif
-else
-override FPCDIR:=$(subst /$(FPC),,$(firstword $(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))))
-override FPCDIR:=$(FPCDIR)/..
-ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
-override FPCDIR:=$(FPCDIR)/..
-ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
-override FPCDIR:=$(BASEDIR)
-ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
-override FPCDIR=c:/pp
-endif
-endif
-endif
-endif
-endif
-ifndef CROSSBINDIR
-CROSSBINDIR:=$(wildcard $(FPCDIR)/bin/$(TARGETSUFFIX))
-endif
-ifndef BINUTILSPREFIX
-ifndef CROSSBINDIR
-ifdef CROSSCOMPILE
-BINUTILSPREFIX=$(CPU_TARGET)-$(OS_TARGET)-
-endif
-endif
-endif
-UNITSDIR:=$(wildcard $(FPCDIR)/units/$(TARGETSUFFIX))
-ifeq ($(UNITSDIR),)
-UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
-endif
-PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
-override PACKAGE_NAME=mmsystem
-override PACKAGE_VERSION=1.9.8
-ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_UNITS+=mmsystem
-endif
-ifeq ($(FULL_TARGET),i386-go32v2)
-override TARGET_UNITS+=mmsystem
-endif
-ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_UNITS+=mmsystem
-endif
-ifeq ($(FULL_TARGET),i386-os2)
-override TARGET_UNITS+=mmsystem
-endif
-ifeq ($(FULL_TARGET),i386-freebsd)
-override TARGET_UNITS+=mmsystem
-endif
-ifeq ($(FULL_TARGET),i386-beos)
-override TARGET_UNITS+=mmsystem
-endif
-ifeq ($(FULL_TARGET),i386-netbsd)
-override TARGET_UNITS+=mmsystem
-endif
-ifeq ($(FULL_TARGET),i386-solaris)
-override TARGET_UNITS+=mmsystem
-endif
-ifeq ($(FULL_TARGET),i386-qnx)
-override TARGET_UNITS+=mmsystem
-endif
-ifeq ($(FULL_TARGET),i386-netware)
-override TARGET_UNITS+=mmsystem
-endif
-ifeq ($(FULL_TARGET),i386-openbsd)
-override TARGET_UNITS+=mmsystem
-endif
-ifeq ($(FULL_TARGET),i386-wdosx)
-override TARGET_UNITS+=mmsystem
-endif
-ifeq ($(FULL_TARGET),i386-emx)
-override TARGET_UNITS+=mmsystem
-endif
-ifeq ($(FULL_TARGET),i386-watcom)
-override TARGET_UNITS+=mmsystem
-endif
-ifeq ($(FULL_TARGET),i386-netwlibc)
-override TARGET_UNITS+=mmsystem
-endif
-ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_UNITS+=mmsystem
-endif
-ifeq ($(FULL_TARGET),m68k-freebsd)
-override TARGET_UNITS+=mmsystem
-endif
-ifeq ($(FULL_TARGET),m68k-netbsd)
-override TARGET_UNITS+=mmsystem
-endif
-ifeq ($(FULL_TARGET),m68k-amiga)
-override TARGET_UNITS+=mmsystem
-endif
-ifeq ($(FULL_TARGET),m68k-atari)
-override TARGET_UNITS+=mmsystem
-endif
-ifeq ($(FULL_TARGET),m68k-openbsd)
-override TARGET_UNITS+=mmsystem
-endif
-ifeq ($(FULL_TARGET),m68k-palmos)
-override TARGET_UNITS+=mmsystem
-endif
-ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_UNITS+=mmsystem
-endif
-ifeq ($(FULL_TARGET),powerpc-netbsd)
-override TARGET_UNITS+=mmsystem
-endif
-ifeq ($(FULL_TARGET),powerpc-macos)
-override TARGET_UNITS+=mmsystem
-endif
-ifeq ($(FULL_TARGET),powerpc-darwin)
-override TARGET_UNITS+=mmsystem
-endif
-ifeq ($(FULL_TARGET),powerpc-morphos)
-override TARGET_UNITS+=mmsystem
-endif
-ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_UNITS+=mmsystem
-endif
-ifeq ($(FULL_TARGET),sparc-netbsd)
-override TARGET_UNITS+=mmsystem
-endif
-ifeq ($(FULL_TARGET),sparc-solaris)
-override TARGET_UNITS+=mmsystem
-endif
-ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_UNITS+=mmsystem
-endif
-ifeq ($(FULL_TARGET),x86_64-freebsd)
-override TARGET_UNITS+=mmsystem
-endif
-ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_UNITS+=mmsystem
-endif
-override INSTALL_FPCPACKAGE=y
-ifdef REQUIRE_UNITSDIR
-override UNITSDIR+=$(REQUIRE_UNITSDIR)
-endif
-ifdef REQUIRE_PACKAGESDIR
-override PACKAGESDIR+=$(REQUIRE_PACKAGESDIR)
-endif
-ifdef ZIPINSTALL
-ifneq ($(findstring $(OS_TARGET),$(UNIXs)),)
-UNIXHier=1
-endif
-else
-ifneq ($(findstring $(OS_SOURCE),$(UNIXs)),)
-UNIXHier=1
-endif
-endif
-ifndef INSTALL_PREFIX
-ifdef PREFIX
-INSTALL_PREFIX=$(PREFIX)
-endif
-endif
-ifndef INSTALL_PREFIX
-ifdef UNIXHier
-INSTALL_PREFIX=/usr/local
-else
-ifdef INSTALL_FPCPACKAGE
-INSTALL_BASEDIR:=/pp
-else
-INSTALL_BASEDIR:=/$(PACKAGE_NAME)
-endif
-endif
-endif
-export INSTALL_PREFIX
-ifdef INSTALL_FPCSUBDIR
-export INSTALL_FPCSUBDIR
-endif
-ifndef DIST_DESTDIR
-DIST_DESTDIR:=$(BASEDIR)
-endif
-export DIST_DESTDIR
-ifndef COMPILER_UNITTARGETDIR
-ifdef PACKAGEDIR_MAIN
-COMPILER_UNITTARGETDIR=$(PACKAGEDIR_MAIN)/units/$(TARGETSUFFIX)
-else
-COMPILER_UNITTARGETDIR=units/$(TARGETSUFFIX)
-endif
-endif
-ifndef COMPILER_TARGETDIR
-COMPILER_TARGETDIR=.
-endif
-ifndef INSTALL_BASEDIR
-ifdef UNIXHier
-ifdef INSTALL_FPCPACKAGE
-INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/fpc/$(FPC_VERSION)
-else
-INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/$(PACKAGE_NAME)
-endif
-else
-INSTALL_BASEDIR:=$(INSTALL_PREFIX)
-endif
-endif
-ifndef INSTALL_BINDIR
-ifdef UNIXHier
-INSTALL_BINDIR:=$(INSTALL_PREFIX)/bin
-else
-INSTALL_BINDIR:=$(INSTALL_BASEDIR)/bin
-ifdef INSTALL_FPCPACKAGE
-ifdef CROSSCOMPILE
-ifdef CROSSINSTALL
-INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(SOURCESUFFIX)
-else
-INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
-endif
-else
-INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
-endif
-endif
-endif
-endif
-ifndef INSTALL_UNITDIR
-INSTALL_UNITDIR:=$(INSTALL_BASEDIR)/units/$(TARGETSUFFIX)
-ifdef INSTALL_FPCPACKAGE
-ifdef PACKAGE_NAME
-INSTALL_UNITDIR:=$(INSTALL_UNITDIR)/$(PACKAGE_NAME)
-endif
-endif
-endif
-ifndef INSTALL_LIBDIR
-ifdef UNIXHier
-INSTALL_LIBDIR:=$(INSTALL_PREFIX)/lib
-else
-INSTALL_LIBDIR:=$(INSTALL_UNITDIR)
-endif
-endif
-ifndef INSTALL_SOURCEDIR
-ifdef UNIXHier
-ifdef BSDhier
-SRCPREFIXDIR=share/src
-else
-ifdef linuxHier
-SRCPREFIXDIR=share/src
-else
-SRCPREFIXDIR=src
-endif
-endif
-ifdef INSTALL_FPCPACKAGE
-ifdef INSTALL_FPCSUBDIR
-INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
-else
-INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
-endif
-else
-INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
-endif
-else
-ifdef INSTALL_FPCPACKAGE
-ifdef INSTALL_FPCSUBDIR
-INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
-else
-INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(PACKAGE_NAME)
-endif
-else
-INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source
-endif
-endif
-endif
-ifndef INSTALL_DOCDIR
-ifdef UNIXHier
-ifdef BSDhier
-DOCPREFIXDIR=share/doc
-else
-ifdef linuxHier
-DOCPREFIXDIR=share/doc
-else
-DOCPREFIXDIR=doc
-endif
-endif
-ifdef INSTALL_FPCPACKAGE
-INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
-else
-INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
-endif
-else
-ifdef INSTALL_FPCPACKAGE
-INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc/$(PACKAGE_NAME)
-else
-INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc
-endif
-endif
-endif
-ifndef INSTALL_EXAMPLEDIR
-ifdef UNIXHier
-ifdef INSTALL_FPCPACKAGE
-ifdef BSDhier
-INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
-else
-ifdef linuxHier
-INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples
-else
-INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/fpc-$(FPC_VERSION)/examples/$(PACKAGE_NAME)
-endif
-endif
-else
-ifdef BSDhier
-INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
-else
-ifdef linuxHier
-INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
-else
-INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
-endif
-endif
-endif
-else
-ifdef INSTALL_FPCPACKAGE
-INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples/$(PACKAGE_NAME)
-else
-INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples
-endif
-endif
-endif
-ifndef INSTALL_DATADIR
-INSTALL_DATADIR=$(INSTALL_BASEDIR)
-endif
-ifdef CROSSCOMPILE
-ifndef CROSSBINDIR
-CROSSBINDIR:=$(wildcard $(CROSSTARGETDIR)/bin/$(SOURCESUFFIX))
-ifeq ($(CROSSBINDIR),)
-CROSSBINDIR:=$(wildcard $(INSTALL_BASEDIR)/cross/$(TARGETSUFFIX)/bin/$(FULL_SOURCE))
-endif
-endif
-else
-CROSSBINDIR=
-endif
-BATCHEXT=.bat
-LOADEREXT=.as
-EXEEXT=.exe
-PPLEXT=.ppl
-PPUEXT=.ppu
-OEXT=.o
-ASMEXT=.s
-SMARTEXT=.sl
-STATICLIBEXT=.a
-SHAREDLIBEXT=.so
-STATICLIBPREFIX=libp
-RSTEXT=.rst
-ifeq ($(findstring 1.0.,$(FPC_VERSION)),)
-ifeq ($(OS_TARGET),go32v1)
-STATICLIBPREFIX=
-SHORTSUFFIX=v1
-endif
-ifeq ($(OS_TARGET),go32v2)
-STATICLIBPREFIX=
-SHORTSUFFIX=dos
-endif
-ifeq ($(OS_TARGET),watcom)
-STATICLIBPREFIX=
-OEXT=.obj
-ASMEXT=.asm
-SHAREDLIBEXT=.dll
-SHORTSUFFIX=wat
-endif
-ifeq ($(OS_TARGET),linux)
-BATCHEXT=.sh
-EXEEXT=
-HASSHAREDLIB=1
-SHORTSUFFIX=lnx
-endif
-ifeq ($(OS_TARGET),freebsd)
-BATCHEXT=.sh
-EXEEXT=
-HASSHAREDLIB=1
-SHORTSUFFIX=fbs
-endif
-ifeq ($(OS_TARGET),netbsd)
-BATCHEXT=.sh
-EXEEXT=
-HASSHAREDLIB=1
-SHORTSUFFIX=nbs
-endif
-ifeq ($(OS_TARGET),openbsd)
-BATCHEXT=.sh
-EXEEXT=
-HASSHAREDLIB=1
-SHORTSUFFIX=obs
-endif
-ifeq ($(OS_TARGET),win32)
-SHAREDLIBEXT=.dll
-SHORTSUFFIX=w32
-endif
-ifeq ($(OS_TARGET),os2)
-BATCHEXT=.cmd
-AOUTEXT=.out
-STATICLIBPREFIX=
-SHAREDLIBEXT=.dll
-SHORTSUFFIX=os2
-ECHO=echo
-endif
-ifeq ($(OS_TARGET),emx)
-BATCHEXT=.cmd
-AOUTEXT=.out
-STATICLIBPREFIX=
-SHAREDLIBEXT=.dll
-SHORTSUFFIX=emx
-ECHO=echo
-endif
-ifeq ($(OS_TARGET),amiga)
-EXEEXT=
-SHAREDLIBEXT=.library
-SHORTSUFFIX=amg
-endif
-ifeq ($(OS_TARGET),morphos)
-EXEEXT=
-SHAREDLIBEXT=.library
-SHORTSUFFIX=mos
-endif
-ifeq ($(OS_TARGET),atari)
-EXEEXT=.ttp
-SHORTSUFFIX=ata
-endif
-ifeq ($(OS_TARGET),beos)
-BATCHEXT=.sh
-EXEEXT=
-SHORTSUFFIX=be
-endif
-ifeq ($(OS_TARGET),solaris)
-BATCHEXT=.sh
-EXEEXT=
-SHORTSUFFIX=sun
-endif
-ifeq ($(OS_TARGET),qnx)
-BATCHEXT=.sh
-EXEEXT=
-SHORTSUFFIX=qnx
-endif
-ifeq ($(OS_TARGET),netware)
-EXEEXT=.nlm
-STATICLIBPREFIX=
-SHORTSUFFIX=nw
-endif
-ifeq ($(OS_TARGET),netwlibc)
-EXEEXT=.nlm
-STATICLIBPREFIX=
-SHORTSUFFIX=nwl
-endif
-ifeq ($(OS_TARGET),macos)
-BATCHEXT=
-EXEEXT=
-DEBUGSYMEXT=.xcoff
-SHORTSUFFIX=mac
-endif
-ifeq ($(OS_TARGET),darwin)
-BATCHEXT=.sh
-EXEEXT=
-HASSHAREDLIB=1
-SHORTSUFFIX=dwn
-endif
-else
-ifeq ($(OS_TARGET),go32v1)
-PPUEXT=.pp1
-OEXT=.o1
-ASMEXT=.s1
-SMARTEXT=.sl1
-STATICLIBEXT=.a1
-SHAREDLIBEXT=.so1
-STATICLIBPREFIX=
-SHORTSUFFIX=v1
-endif
-ifeq ($(OS_TARGET),go32v2)
-STATICLIBPREFIX=
-SHORTSUFFIX=dos
-endif
-ifeq ($(OS_TARGET),watcom)
-STATICLIBPREFIX=
-SHORTSUFFIX=wat
-endif
-ifeq ($(OS_TARGET),linux)
-BATCHEXT=.sh
-EXEEXT=
-HASSHAREDLIB=1
-SHORTSUFFIX=lnx
-endif
-ifeq ($(OS_TARGET),freebsd)
-BATCHEXT=.sh
-EXEEXT=
-HASSHAREDLIB=1
-SHORTSUFFIX=fbs
-endif
-ifeq ($(OS_TARGET),netbsd)
-BATCHEXT=.sh
-EXEEXT=
-HASSHAREDLIB=1
-SHORTSUFFIX=nbs
-endif
-ifeq ($(OS_TARGET),openbsd)
-BATCHEXT=.sh
-EXEEXT=
-HASSHAREDLIB=1
-SHORTSUFFIX=obs
-endif
-ifeq ($(OS_TARGET),win32)
-PPUEXT=.ppw
-OEXT=.ow
-ASMEXT=.sw
-SMARTEXT=.slw
-STATICLIBEXT=.aw
-SHAREDLIBEXT=.dll
-SHORTSUFFIX=w32
-endif
-ifeq ($(OS_TARGET),os2)
-BATCHEXT=.cmd
-PPUEXT=.ppo
-ASMEXT=.so2
-OEXT=.oo2
-AOUTEXT=.out
-SMARTEXT=.sl2
-STATICLIBPREFIX=
-STATICLIBEXT=.ao2
-SHAREDLIBEXT=.dll
-SHORTSUFFIX=os2
-ECHO=echo
-endif
-ifeq ($(OS_TARGET),amiga)
-EXEEXT=
-PPUEXT=.ppu
-ASMEXT=.asm
-OEXT=.o
-SMARTEXT=.sl
-STATICLIBEXT=.a
-SHAREDLIBEXT=.library
-SHORTSUFFIX=amg
-endif
-ifeq ($(OS_TARGET),atari)
-PPUEXT=.ppu
-ASMEXT=.s
-OEXT=.o
-SMARTEXT=.sl
-STATICLIBEXT=.a
-EXEEXT=.ttp
-SHORTSUFFIX=ata
-endif
-ifeq ($(OS_TARGET),beos)
-BATCHEXT=.sh
-PPUEXT=.ppu
-ASMEXT=.s
-OEXT=.o
-SMARTEXT=.sl
-STATICLIBEXT=.a
-EXEEXT=
-SHORTSUFFIX=be
-endif
-ifeq ($(OS_TARGET),solaris)
-BATCHEXT=.sh
-PPUEXT=.ppu
-ASMEXT=.s
-OEXT=.o
-SMARTEXT=.sl
-STATICLIBEXT=.a
-EXEEXT=
-SHORTSUFFIX=sun
-endif
-ifeq ($(OS_TARGET),qnx)
-BATCHEXT=.sh
-PPUEXT=.ppu
-ASMEXT=.s
-OEXT=.o
-SMARTEXT=.sl
-STATICLIBEXT=.a
-EXEEXT=
-SHORTSUFFIX=qnx
-endif
-ifeq ($(OS_TARGET),netware)
-STATICLIBPREFIX=
-PPUEXT=.ppu
-OEXT=.o
-ASMEXT=.s
-SMARTEXT=.sl
-STATICLIBEXT=.a
-SHAREDLIBEXT=.nlm
-EXEEXT=.nlm
-SHORTSUFFIX=nw
-endif
-ifeq ($(OS_TARGET),netwlibc)
-STATICLIBPREFIX=
-PPUEXT=.ppu
-OEXT=.o
-ASMEXT=.s
-SMARTEXT=.sl
-STATICLIBEXT=.a
-SHAREDLIBEXT=.nlm
-EXEEXT=.nlm
-SHORTSUFFIX=nwl
-endif
-ifeq ($(OS_TARGET),macos)
-BATCHEXT=
-PPUEXT=.ppu
-ASMEXT=.s
-OEXT=.o
-SMARTEXT=.sl
-STATICLIBEXT=.a
-EXEEXT=
-DEBUGSYMEXT=.xcoff
-SHORTSUFFIX=mac
-endif
-endif
-ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
-FPCMADE=fpcmade.$(SHORTSUFFIX)
-ZIPSUFFIX=$(SHORTSUFFIX)
-ZIPCROSSPREFIX=
-ZIPSOURCESUFFIX=src
-ZIPEXAMPLESUFFIX=exm
-else
-FPCMADE=fpcmade.$(TARGETSUFFIX)
-ZIPSOURCESUFFIX=.source
-ZIPEXAMPLESUFFIX=.examples
-ifdef CROSSCOMPILE
-ZIPSUFFIX=.$(SOURCESUFFIX)
-ZIPCROSSPREFIX=$(TARGETSUFFIX)-
-else
-ZIPSUFFIX=.$(TARGETSUFFIX)
-ZIPCROSSPREFIX=
-endif
-endif
-ifndef ECHO
-ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
-ifeq ($(ECHO),)
-ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
-ifeq ($(ECHO),)
-ECHO= __missing_command_ECHO
-else
-ECHO:=$(firstword $(ECHO))
-endif
-else
-ECHO:=$(firstword $(ECHO))
-endif
-endif
-export ECHO
-ifndef DATE
-DATE:=$(strip $(wildcard $(addsuffix /gdate$(SRCEXEEXT),$(SEARCHPATH))))
-ifeq ($(DATE),)
-DATE:=$(strip $(wildcard $(addsuffix /date$(SRCEXEEXT),$(SEARCHPATH))))
-ifeq ($(DATE),)
-DATE= __missing_command_DATE
-else
-DATE:=$(firstword $(DATE))
-endif
-else
-DATE:=$(firstword $(DATE))
-endif
-endif
-export DATE
-ifndef GINSTALL
-GINSTALL:=$(strip $(wildcard $(addsuffix /ginstall$(SRCEXEEXT),$(SEARCHPATH))))
-ifeq ($(GINSTALL),)
-GINSTALL:=$(strip $(wildcard $(addsuffix /install$(SRCEXEEXT),$(SEARCHPATH))))
-ifeq ($(GINSTALL),)
-GINSTALL= __missing_command_GINSTALL
-else
-GINSTALL:=$(firstword $(GINSTALL))
-endif
-else
-GINSTALL:=$(firstword $(GINSTALL))
-endif
-endif
-export GINSTALL
-ifndef CPPROG
-CPPROG:=$(strip $(wildcard $(addsuffix /cp$(SRCEXEEXT),$(SEARCHPATH))))
-ifeq ($(CPPROG),)
-CPPROG= __missing_command_CPPROG
-else
-CPPROG:=$(firstword $(CPPROG))
-endif
-endif
-export CPPROG
-ifndef RMPROG
-RMPROG:=$(strip $(wildcard $(addsuffix /rm$(SRCEXEEXT),$(SEARCHPATH))))
-ifeq ($(RMPROG),)
-RMPROG= __missing_command_RMPROG
-else
-RMPROG:=$(firstword $(RMPROG))
-endif
-endif
-export RMPROG
-ifndef MVPROG
-MVPROG:=$(strip $(wildcard $(addsuffix /mv$(SRCEXEEXT),$(SEARCHPATH))))
-ifeq ($(MVPROG),)
-MVPROG= __missing_command_MVPROG
-else
-MVPROG:=$(firstword $(MVPROG))
-endif
-endif
-export MVPROG
-ifndef MKDIRPROG
-MKDIRPROG:=$(strip $(wildcard $(addsuffix /gmkdir$(SRCEXEEXT),$(SEARCHPATH))))
-ifeq ($(MKDIRPROG),)
-MKDIRPROG:=$(strip $(wildcard $(addsuffix /mkdir$(SRCEXEEXT),$(SEARCHPATH))))
-ifeq ($(MKDIRPROG),)
-MKDIRPROG= __missing_command_MKDIRPROG
-else
-MKDIRPROG:=$(firstword $(MKDIRPROG))
-endif
-else
-MKDIRPROG:=$(firstword $(MKDIRPROG))
-endif
-endif
-export MKDIRPROG
-ifndef ECHOREDIR
-ifndef inUnix
-ECHOREDIR=echo
-else
-ECHOREDIR=$(ECHO)
-endif
-endif
-ifndef COPY
-COPY:=$(CPPROG) -fp
-endif
-ifndef COPYTREE
-COPYTREE:=$(CPPROG) -Rfp
-endif
-ifndef MKDIRTREE
-MKDIRTREE:=$(MKDIRPROG) -p
-endif
-ifndef MOVE
-MOVE:=$(MVPROG) -f
-endif
-ifndef DEL
-DEL:=$(RMPROG) -f
-endif
-ifndef DELTREE
-DELTREE:=$(RMPROG) -rf
-endif
-ifndef INSTALL
-ifdef inUnix
-INSTALL:=$(GINSTALL) -c -m 644
-else
-INSTALL:=$(COPY)
-endif
-endif
-ifndef INSTALLEXE
-ifdef inUnix
-INSTALLEXE:=$(GINSTALL) -c -m 755
-else
-INSTALLEXE:=$(COPY)
-endif
-endif
-ifndef MKDIR
-MKDIR:=$(GINSTALL) -m 755 -d
-endif
-export ECHOREDIR COPY COPYTREE MOVE DEL DELTREE INSTALL INSTALLEXE MKDIR
-ifndef PPUMOVE
-PPUMOVE:=$(strip $(wildcard $(addsuffix /ppumove$(SRCEXEEXT),$(SEARCHPATH))))
-ifeq ($(PPUMOVE),)
-PPUMOVE= __missing_command_PPUMOVE
-else
-PPUMOVE:=$(firstword $(PPUMOVE))
-endif
-endif
-export PPUMOVE
-ifndef FPCMAKE
-FPCMAKE:=$(strip $(wildcard $(addsuffix /fpcmake$(SRCEXEEXT),$(SEARCHPATH))))
-ifeq ($(FPCMAKE),)
-FPCMAKE= __missing_command_FPCMAKE
-else
-FPCMAKE:=$(firstword $(FPCMAKE))
-endif
-endif
-export FPCMAKE
-ifndef ZIPPROG
-ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(SRCEXEEXT),$(SEARCHPATH))))
-ifeq ($(ZIPPROG),)
-ZIPPROG= __missing_command_ZIPPROG
-else
-ZIPPROG:=$(firstword $(ZIPPROG))
-endif
-endif
-export ZIPPROG
-ifndef TARPROG
-TARPROG:=$(strip $(wildcard $(addsuffix /tar$(SRCEXEEXT),$(SEARCHPATH))))
-ifeq ($(TARPROG),)
-TARPROG= __missing_command_TARPROG
-else
-TARPROG:=$(firstword $(TARPROG))
-endif
-endif
-export TARPROG
-ASNAME=$(BINUTILSPREFIX)as
-LDNAME=$(BINUTILSPREFIX)ld
-ARNAME=$(BINUTILSPREFIX)ar
-RCNAME=$(BINUTILSPREFIX)rc
-ifneq ($(findstring 1.0.,$(FPC_VERSION)),)
-ifeq ($(OS_TARGET),win32)
-ifeq ($(CROSSBINDIR),)
-ASNAME=asw
-LDNAME=ldw
-ARNAME=arw
-endif
-endif
-endif
-ifndef ASPROG
-ifdef CROSSBINDIR
-ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
-else
-ASPROG=$(ASNAME)
-endif
-endif
-ifndef LDPROG
-ifdef CROSSBINDIR
-LDPROG=$(CROSSBINDIR)/$(LDNAME)$(SRCEXEEXT)
-else
-LDPROG=$(LDNAME)
-endif
-endif
-ifndef RCPROG
-ifdef CROSSBINDIR
-RCPROG=$(CROSSBINDIR)/$(RCNAME)$(SRCEXEEXT)
-else
-RCPROG=$(RCNAME)
-endif
-endif
-ifndef ARPROG
-ifdef CROSSBINDIR
-ARPROG=$(CROSSBINDIR)/$(ARNAME)$(SRCEXEEXT)
-else
-ARPROG=$(ARNAME)
-endif
-endif
-AS=$(ASPROG)
-LD=$(LDPROG)
-RC=$(RCPROG)
-AR=$(ARPROG)
-PPAS=ppas$(SRCBATCHEXT)
-ifdef inUnix
-LDCONFIG=ldconfig
-else
-LDCONFIG=
-endif
-ifdef DATE
-DATESTR:=$(shell $(DATE) +%Y%m%d)
-else
-DATESTR=
-endif
-ifndef UPXPROG
-ifeq ($(OS_TARGET),go32v2)
-UPXPROG:=1
-endif
-ifeq ($(OS_TARGET),win32)
-UPXPROG:=1
-endif
-ifdef UPXPROG
-UPXPROG:=$(strip $(wildcard $(addsuffix /upx$(SRCEXEEXT),$(SEARCHPATH))))
-ifeq ($(UPXPROG),)
-UPXPROG=
-else
-UPXPROG:=$(firstword $(UPXPROG))
-endif
-else
-UPXPROG=
-endif
-endif
-export UPXPROG
-ZIPOPT=-9
-ZIPEXT=.zip
-ifeq ($(USETAR),bz2)
-TAROPT=vI
-TAREXT=.tar.bz2
-else
-TAROPT=vz
-TAREXT=.tar.gz
-endif
-override REQUIRE_PACKAGES=rtl 
-ifeq ($(FULL_TARGET),i386-linux)
-REQUIRE_PACKAGES_RTL=1
-endif
-ifeq ($(FULL_TARGET),i386-go32v2)
-REQUIRE_PACKAGES_RTL=1
-endif
-ifeq ($(FULL_TARGET),i386-win32)
-REQUIRE_PACKAGES_RTL=1
-endif
-ifeq ($(FULL_TARGET),i386-os2)
-REQUIRE_PACKAGES_RTL=1
-endif
-ifeq ($(FULL_TARGET),i386-freebsd)
-REQUIRE_PACKAGES_RTL=1
-endif
-ifeq ($(FULL_TARGET),i386-beos)
-REQUIRE_PACKAGES_RTL=1
-endif
-ifeq ($(FULL_TARGET),i386-netbsd)
-REQUIRE_PACKAGES_RTL=1
-endif
-ifeq ($(FULL_TARGET),i386-solaris)
-REQUIRE_PACKAGES_RTL=1
-endif
-ifeq ($(FULL_TARGET),i386-qnx)
-REQUIRE_PACKAGES_RTL=1
-endif
-ifeq ($(FULL_TARGET),i386-netware)
-REQUIRE_PACKAGES_RTL=1
-endif
-ifeq ($(FULL_TARGET),i386-openbsd)
-REQUIRE_PACKAGES_RTL=1
-endif
-ifeq ($(FULL_TARGET),i386-wdosx)
-REQUIRE_PACKAGES_RTL=1
-endif
-ifeq ($(FULL_TARGET),i386-emx)
-REQUIRE_PACKAGES_RTL=1
-endif
-ifeq ($(FULL_TARGET),i386-watcom)
-REQUIRE_PACKAGES_RTL=1
-endif
-ifeq ($(FULL_TARGET),i386-netwlibc)
-REQUIRE_PACKAGES_RTL=1
-endif
-ifeq ($(FULL_TARGET),m68k-linux)
-REQUIRE_PACKAGES_RTL=1
-endif
-ifeq ($(FULL_TARGET),m68k-freebsd)
-REQUIRE_PACKAGES_RTL=1
-endif
-ifeq ($(FULL_TARGET),m68k-netbsd)
-REQUIRE_PACKAGES_RTL=1
-endif
-ifeq ($(FULL_TARGET),m68k-amiga)
-REQUIRE_PACKAGES_RTL=1
-endif
-ifeq ($(FULL_TARGET),m68k-atari)
-REQUIRE_PACKAGES_RTL=1
-endif
-ifeq ($(FULL_TARGET),m68k-openbsd)
-REQUIRE_PACKAGES_RTL=1
-endif
-ifeq ($(FULL_TARGET),m68k-palmos)
-REQUIRE_PACKAGES_RTL=1
-endif
-ifeq ($(FULL_TARGET),powerpc-linux)
-REQUIRE_PACKAGES_RTL=1
-endif
-ifeq ($(FULL_TARGET),powerpc-netbsd)
-REQUIRE_PACKAGES_RTL=1
-endif
-ifeq ($(FULL_TARGET),powerpc-macos)
-REQUIRE_PACKAGES_RTL=1
-endif
-ifeq ($(FULL_TARGET),powerpc-darwin)
-REQUIRE_PACKAGES_RTL=1
-endif
-ifeq ($(FULL_TARGET),powerpc-morphos)
-REQUIRE_PACKAGES_RTL=1
-endif
-ifeq ($(FULL_TARGET),sparc-linux)
-REQUIRE_PACKAGES_RTL=1
-endif
-ifeq ($(FULL_TARGET),sparc-netbsd)
-REQUIRE_PACKAGES_RTL=1
-endif
-ifeq ($(FULL_TARGET),sparc-solaris)
-REQUIRE_PACKAGES_RTL=1
-endif
-ifeq ($(FULL_TARGET),x86_64-linux)
-REQUIRE_PACKAGES_RTL=1
-endif
-ifeq ($(FULL_TARGET),x86_64-freebsd)
-REQUIRE_PACKAGES_RTL=1
-endif
-ifeq ($(FULL_TARGET),arm-linux)
-REQUIRE_PACKAGES_RTL=1
-endif
-ifdef REQUIRE_PACKAGES_RTL
-PACKAGEDIR_RTL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/Makefile.fpc,$(PACKAGESDIR))))))
-ifneq ($(PACKAGEDIR_RTL),)
-ifneq ($(wildcard $(PACKAGEDIR_RTL)/units/$(TARGETSUFFIX)),)
-UNITDIR_RTL=$(PACKAGEDIR_RTL)/units/$(TARGETSUFFIX)
-else
-UNITDIR_RTL=$(PACKAGEDIR_RTL)
-endif
-ifdef CHECKDEPEND
-$(PACKAGEDIR_RTL)/$(FPCMADE):
-	$(MAKE) -C $(PACKAGEDIR_RTL) $(FPCMADE)
-override ALLDEPENDENCIES+=$(PACKAGEDIR_RTL)/$(FPCMADE)
-endif
-else
-PACKAGEDIR_RTL=
-UNITDIR_RTL:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /rtl/Package.fpc,$(UNITSDIR)))))
-ifneq ($(UNITDIR_RTL),)
-UNITDIR_RTL:=$(firstword $(UNITDIR_RTL))
-else
-UNITDIR_RTL=
-endif
-endif
-ifdef UNITDIR_RTL
-override COMPILER_UNITDIR+=$(UNITDIR_RTL)
-endif
-endif
-ifndef NOCPUDEF
-override FPCOPTDEF=$(CPU_TARGET)
-endif
-ifneq ($(OS_TARGET),$(OS_SOURCE))
-override FPCOPT+=-T$(OS_TARGET)
-endif
-ifeq ($(OS_SOURCE),openbsd)
-override FPCOPT+=-FD$(NEW_BINUTILS_PATH)
-endif
-ifndef CROSSBOOTSTRAP
-ifneq ($(BINUTILSPREFIX),)
-override FPCOPT+=-XP$(BINUTILSPREFIX) -Xc
-endif
-ifneq ($(BINUTILSPREFIX),)
-override FPCOPT+=-Xr$(RLINKPATH)
-endif
-endif
-ifdef UNITDIR
-override FPCOPT+=$(addprefix -Fu,$(UNITDIR))
-endif
-ifdef LIBDIR
-override FPCOPT+=$(addprefix -Fl,$(LIBDIR))
-endif
-ifdef OBJDIR
-override FPCOPT+=$(addprefix -Fo,$(OBJDIR))
-endif
-ifdef INCDIR
-override FPCOPT+=$(addprefix -Fi,$(INCDIR))
-endif
-ifdef LINKSMART
-override FPCOPT+=-XX
-endif
-ifdef CREATESMART
-override FPCOPT+=-CX
-endif
-ifdef DEBUG
-override FPCOPT+=-gl
-override FPCOPTDEF+=DEBUG
-endif
-ifdef RELEASE
-ifeq ($(CPU_TARGET),i386)
-FPCCPUOPT:=-OG2p3
-else
-ifeq ($(CPU_TARGET),powerpc)
-FPCCPUOPT:=-O1
-else
-FPCCPUOPT:=
-endif
-endif
-override FPCOPT+=-Xs $(FPCCPUOPT) -n
-override FPCOPTDEF+=RELEASE
-endif
-ifdef STRIP
-override FPCOPT+=-Xs
-endif
-ifdef OPTIMIZE
-ifeq ($(CPU_TARGET),i386)
-override FPCOPT+=-OG2p3
-endif
-endif
-ifdef VERBOSE
-override FPCOPT+=-vwni
-endif
-ifdef COMPILER_OPTIONS
-override FPCOPT+=$(COMPILER_OPTIONS)
-endif
-ifdef COMPILER_UNITDIR
-override FPCOPT+=$(addprefix -Fu,$(COMPILER_UNITDIR))
-endif
-ifdef COMPILER_LIBRARYDIR
-override FPCOPT+=$(addprefix -Fl,$(COMPILER_LIBRARYDIR))
-endif
-ifdef COMPILER_OBJECTDIR
-override FPCOPT+=$(addprefix -Fo,$(COMPILER_OBJECTDIR))
-endif
-ifdef COMPILER_INCLUDEDIR
-override FPCOPT+=$(addprefix -Fi,$(COMPILER_INCLUDEDIR))
-endif
-ifdef CROSSBINDIR
-override FPCOPT+=-FD$(CROSSBINDIR)
-endif
-ifdef COMPILER_TARGETDIR
-override FPCOPT+=-FE$(COMPILER_TARGETDIR)
-ifeq ($(COMPILER_TARGETDIR),.)
-override TARGETDIRPREFIX=
-else
-override TARGETDIRPREFIX=$(COMPILER_TARGETDIR)/
-endif
-endif
-ifdef COMPILER_UNITTARGETDIR
-override FPCOPT+=-FU$(COMPILER_UNITTARGETDIR)
-ifeq ($(COMPILER_UNITTARGETDIR),.)
-override UNITTARGETDIRPREFIX=
-else
-override UNITTARGETDIRPREFIX=$(COMPILER_UNITTARGETDIR)/
-endif
-else
-ifdef COMPILER_TARGETDIR
-override COMPILER_UNITTARGETDIR=$(COMPILER_TARGETDIR)
-override UNITTARGETDIRPREFIX=$(TARGETDIRPREFIX)
-endif
-endif
-ifeq ($(OS_TARGET),linux)
-ifeq ($(FPC_VERSION),1.0.6)
-override FPCOPTDEF+=HASUNIX
-endif
-endif
-ifdef OPT
-override FPCOPT+=$(OPT)
-endif
-ifdef FPCOPTDEF
-override FPCOPT+=$(addprefix -d,$(FPCOPTDEF))
-endif
-ifdef CFGFILE
-override FPCOPT+=@$(CFGFILE)
-endif
-ifdef USEENV
-override FPCEXTCMD:=$(FPCOPT)
-override FPCOPT:=!FPCEXTCMD
-export FPCEXTCMD
-endif
-override COMPILER:=$(FPC) $(FPCOPT)
-ifeq (,$(findstring -s ,$(COMPILER)))
-EXECPPAS=
-else
-ifeq ($(FULL_SOURCE),$(FULL_TARGET))
-EXECPPAS:=@$(PPAS)
-endif
-endif
-.PHONY: fpc_units
-ifneq ($(TARGET_UNITS),)
-override ALLTARGET+=fpc_units
-override UNITPPUFILES=$(addsuffix $(PPUEXT),$(TARGET_UNITS))
-override IMPLICITUNITPPUFILES=$(addsuffix $(PPUEXT),$(TARGET_IMPLICITUNITS))
-override INSTALLPPUFILES+=$(UNITPPUFILES) $(IMPLICITUNITPPUFILES)
-override CLEANPPUFILES+=$(UNITPPUFILES) $(IMPLICITUNITPPUFILES)
-endif
-fpc_units: $(COMPILER_UNITTARGETDIR) $(UNITPPUFILES)
-ifdef TARGET_RSTS
-override RSTFILES=$(addsuffix $(RSTEXT),$(TARGET_RSTS))
-override CLEANRSTFILES+=$(RSTFILES)
-endif
-.PHONY: fpc_all fpc_smart fpc_debug fpc_release
-$(FPCMADE): $(ALLDEPENDENCIES) $(ALLTARGET)
-	@$(ECHOREDIR) Compiled > $(FPCMADE)
-fpc_all: $(FPCMADE)
-fpc_smart:
-	$(MAKE) all LINKSMART=1 CREATESMART=1
-fpc_debug:
-	$(MAKE) all DEBUG=1
-fpc_release:
-	$(MAKE) all RELEASE=1
-.SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .lpr .dpr .pp .rc .res
-$(COMPILER_UNITTARGETDIR):
-	$(MKDIRTREE) $(COMPILER_UNITTARGETDIR)
-$(COMPILER_TARGETDIR):
-	$(MKDIRTREE) $(COMPILER_TARGETDIR)
-%$(PPUEXT): %.pp
-	$(COMPILER) $<
-	$(EXECPPAS)
-%$(PPUEXT): %.pas
-	$(COMPILER) $<
-	$(EXECPPAS)
-%$(EXEEXT): %.pp
-	$(COMPILER) $<
-	$(EXECPPAS)
-%$(EXEEXT): %.pas
-	$(COMPILER) $<
-	$(EXECPPAS)
-%$(EXEEXT): %.lpr
-	$(COMPILER) $<
-	$(EXECPPAS)
-%$(EXEEXT): %.dpr
-	$(COMPILER) $<
-	$(EXECPPAS)
-%.res: %.rc
-	windres -i $< -o $@
-vpath %.pp $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
-vpath %.pas $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
-vpath %.lpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
-vpath %.dpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
-vpath %$(OEXT) $(COMPILER_UNITTARGETDIR)
-vpath %$(PPUEXT) $(COMPILER_UNITTARGETDIR)
-.PHONY: fpc_install fpc_sourceinstall fpc_exampleinstall
-ifdef INSTALL_UNITS
-override INSTALLPPUFILES+=$(addsuffix $(PPUEXT),$(INSTALL_UNITS))
-endif
-ifdef INSTALL_BUILDUNIT
-override INSTALLPPUFILES:=$(filter-out $(INSTALL_BUILDUNIT)$(PPUEXT),$(INSTALLPPUFILES))
-endif
-ifdef INSTALLPPUFILES
-override INSTALLPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES)))
-ifneq ($(UNITTARGETDIRPREFIX),)
-override INSTALLPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(notdir $(INSTALLPPUFILES)))
-override INSTALLPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(notdir $(INSTALLPPULINKFILES))))
-endif
-override INSTALL_CREATEPACKAGEFPC=1
-endif
-ifdef INSTALLEXEFILES
-ifneq ($(TARGETDIRPREFIX),)
-override INSTALLEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(notdir $(INSTALLEXEFILES)))
-endif
-endif
-fpc_install: all $(INSTALLTARGET)
-ifdef INSTALLEXEFILES
-	$(MKDIR) $(INSTALL_BINDIR)
-ifdef UPXPROG
-	-$(UPXPROG) $(INSTALLEXEFILES)
-endif
-	$(INSTALLEXE) $(INSTALLEXEFILES) $(INSTALL_BINDIR)
-endif
-ifdef INSTALL_CREATEPACKAGEFPC
-ifdef FPCMAKE
-ifdef PACKAGE_VERSION
-ifneq ($(wildcard Makefile.fpc),)
-	$(FPCMAKE) -p -T$(CPU_TARGET)-$(OS_TARGET) Makefile.fpc
-	$(MKDIR) $(INSTALL_UNITDIR)
-	$(INSTALL) Package.fpc $(INSTALL_UNITDIR)
-endif
-endif
-endif
-endif
-ifdef INSTALLPPUFILES
-	$(MKDIR) $(INSTALL_UNITDIR)
-	$(INSTALL) $(INSTALLPPUFILES) $(INSTALL_UNITDIR)
-ifneq ($(INSTALLPPULINKFILES),)
-	$(INSTALL) $(INSTALLPPULINKFILES) $(INSTALL_UNITDIR)
-endif
-ifneq ($(wildcard $(LIB_FULLNAME)),)
-	$(MKDIR) $(INSTALL_LIBDIR)
-	$(INSTALL) $(LIB_FULLNAME) $(INSTALL_LIBDIR)
-ifdef inUnix
-	ln -sf $(LIB_FULLNAME) $(INSTALL_LIBDIR)/$(LIB_NAME)
-endif
-endif
-endif
-ifdef INSTALL_FILES
-	$(MKDIR) $(INSTALL_DATADIR)
-	$(INSTALL) $(INSTALL_FILES) $(INSTALL_DATADIR)
-endif
-fpc_sourceinstall: distclean
-	$(MKDIR) $(INSTALL_SOURCEDIR)
-	$(COPYTREE) $(BASEDIR)/* $(INSTALL_SOURCEDIR)
-fpc_exampleinstall: $(addsuffix _distclean,$(TARGET_EXAMPLEDIRS))
-ifdef HASEXAMPLES
-	$(MKDIR) $(INSTALL_EXAMPLEDIR)
-endif
-ifdef EXAMPLESOURCEFILES
-	$(COPY) $(EXAMPLESOURCEFILES) $(INSTALL_EXAMPLEDIR)
-endif
-ifdef TARGET_EXAMPLEDIRS
-	$(COPYTREE) $(addsuffix /*,$(TARGET_EXAMPLEDIRS)) $(INSTALL_EXAMPLEDIR)
-endif
-.PHONY: fpc_distinstall
-fpc_distinstall: install exampleinstall
-.PHONY: fpc_zipinstall fpc_zipsourceinstall fpc_zipexampleinstall
-ifndef PACKDIR
-ifndef inUnix
-PACKDIR=$(BASEDIR)/../fpc-pack
-else
-PACKDIR=/tmp/fpc-pack
-endif
-endif
-ifndef ZIPNAME
-ifdef DIST_ZIPNAME
-ZIPNAME=$(DIST_ZIPNAME)
-else
-ZIPNAME=$(PACKAGE_NAME)
-endif
-endif
-ifndef FULLZIPNAME
-FULLZIPNAME=$(ZIPCROSSPREFIX)$(ZIPPREFIX)$(ZIPNAME)$(ZIPSUFFIX)
-endif
-ifndef ZIPTARGET
-ifdef DIST_ZIPTARGET
-ZIPTARGET=DIST_ZIPTARGET
-else
-ZIPTARGET=install
-endif
-endif
-ifndef USEZIP
-ifdef inUnix
-USETAR=1
-endif
-endif
-ifndef inUnix
-USEZIPWRAPPER=1
-endif
-ifdef USEZIPWRAPPER
-ZIPPATHSEP=$(PATHSEP)
-ZIPWRAPPER=$(subst /,$(PATHSEP),$(DIST_DESTDIR)/fpczip$(SRCBATCHEXT))
-else
-ZIPPATHSEP=/
-endif
-ZIPCMD_CDPACK:=cd $(subst /,$(ZIPPATHSEP),$(PACKDIR))
-ZIPCMD_CDBASE:=cd $(subst /,$(ZIPPATHSEP),$(BASEDIR))
-ifdef USETAR
-ZIPDESTFILE:=$(DIST_DESTDIR)/$(FULLZIPNAME)$(TAREXT)
-ZIPCMD_ZIP:=$(TARPROG) cf$(TAROPT) $(ZIPDESTFILE) *
-else
-ZIPDESTFILE:=$(DIST_DESTDIR)/$(FULLZIPNAME)$(ZIPEXT)
-ZIPCMD_ZIP:=$(subst /,$(ZIPPATHSEP),$(ZIPPROG)) -Dr $(ZIPOPT) $(ZIPDESTFILE) *
-endif
-fpc_zipinstall:
-	$(MAKE) $(ZIPTARGET) INSTALL_PREFIX=$(PACKDIR) ZIPINSTALL=1
-	$(MKDIR) $(DIST_DESTDIR)
-	$(DEL) $(ZIPDESTFILE)
-ifdef USEZIPWRAPPER
-ifneq ($(ECHOREDIR),echo)
-	$(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_CDPACK))" > $(ZIPWRAPPER)
-	$(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_ZIP))" >> $(ZIPWRAPPER)
-	$(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_CDBASE))" >> $(ZIPWRAPPER)
-else
-	echo $(ZIPCMD_CDPACK) > $(ZIPWRAPPER)
-	echo $(ZIPCMD_ZIP) >> $(ZIPWRAPPER)
-	echo $(ZIPCMD_CDBASE) >> $(ZIPWRAPPER)
-endif
-ifdef inUnix
-	/bin/sh $(ZIPWRAPPER)
-else
-	$(ZIPWRAPPER)
-endif
-	$(DEL) $(ZIPWRAPPER)
-else
-	$(ZIPCMD_CDPACK) ; $(ZIPCMD_ZIP) ; $(ZIPCMD_CDBASE)
-endif
-	$(DELTREE) $(PACKDIR)
-fpc_zipsourceinstall:
-	$(MAKE) fpc_zipinstall ZIPTARGET=sourceinstall ZIPSUFFIX=$(ZIPSOURCESUFFIX)
-fpc_zipexampleinstall:
-ifdef HASEXAMPLES
-	$(MAKE) fpc_zipinstall ZIPTARGET=exampleinstall ZIPSUFFIX=$(ZIPEXAMPLESUFFIX)
-endif
-fpc_zipdistinstall:
-	$(MAKE) fpc_zipinstall ZIPTARGET=distinstall
-.PHONY: fpc_clean fpc_cleanall fpc_distclean
-ifdef EXEFILES
-override CLEANEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEFILES))
-endif
-ifdef CLEAN_UNITS
-override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(CLEAN_UNITS))
-endif
-ifdef CLEANPPUFILES
-override CLEANPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES)))
-ifdef DEBUGSYMEXT
-override CLEANPPULINKFILES+=$(subst $(PPUEXT),$(DEBUGSYMEXT),$(CLEANPPUFILES))
-endif
-override CLEANPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPUFILES))
-override CLEANPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPULINKFILES)))
-endif
-fpc_clean: $(CLEANTARGET)
-ifdef CLEANEXEFILES
-	-$(DEL) $(CLEANEXEFILES)
-endif
-ifdef CLEANPPUFILES
-	-$(DEL) $(CLEANPPUFILES)
-endif
-ifneq ($(CLEANPPULINKFILES),)
-	-$(DEL) $(CLEANPPULINKFILES)
-endif
-ifdef CLEANRSTFILES
-	-$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
-endif
-ifdef CLEAN_FILES
-	-$(DEL) $(CLEAN_FILES)
-endif
-ifdef LIB_NAME
-	-$(DEL) $(LIB_NAME) $(LIB_FULLNAME)
-endif
-	-$(DEL) $(FPCMADE) Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
-	-$(DEL) *$(ASMEXT) *_ppas$(BATCHEXT)
-fpc_cleanall: $(CLEANTARGET)
-ifdef CLEANEXEFILES
-	-$(DEL) $(CLEANEXEFILES)
-endif
-ifdef COMPILER_UNITTARGETDIR
-ifdef CLEANPPUFILES
-	-$(DEL) $(CLEANPPUFILES)
-endif
-ifneq ($(CLEANPPULINKFILES),)
-	-$(DEL) $(CLEANPPULINKFILES)
-endif
-ifdef CLEANRSTFILES
-	-$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
-endif
-endif
-	-$(DELTREE) units
-	-$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
-ifneq ($(PPUEXT),.ppu)
-	-$(DEL) *.o *.ppu *.a
-endif
-	-$(DELTREE) *$(SMARTEXT)
-	-$(DEL) fpcmade.* Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
-	-$(DEL) *_ppas$(BATCHEXT)
-ifdef AOUTEXT
-	-$(DEL) *$(AOUTEXT)
-endif
-ifdef DEBUGSYMEXT
-	-$(DEL) *$(DEBUGSYMEXT)
-endif
-fpc_distclean: cleanall
-.PHONY: fpc_baseinfo
-override INFORULES+=fpc_baseinfo
-fpc_baseinfo:
-	@$(ECHO)
-	@$(ECHO)  == Package info ==
-	@$(ECHO)  Package Name..... $(PACKAGE_NAME)
-	@$(ECHO)  Package Version.. $(PACKAGE_VERSION)
-	@$(ECHO)
-	@$(ECHO)  == Configuration info ==
-	@$(ECHO)
-	@$(ECHO)  FPC.......... $(FPC)
-	@$(ECHO)  FPC Version.. $(FPC_VERSION)
-	@$(ECHO)  Source CPU... $(CPU_SOURCE)
-	@$(ECHO)  Target CPU... $(CPU_TARGET)
-	@$(ECHO)  Source OS.... $(OS_SOURCE)
-	@$(ECHO)  Target OS.... $(OS_TARGET)
-	@$(ECHO)  Full Source.. $(FULL_SOURCE)
-	@$(ECHO)  Full Target.. $(FULL_TARGET)
-	@$(ECHO)  SourceSuffix. $(SOURCESUFFIX)
-	@$(ECHO)  TargetSuffix. $(TARGETSUFFIX)
-	@$(ECHO)
-	@$(ECHO)  == Directory info ==
-	@$(ECHO)
-	@$(ECHO)  Required pkgs... $(REQUIRE_PACKAGES)
-	@$(ECHO)
-	@$(ECHO)  Basedir......... $(BASEDIR)
-	@$(ECHO)  FPCDir.......... $(FPCDIR)
-	@$(ECHO)  CrossBinDir..... $(CROSSBINDIR)
-	@$(ECHO)  UnitsDir........ $(UNITSDIR)
-	@$(ECHO)  PackagesDir..... $(PACKAGESDIR)
-	@$(ECHO)
-	@$(ECHO)  GCC library..... $(GCCLIBDIR)
-	@$(ECHO)  Other library... $(OTHERLIBDIR)
-	@$(ECHO)
-	@$(ECHO)  == Tools info ==
-	@$(ECHO)
-	@$(ECHO)  As........ $(AS)
-	@$(ECHO)  Ld........ $(LD)
-	@$(ECHO)  Ar........ $(AR)
-	@$(ECHO)  Rc........ $(RC)
-	@$(ECHO)
-	@$(ECHO)  Mv........ $(MVPROG)
-	@$(ECHO)  Cp........ $(CPPROG)
-	@$(ECHO)  Rm........ $(RMPROG)
-	@$(ECHO)  GInstall.. $(GINSTALL)
-	@$(ECHO)  Echo...... $(ECHO)
-	@$(ECHO)  Shell..... $(SHELL)
-	@$(ECHO)  Date...... $(DATE)
-	@$(ECHO)  FPCMake... $(FPCMAKE)
-	@$(ECHO)  PPUMove... $(PPUMOVE)
-	@$(ECHO)  Upx....... $(UPXPROG)
-	@$(ECHO)  Zip....... $(ZIPPROG)
-	@$(ECHO)
-	@$(ECHO)  == Object info ==
-	@$(ECHO)
-	@$(ECHO)  Target Loaders........ $(TARGET_LOADERS)
-	@$(ECHO)  Target Units.......... $(TARGET_UNITS)
-	@$(ECHO)  Target Implicit Units. $(TARGET_IMPLICITUNITS)
-	@$(ECHO)  Target Programs....... $(TARGET_PROGRAMS)
-	@$(ECHO)  Target Dirs........... $(TARGET_DIRS)
-	@$(ECHO)  Target Examples....... $(TARGET_EXAMPLES)
-	@$(ECHO)  Target ExampleDirs.... $(TARGET_EXAMPLEDIRS)
-	@$(ECHO)
-	@$(ECHO)  Clean Units......... $(CLEAN_UNITS)
-	@$(ECHO)  Clean Files......... $(CLEAN_FILES)
-	@$(ECHO)
-	@$(ECHO)  Install Units....... $(INSTALL_UNITS)
-	@$(ECHO)  Install Files....... $(INSTALL_FILES)
-	@$(ECHO)
-	@$(ECHO)  == Install info ==
-	@$(ECHO)
-	@$(ECHO)  DateStr.............. $(DATESTR)
-	@$(ECHO)  ZipName.............. $(ZIPNAME)
-	@$(ECHO)  ZipPrefix............ $(ZIPPREFIX)
-	@$(ECHO)  ZipCrossPrefix....... $(ZIPCROSSPREFIX)
-	@$(ECHO)  ZipSuffix............ $(ZIPSUFFIX)
-	@$(ECHO)  FullZipName.......... $(FULLZIPNAME)
-	@$(ECHO)  Install FPC Package.. $(INSTALL_FPCPACKAGE)
-	@$(ECHO)
-	@$(ECHO)  Install base dir..... $(INSTALL_BASEDIR)
-	@$(ECHO)  Install binary dir... $(INSTALL_BINDIR)
-	@$(ECHO)  Install library dir.. $(INSTALL_LIBDIR)
-	@$(ECHO)  Install units dir.... $(INSTALL_UNITDIR)
-	@$(ECHO)  Install source dir... $(INSTALL_SOURCEDIR)
-	@$(ECHO)  Install doc dir...... $(INSTALL_DOCDIR)
-	@$(ECHO)  Install example dir.. $(INSTALL_EXAMPLEDIR)
-	@$(ECHO)  Install data dir..... $(INSTALL_DATADIR)
-	@$(ECHO)
-	@$(ECHO)  Dist destination dir. $(DIST_DESTDIR)
-	@$(ECHO)  Dist zip name........ $(DIST_ZIPNAME)
-	@$(ECHO)
-.PHONY: fpc_info
-fpc_info: $(INFORULES)
-.PHONY: fpc_makefile fpc_makefiles fpc_makefile_sub1 fpc_makefile_sub2 \
-	fpc_makefile_dirs
-fpc_makefile:
-	$(FPCMAKE) -w -T$(OS_TARGET) Makefile.fpc
-fpc_makefile_sub1:
-ifdef TARGET_DIRS
-	$(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_DIRS))
-endif
-ifdef TARGET_EXAMPLEDIRS
-	$(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_EXAMPLEDIRS))
-endif
-fpc_makefile_sub2: $(addsuffix _makefile_dirs,$(TARGET_DIRS) $(TARGET_EXAMPLEDIRS))
-fpc_makefile_dirs: fpc_makefile_sub1 fpc_makefile_sub2
-fpc_makefiles: fpc_makefile fpc_makefile_dirs
-all: fpc_all
-debug: fpc_debug
-smart: fpc_smart
-release: fpc_release
-units: fpc_units
-examples:
-shared:
-install: fpc_install
-sourceinstall: fpc_sourceinstall
-exampleinstall: fpc_exampleinstall
-distinstall: fpc_distinstall
-zipinstall: fpc_zipinstall
-zipsourceinstall: fpc_zipsourceinstall
-zipexampleinstall: fpc_zipexampleinstall
-zipdistinstall: fpc_zipdistinstall
-clean: fpc_clean
-distclean: fpc_distclean
-cleanall: fpc_cleanall
-info: fpc_info
-makefiles: fpc_makefiles
-.PHONY: all debug smart release units examples shared install sourceinstall exampleinstall distinstall zipinstall zipsourceinstall zipexampleinstall zipdistinstall clean distclean cleanall info makefiles
-ifneq ($(wildcard fpcmake.loc),)
-include fpcmake.loc
-endif

+ 0 - 17
packages/extra/mmsystem/Makefile.fpc

@@ -1,17 +0,0 @@
-#
-#   Makefile.fpc for CGI Units
-#
-
-[package]
-name=mmsystem
-version=1.9.8
-
-[target]
-units=mmsystem
-
-[install]
-fpcpackage=y
-
-[default]
-fpcdir=../../..
-

+ 69 - 69
packages/extra/winver/Makefile → packages/extra/winunits/Makefile

@@ -1,5 +1,5 @@
 #
 #
-# Don't edit, this file is generated by FPCMake Version 1.9.8 [2005/02/09]
+# Don't edit, this file is generated by FPCMake Version 1.9.8 [2005/03/28]
 #
 #
 default: all
 default: all
 MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-emx i386-watcom i386-netwlibc m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos powerpc-linux powerpc-netbsd powerpc-macos powerpc-darwin powerpc-morphos sparc-linux sparc-netbsd sparc-solaris x86_64-linux x86_64-freebsd arm-linux
 MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-emx i386-watcom i386-netwlibc m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos powerpc-linux powerpc-netbsd powerpc-macos powerpc-darwin powerpc-morphos sparc-linux sparc-netbsd sparc-solaris x86_64-linux x86_64-freebsd arm-linux
@@ -230,205 +230,205 @@ ifeq ($(UNITSDIR),)
 UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
 UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
 endif
 endif
 PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
 PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
-override PACKAGE_NAME=winver
+override PACKAGE_NAME=winunits
 override PACKAGE_VERSION=1.9.8
 override PACKAGE_VERSION=1.9.8
 ifeq ($(FULL_TARGET),i386-linux)
 ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_UNITS+=winver
+override TARGET_UNITS+=winver mmsystem comobj  ole2 activex shellapi shlobj
 endif
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
 ifeq ($(FULL_TARGET),i386-go32v2)
-override TARGET_UNITS+=winver
+override TARGET_UNITS+=winver mmsystem comobj  ole2 activex shellapi shlobj
 endif
 endif
 ifeq ($(FULL_TARGET),i386-win32)
 ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_UNITS+=winver
+override TARGET_UNITS+=winver mmsystem comobj  ole2 activex shellapi shlobj
 endif
 endif
 ifeq ($(FULL_TARGET),i386-os2)
 ifeq ($(FULL_TARGET),i386-os2)
-override TARGET_UNITS+=winver
+override TARGET_UNITS+=winver mmsystem comobj  ole2 activex shellapi shlobj
 endif
 endif
 ifeq ($(FULL_TARGET),i386-freebsd)
 ifeq ($(FULL_TARGET),i386-freebsd)
-override TARGET_UNITS+=winver
+override TARGET_UNITS+=winver mmsystem comobj  ole2 activex shellapi shlobj
 endif
 endif
 ifeq ($(FULL_TARGET),i386-beos)
 ifeq ($(FULL_TARGET),i386-beos)
-override TARGET_UNITS+=winver
+override TARGET_UNITS+=winver mmsystem comobj  ole2 activex shellapi shlobj
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netbsd)
 ifeq ($(FULL_TARGET),i386-netbsd)
-override TARGET_UNITS+=winver
+override TARGET_UNITS+=winver mmsystem comobj  ole2 activex shellapi shlobj
 endif
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
 ifeq ($(FULL_TARGET),i386-solaris)
-override TARGET_UNITS+=winver
+override TARGET_UNITS+=winver mmsystem comobj  ole2 activex shellapi shlobj
 endif
 endif
 ifeq ($(FULL_TARGET),i386-qnx)
 ifeq ($(FULL_TARGET),i386-qnx)
-override TARGET_UNITS+=winver
+override TARGET_UNITS+=winver mmsystem comobj  ole2 activex shellapi shlobj
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netware)
 ifeq ($(FULL_TARGET),i386-netware)
-override TARGET_UNITS+=winver
+override TARGET_UNITS+=winver mmsystem comobj  ole2 activex shellapi shlobj
 endif
 endif
 ifeq ($(FULL_TARGET),i386-openbsd)
 ifeq ($(FULL_TARGET),i386-openbsd)
-override TARGET_UNITS+=winver
+override TARGET_UNITS+=winver mmsystem comobj  ole2 activex shellapi shlobj
 endif
 endif
 ifeq ($(FULL_TARGET),i386-wdosx)
 ifeq ($(FULL_TARGET),i386-wdosx)
-override TARGET_UNITS+=winver
+override TARGET_UNITS+=winver mmsystem comobj  ole2 activex shellapi shlobj
 endif
 endif
 ifeq ($(FULL_TARGET),i386-emx)
 ifeq ($(FULL_TARGET),i386-emx)
-override TARGET_UNITS+=winver
+override TARGET_UNITS+=winver mmsystem comobj  ole2 activex shellapi shlobj
 endif
 endif
 ifeq ($(FULL_TARGET),i386-watcom)
 ifeq ($(FULL_TARGET),i386-watcom)
-override TARGET_UNITS+=winver
+override TARGET_UNITS+=winver mmsystem comobj  ole2 activex shellapi shlobj
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netwlibc)
 ifeq ($(FULL_TARGET),i386-netwlibc)
-override TARGET_UNITS+=winver
+override TARGET_UNITS+=winver mmsystem comobj  ole2 activex shellapi shlobj
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
 ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_UNITS+=winver
+override TARGET_UNITS+=winver mmsystem comobj  ole2 activex shellapi shlobj
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
 ifeq ($(FULL_TARGET),m68k-freebsd)
-override TARGET_UNITS+=winver
+override TARGET_UNITS+=winver mmsystem comobj  ole2 activex shellapi shlobj
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
 ifeq ($(FULL_TARGET),m68k-netbsd)
-override TARGET_UNITS+=winver
+override TARGET_UNITS+=winver mmsystem comobj  ole2 activex shellapi shlobj
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-amiga)
 ifeq ($(FULL_TARGET),m68k-amiga)
-override TARGET_UNITS+=winver
+override TARGET_UNITS+=winver mmsystem comobj  ole2 activex shellapi shlobj
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-atari)
 ifeq ($(FULL_TARGET),m68k-atari)
-override TARGET_UNITS+=winver
+override TARGET_UNITS+=winver mmsystem comobj  ole2 activex shellapi shlobj
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
 ifeq ($(FULL_TARGET),m68k-openbsd)
-override TARGET_UNITS+=winver
+override TARGET_UNITS+=winver mmsystem comobj  ole2 activex shellapi shlobj
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-palmos)
 ifeq ($(FULL_TARGET),m68k-palmos)
-override TARGET_UNITS+=winver
+override TARGET_UNITS+=winver mmsystem comobj  ole2 activex shellapi shlobj
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
 ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_UNITS+=winver
+override TARGET_UNITS+=winver mmsystem comobj  ole2 activex shellapi shlobj
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
 ifeq ($(FULL_TARGET),powerpc-netbsd)
-override TARGET_UNITS+=winver
+override TARGET_UNITS+=winver mmsystem comobj  ole2 activex shellapi shlobj
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-macos)
 ifeq ($(FULL_TARGET),powerpc-macos)
-override TARGET_UNITS+=winver
+override TARGET_UNITS+=winver mmsystem comobj  ole2 activex shellapi shlobj
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
 ifeq ($(FULL_TARGET),powerpc-darwin)
-override TARGET_UNITS+=winver
+override TARGET_UNITS+=winver mmsystem comobj  ole2 activex shellapi shlobj
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-morphos)
 ifeq ($(FULL_TARGET),powerpc-morphos)
-override TARGET_UNITS+=winver
+override TARGET_UNITS+=winver mmsystem comobj  ole2 activex shellapi shlobj
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
 ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_UNITS+=winver
+override TARGET_UNITS+=winver mmsystem comobj  ole2 activex shellapi shlobj
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
 ifeq ($(FULL_TARGET),sparc-netbsd)
-override TARGET_UNITS+=winver
+override TARGET_UNITS+=winver mmsystem comobj  ole2 activex shellapi shlobj
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
 ifeq ($(FULL_TARGET),sparc-solaris)
-override TARGET_UNITS+=winver
+override TARGET_UNITS+=winver mmsystem comobj  ole2 activex shellapi shlobj
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
 ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_UNITS+=winver
+override TARGET_UNITS+=winver mmsystem comobj  ole2 activex shellapi shlobj
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
 ifeq ($(FULL_TARGET),x86_64-freebsd)
-override TARGET_UNITS+=winver
+override TARGET_UNITS+=winver mmsystem comobj  ole2 activex shellapi shlobj
 endif
 endif
 ifeq ($(FULL_TARGET),arm-linux)
 ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_UNITS+=winver
+override TARGET_UNITS+=winver mmsystem comobj  ole2 activex shellapi shlobj
 endif
 endif
 ifeq ($(FULL_TARGET),i386-linux)
 ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_EXAMPLES+=testver
+override TARGET_EXAMPLES+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
 ifeq ($(FULL_TARGET),i386-go32v2)
-override TARGET_EXAMPLES+=testver
+override TARGET_EXAMPLES+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),i386-win32)
 ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_EXAMPLES+=testver
+override TARGET_EXAMPLES+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),i386-os2)
 ifeq ($(FULL_TARGET),i386-os2)
-override TARGET_EXAMPLES+=testver
+override TARGET_EXAMPLES+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),i386-freebsd)
 ifeq ($(FULL_TARGET),i386-freebsd)
-override TARGET_EXAMPLES+=testver
+override TARGET_EXAMPLES+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),i386-beos)
 ifeq ($(FULL_TARGET),i386-beos)
-override TARGET_EXAMPLES+=testver
+override TARGET_EXAMPLES+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netbsd)
 ifeq ($(FULL_TARGET),i386-netbsd)
-override TARGET_EXAMPLES+=testver
+override TARGET_EXAMPLES+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
 ifeq ($(FULL_TARGET),i386-solaris)
-override TARGET_EXAMPLES+=testver
+override TARGET_EXAMPLES+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),i386-qnx)
 ifeq ($(FULL_TARGET),i386-qnx)
-override TARGET_EXAMPLES+=testver
+override TARGET_EXAMPLES+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netware)
 ifeq ($(FULL_TARGET),i386-netware)
-override TARGET_EXAMPLES+=testver
+override TARGET_EXAMPLES+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),i386-openbsd)
 ifeq ($(FULL_TARGET),i386-openbsd)
-override TARGET_EXAMPLES+=testver
+override TARGET_EXAMPLES+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),i386-wdosx)
 ifeq ($(FULL_TARGET),i386-wdosx)
-override TARGET_EXAMPLES+=testver
+override TARGET_EXAMPLES+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),i386-emx)
 ifeq ($(FULL_TARGET),i386-emx)
-override TARGET_EXAMPLES+=testver
+override TARGET_EXAMPLES+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),i386-watcom)
 ifeq ($(FULL_TARGET),i386-watcom)
-override TARGET_EXAMPLES+=testver
+override TARGET_EXAMPLES+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netwlibc)
 ifeq ($(FULL_TARGET),i386-netwlibc)
-override TARGET_EXAMPLES+=testver
+override TARGET_EXAMPLES+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
 ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_EXAMPLES+=testver
+override TARGET_EXAMPLES+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
 ifeq ($(FULL_TARGET),m68k-freebsd)
-override TARGET_EXAMPLES+=testver
+override TARGET_EXAMPLES+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
 ifeq ($(FULL_TARGET),m68k-netbsd)
-override TARGET_EXAMPLES+=testver
+override TARGET_EXAMPLES+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-amiga)
 ifeq ($(FULL_TARGET),m68k-amiga)
-override TARGET_EXAMPLES+=testver
+override TARGET_EXAMPLES+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-atari)
 ifeq ($(FULL_TARGET),m68k-atari)
-override TARGET_EXAMPLES+=testver
+override TARGET_EXAMPLES+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
 ifeq ($(FULL_TARGET),m68k-openbsd)
-override TARGET_EXAMPLES+=testver
+override TARGET_EXAMPLES+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-palmos)
 ifeq ($(FULL_TARGET),m68k-palmos)
-override TARGET_EXAMPLES+=testver
+override TARGET_EXAMPLES+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
 ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_EXAMPLES+=testver
+override TARGET_EXAMPLES+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
 ifeq ($(FULL_TARGET),powerpc-netbsd)
-override TARGET_EXAMPLES+=testver
+override TARGET_EXAMPLES+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-macos)
 ifeq ($(FULL_TARGET),powerpc-macos)
-override TARGET_EXAMPLES+=testver
+override TARGET_EXAMPLES+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
 ifeq ($(FULL_TARGET),powerpc-darwin)
-override TARGET_EXAMPLES+=testver
+override TARGET_EXAMPLES+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-morphos)
 ifeq ($(FULL_TARGET),powerpc-morphos)
-override TARGET_EXAMPLES+=testver
+override TARGET_EXAMPLES+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
 ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_EXAMPLES+=testver
+override TARGET_EXAMPLES+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
 ifeq ($(FULL_TARGET),sparc-netbsd)
-override TARGET_EXAMPLES+=testver
+override TARGET_EXAMPLES+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
 ifeq ($(FULL_TARGET),sparc-solaris)
-override TARGET_EXAMPLES+=testver
+override TARGET_EXAMPLES+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
 ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_EXAMPLES+=testver
+override TARGET_EXAMPLES+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
 ifeq ($(FULL_TARGET),x86_64-freebsd)
-override TARGET_EXAMPLES+=testver
+override TARGET_EXAMPLES+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),arm-linux)
 ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_EXAMPLES+=testver
+override TARGET_EXAMPLES+=examples
 endif
 endif
 override INSTALL_FPCPACKAGE=y
 override INSTALL_FPCPACKAGE=y
 ifdef REQUIRE_UNITSDIR
 ifdef REQUIRE_UNITSDIR
@@ -1153,7 +1153,7 @@ export UPXPROG
 ZIPOPT=-9
 ZIPOPT=-9
 ZIPEXT=.zip
 ZIPEXT=.zip
 ifeq ($(USETAR),bz2)
 ifeq ($(USETAR),bz2)
-TAROPT=vI
+TAROPT=vj
 TAREXT=.tar.bz2
 TAREXT=.tar.bz2
 else
 else
 TAROPT=vz
 TAROPT=vz

+ 17 - 0
packages/extra/winunits/Makefile.fpc

@@ -0,0 +1,17 @@
+#
+#   Makefile.fpc for WinUnits
+#
+
+[package]
+name=winunits
+version=1.9.8
+
+[target]
+units=winver mmsystem comobj  ole2 activex shellapi shlobj
+examples=examples
+
+[install]
+fpcpackage=y
+
+[default]
+fpcdir=../../..

+ 2735 - 0
packages/extra/winunits/activex.pp

@@ -0,0 +1,2735 @@
+Unit ActiveX;
+
+//+-------------------------------------------------------------------------
+//
+//  Microsoft Windows
+//  Copyright (c) Microsoft Corporation. All rights reserved.
+//
+//  File: objidl.idl
+//
+//  Header translation by Marco van de Voort for Free Pascal Platform
+//  SDK dl'ed January 2002
+//
+//--------------------------------------------------------------------------
+
+{$Mode objfpc}
+
+{$ifndef NO_SMART_LINK}
+{$smartlink on}
+{$endif}
+
+Interface
+
+{$define read_interface}
+{$undef read_implementation}
+
+Uses Windows,types;
+
+
+type
+{$ifndef ver1_0}
+{ extra types }
+   TOleChar = Types.TOleChar;
+   POleStr = Types.POleStr;
+   PPOleStr = Types.PPOleStr;
+   TBStr = POleStr;
+   PBStr = ^TBStr;
+   TOleEnum = type LongWord;
+{$else ver1_0}
+   POleStr = PWideChar;
+{$endif ver1_0}
+
+{Glue types, should be linked to the proper windows unit types}
+TYPE
+     Size_t              = DWord;       {??, probably, like Unix, typecastable to pointer?!?}
+     OleChar             = WChar;
+     LPOLESTR            = ^OLECHAR;
+
+     // bit flags for IExternalConnection
+CONST
+    EXTCONN_STRONG              = $0001;   // strong connection
+    EXTCONN_WEAK                = $0002;  // weak connection (table, container)
+    EXTCONN_CALLABLE            = $0004;  // table .vs. callable
+     {Bind Flags}
+    BIND_MAYBOTHERUSER          = 1;
+    BIND_JUSTTESTEXISTENCE      = 2;
+
+
+    MKSYS_NONE                  = 0;
+    MKSYS_GENERICCOMPOSITE      = 1;
+    MKSYS_FILEMONIKER           = 2;
+    MKSYS_ANTIMONIKER           = 3;
+    MKSYS_ITEMMONIKER           = 4;
+    MKSYS_POINTERMONIKER        = 5;
+//  MKSYS_URLMONIKER            = 6;
+    MKSYS_CLASSMONIKER          = 7;
+    MKSYS_OBJREFMONIKER         = 8;
+    MKSYS_SESSIONMONIKER        = 9;
+
+    // system moniker types; returned from IsSystemMoniker.
+
+    MKRREDUCE_ONE               = 3 SHL 16;
+    MKRREDUCE_TOUSER            = 2 SHL 16;
+    MKRREDUCE_THROUGHUSER       = 1 SHL 16;
+    MKRREDUCE_ALL               = 0;
+
+    // Storage element types
+    STGTY_STORAGE               = 1;
+    STGTY_STREAM                = 2;
+    STGTY_LOCKBYTES             = 3;
+    STGTY_PROPERTY              = 4;
+
+    STREAM_SEEK_SET             = 0;
+    STREAM_SEEK_CUR             = 1;
+    STREAM_SEEK_END             = 2;
+
+    LOCK_WRITE                  = 1;
+    LOCK_EXCLUSIVE              = 2;
+    LOCK_ONLYONCE               = 4;
+
+    //Advise Flags
+    ADVF_NODATA                 = 1;
+    ADVF_PRIMEFIRST             = 2;
+    ADVF_ONLYONCE               = 4;
+    ADVF_DATAONSTOP             = 64;
+    ADVFCACHE_NOHANDLER         = 8;
+    ADVFCACHE_FORCEBUILTIN      = 16;
+    ADVFCACHE_ONSAVE            = 32;
+
+
+//****************************************************************************
+//*  Notification Interfaces
+//****************************************************************************/
+
+    TYMED_HGLOBAL               = 1;
+    TYMED_FILE                  = 2;
+    TYMED_ISTREAM               = 4;
+    TYMED_ISTORAGE              = 8;
+    TYMED_GDI                   = 16;
+    TYMED_MFPICT                = 32;
+    TYMED_ENHMF                 = 64;
+    TYMED_NULL                  = 0;
+
+// Object Definitions for EnumObjects()
+    OBJ_PEN                     = 1;
+    OBJ_BRUSH                   = 2;
+    OBJ_DC                      = 3;
+    OBJ_METADC                  = 4;
+    OBJ_PAL                     = 5;
+    OBJ_FONT                    = 6;
+    OBJ_BITMAP                  = 7;
+    OBJ_REGION                  = 8;
+    OBJ_METAFILE                = 9;
+    OBJ_MEMDC                   = 10;
+    OBJ_EXTPEN                  = 11;
+    OBJ_ENHMETADC               = 12;
+    OBJ_ENHMETAFILE             = 13;
+    DATADIR_GET                 = 1;
+    DATADIR_SET                 = 2;
+
+// call type used by IMessageFilter::HandleIncomingMessage
+
+    CALLTYPE_TOPLEVEL           = 1;      // toplevel call - no outgoing call
+    CALLTYPE_NESTED             = 2;      // callback on behalf of previous outgoing call - should always handle
+    CALLTYPE_ASYNC              = 3;      // aysnchronous call - can NOT be rejected
+    CALLTYPE_TOPLEVEL_CALLPENDING = 4;  // new toplevel call with new LID
+    CALLTYPE_ASYNC_CALLPENDING  = 5;   // async call - can NOT be rejected
+
+// status of server call - returned by IMessageFilter::HandleIncomingCall
+// and passed to  IMessageFilter::RetryRejectedCall
+
+    SERVERCALL_ISHANDLED        = 0;
+    SERVERCALL_REJECTED         = 1;
+    SERVERCALL_RETRYLATER       = 2;
+
+// Pending type indicates the level of nesting
+
+    PENDINGTYPE_TOPLEVEL        = 1; // toplevel call
+    PENDINGTYPE_NESTED          = 2;  // nested call
+
+// return values of MessagePending
+
+    PENDINGMSG_CANCELCALL       = 0; // cancel the outgoing call
+    PENDINGMSG_WAITNOPROCESS    = 1; // wait for the return and don't dispatch the message
+    PENDINGMSG_WAITDEFPROCESS   = 2;  // wait and dispatch the message
+
+    EOAC_NONE                   = $0;
+    EOAC_MUTUAL_AUTH            = $1;
+    EOAC_STATIC_CLOAKING        = $20;
+    EOAC_DYNAMIC_CLOAKING       = $40;
+    EOAC_ANY_AUTHORITY          = $80;
+    EOAC_MAKE_FULLSIC           = $100;
+    EOAC_DEFAULT                = $800;
+
+    // These are only valid for CoInitializeSecurity
+    EOAC_SECURE_REFS            = $2;
+    EOAC_ACCESS_CONTROL         = $4;
+    EOAC_APPID                  = $8;
+    EOAC_DYNAMIC                = $10;
+    EOAC_REQUIRE_FULLSIC        = $200;
+    EOAC_AUTO_IMPERSONATE       = $400;
+    EOAC_NO_CUSTOM_MARSHAL      = $2000;
+    EOAC_DISABLE_AAA            = $1000;
+
+//****************************************************************************
+//* ICOMThreadingInfo and enums
+//****************************************************************************/
+
+    APTTYPE_CURRENT             = -1;
+    APTTYPE_STA                 = 0;
+    APTTYPE_MTA                 = 1;
+    APTTYPE_NA                  = 2;
+    APTTYPE_MAINSTA             = 3;
+
+    THDTYPE_BLOCKMESSAGES       = 0;
+    THDTYPE_PROCESSMESSAGES     = 1;
+
+    DCOM_NONE                   = $0;
+    DCOM_CALL_COMPLETE          = $1;
+    DCOM_CALL_CANCELED          = $2;
+
+    COMBND_RPCTIMEOUT           = $1;  // Rpc transport-specific timeout.
+
+//************************* Misc Enums wtypes.h ***********************************/
+
+// Common typdefs used in API paramaters, gleamed from compobj.h
+
+// memory context values; passed to CoGetMalloc
+
+Const
+    MEMCTX_TASK                 = 1;          // task (private) memory
+    MEMCTX_SHARED               = 2;          // shared memory (between processes)
+    MEMCTX_MACSYSTEM            = 3;          // on the mac, the system heap
+    // these are mostly for internal use...
+    MEMCTX_UNKNOWN              = -1;         // unknown context (when asked about it)
+    MEMCTX_SAME                 = -2;         // same context (as some other pointer)
+
+
+// For IRunningObjectTable::Register
+    ROTFLAGS_REGISTRATIONKEEPSALIVE  = $1;
+    ROTFLAGS_ALLOWANYCLIENT          = $2;
+
+// Maximum size of comparison buffer for IROTData::GetComparisonData
+    ROT_COMPARE_MAX                  = 2048;
+
+
+// class context: used to determine what scope and kind of class object to use
+// NOTE: this is a bitwise enum
+
+    CLSCTX_INPROC_SERVER        = $0001;     // server dll (runs in same process as caller)
+    CLSCTX_INPROC_HANDLER       = $0002;     // handler dll (runs in same process as caller)
+    CLSCTX_LOCAL_SERVER         = $0004;     // server exe (runs on same machine; diff proc)
+    CLSCTX_INPROC_SERVER16      = $0008;     // 16-bit server dll (runs in same process as caller)
+    CLSCTX_REMOTE_SERVER        = $0010;     // remote server exe (runs on different machine)
+    CLSCTX_INPROC_HANDLER16     = $0020;     // 16-bit handler dll (runs in same process as caller)
+    CLSCTX_INPROC_SERVERX86     = $0040;     // Wx86 server dll (runs in same process as caller)
+    CLSCTX_INPROC_HANDLERX86    = $0080;     // Wx86 handler dll (runs in same process as caller)
+    CLSCTX_ESERVER_HANDLER      = $0100;     // handler dll (runs in the server process)
+    CLSCTX_RESERVED =$0200;                  // reserved
+    CLSCTX_NO_CODE_DOWNLOAD     = $0400;     // disallow code download from the Directory Service (if any) or the internet   -rahulth
+    CLSCTX_NO_WX86_TRANSLATION  = $0800;
+    CLSCTX_NO_CUSTOM_MARSHAL    = $1000;
+    CLSCTX_ENABLE_CODE_DOWNLOAD = $2000;     // allow code download from the Directory Service (if any) or the internet
+    CLSCTX_NO_FAILURE_LOG       = $04000;    // do not log messages about activation failure (should one occur) to Event Log
+    CLSCTX_DISABLE_AAA          = $08000;    // Disable EOAC_DISABLE_AAA capability for this activation only
+    CLSCTX_ENABLE_AAA           = $10000;    // Enable EOAC_DISABLE_AAA capability for this activation only
+    CLSCTX_FROM_DEFAULT_CONTEXT = $20000;    // Begin this activation from the default context of the current apartment
+    CLSCTX_INPROC               = (CLSCTX_INPROC_SERVER OR CLSCTX_INPROC_HANDLER);
+// With DCOM, CLSCTX_REMOTE_SERVER should be included
+    CLSCTX_ALL                  = (CLSCTX_INPROC_SERVER OR CLSCTX_INPROC_HANDLER OR CLSCTX_LOCAL_SERVER {$ifdef Remote} OR CLSCTX_REMOTE_SERVER {$endif});
+    CLSCTX_SERVER               = (CLSCTX_INPROC_SERVER OR CLSCTX_LOCAL_SERVER {$ifdef Remote} OR CLSCTX_REMOTE_SERVER {$endif});
+
+
+// marshaling flags; passed to CoMarshalInterface
+    MSHLFLAGS_NORMAL            = 0;   // normal marshaling via proxy/stub
+    MSHLFLAGS_TABLESTRONG       = 1;   // keep object alive; must explicitly release
+    MSHLFLAGS_TABLEWEAK         = 2;   // doesn't hold object alive; still must release
+    MSHLFLAGS_NOPING            = 4;   // remote clients dont 'ping' to keep objects alive
+    MSHLFLAGS_RESERVED1         = 8;   // reserved
+    MSHLFLAGS_RESERVED2         = 16;  // reserved
+    MSHLFLAGS_RESERVED3         = 32;  // reserved
+    MSHLFLAGS_RESERVED4         = 64;  // reserved
+
+// marshal context: determines the destination context of the marshal operation
+
+    MSHCTX_LOCAL                = 0;   // unmarshal context is local (eg.shared memory)
+    MSHCTX_NOSHAREDMEM          = 1;   // unmarshal context has no shared memory access
+    MSHCTX_DIFFERENTMACHINE     = 2;   // unmarshal context is on a different machine
+    MSHCTX_INPROC               = 3;   // unmarshal context is on different thread
+    MSHCTX_CROSSCTX             = 4;   // unmarshal context is on different context
+
+
+
+// #########################################################################
+//
+//  VARTYPE
+//
+// #########################################################################
+
+
+{
+    VARENUM usage key,
+
+    * [V] - may appear in a VARIANT
+    * [T] - may appear in a TYPEDESC
+    * [P] - may appear in an OLE property set
+    * [S] - may appear in a Safe Array
+
+
+     VT_EMPTY            [V]   [P]     nothing
+     VT_NULL             [V]   [P]     SQL style Null
+     VT_I2               [V][T][P][S]  2 byte signed int
+     VT_I4               [V][T][P][S]  4 byte signed int
+     VT_R4               [V][T][P][S]  4 byte real
+     VT_R8               [V][T][P][S]  8 byte real
+     VT_CY               [V][T][P][S]  currency
+     VT_DATE             [V][T][P][S]  date
+     VT_BSTR             [V][T][P][S]  OLE Automation string
+     VT_DISPATCH         [V][T]   [S]  IDispatch *
+     VT_ERROR            [V][T][P][S]  SCODE
+     VT_BOOL             [V][T][P][S]  True=-1, False=0
+     VT_VARIANT          [V][T][P][S]  VARIANT *
+     VT_UNKNOWN          [V][T]   [S]  IUnknown *
+     VT_DECIMAL          [V][T]   [S]  16 byte fixed point
+     VT_RECORD           [V]   [P][S]  user defined type
+     VT_I1               [V][T][P][s]  signed char
+     VT_UI1              [V][T][P][S]  unsigned char
+     VT_UI2              [V][T][P][S]  unsigned short
+     VT_UI4              [V][T][P][S]  unsigned long
+     VT_I8                  [T][P]     signed 64-bit int
+     VT_UI8                 [T][P]     unsigned 64-bit int
+     VT_INT              [V][T][P][S]  signed machine int
+     VT_UINT             [V][T]   [S]  unsigned machine int
+     VT_INT_PTR             [T]        signed machine register size width
+     VT_UINT_PTR            [T]        unsigned machine register size width
+     VT_VOID                [T]        C style void
+     VT_HRESULT             [T]        Standard return type
+     VT_PTR                 [T]        pointer type
+     VT_SAFEARRAY           [T]        (use VT_ARRAY in VARIANT)
+     VT_CARRAY              [T]        C style array
+     VT_USERDEFINED         [T]        user defined type
+     VT_LPSTR               [T][P]     null terminated string
+     VT_LPWSTR              [T][P]     wide null terminated string
+     VT_FILETIME               [P]     FILETIME
+     VT_BLOB                   [P]     Length prefixed bytes
+     VT_STREAM                 [P]     Name of the stream follows
+     VT_STORAGE                [P]     Name of the storage follows
+     VT_STREAMED_OBJECT        [P]     Stream contains an object
+     VT_STORED_OBJECT          [P]     Storage contains an object
+     VT_VERSIONED_STREAM       [P]     Stream with a GUID version
+     VT_BLOB_OBJECT            [P]     Blob contains an object
+     VT_CF                     [P]     Clipboard format
+     VT_CLSID                  [P]     A Class ID
+     VT_VECTOR                 [P]     simple counted array
+     VT_ARRAY            [V]           SAFEARRAY*
+     VT_BYREF            [V]           void* for local use
+     VT_BSTR_BLOB                      Reserved for system use
+}
+
+// VARENUM's
+
+    VT_EMPTY                    = 0;
+    VT_NULL                     = 1;
+    VT_I2                       = 2;
+    VT_I4                       = 3;
+    VT_R4                       = 4;
+    VT_R8                       = 5;
+    VT_CY                       = 6;
+    VT_DATE                     = 7;
+    VT_BSTR                     = 8;
+    VT_DISPATCH                 = 9;
+    VT_ERROR                    = 10;
+    VT_BOOL                     = 11;
+    VT_VARIANT                  = 12;
+    VT_UNKNOWN                  = 13;
+    VT_DECIMAL                  = 14;
+// VBA reserves 15 for future use
+    VT_I1                       = 16;
+    VT_UI1                      = 17;
+    VT_UI2                      = 18;
+    VT_UI4                      = 19;
+    VT_I8                       = 20;
+    VT_UI8                      = 21;
+    VT_INT                      = 22;
+    VT_UINT                     = 23;
+    VT_VOID                     = 24;
+    VT_HRESULT                  = 25;
+    VT_PTR                      = 26;
+    VT_SAFEARRAY                = 27;
+    VT_CARRAY                   = 28;
+    VT_USERDEFINED              = 29;
+    VT_LPSTR                    = 30;
+    VT_LPWSTR                   = 31;
+// VBA reserves 32-35 for future use
+    VT_RECORD                   = 36;
+    VT_INT_PTR                  = 37;
+    VT_UINT_PTR                 = 38;
+
+    VT_FILETIME                 = 64;
+    VT_BLOB                     = 65;
+    VT_STREAM                   = 66;
+    VT_STORAGE                  = 67;
+    VT_STREAMED_OBJECT          = 68;
+    VT_STORED_OBJECT            = 69;
+    VT_BLOB_OBJECT              = 70;
+    VT_CF                       = 71;
+    VT_CLSID                    = 72;
+    VT_VERSIONED_STREAM         = 73;
+
+    VT_BSTR_BLOB                = $0fff;
+
+    VT_VECTOR                   = $1000;
+    VT_ARRAY                    = $2000;
+    VT_BYREF                    = $4000;
+    VT_RESERVED                 = $8000;
+
+    VT_ILLEGAL                  = $ffff;
+    VT_ILLEGALMASKED            = $0fff;
+    VT_TYPEMASK                 = $0fff;
+
+
+
+//
+// Common typedefs for paramaters used in data view API's, gleamed
+// from dvobj.h
+//
+
+// Data/View aspect; specifies the desired aspect of the object when
+// drawing or getting data.
+
+    DVASPECT_CONTENT            = 1;
+    DVASPECT_THUMBNAIL          = 2;
+    DVASPECT_ICON               = 4;
+    DVASPECT_DOCPRINT           = 8;
+
+//****** Storage types *************************************************
+
+
+// Storage commit types
+
+    STGC_DEFAULT                = 0;
+    STGC_OVERWRITE              = 1;
+    STGC_ONLYIFCURRENT          = 2;
+    STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE = 4;
+    STGC_CONSOLIDATE            = 8;
+
+    STGMOVE_MOVE                = 0;
+    STGMOVE_COPY                = 1;
+    STGMOVE_SHALLOWCOPY         = 2;
+
+    STATFLAG_DEFAULT            = 0;
+    STATFLAG_NONAME             = 1;
+    STATFLAG_NOOPEN             = 2;
+
+// #########################################################################
+//
+//   Constants for the call context
+//
+
+    WDT_INPROC_CALL             = ULONG($48746457);
+    WDT_REMOTE_CALL             = ULONG($52746457);
+    WDT_INPROC64_CALL           = ULONG($50746457);
+
+    COLE_DEFAULT_PRINCIPAL {: pOleStr?} = pOleStr(-1);
+    COLE_DEFAULT_AUTHINFO  {: pointer?} = pointer(-1);
+
+// DISPID reserved to indicate an \"unknown\" name
+// only reserved for data members (properties); reused as a method dispid below
+
+    DISPID_UNKNOWN              = -1;
+
+// DISPID reserved for the \"value\" property
+
+    DISPID_VALUE                = 0;
+
+// The following DISPID is reserved to indicate the param")
+// that is the right-hand-side (or \"put\" value) of a PropertyPut")
+
+    DISPID_PROPERTYPUT          = -3;
+
+// DISPID reserved for the standard \"NewEnum\" method
+
+    DISPID_NEWENUM              = -4;
+
+// DISPID reserved for the standard \"Evaluate\" method
+
+    DISPID_EVALUATE             = -5;
+    DISPID_CONSTRUCTOR          = -6;
+    DISPID_DESTRUCTOR           = -7;
+    DISPID_COLLECT              = -8;
+
+// The range -500 through -999 is reserved for Controls
+// The range 0x80010000 through 0x8001FFFF is reserved for Controls
+// The range -5000 through -5499 is reserved for ActiveX Accessability
+// The range -2000 through -2499 is reserved for VB5
+// The range -3900 through -3999 is reserved for Forms
+// The range -5500 through -5550 is reserved for Forms
+// The remainder of the negative DISPIDs are reserved for future use
+
+
+    DESCKIND_NONE               = 0;
+    DESCKIND_FUNCDESC           = 1;
+    DESCKIND_VARDESC            = 2;
+    DESCKIND_TYPECOMP           = 3;
+    DESCKIND_IMPLICITAPPOBJ     = 4;
+    DESCKIND_MAX                = 5;
+
+
+    SYS_WIN16                   = 0;
+    SYS_WIN32                   = 1;
+    SYS_MAC                     = 2;
+    SYS_WIN64                   = 3;
+
+
+    LIBFLAG_FRESTRICTED         = $01;
+    LIBFLAG_FCONTROL            = $02;
+    LIBFLAG_FHIDDEN             = $04;
+    LIBFLAG_FHASDISKIMAGE       = $08;
+    TYPEFLAG_FAPPOBJECT         = $01;
+    TYPEFLAG_FCANCREATE         = $02;
+    TYPEFLAG_FLICENSED          = $04;
+    TYPEFLAG_FPREDECLID         = $08;
+    TYPEFLAG_FHIDDEN            = $10;
+    TYPEFLAG_FCONTROL           = $20;
+    TYPEFLAG_FDUAL              = $40;
+    TYPEFLAG_FNONEXTENSIBLE     = $80;
+    TYPEFLAG_FOLEAUTOMATION     = $100;
+    TYPEFLAG_FRESTRICTED        = $200;
+    TYPEFLAG_FAGGREGATABLE      = $400;
+    TYPEFLAG_FREPLACEABLE       = $800;
+    TYPEFLAG_FDISPATCHABLE      = $1000;
+    TYPEFLAG_FREVERSEBIND       = $2000;
+    TYPEFLAG_FPROXY             = $4000;
+
+    FUNCFLAG_FRESTRICTED        = $1;
+    FUNCFLAG_FSOURCE            = $2;
+    FUNCFLAG_FBINDABLE          = $4;
+    FUNCFLAG_FREQUESTEDIT       = $8;
+    FUNCFLAG_FDISPLAYBIND       = $10;
+    FUNCFLAG_FDEFAULTBIND       = $20;
+    FUNCFLAG_FHIDDEN            = $40;
+    FUNCFLAG_FUSESGETLASTERROR  = $80;
+    FUNCFLAG_FDEFAULTCOLLELEM   = $100;
+    FUNCFLAG_FUIDEFAULT         = $200;
+    FUNCFLAG_FNONBROWSABLE      = $400;
+    FUNCFLAG_FREPLACEABLE       = $800;
+    FUNCFLAG_FIMMEDIATEBIND     = $1000;
+
+    VARFLAG_FREADONLY           = $1;
+    VARFLAG_FSOURCE             = $2;
+    VARFLAG_FBINDABLE           = $4;
+    VARFLAG_FREQUESTEDIT        = $8;
+    VARFLAG_FDISPLAYBIND        = $10;
+    VARFLAG_FDEFAULTBIND        = $20;
+    VARFLAG_FHIDDEN             = $40;
+    VARFLAG_FRESTRICTED         = $80;
+    VARFLAG_FDEFAULTCOLLELEM    = $100;
+    VARFLAG_FUIDEFAULT          = $200;
+    VARFLAG_FNONBROWSABLE       = $400;
+    VARFLAG_FREPLACEABLE        = $800;
+    VARFLAG_FIMMEDIATEBIND      = $1000;
+
+    FADF_AUTO                   = USHORT($0001);  // array is allocated on the stack
+    FADF_STATIC                 = USHORT($0002);  // array is staticly allocated
+    FADF_EMBEDDED               = USHORT($0004);  // array is embedded in a structure
+    FADF_FIXEDSIZE              = USHORT($0010);  // may not be resized or reallocated
+    FADF_RECORD                 = USHORT($0020);  // an array of records
+    FADF_HAVEIID                = USHORT($0040);  // with FADF_DISPATCH, FADF_UNKNOWN
+                                                  // array has an IID for interfaces
+    FADF_HAVEVARTYPE            = USHORT($0080);  // array has a VT type
+    FADF_BSTR                   = USHORT($0100);  // an array of BSTRs
+    FADF_UNKNOWN                = USHORT($0200);  // an array of IUnknown*
+    FADF_DISPATCH               = USHORT($0400);  // an array of IDispatch*
+    FADF_VARIANT                = USHORT($0800);  // an array of VARIANTs
+    FADF_RESERVED               = USHORT($F008);  // reserved bits
+
+// IMPLTYPE Flags
+
+    IMPLTYPEFLAG_FDEFAULT       = USHORT($1);
+    IMPLTYPEFLAG_FSOURCE        = USHORT($2);
+    IMPLTYPEFLAG_FRESTRICTED    = USHORT($4);
+    IMPLTYPEFLAG_FDEFAULTVTABLE = USHORT($8);
+
+    PARAMFLAG_NONE              = USHORT($00);
+    PARAMFLAG_FIN               = USHORT($01);
+    PARAMFLAG_FOUT              = USHORT($02);
+    PARAMFLAG_FLCID             = USHORT($04);
+    PARAMFLAG_FRETVAL           = USHORT($08);
+    PARAMFLAG_FOPT              = USHORT($10);
+    PARAMFLAG_FHASDEFAULT       = USHORT($20);
+    PARAMFLAG_FHASCUSTDATA      = USHORT($40);
+
+    VAR_PERINSTANCE             = 0;
+    VAR_STATIC                  = 1;
+    VAR_CONST                   = 2;
+    VAR_DISPATCH                = 3;
+
+    // notification messages used by the dynamic typeinfo protocol.
+
+    CHANGEKIND_ADDMEMBER        = 0;
+    CHANGEKIND_DELETEMEMBER     = 1;
+    CHANGEKIND_SETNAMES         = 2;
+    CHANGEKIND_SETDOCUMENTATION = 3;
+    CHANGEKIND_GENERAL          = 4;
+    CHANGEKIND_INVALIDATE       = 5;
+    CHANGEKIND_CHANGEFAILED     = 6;
+    CHANGEKIND_MAX              = 7;
+
+    INVOKE_FUNC                 = 1;
+    INVOKE_PROPERTYGET          = 2;
+    INVOKE_PROPERTYPUT          = 4;
+    INVOKE_PROPERTYPUTREF       = 8;
+
+    TKIND_ENUM                  = 0;
+    TKIND_RECORD                = 1;
+    TKIND_MODULE                = 2;
+    TKIND_INTERFACE             = 3;
+    TKIND_DISPATCH              = 4;
+    TKIND_COCLASS               = 5;
+    TKIND_ALIAS                 = 6;
+    TKIND_UNION                 = 7;
+    TKIND_MAX                   = 8;                 // end of enum marker
+
+    SF_ERROR                    = VT_ERROR;
+    SF_I1                       = VT_I1;
+    SF_I2                       = VT_I2;
+    SF_I4                       = VT_I4;
+    SF_I8                       = VT_I8;
+    SF_BSTR                     = VT_BSTR;
+    SF_UNKNOWN                  = VT_UNKNOWN;
+    SF_DISPATCH                 = VT_DISPATCH;
+    SF_VARIANT                  = VT_VARIANT;
+    SF_RECORD                   = VT_RECORD;
+    SF_HAVEIID                  = VT_UNKNOWN OR VT_RESERVED;
+    IDLFLAG_NONE                = PARAMFLAG_NONE;
+    IDLFLAG_FIN                 = PARAMFLAG_FIN;
+    IDLFLAG_FOUT                = PARAMFLAG_FOUT;
+    IDLFLAG_FLCID               = PARAMFLAG_FLCID;
+    IDLFLAG_FRETVAL             = PARAMFLAG_FRETVAL;
+
+    CC_FASTCALL                 = 0;
+    CC_CDECL                    = 1;
+    CC_MSCPASCAL                = 2;
+    CC_PASCAL                   = CC_MSCPASCAL;
+    CC_MACPASCAL                = 3;
+    CC_STDCALL                  = 4;
+    CC_FPFASTCALL               = 5;
+    CC_SYSCALL                  = 6;
+    CC_MPWCDECL                 = 7;
+    CC_MPWPASCAL                = 8;
+    CC_MAX                      = 9;   // end of enum marker
+
+    FUNC_VIRTUAL                = 0;
+    FUNC_PUREVIRTUAL            = 1;
+    FUNC_NONVIRTUAL             = 2;
+    FUNC_STATIC                 = 3;
+    FUNC_DISPATCH               = 4;
+
+// objbase.h
+
+    MARSHALINTERFACE_MIN        = 500; // minimum number of bytes for interface marshl
+
+//
+// Common typedefs for paramaters used in Storage API's, gleamed from storage.h
+// Also contains Storage error codes, which should be moved into the storage
+// idl files.
+//
+
+
+    CWCSTORAGENAME              = 32;
+
+// Storage instantiation modes
+    STGM_DIRECT                 = $00000000;
+    STGM_TRANSACTED             = $00010000;
+    STGM_SIMPLE                 = $08000000;
+    STGM_READ                   = $00000000;
+    STGM_WRITE                  = $00000001;
+    STGM_READWRITE              = $00000002;
+    STGM_SHARE_DENY_NONE        = $00000040;
+    STGM_SHARE_DENY_READ        = $00000030;
+    STGM_SHARE_DENY_WRITE       = $00000020;
+    STGM_SHARE_EXCLUSIVE        = $00000010;
+    STGM_PRIORITY               = $00040000;
+    STGM_DELETEONRELEASE        = $04000000;
+    STGM_NOSCRATCH              = $00100000;   {WINNT+}
+    STGM_CREATE                 = $00001000;
+    STGM_CONVERT                = $00020000;
+    STGM_FAILIFTHERE            = $00000000;
+    STGM_NOSNAPSHOT             = $00200000;
+    STGM_DIRECT_SWMR            = $00400000;   { Win2000+}
+
+//  flags for internet asyncronous and layout docfile
+    ASYNC_MODE_COMPATIBILITY    = $00000001;
+    ASYNC_MODE_DEFAULT          = $00000000;
+
+    STGTY_REPEAT                = $00000100;
+    STG_TOEND                   = $FFFFFFFF;
+
+    STG_LAYOUT_SEQUENTIAL       = $00000000;
+    STG_LAYOUT_INTERLEAVED      = $00000001;
+
+    STGFMT_STORAGE              = 0;
+    STGFMT_NATIVE               = 1;
+    STGFMT_FILE                 = 3;
+    STGFMT_ANY                  = 4;
+    STGFMT_DOCFILE              = 5;
+
+// This is a legacy define to allow old component to builds
+    STGFMT_DOCUMENT             = 0;
+
+
+// COM initialization flags; passed to CoInitialize.
+    COINIT_APARTMENTTHREADED    = $2;      // Apartment model
+
+  // These constants are only valid on Windows NT 4.0
+
+    COINIT_MULTITHREADED        = $0;      // OLE calls objects on any thread.
+    COINIT_DISABLE_OLE1DDE      = $4;      // Don't use DDE for Ole1 support.
+    COINIT_SPEED_OVER_MEMORY    = $8;      // Trade memory for speed.
+
+    SMEXF_SERVER                = $01;     // server side aggregated std marshaler
+    SMEXF_HANDLER               = $02;     // client side (handler) agg std marshaler
+
+
+
+    COWAIT_WAITALL              = 1;
+    COWAIT_ALERTABLE            = 2;
+
+TYPE
+    VARTYPE             = USHORT;
+
+//TypeInfo stuff.
+
+    DISPID              = Long ;
+    SCODE               = Long;
+    pSCODE              = ^SCODE;
+    lpDISPID            = ^DISPID;
+    MEMBERID            = DispId;
+    HREFTYPE            = DWord;
+
+
+// Enums
+    VARKIND             = DWord;
+    DESCKIND            = DWord;
+    SYSKIND             = DWord;
+    FUNCKIND            = DWord;
+    CHANGEKIND          = DWord;
+    CALLCONV            = DWord;
+
+    PCOAUTHIDENTITY    = ^TCOAUTHIDENTITY;
+    _COAUTHIDENTITY    = Record
+                          User           : PUSHORT;
+                          UserLength     : ULONG;
+                          Domain         : PUSHORT;
+                          DomainLength   : ULong;
+                          Password       : PUSHORT;
+                          PassWordLength : ULong;
+                          Flags          : ULong;
+                          End;
+
+   COAUTHIDENTITY      = _COAUTHIDENTITY;
+   TCOAUTHIDENTITY     = _COAUTHIDENTITY;
+
+   PCOAUTHINFO         = ^TCOAUTHINFO;
+   COAuthInfo          = Record
+                          AuthnSvc              : DWord;
+                          AuthzSvc              : DWord;
+                          ServerPrincName       : LPWSTR;
+                          AuthnLevel            : DWord;
+                          ImpersonationLevel    : DWord;
+                          AuthIdentityData      : PCOAUTHIDENTITY;
+                          Capabilities          : DWord;
+                          END;
+   TCOAUTHINFO         = COAUTHINFO;
+
+   PCOSERVERINFO       = ^TCOSERVERINFO;
+   _COSERVERINFO       = Record
+                          dwReserved1 : DWord;
+                          pwszName    : LPWSTR;
+                          pAuthInfo   : PCoAuthInfo;
+                          dwReserved2 : DWord;
+                          end;
+   TCOSERVERINFO       = _COSERVERINFO;
+   PMultiQI            = ^Multi_QI;
+   tagMULTI_QI         = Record
+                          iid: piid;                   // pass this one in
+                          itf: pointer {IUnknown};                // get these out (you must set to NULL before calling)
+                          hr : Hresult;
+                          END;
+   MULTI_QI            = TagMULTI_QI;
+   PMulti_QI           = PMultiQI;
+
+
+   HContext            = Pointer;
+   ApartmentID         = DWord;
+
+
+//****** Critical Section Wrappers ***********************************
+
+//   LCID                    = WORD;
+//   LANGID                  = USHORT;
+
+// #######################################################################
+//
+//  User marshal support for Windows data types.
+
+//
+//  Frequently used helpers: sized blobs
+//
+//      Never put [user_marshal] or [wire_marshal] on the helpers directly.
+//
+
+// Flagged blobs.
+
+   _FLAGGED_BYTE_BLOB           = Record
+                                   fFlags :  ULong;
+                                   clSize :  ULong;
+                                   abdata :  array[0..0] of byte;
+                                   End;
+   FLAGGED_BYTE_BLOB            = _FLAGGED_BYTE_BLOB;
+   UP_FLAGGED_BYTE_BLOB         = ^FLAGGED_BYTE_BLOB;
+
+   _FLAGGED_WORD_BLOB           = Record
+                                   fFlags :  ULong;
+                                   clSize :  ULong;
+                                   abdata :  array[0..0] of USHORT;
+                                   End;
+   FLAGGED_WORD_BLOB            = _FLAGGED_WORD_BLOB;
+   UP_FLAGGED_WORD_BLOB         = ^FLAGGED_WORD_BLOB;
+
+   _FLAGGED_DWORD_BLOB          = Record
+                                   fFlags :  ULong;
+                                   clSize :  ULong;
+                                   abdata :  array[0..0] of ULONG;
+                                   End;
+   FLAGGED_DWORD_BLOB           = _FLAGGED_DWORD_BLOB;
+   FLAGGED_UP_DWORD_BLOB        = ^FLAGGED_DWORD_BLOB;
+
+// Simple blobs.
+
+   _BYTE_BLOB                   = Record
+                                   clSize :  ULong;
+                                   abdata :  array[0..0] of byte;
+                                   End;
+   BYTE_BLOB                    = _BYTE_BLOB;
+   UP_BYTE_BLOB                 = ^BYTE_BLOB;
+
+   _WORD_BLOB                   = Record
+                                   clSize :  ULong;
+                                   abdata :  array[0..0] of USHORT;
+                                   End;
+   WORD_BLOB                    = _WORD_BLOB;
+   UP_WORD_BLOB                 = ^WORD_BLOB;
+
+   _DWORD_BLOB                  = Record
+                                   clSize :  ULong;
+                                   abdata :  array[0..0] of ULONG;
+                                   End;
+   DWORD_BLOB                   = _DWORD_BLOB;
+   UP_DWORD_BLOB                = ^DWORD_BLOB;
+
+// Frequently used helpers with sized pointers.
+
+   _BYTE_SIZEDARR               = Record
+                                   clsize : ULong;
+                                   Data   : PByte;
+                                   End;
+   BYTE_SIZEDARR                = _BYTE_SIZEDARR;
+
+   _SHORT_SIZEDARR              = Record
+                                   clsize : ULong;
+                                   Data   : PSHORT;
+                                   End;
+   SHORT_SIZEDARR               = _SHORT_SIZEDARR;
+
+   _LONG_SIZEDARR               = Record
+                                   clsize : ULong;
+                                   Data   : PLONG;
+                                   End;
+   LONG_SIZEDARR                = _LONG_SIZEDARR;
+   HYPER                        = LONGLONG;
+   PHYPER                       = ^HYPER;
+   _HYPER_SIZEDARR              = Record
+                                   clsize : ULong;
+                                   Data   : PHYPER;
+                                   End;
+   HYPER_SIZEDARR               = _HYPER_SIZEDARR;
+
+
+// #########################################################################
+//
+//  CLIPFORMAT
+//
+
+   userCLIPFORMAT               = Record
+                                    FContext : Long;
+                                    CASE INTEGER OF
+                                      0 : (dwvalue : DWORD);
+                                      1 : (szName : poleStr);
+                                      End;
+
+   wireCLIPFORMAT               = ^userCLIPFORMAT;
+
+
+// #########################################################################
+//
+//  Good for most of the gdi handles.
+
+   _GDI_NONREMOTE               = Record
+                                    FContext : Long;
+                                    Case Integer Of
+                                     0 : (HInProc : Long);
+                                     1 : (HRemote : DWORD_BLOB);
+                                     END;
+   GDI_NONREMOTE                = _GDI_NONREMOTE;
+
+// #########################################################################
+//
+//  HGLOBAL
+//
+// A global may be Null or may be non-NULL with 0 length.
+
+   _userHGLOBAL                 = Record
+                                   FContext : Long;
+                                   CASE Integer OF
+                                      0 : (hInproc : Long);
+                                      1 : (hRemote : UP_FLAGGED_BYTE_BLOB);
+                                      2 : (hInproc64: int64);
+                                      End;
+   userHGlobal                  = _userHGLOBAL;
+   wireHGLOBAL                  = ^userHGLOBAL;
+
+// #########################################################################
+//
+//  HMETAFILE
+//
+   _userHMETAFILE               = Record
+                                   fContext : Long;
+                                   Case Integer OF
+                                      0 : (hInproc   : Long);
+                                      1 : (hRemote   : up_byte_blob);
+                                      2 : (hInProc64 : Int64);
+                                      End;
+   userHMETAFILE                = _userHMETAFILE;
+   puserHMETAFILE               = ^userHMETAFILE;
+
+// #########################################################################
+//
+//  HMETAFILEPICT
+//
+
+   _remoteMETAFILEPICT          = Record
+                                    mm   : Long;
+                                    xExt : Long;
+                                    yExt : Long;
+                                    mgf  : puserHMETAFILE;
+                                    End;
+
+   remoteMETAFILEPICT           = _remoteMETAFILEPICT;
+   premoteMETAFILEPICT          = ^remoteMETAFILEPICT;
+
+   _userHMETAFILEPICT           = Record
+                                    fContext : Long;
+                                    Case Integer OF
+                                      0 : (hInproc   : Long);
+                                      1 : (hRemote   : premoteMETAFILEPICT);
+                                      2 : (hInProc64 : Int64);
+                                      End;
+   userHMETAFILEPICT            = _userHMETAFILEPICT;
+
+
+// #########################################################################
+//
+//  HENHMETAFILE
+//
+
+   _userHENHMETAFILE            = Record
+                                    fContext : Long;
+                                    Case Integer OF
+                                      0 : (hInproc   : Long);
+                                      1 : (hRemote   : up_byte_blob);
+                                      2 : (hInProc64 : Int64);
+                                      End;
+   userHENHMETAFILE             = _userHENHMETAFILE;
+   puserHENHMETAFILE            = ^userHENHMETAFILE;
+
+// #########################################################################
+//
+//  HBITMAP
+//
+
+// RemHBITMAP was just a byte blob, but the whole bitmap structure was copied
+// at the beginning of the buffer.
+
+// So, we take BITMAP fields from wingdi.x
+
+
+   _userBITMAP                  = Record
+                                   bmType,
+                                   bmWidth,
+                                   bmHeight,
+                                   bmWidthBytes : Long;
+                                   bmPlanes,
+                                   bmBitsPixel  : Word;
+                                   cvsize       : ULONG;
+                                   buffer       : pbyte;
+                                   End;
+
+   userBITMAP                   = _userBITMAP;
+   puserBITMAP                  = ^userBITMAP;
+
+   _userHBITMAP                 = Record
+                                    fContext : Long;
+                                    Case Integer OF
+                                      0 : (hInproc   : Long);
+                                      1 : (hRemote   : puserBITMAP);
+                                      2 : (hInProc64 : Int64);
+                                      End;
+   userHBITMAP                  = _userHBITMAP;
+   puserHBITMAP                 = ^userHBITMAP;
+
+
+// #########################################################################
+//
+//  HPALETTE
+//
+
+// PALETTEENTRY is in wingdi.x, it is a struct with 4 bytes.
+// LOGPALETTE   is in wingdi.x, it is a conf struct with paletteentries and
+//                                    a version field
+
+   _userHpalette                = Record
+                                    fContext : Long;
+                                    Case Integer OF
+                                      0 : (hInproc   : Long);
+                                      1 : (hRemote   : logpalette);
+                                      2 : (hInProc64 : Int64);
+                                  End;
+   userHpalette                 = _userHpalette;
+   puserHpalette                = ^userHpalette;
+
+// #########################################################################
+//
+//  Handles passed locally as longs.
+//
+
+   _RemotableHandle             = Record
+                                    fContext : Long;
+                                    Case Integer OF
+                                      0 : (hInproc   : Long);
+                                      1 : (hRemote   : Long);
+                                      End;
+   RemotableHandle              = _RemotableHandle;
+
+
+   wireHWND                     = ^RemotableHandle;
+   wireHMENU                    = ^RemotableHandle;
+   wireHACCEL                   = ^RemotableHandle;
+   wireHBRUSH                   = ^RemotableHandle;
+   wireHFONT                    = ^RemotableHandle;
+   wireHDC                      = ^RemotableHandle;
+   wireHICON                    = ^RemotableHandle;
+   HCursor                      = HICON;
+
+
+   tagTEXTMETRICW               = Record
+                                    tmHeight,
+                                    tmAscent,
+                                    tmDescent,
+                                    tmInternalLeading,
+                                    tmExternalLeading,
+                                    tmAveCharWidth,
+                                    tmMaxCharWidth,
+                                    tmWeight,
+                                    tmOverhang,
+                                    tmDigitizedAspectX,
+                                    tmDigitizedAspectY   : Long;
+                                    tmFirstChar,
+                                    tmLastChar,
+                                    tmDefaultChar,
+                                    tmBreakChar          : WCHAR;
+                                    tmItalic,
+                                    tmUnderlined,
+                                    tmStruckOut,
+                                    tmPitchAndFamily,
+                                    tmCharSet            : BYTE;
+                                  End;
+
+   TEXTMETRICW                  = tagTEXTMETRICW;
+   PTEXTMETRICW                 = ^TEXTMETRICW;
+   LPTEXTMETRICW                = PTEXTMETRICW;
+   wireHBITMAP                  = ^userHBITMAP;
+   wireHPALETTE                 = ^userHPALETTE;
+   wireHENHMETAFILE             = ^userHENHMETAFILE;
+   wireHMETAFILE                = ^userHMETAFILE;
+   wireHMETAFILEPICT            = ^userHMETAFILEPICT;
+   HMetaFilePict                = Pointer;
+   HLOCAL                       = HGLOBAL;
+//  Date              = Double;
+
+{****************************************************************************
+ *  Binding Interfaces
+ ****************************************************************************}
+
+   tagBIND_OPTS                 = Record
+                                    cvStruct,          //  sizeof(BIND_OPTS)
+                                    grfFlags,
+                                    grfMode,
+                                    dwTickCountDeadline : DWord;
+                                    End;
+   TBind_Opts                   = tagBIND_OPTS;
+   PBind_Opts                   = ^TBind_Opts;
+
+   tagBIND_OPTS2_CPP            = Record
+                                    dwTrackFlags,
+                                    dwClassContext  : Dword;
+                                    Locale          : LCID;
+                                    ServerInfo      : pCoServerInfo;
+                                    End;
+
+   TBind_Opts2_CPP              = tagBIND_OPTS2_CPP;
+   PBind_Opts2_CPP              = ^TBind_Opts2_CPP;
+
+
+   tagBind_OPTS2                = Record
+                                    cvStruct,          //  sizeof(BIND_OPTS)
+                                    grfFlags,
+                                    grfMode,
+                                    dwTickCountDeadline : DWord;
+                                    dwTrackFlags,
+                                    dwClassContext      : DWord;
+                                    Locale              : LCID;
+                                    ServerInfo          : pCoServerInfo;
+                                    End;
+
+   TBind_Opts2                  = tagBIND_OPTS2;
+   PBind_Opts2                  = ^TBind_Opts2;
+
+// ****************************************************************************
+// *  Structured Storage Interfaces
+// ****************************************************************************
+
+
+
+   tagSTATSTG                   = record
+                                    pwcsName      : POleStr;
+                                    dwType        : DWord;
+                                    cbSize        : ULarge_integer;
+                                    mtime         : TFileTime;
+                                    ctime         : TFileTime;
+                                    atime         : TFileTime;
+                                    grfMode       : DWord;
+                                    grfLocksSupported : DWord;
+                                    clsid         : TCLSID;
+                                    grfStateBits  : DWord;
+                                    reserved      : DWord;
+                                    end;
+
+   TStatStg                     = tagSTATSTG;
+   PStatStg                     = ^TStatStg;
+   STATSTG                      = TStatStg;
+
+{    TagRemSNB = Record
+                   ulCntStr  : ULong;
+                   ulCntChar : ULong;
+                   [size_is(ulCntChar)] OLECHAR rgString[];
+                 End;
+        RemSNB=TagRemSNB
+        WireSNB=^RemSNB}
+   SNB                          = ^PoleStr;
+   tagDVTARGETDEVICE            = Record
+                                    tdSize                     : DWord;
+                                    tdDriverNameOffset,
+                                    tdDeviceNameOffset,
+                                    tdPortNameOffset,
+                                    tdExtDevmodeOffset         : Word;
+                                    Data                       : Record End;
+                                    End;
+
+   DVTARGETDEVICE               = TagDVTARGETDEVICE;
+   PDVTARGETDEVICE              = ^tagDVTARGETDEVICE;
+   LPCLIPFORMAT                 = ^TCLIPFORMAT;
+   TCLIPFORMAT                  = Word;
+   CLIPFORMAT                   = TCLIPFORMAT;
+   PClipFormat                                                                  = LPCLIPFORMAT;
+
+   tagFORMATETC                 = Record
+                                    CfFormat :  Word {TCLIPFORMAT};
+                                    Ptd      : PDVTARGETDEVICE;
+                                    dwAspect : DWORD;
+                                    lindex   : Long;
+                                    tymed    : DWORD;
+                                    End;
+   FORMATETC                    = TagFORMATETC;
+   TFORMATETC                   = FORMATETC;
+   LPFORMATETC                  = ^FORMATETC;
+   PFormatEtc                   = LPFORMATETC;
+
+    // Stats for data; used by several enumerations and by at least one
+    // implementation of IDataAdviseHolder; if a field is not used, it
+    // will be NULL.
+
+
+   tagRemSTGMEDIUM              = Record
+                                    tymed                     : DWord;
+                                    dwHandleType              : DWord;
+                                    pData,
+                                    pUnkForRelease,
+                                    cbData                    : ULong;
+                                    Data                      : Record end;
+                                    End;
+
+   RemSTGMEDIUM                 = TagRemSTGMedium;
+
+   TagSTGMEDIUM                 = Record
+                                    Tymed : DWord;
+                                    Case Integer Of
+                                      0 : (HBITMAP             : hBitmap;       PUnkForRelease :  Pointer {IUnknown});
+                                      1 : (HMETAFILEPICT       : hMetaFilePict );
+                                      2 : (HENHMETAFILE        : hEnhMetaFile  );
+                                      3 : (HGLOBAL             : hGlobal       );
+                                      4 : (lpszFileName        : LPOLESTR    );
+                                      5 : (pstm                : Pointer{IStream}  );
+                                      6 : (pstg                : Pointer{IStorage} );
+                                      End;
+   USTGMEDIUM                   = TagSTGMEDIUM;
+   STGMEDIUM                    = USTGMEDIUM;
+   TStgMedium                                                                           = TagSTGMEDIUM;
+   PStgMedium                   = ^TStgMedium;
+
+//
+//  wireSTGMEDIUM
+//
+// These flags are #defined (not enumerated) in wingdi.
+// We need to repeat #defines to avoid conflict in the generated file.
+//
+
+   _GDI_OBJECT                  = Record
+                                    ObjectType : DWord;
+                                    Case Integer Of
+                                      0 : (HBitmap : WireHBITMAP);
+                                      1 : (hPalette: wireHPALETTE);
+                                      2 : (hGeneric: wireHGLOBAL);
+                                      END;
+   GDI_OBJECT                   = _GDI_OBJECT;
+
+
+   _userSTGMEDIUM               = Record
+                                    tymed : DWORD;
+                                    Case Integer OF
+                                      0 : (hMetaFilePict : wireHMETAFILEPICT;punkforrelease:Pointer {IUnknown});
+                                      1 : (hHEnhMetaFile : wireHENHMETAFILE);
+                                      2 : (hGdiHandle    : ^GDI_OBJECT);
+                                      3 : (HGlobal       : wireHGLOBAL);
+                                      4 : (lpszFileName  : LPOLESTR);
+                                      5 : (pstm          : ^BYTE_BLOB);
+                                      6 : (pstg          : ^BYTE_BLOB);
+                                      END;
+
+   userSTGMEDIUM                = _userSTGMEDIUM;
+
+
+   LPSTGMEDIUM                  = ^STGMEDIUM;
+
+   _userFLAG_STGMEDIUM          = Record
+                                    ContextFlags,
+                                    fPassOwnership  : Long;
+                                    stgmed          : userSTGMEDIUM;
+                                    End;
+
+   userFLAG_STGMEDIUM           = _userFLAG_STGMEDIUM;
+
+   wireFLAG_STGMEDIUM           = ^userFLAG_STGMEDIUM;
+
+
+   _FLAG_STGMEDIUM              = Record
+                                    ContextFlags,
+                                    fPassOwnership   : Long;
+                                    Stgmed           : STGMEDIUM;
+                                    End;
+   FLAG_STGMEDIUM               = _FLAG_STGMEDIUM;
+
+
+   VARIANTARG                   = VARIANT;
+   LPVARIANT                    = ^VARIANT;
+   LPVARIANTARG                 = ^VARIANT;
+
+// parameter description
+
+   tagPARAMDESCEX               = Record
+                                    cBytes         : ULong;      // size of this structure
+                                    varDefaultValue: VariantARG; // default value of this parameter
+                                    End;
+
+   PARAMDESCEX                  = tagPARAMDESCEX;
+   LPPARAMDESCEX                = ^PARAMDESCEX;
+
+   tagPARAMDESC                 = Record
+                                    pparamdescex: LPPARAMDESCEX ;  // valid if PARAMFLAG_FHASDEFAULT bit is set
+                                    wParamFlags : UShort ;         // IN, OUT, etc
+                                    End;
+
+   PARAMDESC                    = tagPARAMDESC;
+   LPPARAMDESC                  = ^PARAMDESC;
+
+
+   tagSAFEARRAYBOUND            = Record
+                                     cElements : ULong;
+                                     lLbound   : Long;
+                                     End;
+   SAFEARRAYBOUND               = tagSAFEARRAYBOUND;
+   LPSAFEARRAYBOUND             = ^SAFEARRAYBOUND;
+
+// additional interface information about the incoming call
+   tagINTERFACEINFO             = Record
+                                    Unk     : Pointer {IUnknown};   // the pointer to the object
+                                    IID     : Tiid;       // interface id
+                                    wMethod : WORD;        // interface method
+                                    End;
+
+   INTERFACEINFO                = tagINTERFACEINFO;
+   LPINTERFACEINFO              = ^INTERFACEINFO;
+   RPCOLEDATAREP                = ULong;
+   tagRPCOLEMESSAGE             = Record
+                                    Reserved1          : Pointer;
+                                    DataRepresentation : RPCOLEDATAREP;
+                                    Buffer             : Pointer;
+                                    cbBuffer,
+                                    IMethod            : ULong;
+                                    Reserved2          : Array[0..4] Of Pointer;
+                                    rpcFlags           : ULong;
+                                    End;
+
+   RPCOLEMESSAGE                = tagRPCOLEMESSAGE;
+   PRPCOLEMESSAGE               = ^RPCOLEMESSAGE;
+
+   tagStorageLayout             = Record
+                                    LayoutType       : Dword;
+                                    pwcsElementName  : POleStr;
+                                    cOffset,
+                                    cBytes           : Large_Integer;
+                                    End;
+
+   StorageLayout                = tagStorageLayout;
+
+   tagSTATDATA                  = Record
+                                                                // field used by:
+                                    FORMATETC   : Tformatetc;   // EnumAdvise, EnumData (cache), EnumFormats
+                                    advf        : DWord;        // EnumAdvise, EnumData (cache)
+                                    padvSink    : Pointer {IAdviseSink};  // EnumAdvise
+                                    dwConnection: DWord;        // EnumAdvise
+                                    End;
+   STATDATA                     = TagStatData;
+   LPStatData                   = ^StatData;
+
+   pARRAYDESC                   = ^ARRAYDESC;
+   pTYPEDESC                    = ^TYPEDESC;
+   tagTYPEKIND                  = Dword;
+   TYPEKIND                     = tagTYPEKIND;
+   INVOKEKIND                   = Dword;
+   tagTYPEDESC                  = Record
+                                    Case Integer OF
+                                      VT_PTR,
+                                      VT_SAFEARRAY   :  (lptdesc : PTYPEDESC;vt : VARTYPE);
+                                      VT_CARRAY      :  (lpadesc : PARRAYDESC);
+                                      VT_USERDEFINED :  (hreftype : HREFTYPE);
+                                      End;
+   TYPEDESC                     = tagTYPEDESC;
+
+
+
+
+   tagARRAYDESC                 = Record
+                                     tdescElem   : TYPEDESC;                       // element type
+                                     cDims       : USHORT;
+                                     rgbounds    : ARRAY [0..0] OF SAFEARRAYBOUND; // dimension count
+                                     End;
+
+   ARRAYDESC                    = tagARRAYDESC;
+
+   tagIDLDESC                   = Record
+                                    dwReserved     : pULONG;
+                                    wIDLFlags      : USHORT;           // IN, OUT, etc
+                                    End;
+   IDLDESC                      = tagIDLDESC;
+   LPIDLDESC                    = ^IDLDESC;
+
+
+   tagELEMDESC                  = Record
+                                    tdesc : TYPEDESC;
+                                    case Integer Of
+                                      0 : (idldesc    : IDLDESC);
+                                      1 : (paramdesc  : PARAMDESC);
+                                      END;
+
+   ELEMDESC                     = tagELEMDESC;
+   LPELEMDESC                   = ^ELEMDESC;
+   tagVARDESC                   = Record
+                                    memId               : MEMBERID;
+                                    lpstrSchema         : pOleStr;
+                                    CASE Integer OF
+                                    VAR_PERINSTANCE,
+                                    VAR_DISPATCH,
+                                    VAR_STATIC       : (oInst   : ULong;                          // offset of variable within the instance
+                                                        ElemdescVar : ELEMDESC;
+                                                        wVarFlags   : WORD;
+                                                        varkind     : VARKIND);
+                                    VAR_CONST        : (lpvarValue : PVARIANT);                       // the value of the constant
+                                    End;
+  VARDESC                       = tagVARDESC;
+  LPVARDESC                     = ^VARDESC;
+  tagDISPPARAMS                 = Record
+                                   rgvarg            : lpVARIANTARG;
+                                   rgdispipNamedArgs : lpDISPID;
+                                   cArgs,
+                                   cNamedArgs        : UINT;
+                                   End;
+  DISPPARAMS                    = tagDISPPARAMS;
+  tagEXCEPINFO                  = Record
+                                    wCode,                         // An error code describing the error.
+                                    wReserved      : Word;
+                                    Source,                        // A source of the exception
+                                    Description,                   // A description of the error
+                                    HelpFile       : WideString;   // Fully qualified drive, path, and file name
+                                    dwHelpContext  : DWord;    // help context of topic within the help file
+                                                                   // We can use ULONG_PTR here, because EXCEPINFO is marshalled by RPC
+                                                                   // RPC will marshal pfnDeferredFillIn.
+                                    pvReserved,
+                                    pfnDeferredFillIn : pULONG;
+                                    SCODE          : scode;
+                                    End;
+
+  EXCEPINFO                     =  tagEXCEPINFO;
+
+  tagTYPEATTR                   = Record
+                                   GUID            : Tguid;       // the GUID of the TypeInfo
+                                   LCID            : lcid;        // locale of member names and doc strings
+                                   dwReserved      : DWord;
+                                   memidConstructor,              // ID of constructor, MEMBERID_NIL if none
+                                   memidDestructor : MemberID;    // ID of destructor, MEMBERID_NIL if none
+                                   lpstrSchema     : pOleStr;
+
+                                   cbSizeInstance  : ULong;       // the size of an instance of this type
+                                   typekind        : TYPEKIND;    // the kind of type this typeinfo describes
+                                   cFuncs,                        // number of functions
+                                   cVars,                         // number of variables / data members
+                                   cImplTypes,                    // number of implemented interfaces
+                                   cbSizeVft,                     // the size of this types virtual func table
+                                   cbAlignment,                   { specifies the alignment requirements for
+                                                                    an instance of this type,
+                                                                      0 = align on 64k boundary
+                                                                      1 = byte align
+                                                                      2 = word align
+                                                                      4 = dword align... }
+                                   wTypeFlags,
+                                   wMajorVerNum,                  // major version number
+                                   wMinorVerNum    : Word;        // minor version number
+                                   tdescAlias      : TYPEDESC;    { if typekind == TKIND_ALIAS this field
+                                                                    specifies the type for which this type
+                                                                    is an alias }
+                                   idldescType     : IDLDESC;     // IDL attributes of the described type
+                                   END;
+  TYPEATTR                       = tagTYPEATTR;
+
+  LPTYPEATTR                     = ^TYPEATTR;
+
+  tagTLIBATTR                    = Record
+                                     GUID        : guid;
+                                     LCID        : lcid;
+                                     SYSKIND     : syskind;
+                                     wMajorVerNum,
+                                     wMinorVerNum,
+                                     wLibFlags   : Word
+                                     End;
+
+  TLIBATTR                       = tagTLIBATTR;
+  LPTLIBATTR                     = ^tagTLIBATTR;
+
+  LPFUNCDESC                     = ^FUNCDESC;
+
+  tagFUNCDESC                    = Record
+                                     memid             : MEMBERID;
+                                     lprgscode         : pSCODE;
+                                     lprgelemdescParam : lpELEMDESC;    // array of param types
+                                     FUNCKIND          : funckind;
+                                     invkind           : INVOKEKIND;
+                                     callconv          : CALLCONV;
+                                     cParams,
+                                     cParamsOpt,
+                                     oVft,
+                                     cScodes           : SHORT;
+                                     elemdescFunc      : ELEMDESC;
+                                     wFuncFlags        : WORD;
+                                     End;
+  FUNCDESC                       = tagFUNCDESC;
+
+
+  tagBINDPTR                     = Record
+                                     case integer Of
+                                      0 : (lpfuncdesc : LPFUNCDESC);
+                                      1 : (lpvardesc  : LPVARDESC);
+                                      2 : (lptcomp    : Pointer {ITypeComp} );
+                                      End;
+  BINDPTR                        = tagBINDPTR;
+  LPBINDPTR                      = ^BINDPTR;
+
+  tagCUSTDATAITEM                = Record
+                                     GUID         : TGuid;           // guid identifying this custom data item
+                                     varValue     : VARIANTARG;      // value of this custom data item
+                                     End;
+
+  CUSTDATAITEM                   = tagCUSTDATAITEM;
+
+  LPCUSTDATAITEM                 = ^CUSTDATAITEM;
+
+  tagCUSTDATA                    = Record
+                                     cCustData   : DWord;             // number of custom data items in rgCustData
+                                     prgCustData : LPCUSTDATAITEM;    // array of custom data items
+                                     End;
+
+  CUSTDATA                       = tagCUSTDATA;
+  LPCUSTDATA                     = ^CUSTDATA;
+
+//  CURRENCY                       = CY;
+
+{$IFDEF HASINTF}
+
+// Forward interfaces.
+
+   IStream             = Interface;
+   IMoniker            = Interface;
+   IEnumMoniker        = Interface;
+   IEnumString         = Interface;
+   IRunningObjectTable = Interface;
+   IStorage            = Interface;
+   IEnumSTATSTG        = Interface;
+   IAdviseSink         = Interface;
+   IBindCtx            = Interface;
+   IAsyncManager       = Interface;
+   ICallFactory        = Interface;
+   ISynchronize        = Interface;
+   ITypeLib            = Interface;
+
+// Unknwn.idl
+
+// IUnknown is in classesh.inc
+
+   AsyncIUnknown = Interface( IUnknown)
+      ['{000e0000-0000-0000-C000-000000000046}']
+        Function Begin_QueryInterface(Const riid : TIID): HResult; StdCall;
+        Function Finish_QueryInterface(Out ppvObject : Pointer):HResult;StdCall;
+        Function Begin_AddRef:HResult;StdCall;
+        Function Finish_AddRef:ULong;StdCall;
+        Function Begin_Release:HResult;StdCall;
+        Function Finish_Release:ULong;StdCall;
+        End;
+
+   IClassFactory = Interface(IUnknown)
+      ['{00000001-0000-0000-C000-000000000046}']
+      Function CreateInstance(Const unkOuter:IUnknown;Const riid : TIID;Out vObject):HResult; StdCall;
+      Function LockServer(fLock : Bool):HResult;StdCall;
+      End;
+
+
+// objidl.idl
+
+{****************************************************************************
+ *  Component Object Interfaces
+ ****************************************************************************}
+
+     IMarshal = Interface(IUnknown)
+        ['{00000003-0000-0000-C000-000000000046}']
+        Function GetUnmarshalClass ( Const riid: TIID; pv:Pointer; Const dwDestContext:DWord;
+                    pvDestContext:Pointer; Const mshlflags:DWORD;out LCid : TCLSID ):HResult;Stdcall;
+        Function GetMarshalSizeMax ( Const Riid: TIID; {in, unique} pv:Pointer; Const dwDestContext : DWord;
+                   {in, unique} pvDestContext:Pointer; Const mshlflags : DWord; out pSize : PDWord ): HResult;Stdcall;
+        Function MarshalInterface ( Const {in, unique} pStm: IStream; Const riid: TIID; {in, unique} pv:Pointer;
+                   Const dwDestContext:DWord; {in, unique} pvDestContext:Pointer; Const mshlflags:DWord ): HRESULT;Stdcall;
+        Function UnmarshalInterface ( {[in, unique]} Const pStm:IStream; Const riid: TIID;
+                   out ppv ): HResult;Stdcall;
+        Function ReleaseMarshalData ( {[in, unique]} Const Strm: IStream ):HResult;Stdcall;
+        Function DisconnectObject ( Const dwReserved:DWord ):HRESULT;Stdcall;
+        END;
+
+
+     IMarshal2 = Interface(IMarshal)
+        ['{000001cf-0000-0000-C000-000000000046}']
+        End;
+
+     IMalloc   = Interface(IUnknown)
+        ['{00000002-0000-0000-C000-000000000046}']
+        Function  Alloc(cb :size_t):Pointer; Stdcall;
+        Function  Realloc (pv :pointer;cb:size_t):Pointer;stdcall;
+        Procedure Free({[in]} pv: pointer); Stdcall;
+        Function  GetSize(pv:pointer):size_t;stdcall;
+        Function  DidAlloc(pv:pointer):Longint;stdcall;
+        procedure HeapMinimize; stdcall;
+        End;
+
+     IMallocSpy = Interface(IUnknown)
+        ['{0000001d-0000-0000-C000-000000000046}']
+
+        Function  PreAlloc(cbrequest:Size_t):Longint; StdCall;
+        function  PostAlloc(Pactual:Pointer):Pointer;StdCall;
+        Function  PreFree(pRequest:Pointer;fSpyed:bool):pointer;StdCall;
+        Procedure PostFree(fspyed:Bool);Stdcall;
+        Function  PreRealloc(pRequest:Pointer;cbRequest:Size_t;Out ppNewRequest:Pointer;
+                        fSpyed:Bool):Size_t;Stdcall;
+        Function  PostRealloc(pactual:Pointer;fspyed:Bool):pointer;Stdcall;
+        Function  PreGetSize(pRequest:pointer;fSpyed:Bool):Pointer;StdCall;
+        Function  PostGetSize(cbactual:Size_t;fSpyed:Bool):Size_t;StdCall;
+        Function  PreDidAlloc(pRequest:pointer;fSpyed:Bool):pointer;stdcall;
+        Function  PostDidAlloc(pRequest:pointer;fSpyed:Bool;Factual:Longint):pointer;stdcall;
+        Procedure PreHeapMinimize;StdCall;
+        Procedure PostHeapMinimize;StdCall;
+        End;
+
+     IStdMarshalInfo = Interface(IUnknown)
+       ['{00000018-0000-0000-C000-000000000046}']
+       Function GetClassForHandler (dwDestContext : DWord;pvDestContext:pointer;out Clsid : Pclsid ):HResult;Stdcall;
+       End;
+
+
+     IExternalConnection = Interface(IUnknown)
+       ['{00000019-0000-0000-C000-000000000046}']
+       Function AddConnection    (ExtConn: DWord; Reserved: DWord):DWord;Stdcall;
+       Function ReleaseConnection(extconn: DWord; Reserved: Dword;FLastReleaseCloses: Bool):DWord;StdCall;
+      End;
+
+
+      IMultiQI = Interface(IUnknown)
+        ['{00000020-0000-0000-C000-000000000046}']
+//if (__midl >= 500)
+//    async_uuid(000e0020-0000-0000-C000-000000000046)
+//endif
+        Function QueryMultipleInterfaces(cMQIs:Ulong;pMQIs:pMultiQI):HResult;StdCall;
+        END;
+
+     IInternalUnknown=Interface(IUnknown)
+        ['{00000021-0000-0000-C000-000000000046}']
+        Function QueryInternalInterface(riid:TIID;Out ppv:Pointer):HResult;StdCall;
+        END;
+
+
+     IEnumUnknown = Interface(IUnknown)
+        ['{00000100-0000-0000-C000-000000000046}']
+        //    pointer_default(unique)
+     Function Next(Celt:Ulong;out rgelt:IUnknown;out pCeltFetched:pulong):HRESULT;StdCall;
+//    HRESULT RemoteNext(        [in] ULONG celt,        [out, size_is(celt), length_is( *pceltFetched)]        IUnknown **rgelt,        [out] ULONG *pceltFetched);
+     Function Skip(Celt:Ulong):HResult;StdCall;
+     Function Reset():HResult;
+     Function Close(Out ppenum: IEnumUnknown):HResult;
+     END;
+
+
+    IBindCtx = Interface (IUnknown)
+       ['{0000000e-0000-0000-C000-000000000046}']
+       Function RegisterObjectBound(Const punk:IUnknown):HResult; stdCall;
+       Function RevokeObjectBound (Const Punk:IUnknown):HResult;  stdCall;
+       Function ReleaseBoundObjects :HResult;  StdCall;
+       Function SetBindOptions(Const bindOpts:TBind_Opts):HResult;  stdCall;
+//       Function RemoteSetBindOptions(Const bind_opts: TBind_Opts2):HResult;StdCall;
+       Function GetBindOptions(var BindOpts:TBind_Opts):HResult;  stdCall;
+//       Function RemoteGetBindOptions(Var bind_opts: TBind_Opts2):HResult;StdCall;
+       Function GetRunningObjectTable(Out rot : IRunningObjectTable):Hresult; StdCall;
+       Function RegisterObjectParam(Const pszkey:LPOleStr;const punk:IUnknown):HResult;
+       Function GetObjectParam(Const pszkey:LPOleStr; out punk: IUnknown):HResult; StdCall;
+       Function EnumObjectParam (out enum:IEnumString):Hresult;StdCall;
+       Function RevokeObjectParam(pszKey:LPOleStr):HResult;StdCall;
+       End;
+
+
+    IEnumMoniker = Interface (IUnknown)
+       ['{00000102-0000-0000-C000-000000000046}']
+       Function Next(celt:ULong; out Elt;out celftfetched: ULong):HResult; StdCall;
+//     Function RemoteNext(Celt:ULong; Out rgelt;out celtfetched :ULong):Hresult; StdCall;
+       Function Skip(celt:Ulong):HResult; StdCall;
+       Function Reset:HResult; StdCall;
+       Function Close(out penum:IEnumMoniker):HResult;StdCall;
+       End;
+
+
+    IRunnableObject = Interface(IUnknown)
+    ['{00000126-0000-0000-C000-000000000046}']
+       Function GetRunningClass(Out clsid:Tclsid):Hresult; StdCall;
+       Function Run(Const pb: IBindCtx):HResult; StdCall;
+       Function IsRunning:Bool; StdCall;
+//     Function RemoteIsRunning:Bool; StdCall;
+       Function LockRunning(FLock,FLastUnlockClose:BOOL):HResult; StdCall;
+       Function SetContainedObject(fContained:Bool):Hresult;Stdcall;
+       End;
+
+    IRunningObjectTable = Interface (IUnknown)
+       ['{00000010-0000-0000-C000-000000000046}']
+       Function Register  (grfFlags :DWord;const unkobject:IUnknown;Const mkObjectName:IMoniker;Out dwregister:DWord):HResult;StdCall;
+       Function Revoke    (dwRegister:DWord):HResult; StdCall;
+       Function IsRunning (Const mkObjectName: IMoniker):HResult;StdCall;
+       Function GetObject (Const mkObjectName: IMoniker; Out punkObject:IUnknown):HResult; StdCall;
+       Function NoteChangeTime(dwRegister :DWord;Const FileTime: TFileTime):HResult;StdCall;
+       Function GetTimeOfLastChange(Const mkObjectName:IMoniker;Out filetime:TFileTime):HResult; StdCall;
+       Function EnumRunning (Out enumMoniker: IEnumMoniker):HResult; StdCall;
+       End;
+
+    IPersist = Interface (IUnknown)
+       ['{0000010c-0000-0000-C000-000000000046}']
+       Function GetClassId(clsid:TClsId):HResult; StdCall;
+       End;
+
+    IPersistStream = Interface(IPersist)
+       ['{00000109-0000-0000-C000-000000000046}']
+       Function IsDirty:HResult; StdCall;
+       Function Load(Const stm: IStream):HResult; StdCall;
+       Function Save(Const stm: IStream;fClearDirty:Bool):HResult;StdCall;
+       Function GetSizeMax(Out cbSize:ULarge_Integer):HResult; StdCall;
+       End;
+
+    PIMoniker = ^IMoniker;
+    IMoniker = Interface (IPersistStream)
+      ['{0000000f-0000-0000-C000-000000000046}']
+      Function BindToObject (const pbc:IBindCtx;const mktoleft:IMoniker; RiidResult:TIID;Out vresult):HResult;StdCall;
+//    Function RemoteBindToObject (const pbc:IBindCtx;const mktoleft:IMoniker;RiidResult:TIID;Out vresult):HResult;StdCall;
+      Function BindToStorage(Const Pbc:IBindCtx;Const mktoLeft:IMoniker; Riid:TIID;Out vobj):HResult; StdCall;
+//    Function RemoteBindToStorage(Const Pbc:IBindCtx;Const mktoLeft:IMoniker; Riid:TIID;Out vobj):HResult; StdCall;
+      Function Reduce (const pbc:IBindCtx; dwReduceHowFar:DWord; mktoLeft: PIMoniker; Out mkReduced:IMoniker):HResult; StdCall;
+      Function ComposeWith(Const MkRight:IMoniker;fOnlyIfNotGeneric:BOOL; OUT mkComposite:IMoniker):HResult; StdCall;
+      Function Enum(fForward:Bool;Out enumMoniker:IEnumMoniker):HResult;StdCall;
+      Function IsEqual(Const mkOtherMoniker:IMoniker):HResult;StdCall;
+      Function Hash   (Out dwHash:Dword):HResult;StdCall;
+      Function IsRunning(Const bc:IBindCtx;Const MkToLeft:IMoniker;Const mknewlyRunning:IMoniker):HResult;StdCall;
+      Function GetTimeOfLastChange(Const bc:IBindCtx;Const mkToLeft:IMoniker; out ft : FileTime):HResult; StdCall;
+      Function Inverse(out mk : IMoniker):HResult; StdCall;
+      Function CommonPrefixWith (Const mkOther:IMoniker):HResult; StdCall;
+      Function RelativePathTo(Const mkother:IMoniker; Out mkRelPath : IMoniker):HResult;StdCall;
+      Function GetDisplayName(Const bc:IMoniker;const mktoleft:IMoniker;Out szDisplayName: pOleStr):HResult; StdCall;
+      Function ParseDisplayName(Const bc:IBindCtx;Const mkToLeft:IMoniker;szDisplayName:POleStr;out cheaten:ULong;out mkOut:IMoniker):HResult; StdCall;
+      Function IsSystemMonitor(Out dwMkSys:DWord):HResult;StdCall;
+      End;
+
+    IROTData = Interface (IUnknown)
+       ['{f29f6bc0-5021-11ce-aa15-00006901293f}']
+       Function GetComparisonData(out data; cbMax:ULong;out cbData:ULong):HResult;StdCall;
+       End;
+
+
+    IEnumString = Interface (IUnknown)
+       ['{00000101-0000-0000-C000-000000000046}']
+       Function Next(Celt:ULong;Out xcelt;Out Celtfetched:ULong):HResult; StdCall;
+//     Function RemoteNext(Celt:ULong; Out celt;Out Celtfetched:ULong):HResult; StdCall;
+       Function Skip (Celt:ULong):Hresult;StdCall;
+       Function Reset:HResult;StdCall;
+       Function Clone(Out penum:IEnumString):HResult;StdCall;
+       End;
+
+    ISequentialStream = interface(IUnknown)
+       ['{0c733a30-2a1c-11ce-ade5-00aa0044773d}']
+       function Read(pv : Pointer;cb : DWord;pcbRead : PDWord) : HRESULT;stdcall;
+       function Write(pv : Pointer;cb : DWord;pcbWritten : PDWord): HRESULT;stdcall;
+       end;
+
+    IStream = interface(ISequentialStream)
+       ['{0000000C-0000-0000-C000-000000000046}']
+       function Seek(dlibMove : Large_integer; dwOrigin: Longint;
+            out libNewPosition : Large_Integer): HResult; stdcall;
+       function SetSize(libNewSize : Large_Integer) : HRESULT;stdcall;
+       function CopyTo(stm: IStream;cb : Large_Integer;out cbRead : Large_Integer;
+            out cbWritten: Large_Integer) : HRESULT;stdcall;
+       function Commit(grfCommitFlags : Longint) : HRESULT; stdcall;
+       function Revert : HRESULT; stdcall;
+       function LockRegion(libOffset : Large_Integer;cb : Large_Integer;
+            dwLockType: Longint) : HRESULT;stdcall;
+       function UnlockRegion(libOffset: Large_Integer;cb: Large_Integer;
+            dwLockType: Longint) : HRESULT;stdcall;
+       Function Stat(out statstg : TStatStg; grfStatFlag: Longint): HRESULT;stdcall;
+       function Clone(out stm : IStream) : HRESULT; stdcall;
+       end;
+
+    IEnumSTATSTG = Interface (IUnknown)
+       ['{0000000d-0000-0000-C000-000000000046}']
+        Function Next (Celt:ULong;Out xcelt;pceltfetched : PUlong):HResult; StdCall;
+//     Function RemoteNext(Celt:Ulong; Out Celt;pceltfetched : PUlong);
+       Function Skip(Celt:ULong):HResult; StdCall;
+       Function Reset:HResult; StdCall;
+       Function Clone(Out penum:IEnumStatSTG):HResult; StdCall;
+       End;
+
+
+
+
+    IStorage = Interface (IUnknown)
+       ['{0000000b-0000-0000-C000-000000000046}']
+       Function CreateStream(pwcsname:POleStr;GrfMode,Reserved1,Reserved2 : DWord; Out stm : IStream):HResult; StdCall;
+       Function OpenStream(pwcsname:POleStr;Reserved1:Pointer;GrfMode,Reserved2 : DWord; Out stm : IStream):HResult; StdCall;
+//       Function RemouteOpenStream(pwcsname:POleStr;cbReserved1:ULong;reserved1:pbyte;GrfMode,Reserved2 : DWord; Out stm : IStream):HResult; StdCall;
+       Function CreateStorage(pwcsname:POleStr;GrfMode,Reserved1,Reserved2 : DWord; Out stm : IStorage):HResult; StdCall;
+       Function OpenStorage(pwcsname:POleStr;Const stgPriority:IStorage;grfmode : DWord;Const SNBExclude :SNB;reserved:DWord;Out stm : IStorage):HResult; StdCall;
+       Function CopyTo(ciidExclude:DWord; rgiidexclude:piid; const snbexclude:SNB;const pstg : IStorage):HResult;StdCall;
+       Function MoveElementTo(wcsName:POleStr;Const pstgDest : IStorage;
+                                wcvsNewName:POleStr; GrfFlags:DWord):Hresult; StdCall;
+       Function Commit(grfCommitFlags:Dword):Hresult; StdCall;
+       Function Revert:HResult; StdCall;
+       Function EnumElements(Reserved1 :Dword;Reserved2:Pointer;Reserved3:DWord;Out penum:IEnumStatStg):HResult;StdCall;
+       Function RemoteEnumElements(Reserved1 :Dword;cbReserved2:ULong;Reserved2:pbyte;reserved3:DWord;Out penum:IEnumStatStg):HResult;StdCall;
+       Function DestroyElement(wcsName: POleStr):HResult;StdCall;
+       Function RenameElement(wcsoldName: POleStr;wcsnewName: POleStr):HResult;StdCall;
+       Function SetElementTimes(wcsName:POleStr; Const pctime,patime,pmtime : FileTime):HResult;StdCall;
+       Function SetClass(Const ClasId: TClsID):HResult;StdCall;
+       Function SetStateBits(grfStateBits:DWord;grfMask:DWord):HResult;StdCall;
+       Function Stat(Out pStatStg:StatStg;grfStatFlag:DWord):HResult;StdCall;
+       End;
+
+    IPersistFile = Interface (IPersist)
+       ['{0000010b-0000-0000-C000-000000000046}']
+       Function IsDirty:HResult;StdCall;
+       Function Load(FileName:POleStr;dwMode:DWord):HResult;StdCall;
+       Function Save(FileName:POleStr;fremember:Bool):HResult;StdCall;
+       Function SaveCompleted(FileName:POleStr):HResult;StdCall;
+       Function GetCurFIle(Out FileName:POleStr):HResult;StdCall;
+       End;
+
+
+    IPersistStorage = Interface (IPersist)
+       ['{0000010a-0000-0000-C000-000000000046}']
+       Function IsDirty:HResult;StdCall;
+       Function InitNew(const pstg:IStorage):HResult;StdCall;
+       Function Load(const pstg:IStorage):HResult;StdCall;
+       Function Save(const pstg:IStorage;FSameAsLoad:Boolean):HResult;StdCall;
+       Function SaveCompleted(const pstg:IStorage):HResult;StdCall;
+       Function HandsOffStorage:HResult;StdCall;
+       End;
+
+    ILockBytes = Interface (IUnknown)
+       ['{0000000a-0000-0000-C000-000000000046}']
+       Function ReadAt(ulOffset:ULarge_Integer;pv:Pointer;cb:Ulong; Out pcbRead:ULong):HResult; StdCall;
+//       Function RemoteReadAt(ulOffset:ULarge_Integer;pv:Pointer;cb:Ulong; Out pcbRead:ULong):HResult; StdCall;
+       Function WriteAt(ulOffset:ULarge_Integer;pv:Pointer;cb:Ulong; Out pcbWritten:ULong):HResult; StdCall;
+//       Function RemoteWriteAt(ulOffset:ULarge_Integer;pv:Pointer;cb:Ulong; Out pcbWritten:ULong):HResult; StdCall;
+       Function Flush:HResult;StdCall;
+       Function SetSize(cb:ULarge_Integer):HResult;StdCall;
+       Function LockRegion(LibOffSet:ULarge_Integer;cb:ULarge_Integer;dwLockType:DWord):HResult;StdCall;
+       Function UnlockRegion(LibOffSet:ULarge_Integer;cb:ULarge_Integer;dwLockType:DWord):HResult;StdCall;
+       Function Stat(Out pstatstg:STATSTG;grfstatFlag:DWord):HResult;StdCall;
+       End;
+
+
+   IEnumFORMATETC = Interface (IUnknown)
+     ['{00000103-0000-0000-C000-000000000046}']
+     Function Next(Celt:ULong;Out Rgelt:FormatEtc;Out pceltFetched:ULong):HResult; StdCall;
+//     Function RemoteNext(Celt:ULong;Out Rgelt:FormatEtc;Out pceltFetched:ULong):HResult; StdCall;
+     Function Skip(Celt:ULong):HResult;StdCall;
+     Function Reset:HResult;StdCall;
+     Function Clone(out penum:IEnumFORMATETC):HResult;StdCall;
+     End;
+
+    IEnumSTATDATA = Interface (IUnknown)
+        ['{00000105-0000-0000-C000-000000000046}']
+        Function Next(Celt:ULong;Out Rgelt:statdata;Out pceltFetched:ULong):HResult; StdCall;
+//      Function RemoteNext(Celt:ULong;Out Rgelt:statdata;Out pceltFetched:ULong):HResult; StdCall;
+        Function Skip(Celt:ULong):HResult;StdCall;
+        Function Reset:HResult;StdCall;
+        Function Clone(out penum:IEnumstatdata):HResult;StdCall;
+        End;
+
+
+
+    IRootStorage = Interface (IUnknown)
+        ['{00000012-0000-0000-C000-000000000046}']
+        Function SwitchToFile(pszfile:PoleStr):HResult;StdCall;
+        End;
+
+
+
+    IAdviseSink = Interface (IUnknown)
+        ['{0000010f-0000-0000-C000-000000000046}']
+    {$ifdef midl500} ['{00000150-0000-0000-C000-000000000046}'] {$endif}
+        Procedure OnDataChange (Const pformatetc : Formatetc;const pstgmed : STGMEDIUM); StdCall;
+        Procedure OnViewChange (dwAspect : DWord; lindex : Long); StdCall;
+        Procedure OnRename (Const pmk : IMoniker); StdCall;
+        Procedure OnSave; StdCall;
+        Procedure OnClose; StdCall;
+        End;
+
+    IAdviseSink2 = Interface (IAdviseSink)
+       ['{00000125-0000-0000-C000-000000000046}']
+        Procedure OnLinkSrcChange(Const Pmk: IMoniker); StdCall;
+        End;
+
+
+    IDataObject = Interface (IUnknown)
+       ['{0000010e-0000-0000-C000-000000000046}']
+       Function GetData(Const formatetcIn : FORMATETC;Out medium : STGMEDIUM):HRESULT; STDCALL;
+       Function GetDataHere(CONST pformatetc : FormatETC; Out medium : STGMEDIUM):HRESULT; STDCALL;
+       Function QueryGetData(const pformatetc : FORMATETC):HRESULT; STDCALL;
+       Function GetCanonicalFormatTEtc(const pformatetcIn : FORMATETC;Out pformatetcOut : FORMATETC):HResult; STDCALl;
+       Function SetData (Const pformatetc : FORMATETC;const medium:STGMEDIUM;FRelease : BOOL):HRESULT; StdCall;
+       Function EnumFormatEtc(dwDirection : DWord; OUT enumformatetcpara : IENUMFORMATETC):HRESULT; StdCall;
+       Function DAdvise(const formatetc : FORMATETC;advf :DWORD; CONST AdvSink : IAdviseSink;OUT dwConnection:DWORD):HRESULT;StdCall;
+       Function DUnadvise(dwconnection :DWord) :HRESULT;StdCall;
+       Function EnumDAvise(Out enumAdvise : IEnumStatData):HResult;StdCall;
+       End;
+
+
+    IDataAdviseHolder = Interface (IUnknown)
+       ['{00000110-0000-0000-C000-000000000046}']
+       Function Advise    (CONST pdataObject : IDataObject;CONST fetc:FORMATETC;advf : DWORD;Const pAdvise:IAdviseSink;Out DwConnection:DWord):HResult; StdCall;
+       Function Unadvise  (dwConnection:Dword):HResult; StdCall;
+       Function EnumAdvise(out penumAdvise : IEnumStatData):HResult;StdCall;
+       Function SendOnDataChange(const pDataObject :IDataObject;DwReserved,advf : DWord):HResult; StdCall;
+       End;
+
+
+
+
+    IMessageFilter = Interface (IUnknown)
+       ['{00000016-0000-0000-C000-000000000046}']
+       Function HandleInComingCall(dwCallType :DWord;htaskCaller : HTASK; dwTickCount: DWORD;CONST sinterfaceinfo:InterfaceInfo):DWord; StdCall;
+       Function RetryRejectedCall (htaskCallee:HTASK; dwTickCount : DWord; dwRejectType : Dword):DWord; StdCall;
+       Function MessagePending    (htaskCallee:HTASK; dwTickCount : DWord; dwPendingType : Dword):DWord; StdCall;
+       End;
+
+//****************************************************************************
+//*  Object Remoting Interfaces
+//****************************************************************************
+
+
+
+    IRpcChannelBuffer = Interface (IUnknown)
+       ['{D5F56B60-593B-101A-B569-08002B2DBF7A}']
+       Function GetBuffer (Const pMesasge : RPCOLEMESSAGE;Const riid :TIId):HResult; StdCall;
+       Function SendReceive(Var pMessage : RPCOLEMESSAGE; Out PStatus : ULong):HResult; StdCall;
+       Function FreeBuffer(Const pMessage : RPCOLEMESSAGE):HResult; StdCall;
+       Function GetDestCTX(Out dwDestContext : DWord;Out pvDestContext : Pointer):HResult; StdCall;
+       Function IsConnected:HResult; StdCall;
+       End;
+
+    IRpcChannelBuffer2 = Interface (IRpcChannelBuffer)
+       ['{594f31d0-7f19-11d0-b194-00a0c90dc8bf}']
+       Function GetProtocolVersion(Var dwVersion : DWord):HResult; StdCall;
+       End;
+
+
+    IAsyncRpcChannelBuffer = Interface (IRpcChannelBuffer2)
+       ['{a5029fb6-3c34-11d1-9c99-00c04fb998aa}']
+       Function Send(Var Msg: RPCOLEMESSAGE;Const pSync : ISynchronize;Out PulStatus : ULong):HResult; StdCall;
+       Function Receive(Var Msg: RPCOLEMESSAGE;Out PulStatus : ULong):HResult; StdCall;
+       Function GetDestCTXEx(Out MSG : RPCOLEMESSAGE;Out vDestContext : DWord;Out pvDestContext : Pointer ):HResult;StdCall;
+       End;
+
+    IRpcChannelBuffer3 = Interface (IRpcChannelBuffer2)
+       ['{25B15600-0115-11d0-BF0D-00AA00B8DFD2}']
+       Function Send(Var msg : RPCOLEMESSAGE;Out ulStatus : ULONG):HResult; StdCall;
+       Function Receive(Var msg : RPCOLEMESSAGE;ulSize : ULong;Out ulStatus : ULONG):HResult; StdCall;
+       Function Cancel (Const msg : RPCOLEMESSAGE):HResult; StdCall;
+       Function GetCallContext(Const msg : RPCOLEMESSAGE; Const riid : TIID; Out pInterface : Pointer):HResult; StdCall;
+       Function GetDestCTXEx(Const Msg : RPCOLEMESSAGE;Out vDestContext : DWord;Out pvDestContext : Pointer ):HResult;StdCall;
+       Function GetState(Const Msg : RPCOLEMESSAGE;Out State: DWord):HResult;StdCall;
+       Function RegisterAsync(Const Msg : RPCOLEMESSAGE;Const asyncmgr : IAsyncManager):HResult;StdCall;
+       End;
+
+    IRpcSyntaxNegotiate = Interface (IUnknown)
+       ['{58a08519-24c8-4935-b482-3fd823333a4f}']
+       Function NegotiateSyntax ( Var msg :  RPCOLEMESSAGE):HResult; StdCall;
+       End;
+
+
+
+
+    IRpcProxyBuffer = Interface (IUnknown)
+       ['{D5F56A34-593B-101A-B569-08002B2DBF7A}']
+       Function Connect(Const rpcchannelbuffer : IRpcChannelBuffer):HResult; StdCall;
+       Procedure Disconnect;
+       End;
+
+    IRpcStubBuffer = Interface (IUnknown)
+       ['{D5F56AFC-593B-101A-B569-08002B2DBF7A}']
+       Function COnnect ( Const UnkServer : IUnknown):HResult; StdCall;
+       Procedure Disconnect; StdCall;
+       Function Invoke(Const rpcmsg : RPCOLEMESSAGE;Const RpcChanBuf : IRpcChannelBuffer):HResult; StdCall;
+       Function IsIIDSupported (Const riid : TIID):Pointer {IRpcStubBuffer}; StdCall;
+       Function CountRefs :ULong; StdCall;
+       Function DebugServerQueryInterface(CONST pv : Pointer):HResult; StdCall;
+       Procedure DebugServerRelease (pv : Pointer); StdCall;
+       End;
+
+    IPSFactoryBuffer = Interface (IUnknown)
+       ['{D5F569D0-593B-101A-B569-08002B2DBF7A}']
+       Function CreateProxy(Const UnkOuter : IUnknown;const riid : TIID; Out proxy: IRpcProxyBuffer; Out Pv :Pointer):HResult; StdCall;
+       Function CreateStub (Const riid : TIID; Const UnkServer : IUnknown; Out pstub : IRpcStubBuffer):HResult; StdCall;
+       End;
+
+{$ifdef NT4_greater_Or_DCOM}
+// This interface is only valid on Windows NT 4.0
+
+// This structure contains additional data for hooks.  As a backward
+// compatability hack, the entire structure is passed in place of the
+// RIID parameter on all hook methods.  Thus the IID must be the first
+// parameter.  As a forward compatability hack the second field is the
+// current size of the structure.
+
+    SChannelHookCallInfo= Record;
+                            IID               : iid;
+                            cbSize            : Dword;
+                            uCausality        : GUID;
+                            dwServerPid,
+                            iMethod           : DWord;
+                            pObject           : Pointer;
+                            End;
+
+
+
+  IChannelHook = Interface (IUnknown)
+     ['{1008c4a0-7613-11cf-9af1-0020af6e72f4}']
+     Procedure ClientGetSize(Const uExtent : TGuid; CONST riid : TIID; Out datasize :ULong); StdCall;
+     Procedure ClientFillBuffer(Const uExtent : TGuid; CONST riid : TIID; Var datasize :ULong;Buffer :Pointer); StdCall;
+     Procedure ClientNotify(Const uExtent : TGuid; CONST riid : TIID; datasize :ULong;Buffer :Pointer;hrfault:HResult); StdCall;
+     Procedure ServerNotify(Const uExtent : TGuid; CONST riid : TIID; datasize :ULong;Buffer :Pointer;DataRep:DWord); StdCall;
+     Procedure ServerGetSize(Const uExtent : TGuid; CONST riid : TIID;hrFault :HResult; Out datasize :ULong); StdCall;
+     Procedure ServerFillBuffer(Const uExtent : TGuid; CONST riid : TIID; Var datasize :ULong;Buffer :Pointer;HrFault:HResult); StdCall;
+     End;
+{$Endif}
+
+
+// Well-known Property Set Format IDs
+//FMTID_SummaryInformation              = {CONST} FMTID;
+//FMTID_DocSummaryInformation           = {CONST} FMTID;
+//FMTID_UserDefinedProperties           = {CONST} FMTID;
+//FMTID_DiscardableInformation          = {CONST} FMTID;
+//FMTID_ImageSummaryInformation         = {CONST} FMTID;
+//FMTID_AudioSummaryInformation         = {CONST} FMTID;
+//FMTID_VideoSummaryInformation         = {CONST} FMTID;
+//FMTID_MediaFileSummaryInformation     = {CONST} FMTID;
+
+
+//****************************************************************************
+// *  Connection Point Interfaces
+// ****************************************************************************/
+
+//#ifdef __INCLUDE_CPIFS
+     IConnectionPointContainer = Interface;
+//interface IConnectionPoint;
+//interface IEnumConnections;
+     IEnumConnectionPoints = Interface;
+     IEnumConnections      = Interface;
+
+
+    IConnectionPoint = Interface (IUnknown)
+       ['{B196B286-BAB4-101A-B69C-00AA00341D07}']
+       Function GetConnectionInterface(out piid : TIID):HResult;StdCall;
+       Function GetConnectionPointContainer(CPC : IConnectionPointContainer):HResult;StdCall;
+       Function Advise(unkSink : IUnknown;Out dwCookie : DWord):HResult;StdCall;
+       Function UnAdvise(dwCookie : DWord):HResult;StdCall;
+       Function EnumConnection(out pEnum : IEnumConnections):HResult;stdCall;
+      End;
+
+    IConnectionPointContainer = Interface (IUnknown)
+       ['{B196B284-BAB4-101A-B69C-00AA00341D07}']
+       Function EnumConnectionPoints(out pEnum : IEnumConnectionPoints):HResult;StdCall;
+       Function FindConnectionPoint(Const RIID : TIID;Out ppcp : IConnectionPoint):HResult;StdCall;
+       End;
+
+    tagCONNECTDATA = Record
+                      unk        : Pointer; {IUnknown}
+                      dwCookie   : DWord;
+                      End;
+    ConnectData    = tagCONNECTDATA;
+
+    IEnumConnections = Interface (IUnknown)
+       ['{B196B287-BAB4-101A-B69C-00AA00341D07}']
+       Function Next(cConnections : ULong; Out rgcd : ConnectData;Out lpcFetched : ULong):HResult;StdCall;
+       Function Skip(cConnections : ULong):HResult;StdCall;
+       Function Reset:HResult;StdCall;
+       Function Clone(Out pEnum : IEnumConnections):HResult; StdCall;
+       End;
+
+
+    IEnumConnectionPoints = Interface (IUnknown)
+       ['{B196B285-BAB4-101A-B69C-00AA00341D07}']
+       Function Next(cConnections : ULong; Out rgpcm : IConnectionPoint;Out lpcFetched : ULong):HResult;StdCall;
+       Function Skip(cConnections : ULong):HResult;StdCall;
+       Function Reset:HResult;StdCall;
+       Function Clone(Out pEnum : IEnumConnectionPoints):HResult;StdCall;
+       End;
+
+
+
+    tagSOLE_AUTHENTICATION_SERVICE = Record
+                                       dwAuthnSvc,
+                                       dwAuthzSvc     : DWord;
+                                       pPrincipalName : POleStr;
+                                       hr             : HResult;
+                                       End;
+    SOLE_AUTHENTICATION_SERVICE   = tagSOLE_AUTHENTICATION_SERVICE;
+    PSOLE_AUTHENTICATION_SERVICE  = ^SOLE_AUTHENTICATION_SERVICE;
+
+    tagSOLE_AUTHENTICATION_INFO   = Record
+                                       dwAuthnSvc,
+                                       dwAuthzSvc     : DWord;
+                                       AuthInfo       : Pointer;
+                                       End;
+    SOLE_AUTHENTICATION_INFO      = tagSOLE_AUTHENTICATION_INFO;
+    PSOLE_AUTHENTICATION_INFO     = ^SOLE_AUTHENTICATION_INFO;
+
+    tagSOLE_AUTHENTICATION_LIST   = Record
+                                       cAuthInfo      : DWord;
+                                       AuthInfo       : PSOLE_AUTHENTICATION_INFO;
+                                       End;
+    SOLE_AUTHENTICATION_LIST      = tagSOLE_AUTHENTICATION_LIST;
+    PSOLE_AUTHENTICATION_LIST     = ^SOLE_AUTHENTICATION_LIST;
+
+{$ifdef WINNT_DCOM}
+
+    IClientSecurity = Interface (IUnknown)
+        ['{0000013D-0000-0000-C000-000000000046}']
+        Function QueryBlanket (Proxy : IUnknown;Out AuthnSvc,AuthzSvc : Dword;Out ServerPrincName:pOleStr;Out AuthnLevel,ImpLevel:Dword; Out AuthInfo : Pointer; Out Capabilities : Dword):HResult;StdCall;
+        Function SetBlanket   (Proxy : IUnknown;AuthnSvc,AuthzSvc : Dword;ServerPrincName:pOleStr;AuthnLevel,ImpLevel:Dword;AuthInfo : Pointer;Capabilities : Dword):HResult;StdCall;
+        Function CopyProxy    (Proxy : IUnknown;Out pcopy:IUnknown):HResult;StdCall;
+        End;
+
+    IServerSecurity = Interface (IUnknown)
+       ['{0000013E-0000-0000-C000-000000000046}']
+       Function QueryBlanket ( out authnSvc,AuthzSvc : DWord; Out pServerPrincName : pOleStr; Out AuthnLevel, ImpLevel; :DWord; out Privs : Pointer; Var Capabilities :DWord):HResult;StdCall;
+       Function ImpersonateClient:HResult;StdCall;
+       Function RevertToSelf:HResult;StdCall;
+       Function IsImpersonating:Bool;StdCall;
+    End;
+
+    IClassActivator = Interface (IUnknown)
+       ['{00000140-0000-0000-C000-000000000046}']
+       Function GetClassObject(Const rclsif : TClsID; ClassContext : DWord; locale : LCID; Const ridd : TIID; Out pv : Pointer):HResult;StdCall;
+       End;
+
+
+    IRpcOptions = Interface (IUnknown)
+       ['{00000144-0000-0000-C000-000000000046}']
+       Function xSet (prx : IUnknown;dwProperty : DWord; dwValue:ULONG_PTR):HResult; StdCall;
+       Function Query (prx : IUnknown;dwProperty:Dword; dwValue:ULONG_PTR):HResult; StdCall;
+       End;
+
+{$endif} {DCOM}
+
+    IFillLockBytes = Interface (IUnknown)
+       ['{99caf010-415e-11cf-8814-00aa00b569f5}']
+       Function FillAppend(const pv : Pointer;cb:ULong; Out PcbWritten : ULong):HResult;StdCall;
+       Function FillAt(ulOffset : ULarge_INTEGER;Const pv : Pointer;cb :ULong; Out pcbWritten:ULong):HResult;StdCall;
+       Function SetFillSize ( ulSize :ULarge_Integer):HResult;StdCall;
+       Function Terminate (bCanceled :Bool):HResult;StdCall;
+    End;
+
+    IProgressNotify = Interface (IUnknown)
+       ['{a9d758a0-4617-11cf-95fc-00aa00680db4}']
+       Function OnProgress (ProgressCurrent,ProgressMaximum :Dword; FAccurate,Fowner : Bool):HResult;StdCall;
+       End;
+
+    ILayoutStorage = Interface (IUnknown)
+       ['{0e6d4d90-6738-11cf-9608-00aa00680db4}']
+       {The methods in this interface all had "__stdcall" as modifier, while the other classes don't. ?!?!?}
+       Function LayoutScript ( xStorageLayout : StorageLayout;nEntries,glfInterleaveFlag : Dword) :HResult; StdCall;
+       Function BeginMonitor:HResult;StdCall;
+       Function EndMonitor:HResult;StdCall;
+       Function ReLayourDocFile(pwcsNewDFName :pOleStr):HResult;StdCall;
+       Function ReLayoutDocfileOnILockBytes(LockBytes : ILockBytes):Hresult;StdCall;
+       End;
+
+    IBlockingLock = Interface (IUnknown)
+       ['{30f3d47a-6447-11d1-8e3c-00c04fb9386d}']
+       Function Lock (dwTimeOut : DWord) : HResult;Stdcall;
+       Function Unlock : HResult;Stdcall;
+       End;
+
+    ITimeAndNoticeControl = Interface (IUnknown)
+       ['{bc0bf6ae-8878-11d1-83e9-00c04fc2c6d4}']
+       Function SuppressChanges(res1,res2 : Dword):HResult;StdCall;
+       End;
+
+    IOplockStorage = Interface (IUnknown)
+       ['{8d19c834-8879-11d1-83e9-00c04fc2c6d4}']
+       Function CreateStorageEx(wcsName : LPCWSTR;grfMode,StgFmt,GrfAtrrs :Dword;Const riid :Tiid; Out ppstgOpen : Pointer):HResult;StdCall;
+       Function OpenStorageEx(wcsName : LPCWSTR;grfMode,StgFmt,GrfAtrrs :Dword;Const riid :Tiid; Out ppstgOpen : Pointer):HResult;StdCall;
+       End;
+
+    ISurrogate = Interface (IUnknown)
+       ['{00000022-0000-0000-C000-000000000046}']
+       Function LoadDllServer (Const ClsId : TClsId):HResult;StdCall;
+       Function FreeSurrogate:HResult;StdCall;
+       End;
+
+    IGlobalInterfaceTable = Interface (IUnknown)
+       ['{00000146-0000-0000-C000-000000000046}']
+       Function RegisterInterfaceInGlobal(unk :IUnknown;Const riid : TIID; Out dwcookie :DWord):HResult;StdCall;
+       Function RevokeInterfaceFromGlobal (dwCookie :DWord):HResult;StdCall;
+       Function GetInterfaceFromGlobal (dwCookie :DWord;Const riid : TIID;out pv : Pointer):HResult;StdCall;
+       End;
+
+    IDirectWriterLock = Interface (IUnknown)
+       ['{0e6d4d92-6738-11cf-9608-00aa00680db4}']
+       Function WaitForWriteAccess (dwTimeOut : DWORD):HResult;StdCall;
+       Function ReleaseWriteAccess:HResult;StdCall;
+       Function HaveWriteAccess:HResult;StdCall;
+       End;
+
+    ISynchronize = Interface (IUnknown)
+       ['{00000030-0000-0000-C000-000000000046}']
+       Function Wait (dwFlags : DWord; dwMilliSeconds : DWord):HResult;StdCall;
+       Function Signal : HResult;StdCall;
+       Function Reset : HResult;StdCall;
+       End;
+
+    ISynchronizeHandle = Interface (IUnknown)
+       ['{00000031-0000-0000-C000-000000000046}']
+       Function GetHandle(Out ph : Handle):HResult;StdCall;
+       End;
+
+    ISynchronizeEvent = Interface (ISynchronizeHandle)
+       ['{00000032-0000-0000-C000-000000000046}']
+       Function SetEventHandle (Const ph : Handle):HResult; StdCall;
+       End;
+
+    ISynchronizeContainer = Interface (IUnknown)
+       ['{00000033-0000-0000-C000-000000000046}']
+       Function AddSynchronize(pSync : ISynchronize):HResult; StdCall;
+       Function WaitMultiple(dwFlags : Dword; dwTimeOut : Dword; Out pSync : ISynchronize):HResult;StdCall;
+       End;
+
+    ISynchronizeMutex = Interface (ISynchronize)
+       ['{00000025-0000-0000-C000-000000000046}']
+       Function ReleaseMutex:HResult; StdCall;
+       End;
+
+    ICancelMethodCalls = Interface (IUnknown)
+       ['{00000029-0000-0000-C000-000000000046}']
+       Function Cancel(ulSeconds : ULong):HResult; StdCall;
+       Function TestCancel:HResult;StdCall;
+       End;
+
+    IAsyncManager = Interface (IUnknown)
+       ['{0000002A-0000-0000-C000-000000000046}']
+       Function CompleteCall (xResult : HResult):HResult;StdCall;
+       Function GetCallContext(Const iid :TIID; Out pInterface : Pointer):HResult;StdCall;
+       Function GetState(Out pulStateFlags : ULong):HResult;StdCall;
+       End;
+
+    ICallFactory = Interface (IUnknown)
+       ['{1c733a30-2a1c-11ce-ade5-00aa0044773d}']
+       Function CreateCall(Const riid:TIID;CtrUnk : IUnknown;Const Riid2:TIID;Out Unknown : IUnknown):HResult;StdCall;
+       End;
+
+    IRpcHelper = Interface (IUnknown)
+       ['{00000149-0000-0000-C000-000000000046}']
+       Function GetDCOMProtocolVersion(Out ComVersion :DWord):HResult;StdCall;
+       Function GettIIDFromOBJREF(ObjRef : Pointer;Out xIID : piid):HResult;StdCall;
+       End;
+
+    IReleaseMarshalBuffers = Interface (IUnknown)
+       ['{eb0cb9e8-7996-11d2-872e-0000f8080859}']
+       Function ReleaseMarshalBuffer(const pnsg : RPCOLEMESSAGE;dwFlags:DWord;Const pchn : IUnknown):HResult; StdCall;
+       End;
+
+    IWaitMultiple = Interface (IUnknown)
+       ['{0000002B-0000-0000-C000-000000000046}']
+       Function WaitMulitple(TImeout :DWord;out psync : ISynchronize):HResult; StdCall;
+       Function AddSynchronize (const psync : ISynchronize):HResult;StdCall;
+       End;
+
+    IUrlMon = Interface (IUnknown)
+       ['{00000026-0000-0000-C000-000000000046}']
+       Function AsyncGetClassBits(CONST rclsif : TClsID; psztype,pzext : lpcwstr; dwfileversionMS,dwFileVersionLS : DWord; pzcodebase : LPCWSTR; Const pbc : IBindCTX; dwclasscontext : DWord; const Riid:TIID; flags :DWORD):HResult; StdCall;
+       End;
+
+    IForegroundTransfer = Interface (IUnknown)
+       ['{00000145-0000-0000-C000-000000000046}']
+       Function AllowForegroundTransfer(lpvReserved:Pointer):HResult; StdCall;
+       End;
+
+    IAddrTrackingControl = Interface (IUnknown)
+       ['{00000147-0000-0000-C000-000000000046}']
+       Function EnableCOMDynamicAddrTracking:HResult; StdCall;
+       Function DisableCOMDynamicAddrTracking:HResult; StdCall;
+       End;
+
+    IAddrExclusionControl = Interface (IUnknown)
+       ['{00000148-0000-0000-C000-000000000046}']
+       Function GetCurrentAddrExclusionList(Const riid : TIID;out Enumerator : Pointer):HResult;StdCall;
+       Function UpdateAddrExclusionList(Enumerator : IUnknown):HResult;StdCall;
+       End;
+
+//****************************************************************************
+//* Pipe interfaces
+//****************************************************************************/
+
+// Doesn't look translatable. See objidl.idl
+
+//****************************************************************************
+//* Thumbnail generator interface
+//****************************************************************************/
+
+   IThumbnailExtractor = Interface (IUnknown)
+      ['{969dc708-5c76-11d1-8d86-0000f804b057}']
+       Function ExtractThumbnail (pStg : IStorage; uLength,UHeight : ULong; Out uloutputlength,Height :ULong; Out OutputBitmap : HBITMAP): HResult; StdCall;
+       Function OnFileUpdated (pStg : IStorage):HResult;
+       End;
+
+//****************************************************************************
+//* Dummy Interface to force inclusion of HICON and HDC in proxy/stub code....
+//****************************************************************************/
+
+    IDummyHICONIncluder = Interface (IUnknown)
+       ['{947990de-cc28-11d2-a0f7-00805f858fb1}']
+       Function Dummy (h1 : HICON; H2 :HDC):HResult;
+       End;
+
+    IComThreadingInfo = Interface (IUnknown)
+       ['{000001ce-0000-0000-C000-000000000046}']
+       Function GetCurrentApartmentType(out pAptType : DWord {APTTTYPE}):HResult;
+       Function GetCurrentThreadType(Out ThreadType : Dword {THDTTYPE}):HResult;StdCall;
+       Function GetCurrentLogicalThreadID(Out guidlogicalThreadId : TGUID):HResult;StdCall;
+       Function SetCurrentLogicalThreadID(Const guidlogicalThreadId : TGUID):HResult;StdCall;
+       End;
+
+   IProcessInitControl = Interface (IUnknown)
+       ['{72380d55-8d2b-43a3-8513-2b6ef31434e9}']
+       Function ResetInitializerTimeout(dwSecondsRemaining:DWord):HResult; StdCall;
+       End;
+
+
+// Interfaces from OAIDL.IDL
+
+   ITypeInfo = Interface;
+
+   ICreateTypeInfo = Interface (IUnknown)
+     ['{00020405-0000-0000-C000-000000000046}']
+     Function  SetGuid(CONST guid: TGUID):HResult;StdCall;
+     Function  SetTypeFlags(uTypeFlags: UINT):HResult;StdCall;
+     Function  SetDocString(pStrDoc: pOleStr):HResult;StdCall;
+     Function  SetHelpContext(dwHelpContext: DWORD):HResult;StdCall;
+     Function  SetVersion(wMajorVerNum: WORD; wMinorVerNum: WORD):HResult;StdCall;
+     Function  AddRefTypeInfo(CONST pTInfo: ITypeInfo; CONST phRefType: HREFTYPE):HResult;StdCall;
+     Function  AddFuncDesc(index: UINT; CONST pFuncDesc: FUNCDESC):HResult;StdCall;
+     Function  AddImplType(index: UINT; hRefType: HREFTYPE):HResult;StdCall;
+     Function  SetImplTypeFlags(index: UINT; implTypeFlags: WINT):HResult;StdCall;
+     Function  SetAlignment(cbAlignment: WORD):HResult;StdCall;
+     Function  SetSchema(pStrSchema: pOleStr):HResult;StdCall;
+     Function  AddVarDesc(index: UINT; CONST pVarDesc: VARDESC):HResult;StdCall;
+     Function  SetFuncAndParamNames(index: UINT; CONST rgszNames: pOleStr; cNames: UINT):HResult;StdCall;
+     Function  SetVarName(index: UINT; szName: pOleStr):HResult;StdCall;
+     Function  SetTypeDescAlias(CONST pTDescAlias: TYPEDESC):HResult;StdCall;
+     Function  DefineFuncAsDllEntry(index: UINT; szDllName: pOleStr; szProcName: pOleStr):HResult;StdCall;
+     Function  SetFuncDocString(index: UINT; szDocString: pOleStr):HResult;StdCall;
+     Function  SetVarDocString(index: UINT; szDocString: pOleStr):HResult;StdCall;
+     Function  SetFuncHelpContext(index: UINT; dwHelpContext: DWORD):HResult;StdCall;
+     Function  SetVarHelpContext(index: UINT; dwHelpContext: DWORD):HResult;StdCall;
+     Function  SetMops(index: UINT; Const bstrMops: WideString):HResult;StdCall;
+     Function  SetTypeIdldesc(CONST pIdlDesc: IDLDESC):HResult;StdCall;
+     Function  LayOut():HResult;StdCall;
+     End;
+
+   ICreateTypeInfo2 = Interface (ICreateTypeInfo)
+     ['{0002040E-0000-0000-C000-000000000046}']
+     Function  DeleteFuncDesc(index: UINT):HResult;StdCall;
+     Function  DeleteFuncDescByMemId(memid: MEMBERID; invKind: INVOKEKIND):HResult;StdCall;
+     Function  DeleteVarDesc(index: UINT):HResult;StdCall;
+     Function  DeleteVarDescByMemId(memid: MEMBERID):HResult;StdCall;
+     Function  DeleteImplType(index: UINT):HResult;StdCall;
+     Function  SetCustData(CONST guid: TGUID; CONST pVarVal: VARIANT):HResult;StdCall;
+     Function  SetFuncCustData(index: UINT; CONST guid: TGUID; CONST pVarVal: VARIANT):HResult;StdCall;
+     Function  SetParamCustData(indexFunc: UINT; indexParam: UINT; CONST guid: TGUID; CONST pVarVal: VARIANT):HResult;StdCall;
+     Function  SetVarCustData(index: UINT; CONST guid: TGUID; CONST pVarVal: VARIANT):HResult;StdCall;
+     Function  SetImplTypeCustData(index: UINT; CONST guid: TGUID; CONST pVarVal: VARIANT):HResult;StdCall;
+     Function  SetHelpStringContext(dwHelpStringContext: ULONG):HResult;StdCall;
+     Function  SetFuncHelpStringContext(index: UINT; dwHelpStringContext: ULONG):HResult;StdCall;
+     Function  SetVarHelpStringContext(index: UINT; dwHelpStringContext: ULONG):HResult;StdCall;
+     Function  Invalidate():HResult;StdCall;
+     Function  SetName(szName: pOleStr):HResult;StdCall;
+     End;
+
+   ICreateTypeLib = Interface (IUnknown)
+     ['{00020406-0000-0000-C000-000000000046}']
+     Function  CreateTypeInfo(szName: pOleStr; tkind: TYPEKIND; OUT ppCTInfo: ICreateTypeInfo):HResult;StdCall;
+     Function  SetName(szName: pOleStr):HResult;StdCall;
+     Function  SetVersion(wMajorVerNum: WORD; wMinorVerNum: WORD):HResult;StdCall;
+     Function  SetGuid(CONST guid: TGUID):HResult;StdCall;
+     Function  SetDocString(szDoc: pOleStr):HResult;StdCall;
+     Function  SetHelpFileName(szHelpFileName: pOleStr):HResult;StdCall;
+     Function  SetHelpContext(dwHelpContext: DWORD):HResult;StdCall;
+     Function  SetLcid(lcid: LCID):HResult;StdCall;
+     Function  SetLibFlags(uLibFlags: UINT):HResult;StdCall;
+     Function  SaveAllChanges():HResult;StdCall;
+     End;
+
+   ICreateTypeLib2 = Interface (ICreateTypeLib)
+    ['{0002040F-0000-0000-C000-000000000046}']
+     Function  DeleteTypeInfo(szName: pOleStr):HResult;StdCall;
+     Function  SetCustData(CONST guid: TGUID; CONST pVarVal: VARIANT):HResult;StdCall;
+     Function  SetHelpStringContext(dwHelpStringContext: ULONG):HResult;StdCall;
+     Function  SetHelpStringDll(szFileName: pOleStr):HResult;StdCall;
+     End;
+
+   IEnumVARIANT = Interface (IUnknown)
+     ['{00020404-0000-0000-C000-000000000046}']
+     {$ifndef Call_as}
+      Function  Next(celt: ULONG; OUT rgVar: VARIANT; OUT pCeltFetched: ULONG):HResult;StdCall;
+     {$else}
+      Function  Next(celt: ULONG; OUT rgVar: VARIANT; OUT pCeltFetched: ULONG):HResult;StdCall;
+     {$endif}
+     Function  Skip(celt: ULONG):HResult;StdCall;
+     Function  Reset():HResult;StdCall;
+     Function  Clone(OUT ppEnum: IEnumVARIANT):HResult;StdCall;
+     End;
+
+   ITypeComp = Interface (IUnknown)
+     ['{00020403-0000-0000-C000-000000000046}']
+     {$ifndef Call_as}
+      Function  Bind(szName: pOleStr; lHashVal: ULONG; wFlags: WORD; OUT ppTInfo: ITypeInfo; OUT pDescKind: DESCKIND; OUT pBindPtr: BINDPTR):HResult;StdCall;
+      Function  BindType(szName: pOleStr; lHashVal: ULONG; OUT ppTInfo: ITypeInfo; OUT ppTComp: ITypeComp):HResult;StdCall;
+     {$else}
+      Function  Bind(szName: pOleStr; lHashVal: ULONG; wFlags: WORD; OUT ppTInfo: ITypeInfo; OUT pDescKind: DESCKIND; OUT ppFuncDesc: LPFUNCDESC; OUT ppVarDesc: LPVARDESC; O
+      Function  BindType(szName: pOleStr; lHashVal: ULONG; OUT ppTInfo: ITypeInfo):HResult;StdCall;
+     {$endif}
+     End;
+
+   ITypeInfo = Interface (IUnknown)
+     ['{00020401-0000-0000-C000-000000000046}']
+     {$ifndef Call_as}
+      Function  GetTypeAttr(OUT ppTypeAttr: lpTYPEATTR):HResult;StdCall;
+     {$else}
+      Function  GetTypeAttr(OUT ppTypeAttr: LPTYPEATTR; OUT pDummy: CLEANLOCALSTORAGE):HResult;StdCall;
+     {$endif}
+      Function  GetTypeComp(OUT ppTComp: ITypeComp):HResult;StdCall;
+     {$ifndef Call_as}
+      Function  GetFuncDesc(index: UINT; OUT ppFuncDesc: lpFUNCDESC):HResult;StdCall;
+      Function  GetVarDesc(index: UINT; OUT ppVarDesc: lpVARDESC):HResult;StdCall;
+      Function  GetNames(memid: MEMBERID; OUT rgBstrNames: WideString; cMaxNames: UINT; OUT pcNames: UINT):HResult;StdCall;
+     {$else}
+      Function  GetFuncDesc(index: UINT; OUT ppFuncDesc: LPFUNCDESC; OUT pDummy: CLEANLOCALSTORAGE):HResult;StdCall;
+      Function  GetVarDesc(index: UINT; OUT ppVarDesc: LPVARDESC; OUT pDummy: CLEANLOCALSTORAGE):HResult;StdCall;
+      Function  GetNames(memid: MEMBERID; OUT rgBstrNames: WideString; cMaxNames: UINT; OUT pcNames: UINT):HResult;StdCall;
+     {$endif}
+     Function  GetRefTypeOfImplType(index: UINT; OUT pRefType: HREFTYPE):HResult;StdCall;
+     Function  GetImplTypeFlags(index: UINT; OUT pImplTypeFlags: WINT):HResult;StdCall;
+     {$ifndef Call_as}
+      Function  GetIDsOfNames(CONST rgszNames: pOleStr; cNames: UINT; OUT pMemId: MEMBERID):HResult;StdCall;
+     {$else}
+      Function  LocalGetIDsOfNames():HResult;StdCall;
+     {$endif}
+     {$ifndef Call_as}
+     Function  Invoke(pvInstance: Pointer; memid: MEMBERID; wFlags: WORD; VAR pDispParams: DISPPARAMS; OUT pVarResult: VARIANT; OUT pExcepInfo: EXCEPINFO; OUT puArgErr: UINT):HResult;StdCall;
+     {$else}
+     Function  LocalInvoke ():HResult;StdCall;
+     {$endif}
+     {$ifndef Call_as}
+     Function  GetDocumentation(memid: MEMBERID; OUT pBstrName: WideString; OUT pBstrDocString: WideString; OUT pdwHelpContext: DWORD; OUT pBstrHelpFile: WideString):HResult;StdCall;
+     {$else}
+     Function  GetDocumentation(memid: MEMBERID; refPtrFlags: DWORD; OUT pBstrName: WideString; OUT pBstrDocString: WideString; OUT pdwHelpContext: DWORD; OUT pBstrHelpFile: WideString):HResult;StdCall;
+     {$endif}
+
+     {$ifndef Call_as}
+     Function  GetDllEntry(memid: MEMBERID; invKind: INVOKEKIND; OUT pBstrDllName: WideString; OUT pBstrName: WideString; OUT pwOrdinal: WORD):HResult;StdCall;
+     {$else}
+     Function  GetDllEntry(memid: MEMBERID; invKind: INVOKEKIND; refPtrFlags: DWORD; OUT pBstrDllName: WideString; OUT pBstrName: WideString; OUT pwOrdinal: WORD):HResult;StdCall;
+     {$endif}
+
+     Function  GetRefTypeInfo(hRefType: HREFTYPE; OUT ppTInfo: ITypeInfo):HResult;StdCall;
+
+     {$ifndef Call_as}
+      Function  AddressOfMember(memid: MEMBERID; invKind: INVOKEKIND; OUT ppv: Pointer):HResult;StdCall;
+     {$else}
+      Function  LocalAddressOfMember():HResult;StdCall;
+     {$endif}
+
+     {$ifndef Call_as}
+      Function  CreateInstance(CONST pUnkOuter: IUnknown; CONST riid: TIID; OUT ppvObj: Pointer):HResult;StdCall;
+     {$else}
+      Function  CreateInstance(CONST riid: TIID; OUT ppvObj: pIUnknown):HResult;StdCall;
+     {$endif}
+     Function  GetMops(memid: MEMBERID; OUT pBstrMops: WideString):HResult;StdCall;
+     {$ifndef Call_as}
+     Function  GetContainingTypeLib(OUT ppTLib: ITypeLib; OUT pIndex: UINT):HResult;StdCall;
+     {$else}
+     Function  GetContainingTypeLib(OUT ppTLib: ITypeLib; OUT pIndex: UINT):HResult;StdCall;
+     {$endif}
+     {$ifndef Call_as}
+      Procedure ReleaseTypeAttr(Const pTypeAttr: TypeAttr); StdCall;
+     {$else}
+      Function  ReleaseTypeAttr():HResult;StdCall;
+     {$endif}
+
+     {$ifndef Call_as}
+      Procedure ReleaseFuncDesc(const pFuncDesc : FUNCDESC); StdCall;
+     {$else}
+      Function  LocalReleaseFuncDesc():HResult;StdCall;
+     {$endif}
+     {$ifndef Call_as}
+      Procedure ReleaseVarDesc(Const pVarDesc : VarDesc);
+     {$else}
+      Function  LocalReleaseVarDesc():HResult;StdCall;
+     {$endif}
+     End;
+
+   ITypeInfo2 = Interface (ITypeInfo)
+     ['{00020412-0000-0000-C000-000000000046}']
+     Function  GetTypeKind(OUT xpTypeKind: TYPEKIND):HResult;StdCall;
+     Function  GetTypeFlags(OUT pTypeFlags: ULONG):HResult;StdCall;
+     Function  GetFuncIndexOfMemId(memid: MEMBERID; invKind: INVOKEKIND; OUT pFuncIndex: UINT):HResult;StdCall;
+     Function  GetVarIndexOfMemId(memid: MEMBERID; OUT pVarIndex: UINT):HResult;StdCall;
+     Function  GetCustData(CONST guid: TGUID; OUT pVarVal: VARIANT):HResult;StdCall;
+     Function  GetFuncCustData(index: UINT; CONST guid: TGUID; OUT pVarVal: VARIANT):HResult;StdCall;
+     Function  GetParamCustData(indexFunc: UINT; indexParam: UINT; CONST guid: TGUID; OUT pVarVal: VARIANT):HResult;StdCall;
+     Function  GetVarCustData(index: UINT; CONST guid: TGUID; OUT pVarVal: VARIANT):HResult;StdCall;
+     Function  GetImplTypeCustData(index: UINT; CONST guid: TGUID; OUT pVarVal: VARIANT):HResult;StdCall;
+     {$ifndef Call_as}
+      Function  GetDocumentation2(memid: MEMBERID; lcid: LCID; OUT pbstrHelpString: WideString; OUT pdwHelpStringContext: DWORD; OUT pbstrHelpStringDll: WideString):HResult;StdCall;
+     {$else}
+      Function  GetDocumentation2(memid: MEMBERID; lcid: LCID; refPtrFlags: DWORD; OUT pbstrHelpString: WideString; OUT pdwHelpStringContext: DWORD; OUT pbstrHelpStringDll: WideString):HResult;StdCall;
+     {$endif}
+     Function  GetAllCustData(OUT pCustData: CUSTDATA):HResult;StdCall;
+     Function  GetAllFuncCustData(index: UINT; OUT pCustData: CUSTDATA):HResult;StdCall;
+     Function  GetAllParamCustData(indexFunc: UINT; indexParam: UINT; OUT pCustData: CUSTDATA):HResult;StdCall;
+     Function  GetAllVarCustData(index: UINT; OUT pCustData: CUSTDATA):HResult;StdCall;
+     Function  GetAllImplTypeCustData(index: UINT; OUT pCustData: CUSTDATA):HResult;StdCall;
+     End;
+
+   ITypeLib = Interface (IUnknown)
+     ['{00020402-0000-0000-C000-000000000046}']
+     {$ifndef Call_as}
+      Function GetTypeInfoCount:UINT; StdCall;
+     {$else}
+      Function GetTypeInfoCount(OUT pcTInfo: UINT):HResult;StdCall;
+     {$endif}
+     Function  GetTypeInfo(index: UINT; OUT ppTInfo: ITypeInfo):HResult;StdCall;
+     Function  GetTypeInfoType(index: UINT; OUT pTKind: TYPEKIND):HResult;StdCall;
+     Function  GetTypeInfoOfGuid(CONST guid: TGUID; OUT ppTinfo: ITypeInfo):HResult;StdCall;
+     {$ifndef Call_as}
+     Function  GetLibAttr(OUT ppTLibAttr: lpTLIBATTR):HResult;StdCall;
+     {$else}
+     Function  GetLibAttr(OUT ppTLibAttr: LPTLIBATTR; OUT pDummy: CLEANLOCALSTORAGE):HResult;StdCall;
+     {$endif}
+
+     Function  GetTypeComp(OUT ppTComp: ITypeComp):HResult;StdCall;
+     {$ifndef Call_as}
+     Function  GetDocumentation(index: WINT; OUT pBstrName: WideString; OUT pBstrDocString: WideString; OUT pdwHelpContext: DWORD; OUT pBstrHelpFile: WideString):HResult;StdCall;
+     {$else}
+     Function  GetDocumentation(index: WINT; refPtrFlags: DWORD; OUT pBstrName: WideString; OUT pBstrDocString: WideString; OUT pdwHelpContext: DWORD; OUT pBstrHelpFile: WideString):HResult;StdCall;
+     {$endif}
+
+     {$ifndef Call_as}
+     Function  IsName(szNameBuf: pOleStr; lHashVal: ULONG; OUT pfName: BOOL):HResult;StdCall;
+     {$else}
+     Function  IsName(szNameBuf: pOleStr; lHashVal: ULONG; OUT pfName: BOOL; OUT pBstrLibName: WideString):HResult;StdCall;
+     {$endif}
+     {$ifndef Call_as}
+     Function  FindName(szNameBuf: pOleStr; lHashVal: ULONG; OUT ppTInfo: ITypeInfo; OUT rgMemId: MEMBERID; VAR pcFound: USHORT):HResult;StdCall;
+     {$else}
+     Function  FindName(szNameBuf: pOleStr; lHashVal: ULONG; OUT ppTInfo: ITypeInfo; OUT rgMemId: MEMBERID; VAR pcFound: USHORT; OUT pBstrLibName: WideString):HResult;StdCall;
+     {$endif}
+     {$ifndef Call_as}
+      Procedure ReleaseTLibAttr(Const pTLibAttr : TLIBATTR); StdCall;
+      {$else}
+     Function  LocalReleaseTLibAttr:HResult;StdCall;
+     {$endif}
+     End;
+
+   ITypeLib2 = Interface (ITypeLib)
+     ['{00020411-0000-0000-C000-000000000046}']
+     Function  GetCustData(CONST guid: TGUID; OUT pVarVal: VARIANT):HResult;StdCall;
+     {$ifndef Call_as}
+     Function  GetLibStatistics(OUT pcUniqueNames: ULONG; OUT pcchUniqueNames: ULONG):HResult;StdCall;
+     {$else}
+     Function  GetLibStatistics(OUT pcUniqueNames: ULONG; OUT pcchUniqueNames: ULONG):HResult;StdCall;
+     {$endif}
+     {$ifndef Call_as}
+     Function  GetDocumentation2(index: WINT; lcid: LCID; OUT pbstrHelpString: WideString; OUT pdwHelpStringContext: DWORD; OUT pbstrHelpStringDll: WideString):HResult;StdCall;
+     {$else}
+     Function  GetDocumentation2(index: WINT; lcid: LCID; refPtrFlags: DWORD; OUT pbstrHelpString: WideString; OUT pdwHelpStringContext: DWORD; OUT pbstrHelpStringDll: WideString):HResult;StdCall;
+     {$endif}
+     Function  GetAllCustData(OUT pCustData: CUSTDATA):HResult;StdCall;
+     End;
+
+   ITypeChangeEvents= Interface (IUnknown)
+     ['{00020410-0000-0000-C000-000000000046}']
+     Function  RequestTypeChange(changeKind: CHANGEKIND; CONST pTInfoBefore: ITypeInfo; pStrName: pOleStr; OUT pfCancel: WINT):HResult;StdCall;
+     Function  AfterTypeChange(changeKind: CHANGEKIND; CONST pTInfoAfter: ITypeInfo; pStrName: pOleStr):HResult;StdCall;
+     End;
+
+   IErrorInfo= Interface (IUnknown)
+     ['{1CF2B120-547D-101B-8E65-08002B2BD119}']
+     Function  GetGUID(OUT pGUID: TGUID):HResult;StdCall;
+     Function  GetSource(OUT pBstrSource: WideString):HResult;StdCall;
+     Function  GetDescription(OUT pBstrDescription: WideString):HResult;StdCall;
+     Function  GetHelpFile(OUT pBstrHelpFile: WideString):HResult;StdCall;
+     Function  GetHelpContext(OUT pdwHelpContext: DWORD):HResult;StdCall;
+     End;
+
+   ICreateErrorInfo= Interface (IUnknown)
+     ['{22F03340-547D-101B-8E65-08002B2BD119}']
+     Function  SetGUID(CONST rguid: TGUID):HResult;StdCall;
+     Function  SetSource(szSource: pOleStr):HResult;StdCall;
+     Function  SetDescription(szDescription: pOleStr):HResult;StdCall;
+     Function  SetHelpFile(szHelpFile: pOleStr):HResult;StdCall;
+     Function  SetHelpContext(dwHelpContext: DWORD):HResult;StdCall;
+     End;
+
+   ISupportErrorInfo= Interface (IUnknown)
+     ['{DF0B3D60-548F-101B-8E65-08002B2BD119}']
+     Function  InterfaceSupportsErrorInfo(CONST riid: TIID):HResult;StdCall;
+     End;
+
+   ITypeFactory = Interface (IUnknown)
+     ['{0000002E-0000-0000-C000-000000000046}']
+     Function  CreateFromTypeInfo(CONST pTypeInfo: ITypeInfo; CONST riid: TIID; OUT ppv: IUnknown):HResult;StdCall;
+     End;
+
+   ITypeMarshal = Interface (IUnknown)
+     ['{0000002D-0000-0000-C000-000000000046}']
+     Function  Size(pvType: Pointer; dwDestContext: DWORD; pvDestContext: Pointer; OUT pSize: ULONG):HResult;StdCall;
+     Function  Marshal(pvType: Pointer; dwDestContext: DWORD; pvDestContext: Pointer; cbBufferLength: ULONG; OUT pBuffer: BYTE; OUT pcbWritten: ULONG):HResult;StdCall;
+     Function  Unmarshal(pvType: Pointer; dwFlags: DWORD; cbBufferLength: ULONG; CONST pBuffer: BYTE; OUT pcbRead: ULONG):HResult;StdCall;
+     Function  Free(pvType: Pointer):HResult;StdCall;
+     End;
+
+   IRecordInfo = Interface(IUnknown)
+     ['{0000002F-0000-0000-C000-000000000046}']
+     Function  RecordInit(pvNew: Pointer):HResult;StdCall;
+     Function  RecordClear(pvExisting: Pointer):HResult;StdCall;
+     Function  RecordCopy(pvExisting: Pointer; pvNew: Pointer):HResult;StdCall;
+     Function  GetGuid(OUT pguid: TGUID):HResult;StdCall;
+     Function  GetName(OUT pbstrName: WideString):HResult;StdCall;
+     Function  GetSize(OUT pcbSize: ULONG):HResult;StdCall;
+     Function  GetTypeInfo(OUT ppTypeInfo: ITypeInfo):HResult;StdCall;
+     Function  GetField(pvData: Pointer; szFieldName: pOleStr; OUT pvarField: VARIANT):HResult;StdCall;
+     Function  GetFieldNoCopy(pvData: Pointer; szFieldName: pOleStr; OUT pvarField: VARIANT; OUT ppvDataCArray: Pointer):HResult;StdCall;
+     Function  PutField(wFlags: ULONG; pvData: Pointer; szFieldName: pOleStr; CONST pvarField: VARIANT):HResult;StdCall;
+     Function  PutFieldNoCopy(wFlags: ULONG; pvData: Pointer; szFieldName: pOleStr; CONST pvarField: VARIANT):HResult;StdCall;
+     Function  GetFieldNames(VAR pcNames: ULONG; OUT rgBstrNames: WideString):HResult;StdCall;
+     Function  IsMatchingType(CONST pRecordInfo : IRecordInfo):Bool;StdCall;
+     Function  RecordCreate : Pointer; StdCall;
+     Function  RecordCreateCopy(pvSource: Pointer; OUT ppvDest: Pointer):HResult;StdCall;
+     Function  RecordDestroy(pvRecord: Pointer):HResult;StdCall;
+     End;
+
+   IErrorLog = Interface (IUnknown)
+     ['{3127CA40-446E-11CE-8135-00AA004BB851}']
+     Function  AddError(pszPropName: pOleStr; CONST pExcepInfo: EXCEPINFO):HResult;StdCall;
+     End;
+
+
+   IPropertyBag = Interface (IUnknown)
+     ['{55272A00-42CB-11CE-8135-00AA004BB851}']
+     {$ifndef Call_as}
+      Function  Read(pszPropName: pOleStr; VAR pVar: VARIANT; CONST pErrorLog: IErrorLog):HResult;StdCall;
+     {$else}
+      Function  Read(pszPropName: pOleStr; OUT pVar: VARIANT; CONST pErrorLog: IErrorLog; varType: DWORD; CONST pUnkObj: IUnknown):HResult;StdCall;
+     {$endif}
+     Function  Write(pszPropName: pOleStr; CONST pVar: VARIANT):HResult;StdCall;
+     End;
+
+   IEnumGUID = interface(IUnknown)
+     ['{0002E000-0000-0000-C000-000000000046}']
+     Function Next(celt: UINT; OUT rgelt: TGUID; OUT pceltFetched: UINT):HResult;StdCall;
+     Function Skip(celt:UINT):HResult;StdCall;
+     Function Reset: HResult;StdCall;
+     Function Clone(out ppenum: IEnumGUID):HResult;StdCall;
+     End;
+
+   IBindHost = interface(IUnknown)
+     ['{FC4801A1-2BA9-11CF-A229-00AA003D7352}']
+     End;
+
+   IServiceProvider = interface(IUnknown)
+     ['{6D5140C1-7436-11CE-8034-00AA006009FA}']
+     Function QueryService(CONST rsid, iid: TGuid; OUT Obj):HResult;StdCall;
+     End;
+
+   PServiceProvider = ^IServiceProvider;
+
+   IParseDisplayName = interface(IUnknown)
+     ['{0000011A-0000-0000-C000-000000000046}']
+     Function ParseDisplayName(CONST bc: IBindCtx; pszDisplayName: POleStr;OUT chEaten: Longint; OUT mkOut: IMoniker): HResult;StdCall;
+     End;
+
+   IOleContainer = interface(IParseDisplayName)
+     ['{0000011B-0000-0000-C000-000000000046}']
+     Function EnumObjects(grfFlags: Longint; OUT Enum: IEnumUnknown):HResult;StdCall;
+     Function LockContainer(fLock: BOOL):HResult;StdCall;
+     End;
+
+   IOleClientSite = interface(IUnknown)
+     ['{00000118-0000-0000-C000-000000000046}']
+     Function SaveObject: HResult;StdCall;
+     Function GetMoniker(dwAssign: Longint; dwWhichMoniker: Longint;OUT mk: IMoniker):HResult;StdCall;
+     Function GetContainer(OUT container: IOleContainer):HResult;StdCall;
+     Function ShowObject:HResult;StdCall;
+     Function OnShowWindow(fShow: BOOL):HResult;StdCall;
+     Function RequestNewObjectLayout:HResult;StdCall;
+     End;
+
+  IOleWindow = interface(IUnknown)
+    ['{00000114-0000-0000-C000-000000000046}']
+    function GetWindow(out wnd: HWnd): HResult; stdcall;
+    function ContextSensitiveHelp(fEnterMode: BOOL): HResult; stdcall;
+  end;
+
+{$ENDIF}
+
+  tagOleMenuGroupWidths = record
+    width : array[0..5] Of LONG;
+  end;
+  OLEMENUGROUPWIDTHS = tagOleMenuGroupWidths;
+  TOleMenuGroupWidths = tagOleMenuGroupWidths;
+  LPOLEMENUGROUPWIDTHS = ^OLEMENUGROUPWIDTHS;
+  POleMenuGroupWidths = LPOLEMENUGROUPWIDTHS;
+
+
+{ ******************************************************************************************************************
+                                                          stuff from objbase.h
+  ****************************************************************************************************************** }
+{$IFDEF HASINTF}
+
+{$i wininc/objbase.inc}
+
+{ redefinitions }
+  function CoCreateGuid(out _para1:TGUID):HRESULT;stdcall;external 'ole32.dll' name 'CoCreateGuid';
+
+{ additional definitions }
+
+  function IsEqualGUID(const guid1,guid2 : TGUID) : Boolean;stdcall;external 'ole32.dll' name 'IsEqualGUID';
+  function IsEqualIID(const iid1,iid2 : TIID) : Boolean;stdcall;external 'ole32.dll' name 'IsEqualGUID';
+  function IsEqualCLSID(const clsid1,clsid2 : TCLSID) : Boolean;stdcall;external 'ole32.dll' name 'IsEqualGUID';
+
+{$ENDIF HASINTF}
+
+
+const
+  DROPEFFECT_NONE   = 0; 
+  DROPEFFECT_COPY   = 1; 
+  DROPEFFECT_MOVE   = 2; 
+  DROPEFFECT_LINK   = 4; 
+  DROPEFFECT_SCROLL = dword($80000000);
+
+
+type    
+  BORDERWIDTHS = TRect;
+  LPBORDERWIDTHS = PRect;
+  LPCBORDERWIDTHS = PRect;
+  
+  TBorderWidths = TRect;
+  PBorderWidths = PRect;
+
+implementation
+{$undef read_interface}
+{$define read_implementation}
+
+end.
+
+{
+  $Log$
+  Revision 1.1  2005-03-28 15:09:35  peter
+  new winunits packages
+
+  Revision 1.15  2005/02/26 20:20:56  florian
+    + some new consts and types
+
+  Revision 1.14  2005/02/14 17:13:32  peter
+    * truncate log
+
+  Revision 1.13  2005/02/03 18:41:12  florian
+    * more clx compilation fixed
+
+}

+ 12330 - 0
packages/extra/winunits/commctrl.pp

@@ -0,0 +1,12330 @@
+Unit CommCtrl;
+{
+    $Id$
+    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.
+}
+
+
+Interface
+
+{$Mode ObjFPC}
+Uses Windows,ActiveX;
+
+// --------------------
+
+TYPE CINT = Longint;
+     CUINT= CARDINAL;
+
+     DWORD_PTR   = ^DWORD;
+     PDWORD_PTR  = ^DWORD_PTR;
+     ULONG_PTR   = ^ULONG;
+     INT_PTR     = ^CINT;
+     UINT_PTR    = ^UINT;
+
+
+
+// --------------------
+CONST CommCtrlDLL = 'commctrl.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 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.
+//
+//=============================================================================
+
+// include <prsht.h>
+
+Procedure InitCommonControls; 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; 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}
+
+         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}
+         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}
+
+{$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;
+
+
+{$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;
+
+// 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}
+
+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;
+
+
+         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;
+         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}
+
+function ImageList_Create(cx:cint;cy:cint;flags:UINT;cInitial:cint;cGrow:cint):HIMAGELIST; external commctrldll name 'ImageList_Create';
+function ImageList_Destroy(himl:HIMAGELIST):BOOL; external commctrldll name 'ImageList_Destroy';
+
+function ImageList_GetImageCount(himl:HIMAGELIST):cint; external commctrldll name 'ImageList_GetImageCount';
+{$ifdef ie3plus}
+function ImageList_SetImageCount(himl:HIMAGELIST;uNewCount:UINT):BOOL; external commctrldll name 'ImageList_SetImageCount';
+{$ENDIF}
+
+function ImageList_Add(himl:HIMAGELIST;hbmImage:HBITMAP;hbmMask:HBITMAP):cint; external commctrldll name 'ImageList_Add';
+
+function ImageList_ReplaceIcon(himl:HIMAGELIST;i:cint;hicon:HICON):cint; external commctrldll name 'ImageList_ReplaceIcon';
+function ImageList_SetBkColor(himl:HIMAGELIST;clrBk:COLORREF):COLORREF; external commctrldll name 'ImageList_SetBkColor';
+function ImageList_GetBkColor(himl:HIMAGELIST):COLORREF; external commctrldll name 'ImageList_GetBkColor';
+function ImageList_SetOverlayImage(himl:HIMAGELIST;iImage:cint;iOverlay:cint):BOOL; 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;
+
+         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;
+
+function ImageList_Draw(himl:HIMAGELIST;i:cint;hdcDst:HDC;x:cint;y:cint;fStyle:UINT):BOOL; external commctrldll name 'ImageList_Draw';
+
+
+{$IFDEF _WIN32}
+
+function ImageList_Replace(himl:HIMAGELIST;i:cint;hbmImage:HBITMAP;hbmMask:HBITMAP):BOOL; external commctrldll name 'ImageList_Replace';
+
+function ImageList_AddMasked(himl:HIMAGELIST;hbmImage:HBITMAP;crMask:COLORREF):cint; 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; external commctrldll name 'ImageList_DrawEx';
+{$ifdef ie3plus}
+function ImageList_DrawIndirect(pimldp:PIMAGELISTDRAWPARAMS):BOOL; external commctrldll name 'ImageList_DrawIndirect';
+{$ENDIF}
+function ImageList_Remove(himl:HIMAGELIST;i:cint):BOOL; external commctrldll name 'ImageList_Remove';
+function ImageList_GetIcon(himl:HIMAGELIST;i:cint;flags:UINT):HICON; external commctrldll name 'ImageList_GetIcon';
+function ImageList_LoadImageA(hi:HINSTANCE;lpbmp:LPCSTR;cx:cint;cGrow:cint;crMask:COLORREF;uType:UINT;uFlags:UINT):HIMAGELIST; external commctrldll name 'ImageList_LoadImageA';
+function ImageList_LoadImageW(hi:HINSTANCE;lpbmp:LPCWSTR;cx:cint;cGrow:cint;crMask:COLORREF;uType:UINT;uFlags:UINT):HIMAGELIST; 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; external commctrldll name 'ImageList_Copy';
+{$ENDIF}
+
+function ImageList_BeginDrag(himlTrack:HIMAGELIST;iTrack:cint;dxHotspot:cint;dyHotspot:cint):BOOL; external commctrldll name 'ImageList_BeginDrag';
+Procedure ImageList_EndDrag; external commctrldll name 'ImageList_EndDrag';
+function ImageList_DragEnter(hwndLock:HWND;x:cint;y:cint):BOOL; external commctrldll name 'ImageList_DragEnter';
+function ImageList_DragLeave(hwndLock:HWND):BOOL; external commctrldll name 'ImageList_DragLeave';
+function ImageList_DragMove(x:cint;y:cint):BOOL; external commctrldll name 'ImageList_DragMove';
+function ImageList_SetDragCursorImage(himlDrag:HIMAGELIST;iDrag:cint;dxHotspot:cint;dyHotspot:cint):BOOL; external commctrldll name 'ImageList_SetDragCursorImage';
+
+function ImageList_DragShowNolock(fShow:BOOL):BOOL; external commctrldll name 'ImageList_DragShowNolock';
+function ImageList_GetDragImage(ppt:PPOINT;pptHotspot:PPOINT):HIMAGELIST; external commctrldll name 'ImageList_GetDragImage';
+
+// Macro 13
+Procedure ImageList_RemoveAll(himl:HIMAGELIST);
+
+// Macro 14
+Procedure ImageList_ExtractIcon(hi:longint; {dummy?} himl:HIMAGELIST;i:cint);
+
+
+// Macro 15
+Procedure ImageList_LoadBitmap(hi:HInstance;lpbmp:LPCTSTR;cx:cint;cGrow:cint;crMask:COLORREF);
+
+{$IFDEF __IStream_INTERFACE_DEFINED__}
+
+function ImageList_Read(pstm:LPSTREAM):HIMAGELIST; external commctrldll name 'ImageList_Read';
+function ImageList_Write(himl:HIMAGELIST;pstm:LPSTREAM):BOOL; 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:LPSTREAM;riid:REFIID;ppv:PPVOID):HRESULT; external commctrldll name 'ImageList_ReadEx';
+function ImageList_WriteEx(himl:HIMAGELIST;dwFlags:DWORD;pstm:LPSTREAM):HRESULT; 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; external commctrldll name 'ImageList_GetIconSize';
+function ImageList_SetIconSize(himl:HIMAGELIST;cx:cint;cy:cint):BOOL; external commctrldll name 'ImageList_SetIconSize';
+function ImageList_GetImageInfo(himl:HIMAGELIST;i:cint;pImageInfo:PIMAGEINFO):BOOL; external commctrldll name 'ImageList_GetImageInfo';
+function ImageList_Merge(himl1:HIMAGELIST;i1:cint;himl2:HIMAGELIST;i2:cint;dx:cint;dy:cint):HIMAGELIST; external commctrldll name 'ImageList_Merge';
+{$ifdef ie4plus}
+function ImageList_Duplicate(himl:HIMAGELIST):HIMAGELIST; external commctrldll name 'ImageList_Duplicate';
+{$ENDIF}
+
+
+{$ENDIF}
+
+
+{$ENDIF}
+
+
+//====== HEADER CONTROL =======================================================
+
+{$IFNDEF NOHEADER}
+
+{$IFDEF _WIN32}
+
+CONST
+         WC_HEADERA                     = 'SysHeader32';
+         WC_HEADERW                     = {L}'SysHeader32';
+
+TYPE
+{$IFDEF UNICODE}
+         WC_HEADER           = WC_HEADERW;
+{$ELSE}
+         WC_HEADER           = WC_HEADERA;
+{$ENDIF}
+
+{$ELSE}
+
+CONST
+         WC_HEADER                      = 'SysHeader';
+{$ENDIF}
+
+// 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}
+// 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}
+                                 END;
+         HDITEMA              = _HD_ITEMA;
+         pHDITEMA             = ^_HD_ITEMA;
+
+         LPHDITEMA            = ^_HD_ITEMA;
+         THD_ITEMA            = _HD_ITEMA;
+         PHD_ITEMA            = ^_HD_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}
+                                 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}
+
+         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}
+
+         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;
+
+
+TYPE
+         _HD_HITTESTINFO      = Record
+                                 pt           : POINT;
+                                 flags        : UINT;
+                                 iItem        : cint;
+                                 END;
+         HDHITTESTINFO        = _HD_HITTESTINFO;
+         HD_HITTESTINFO       = _HD_HITTESTINFO;
+         LPHDHITTESTINFO      = ^_HD_HITTESTINFO;
+         THD_HITTESTINFO      = _HD_HITTESTINFO;
+         PHD_HITTESTINFO      = ^_HD_HITTESTINFO;
+
+
+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 : LPARAM):BOOL;
+
+// 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}
+
+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 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;
+                                 iItem        : cint;
+                                 iButton      : cint;
+                                 pitem        : PHDITEMA;
+                                 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;
+
+
+         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';
+
+TYPE
+{$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; external commctrldll name 'CreateToolbarEx';
+
+function CreateMappedBitmap(hInstance:HINST;idBitmap:INT_PTR;wFlags:UINT;lpColorMap:LPCOLORMAP;iNumMaps:cint):HBITMAP; 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}
+
+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        : HINSTANCE;
+                                 nID          : UINT_PTR;
+                                 END;
+         TBADDBITMAP          = tagTBADDBITMAP;
+         LPTBADDBITMAP        = ^tagTBADDBITMAP;
+         TTBADDBITMAP         = tagTBADDBITMAP;
+         PTBADDBITMAP         = ^tagTBADDBITMAP;
+
+
+
+CONST
+         HINST_COMMCTRL                 = ((HINSTANCE)-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}
+
+// 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}
+
+
+// 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);
+
+TYPE
+{$IFDEF UNICODE}
+         TB_GETBUTTONINFO    = TB_GETBUTTONINFOW;
+         TB_SETBUTTONINFO    = TB_SETBUTTONINFOW;
+{$ELSE}
+         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).
+
+TYPE
+{$IFDEF UNICODE}
+         TB_INSERTBUTTON     = TB_INSERTBUTTONW;
+         TB_ADDBUTTONS       = TB_ADDBUTTONSW;
+{$ELSE}
+         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 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}
+         TBN_GETINFOTIP      = TBN_GETINFOTIPW;
+         NMTBGETINFOTIP      = NMTBGETINFOTIPW;
+         LPNMTBGETINFOTIP    = LPNMTBGETINFOTIPW;
+{$ELSE}
+         TBN_GETINFOTIP      = TBN_GETINFOTIPA;
+         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}
+         TBN_GETDISPINFO     = TBN_GETDISPINFOW;
+         NMTBDISPINFO        = NMTBDISPINFOW;
+         LPNMTBDISPINFO      = LPNMTBDISPINFOW;
+{$ELSE}
+         TBN_GETDISPINFO     = TBN_GETDISPINFOA;
+         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}
+
+TYPE
+         TBN_GETBUTTONINFO   = TBN_GETBUTTONINFOW;
+{$ELSE}
+         TBN_GETBUTTONINFO   = TBN_GETBUTTONINFOA;
+{$ENDIF}
+
+{$ifdef ie3plus}
+         TBNOTIFYA           = NMTOOLBARA;
+         TBNOTIFYW           = NMTOOLBARW;
+         LPTBNOTIFYA         = LPNMTOOLBARA;
+         LPTBNOTIFYW         = LPNMTOOLBARW;
+{$ELSE}
+         tagNMTOOLBARA       = tagTBNOTIFYA;
+         NMTOOLBARA          = TBNOTIFYA;
+         LPNMTOOLBARA        = LPTBNOTIFYA;
+         tagNMTOOLBARW       = tagTBNOTIFYW;
+         NMTOOLBARW          = TBNOTIFYW;
+         LPNMTOOLBARW        = LPTBNOTIFYW;
+{$ENDIF}
+
+
+CONST
+         TBNOTIFY                       = NMTOOLBAR;
+
+TYPE
+         LPTBNOTIFY          = LPNMTOOLBAR;
+
+{$ifdef ie3plus}
+         tagNMTOOLBARA        = Record
+                                 hdr          : NMHDR;
+                                 iItem        : cint;
+                                 tbButton     : TBBUTTON;
+                                 cchText      : cint;
+                                 pszText      : LPSTR;
+{$ifdef ie5plus}
+                                 rcButton     : RECT;
+{$ENDIF}
+                                 END;
+         NMTOOLBARA           = tagNMTOOLBARA;
+         LPNMTOOLBARA         = ^tagNMTOOLBARA;
+         TNMTOOLBARA          = tagNMTOOLBARA;
+         PNMTOOLBARA          = ^tagNMTOOLBARA;
+
+{$ENDIF}
+
+
+{$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 UNICODE}
+         NMTOOLBAR           = NMTOOLBARW;
+         LPNMTOOLBAR         = LPNMTOOLBARW;
+{$ELSE}
+         NMTOOLBAR           = NMTOOLBARA;
+         LPNMTOOLBAR         = LPNMTOOLBARA;
+{$ENDIF}
+
+{$ENDIF}
+
+{$ENDIF}      // NOTOOLBAR
+
+
+{$ifdef ie3plus}
+//====== REBAR CONTROL ========================================================
+
+{$IFNDEF NOREBAR}
+
+{$IFDEF _WIN32}
+
+CONST
+         REBARCLASSNAMEW                = {L}'ReBarWindow32';
+         REBARCLASSNAMEA                = 'ReBarWindow32';
+
+TYPE
+{$IFDEF  UNICODE}
+         REBARCLASSNAME      = REBARCLASSNAMEW;
+{$ELSE}
+         REBARCLASSNAME      = REBARCLASSNAMEA;
+{$ENDIF}
+
+{$ELSE}
+
+CONST
+         REBARCLASSNAME                 = 'ReBarWindow';
+{$ENDIF}
+
+         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}
+
+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}
+                                 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}
+                                 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;
+
+//         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);
+{$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 ie5plus}
+         RB_PUSHCHEVRON                 = (WM_USER + 43);
+{$ENDIF}      // _WIN32_IE >= 0x0500
+
+         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 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 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}
+
+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;
+
+
+{$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}
+
+// 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;
+
+// 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;
+{$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); external commctrldll name 'DrawStatusTextA';
+Procedure DrawStatusTextW(hDC:HDC;lprc:LPRECT;pszText:LPCWSTR;uFlags:UINT); external commctrldll name 'DrawStatusTextW';
+
+function CreateStatusWindowA(style:LONG;lpszText:LPCSTR;hwndParent:HWND;wID:UINT):HWND; external commctrldll name 'CreateStatusWindowA';
+function CreateStatusWindowW(style:LONG;lpszText:LPCWSTR;hwndParent:HWND;wID:UINT):HWND; external commctrldll name 'CreateStatusWindowW';
+
+
+{$IFDEF UNICODE}
+function CreateStatusWindow(style:LONG;lpszText:LPCSTR;hwndParent:HWND;wID:UINT):HWND; external commctrldll name 'CreateStatusWindowA';
+procedure DrawStatusText(hDC:HDC;lprc:LPRECT;pszText:LPCSTR;uFlags:UINT); external commctrldll name 'DrawStatusTextA';
+{$ELSE}
+function CreateStatusWindow(style:LONG;lpszText:LPCWSTR;hwndParent:HWND;wID:UINT):HWND; external commctrldll name 'CreateStatusWindowW';
+Procedure DrawStatusText(hDC:HDC;lprc:LPRECT;pszText:LPCWSTR;uFlags:UINT); external commctrldll name 'DrawStatusTextW';
+{$ENDIF}
+
+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); external commctrldll name 'MenuHelp';
+function ShowHideMenuCtl(hWnd:HWND;uFlags:UINT_PTR;lpInfo:LPINT):BOOL; external commctrldll name 'ShowHideMenuCtl';
+Procedure GetEffectiveClientRect(hWnd:HWND;lprc:LPRECT;lpInfo:LPINT); 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}
+
+// 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}
+
+{$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; external commctrldll name 'MakeDragList';
+Procedure DrawInsert(handParent:HWND;hLB:HWND;nItem:cint); external commctrldll name 'DrawInsert';
+function LBItemFromPt(hLB:HWND;pt:POINT;bAutoScroll:BOOL):cint; 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; 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
+
+
+{$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                  = {L}'msctls_hotkey32';
+{$IFDEF UNICODE}
+         HOTKEY_CLASS                   = HOTKEY_CLASSW;
+{$ELSE}
+         HOTKEY_CLASS                   = HOTKEY_CLASSA;
+{$ENDIF}
+{$ELSE}
+         HOTKEY_CLASS                   = 'msctls_hotkey';
+{$ENDIF}
+
+{$ENDIF}  // NOHOTKEY
+
+// 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;
+
+         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}
+
+         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}
+                                 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}
+                                 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;
+
+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}
+
+
+         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;prc {!};code {!}):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}
+                                 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;
+
+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_SNAPTOGRID                 = $0005;
+         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}
+                                 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}
+                                 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;
+
+CONST
+         LVCF_FMT                       = $0001;
+         LVCF_WIDTH                     = $0002;
+         LVCF_TEXT                      = $0004;
+         LVCF_SUBITEM                   = $0008;
+{$ifdef ie3plus}
+         LVCF_IMAGE                     = $0010;
+         LVCF_ORDER                     = $0020;
+{$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}
+
+         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;
+
+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;
+
+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}
+
+         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;
+
+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;
+
+         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;
+                                 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;
+
+         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;
+                                 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;
+{$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}
+
+         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 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);
+
+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}
+         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}
+
+{$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}
+{$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}
+         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;
+
+         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;
+                                 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;
+                                 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}
+
+
+
+
+
+{$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}
+                                 dumunion     : record
+                                                 case boolean of
+                                     false:   (itemex       : TVITEMEXA;);
+                                     True:    (item         : TV_ITEMA;);
+                                                 end;
+{$ELSE}
+                                 item         : TV_ITEMA;
+{$ENDIF}
+                                 END;
+         TVINSERTSTRUCTA      = tagTVINSERTSTRUCTA;
+         LPTVINSERTSTRUCTA    = ^tagTVINSERTSTRUCTA;
+         TTVINSERTSTRUCTA     = tagTVINSERTSTRUCTA;
+         PTVINSERTSTRUCTA     = ^tagTVINSERTSTRUCTA;
+
+
+         tagTVINSERTSTRUCTW   = Record
+                                 hParent      : HTREEITEM;
+                                 hInsertAfter : HTREEITEM;
+{$ifdef ie4plus}
+                                 dumunion     : record
+                                                 case boolean of
+                                     false:   (itemex       : TVITEMEXW);
+                                     True:    (item         : TV_ITEMW);
+                                                 end;
+{$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;
+
+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: TREEITEM; code : WPARAM; prc : pRECT):BOOL;
+
+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 win32xp}
+         TVSI_NOSINGLEEXPAND            = $8000;              // Should not conflict with TVGN flags.
+{$ENDIF}
+
+// Macro 167
+
+// #define TreeView_GetChild(hwnd, hitem)          TreeView_GetNextItem(hwnd, hitem, TVGN_CHILD)
+// Macro 168
+
+// #define TreeView_GetNextSibling(hwnd, hitem)    TreeView_GetNextItem(hwnd, hitem, TVGN_NEXT)
+// Macro 169
+
+// #define TreeView_GetPrevSibling(hwnd, hitem)    TreeView_GetNextItem(hwnd, hitem, TVGN_PREVIOUS)
+// Macro 170
+
+// #define TreeView_GetParent(hwnd, hitem)         TreeView_GetNextItem(hwnd, hitem, TVGN_PARENT)
+// Macro 171
+
+// #define TreeView_GetFirstVisible(hwnd)          TreeView_GetNextItem(hwnd, NULL,  TVGN_FIRSTVISIBLE)
+// Macro 172
+
+// #define TreeView_GetNextVisible(hwnd, hitem)    TreeView_GetNextItem(hwnd, hitem, TVGN_NEXTVISIBLE)
+// Macro 173
+
+// #define TreeView_GetPrevVisible(hwnd, hitem)    TreeView_GetNextItem(hwnd, hitem, TVGN_PREVIOUSVISIBLE)
+// Macro 174
+
+// #define TreeView_GetSelection(hwnd)             TreeView_GetNextItem(hwnd, NULL,  TVGN_CARET)
+// Macro 175
+
+// #define TreeView_GetDropHilight(hwnd)           TreeView_GetNextItem(hwnd, NULL,  TVGN_DROPHILITE)
+// Macro 176
+
+// #define TreeView_GetRoot(hwnd)                  TreeView_GetNextItem(hwnd, NULL,  TVGN_ROOT)
+{$ifdef ie4plus}
+// Macro 177
+
+// #define TreeView_GetLastVisible(hwnd)          TreeView_GetNextItem(hwnd, NULL,  TVGN_LASTVISIBLE)
+{$ENDIF}      // _WIN32_IE >= 0x0400
+
+
+
+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;
+
+
+// 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;
+
+
+
+
+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 : WPARAM; mask : LPARAM):UINT;
+
+
+// Macro 212
+Function TreeView_GetCheckState( hwndTV : hwnd; hti : WPARAM):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}
+
+TYPE
+         PFNTVCOMPARE =function (lparam1:LPARAM;lparam2:LPARAM;lParamSort:LParam): cint; STDCALL;
+
+
+         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;
+
+
+
+         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;
+
+
+         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 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;
+
+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;
+
+{$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
+
+{$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}
+
+
+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;
+
+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;
+
+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 :lparam ; 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 : lparam ; 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 : WParam );
+
+
+{$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
+
+
+Procedure Animate_Create(hwndP :HWND;id:HMENU;dwStyle:dword;hInstance:HINST);
+
+// 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;
+
+
+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;
+
+
+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;
+
+
+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):Bool;
+
+
+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;
+                                 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;
+
+{$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}
+
+
+// end_r_commctrl
+
+         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}
+
+TYPE
+         DATETIMEPICK_CLASS  = DATETIMEPICK_CLASSW;
+{$ELSE}
+         DATETIMEPICK_CLASS  = DATETIMEPICK_CLASSA;
+{$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))
+
+// 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))
+
+// 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)
+
+
+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)
+
+{$ifdef ie4plus}
+
+
+CONST
+         DTM_SETMCFONT                  = (DTM_FIRST + 9);
+// Macro 284
+
+// #define DateTime_SetMonthCalFont(hdp, hfont, fRedraw) SNDMSG(hdp, DTM_SETMCFONT, (WPARAM)(hfont), (LPARAM)(fRedraw))
+
+
+CONST
+         DTM_GETMCFONT                  = (DTM_FIRST + 10);
+// Macro 285
+
+// #define DateTime_GetMonthCalFont(hdp) SNDMSG(hdp, DTM_GETMCFONT, 0, 0)
+
+{$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}
+         DTN_USERSTRING      = DTN_USERSTRINGW;
+         NMDATETIMESTRING    = NMDATETIMESTRINGW;
+         LPNMDATETIMESTRING  = LPNMDATETIMESTRINGW;
+{$ELSE}
+         DTN_USERSTRING      = DTN_USERSTRINGA;
+         NMDATETIMESTRING    = NMDATETIMESTRINGA;
+         LPNMDATETIMESTRING  = LPNMDATETIMESTRINGA;
+{$ENDIF}
+
+
+
+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}
+         DTN_WMKEYDOWN       = DTN_WMKEYDOWNW;
+         NMDATETIMEWMKEYDOWN = NMDATETIMEWMKEYDOWNW;
+         LPNMDATETIMEWMKEYDOWN= LPNMDATETIMEWMKEYDOWNW;
+{$ELSE}
+         DTN_WMKEYDOWN       = DTN_WMKEYDOWNA;
+         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}
+         DTN_FORMAT          = DTN_FORMATW;
+         NMDATETIMEFORMAT    = NMDATETIMEFORMATW;
+         LPNMDATETIMEFORMAT  = LPNMDATETIMEFORMATW;
+{$ELSE}
+         DTN_FORMAT          = DTN_FORMATA;
+         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}
+         DTN_FORMATQUERY     = DTN_FORMATQUERYW;
+         NMDATETIMEFORMATQUERY= NMDATETIMEFORMATQUERYW;
+         LPNMDATETIMEFORMATQUERY= LPNMDATETIMEFORMATQUERYW;
+{$ELSE}
+         DTN_FORMATQUERY     = DTN_FORMATQUERYA;
+         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;
+         TDummyStruct17       = DummyStruct17;
+         PDummyStruct17       = ^DummyStruct17;
+
+
+{$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;
+         TDummyStruct18       = DummyStruct18;
+         PDummyStruct18       = ^DummyStruct18;
+
+
+
+// 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;
+
+{$ENDIF}
+
+
+{$ENDIF} // NOBUTTON
+
+/// =====================  End Button Control =========================
+
+/// ====================== Static Control =============================
+
+{$IFNDEF NOSTATIC}
+
+{$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;
+
+{$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);
+         MAX_LINKID_TEXT                = 48;
+         L_MAX_URL_LENGTH               = (2048 + 32 + sizeof("://"));
+
+         WC_LINK                        = {L}'SysLink';
+
+         LWS_TRANSPARENT                = $0001;
+         LWS_IGNORERETURN               = $0002;
+
+         LIF_ITEMINDEX                  = $00000001;
+         LIF_STATE                      = $00000002;
+         LIF_ITEMID                     = $00000004;
+         LIF_URL                        = $00000008;
+
+         LIS_FOCUSED                    = $00000001;
+         LIS_ENABLED                    = $00000002;
+         LIS_VISITED                    = $00000004;
+
+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;
+
+
+         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); external commctrldll name 'InitMUILanguage';
+
+
+function GetMUILanguage:LANGID; 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; external commctrldll name '_TrackMouseEvent';
+
+{$ENDIF} // !NOTRACKMOUSEEVENT
+
+{$ifdef ie4plus}
+
+//====== Flat Scrollbar APIs=========================================
+{$IFNDEF NOFLATSBAPIS}
+
+
+CONST
+         WSB_PROP_CYVSCROLL             = $00000001L;
+         WSB_PROP_CXHSCROLL             = $00000002L;
+         WSB_PROP_CYHSCROLL             = $00000004L;
+         WSB_PROP_CXVSCROLL             = $00000008L;
+         WSB_PROP_CXHTHUMB              = $00000010L;
+         WSB_PROP_CYVTHUMB              = $00000020L;
+         WSB_PROP_VBKGCOLOR             = $00000040L;
+         WSB_PROP_HBKGCOLOR             = $00000080L;
+         WSB_PROP_VSTYLE                = $00000100L;
+         WSB_PROP_HSTYLE                = $00000200L;
+         WSB_PROP_WINSTYLE              = $00000400L;
+         WSB_PROP_PALETTE               = $00000800L;
+         WSB_PROP_MASK                  = $00000FFFL;
+
+         FSB_FLAT_MODE                  = 2;
+         FSB_ENCARTA_MODE               = 1;
+         FSB_REGULAR_MODE               = 0;
+
+function FlatSB_EnableScrollBar(hwnd:HWND):BOOL; external commctrldll name 'FlatSB_EnableScrollBar';
+function FlatSB_ShowScrollBar(hwnd:HWND):BOOL; external commctrldll name 'FlatSB_ShowScrollBar';
+
+function FlatSB_GetScrollRange(hwnd:HWND):BOOL; external commctrldll name 'FlatSB_GetScrollRange';
+function FlatSB_GetScrollInfo(hwnd:HWND):BOOL; external commctrldll name 'FlatSB_GetScrollInfo';
+
+function FlatSB_GetScrollPos(hwnd:HWND):cint; external commctrldll name 'FlatSB_GetScrollPos';
+
+
+function FlatSB_GetScrollProp(hwnd:HWND):BOOL; external commctrldll name 'FlatSB_GetScrollProp';
+{$IFDEF _WIN64}
+function FlatSB_GetScrollPropPtr(hwnd:HWND):BOOL; external commctrldll name 'FlatSB_GetScrollPropPtr';
+{$ELSE}
+function FlatSB_GetScrollPropPtr(hwnd:HWND):BOOL; external commctrldll name 'FlatSB_GetScrollProp';
+{$ENDIF}
+
+
+function FlatSB_SetScrollPos(:HWND):cint; external commctrldll name 'FlatSB_SetScrollPos';
+
+function FlatSB_SetScrollInfo(:HWND):cint; external commctrldll name 'FlatSB_SetScrollInfo';
+
+
+function FlatSB_SetScrollRange(:HWND):cint; external commctrldll name 'FlatSB_SetScrollRange';
+function FlatSB_SetScrollProp(:HWND):BOOL; external commctrldll name 'FlatSB_SetScrollProp';
+
+CONST
+         FlatSB_SetScrollPropPtr        = FlatSB_SetScrollProp;
+
+function InitializeFlatSB(:HWND):BOOL; external commctrldll name 'InitializeFlatSB';
+function UninitializeFlatSB(:HWND):HRESULT; 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; external commctrldll name 'SetWindowSubclass';
+function GetWindowSubclass(hWnd:HWND;pfnSubclass:SUBCLASSPROC;uIdSubclass:UINT_PTR;pdwRefData:PDWORD_PTR):BOOL; external commctrldll name 'GetWindowSubclass';
+function RemoveWindowSubclass(hWnd:HWND;pfnSubclass:SUBCLASSPROC;uIdSubclass:UINT_PTR):BOOL; external commctrldll name 'RemoveWindowSubclass';
+
+function DefSubclassProc(hWnd:HWND;uMsg:UINT;wParam:WPARAM;lParam:LPARAM):LRESULT; external commctrldll name 'DefSubclassProc';
+{$ENDIF}
+
+
+{$ifdef win32xp}
+
+function DrawShadowText(hdc:HDC;pszText:LPCWSTR;cch:UINT;prc:PRECT;dwFlags:DWORD;crText:COLORREF;crShadow:COLORREF;ixOffset:cint;iyOffset:cint):cint; external commctrldll name 'DrawShadowText';
+{$ENDIF}
+
+
+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:longint); stdcall;
+
+Begin
+ fnType(fn)(hwnd, wParam, Longint(@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, Longint(@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)
+
+Procedure ImageList_ExtractIcon(hi:longint; {dummy?} himl:HIMAGELIST;i:cint);
+
+Begin
+ 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;lpbmp:LPCTSTR;cx:cint;cGrow:cint;crMask:COLORREF);
+
+Begin
+ ImageList_LoadImage(hi, lpbmp, 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, DWord(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), Longint(@phdi)));
+end;
+
+// Macro 18
+//#define Header_DeleteItem(hwndHD, i) \
+//     (BOOL)SNDMSG((hwndHD), HDM_DELETEITEM, (WPARAM)(int)(i), DWord(0))
+
+Function Header_DeleteItem( hwndHD : hwnd; i : cint):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwndHD), HDM_DELETEITEM, (i), DWord(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), Longint(@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), Longint(@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, Longint(@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 : LPARAM):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), HDM_SETORDERARRAY, iCount, 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}
+
+// 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, DWord(0))
+
+Function ListView_GetBkColor( hwnd : hwnd):COLORREF;
+
+Begin
+ Result:=COLORREF(SendMessage((hwnd), LVM_GETBKCOLOR, 0, DWord(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, DWord(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, DWord(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, Longint(@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, Longint(@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, Longint(@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), DWord(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, DWord(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, Longint(@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;prc {!};code {!}):BOOL;
+//
+// Begin
+// Result:=BOOL(SendMessage((hwnd), LVM_GETITEMRECT, (i), \)
+// 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;
+
+Begin
+ Result:=BOOL(SendMessage((hwndLV), LVM_ENSUREVISIBLE, (i), MAKELPARAM((fPartialOK), 0)))
+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, DWord(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), DWord(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, DWord(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, Longint(@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, Longint(@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, Longint(@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, DWord(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;
+
+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, Longint(@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, DWord(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, DWord(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), Longint(@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), DWord(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,longint(@_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) shl 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,Longint(@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, DWord(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:=DWORD(SendMessage((hwndLV), LVM_GETITEMSPACING, fSmall, DWord(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;
+Begin
+ Result:=BOOL(SendMessage((hwnd), LVM_SETWORKAREAS, nWorkAreas, Longint(@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, Longint(@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, Longint(@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;
+{$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;
+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: TREEITEM; code : WPARAM; prc : pRECT):BOOL;
+Begin
+ HTREEITEM(prc)^:=HITEM;
+ Result:=Bool(SendMessage((hwnd), TVM_GETITEMRECT, code, longint(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
+
+procedure TreeView_GetChild(hwnd:hwnd; hitem:HTREEITEM);
+
+Begin
+ TreeView_GetNextItem(hwnd, hitem, TVGN_CHILD)
+End;
+// Macro 168
+
+// #define TreeView_GetNextSibling(hwnd:hwnd; hitem:HTREEITEM);
+// (hwnd, hitem)
+// TreeView_GetNextItem(hwnd, hitem, TVGN_NEXT)
+
+
+
+procedure TreeView_GetNextSibling(hwnd:hwnd; hitem:HTREEITEM);
+// (hwnd, hitem)
+// TreeView_GetNextItem(hwnd, hitem, TVGN_NEXT)
+
+Begin
+ TreeView_getNextItem(hwnd,hitem,TVGN_NEXT);
+end;
+
+// Macro 169
+Procedure TreeView_GetPrevSibling(hwnd:hwnd; hitem:HTREEITEM);
+
+begin
+ TreeView_GetNextItem(hwnd, hitem, TVGN_PREVIOUS);
+end;
+
+// Macro 170
+
+procedure TreeView_GetParent(hwnd:hwnd; hitem:HTREEITEM);
+begin
+ TreeView_GetNextItem(hwnd, hitem, TVGN_PARENT)
+end;
+
+// Macro 171
+// #define TreeView_GetFirstVisible(hwnd:hwnd);
+// TreeView_GetNextItem(hwnd, NULL,  TVGN_FIRSTVISIBLE)
+
+Procedure TreeView_GetFirstVisible(hwnd:hwnd);
+begin
+TreeView_GetNextItem(hwnd, NIL,  TVGN_FIRSTVISIBLE)
+end;
+
+// Macro 172
+
+//#define TreeView_GetNextVisible(hwnd:hwnd; hitem:HTREEITEM);
+//(hwnd, hitem)    TreeView_GetNextItem(hwnd, hitem, TVGN_NEXTVISIBLE)
+Procedure TreeView_GetNextVisible(hwnd:hwnd; hitem:HTREEITEM);
+begin
+  TreeView_GetNextItem(hwnd, hitem, TVGN_NEXTVISIBLE)
+end;
+
+// Macro 173
+//#define TreeView_GetPrevVisible(hwnd:hwnd; hitem:HTREEITEM);
+// (hwnd, hitem)    TreeView_GetNextItem(hwnd, hitem, TVGN_PREVIOUSVISIBLE)
+
+
+Procedure TreeView_GetPrevVisible(hwnd:hwnd; hitem:HTREEITEM);
+Begin
+  TreeView_GetNextItem(hwnd, hitem, TVGN_PREVIOUSVISIBLE)
+end;
+
+// Macro 174
+
+Procedure TreeView_GetSelection(hwnd:hwnd);
+begin
+ TreeView_GetNextItem(hwnd, NIL,  TVGN_CARET)
+end;
+
+// Macro 175
+
+//#define TreeView_GetDropHilight(hwnd:hwnd);
+//TreeView_GetNextItem(hwnd, NULL,  TVGN_DROPHILITE)
+
+Procedure TreeView_GetDropHilight(hwnd:hwnd);
+
+begin
+  TreeView_GetNextItem(hwnd, NIL,  TVGN_DROPHILITE)
+end;
+
+
+// Macro 176
+
+Procedure TreeView_GetRoot(hwnd:hwnd);
+
+begin
+  TreeView_GetNextItem(hwnd, NIL,  TVGN_ROOT)
+end;
+
+// Macro 177
+//#define TreeView_GetLastVisible(hwnd:hwnd);
+//TreeView_GetNextItem(hwnd, NULL,  TVGN_LASTVISIBLE)
+
+Procedure TreeView_GetLastVisible(hwnd:hwnd);
+begin
+  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, Longint(@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;
+
+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;
+
+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;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), TVM_ENDEDITLABELNOW, 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 : WPARAM; mask : LPARAM):UINT;
+
+Begin
+ Result:=UINT(SendMessage((hwndTV), TVM_GETITEMSTATE, hti, mask))
+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 : WPARAM):UINT;
+
+Begin
+ Result:=((UINT(SendMessage((hwndTV), TVM_GETITEMSTATE, 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}
+
+// 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, DWord(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, DWord(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, Longint(@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, Longint(@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, Longint(@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), DWord(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, DWord(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), Longint(@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;
+
+Begin
+ Result:=cint(SendMessage((hwndTC), TCM_HITTEST, 0, Longint(@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, DWord(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 : cint ; y : cint ):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 : cint);
+
+Begin
+SendMessage((hwnd), TCM_REMOVEIMAGE, i, DWord(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 : cint ; cy : cint );
+
+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, DWord(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, DWord(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, DWord(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 : cint );
+
+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 : cint ):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 :cint );
+
+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 : cint):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;
+
+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;
+
+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):Bool;
+
+begin
+     Result:=BOOL(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))
+
+// 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))
+
+// 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)
+
+// 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)
+
+// 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;
+
+
+End.

+ 88 - 0
packages/extra/winunits/comobj.pp

@@ -0,0 +1,88 @@
+{
+    $Id$
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 2002 by Florian Klaempfl
+    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.
+
+ **********************************************************************}
+{$mode objfpc}
+{$H+}
+unit comobj;
+
+  interface
+
+{$ifndef VER1_0}
+   function CreateClassID : ansistring;
+
+   function CreateComObject(const ClassID: TGUID) : IUnknown;
+   function CreateRemoteComObject(const MachineName : WideString;const ClassID : TGUID) : IUnknown;
+   function CreateOleObject(const ClassName : string) : IDispatch;
+   function GetActiveOleObject(const ClassName: string) : IDispatch;
+{$endif VER1_0}
+
+  implementation
+
+{$ifndef VER1_0}
+    uses
+       windows,activex;
+
+    {$define FPC_COMOBJ_HAS_CREATE_CLASS_ID}
+    function CreateClassID : ansistring;
+      var
+         ClassID : TCLSID;
+         p : PWideChar;
+      begin
+         CoCreateGuid(ClassID);
+         StringFromCLSID(ClassID,p);
+         result:=p;
+         CoTaskMemFree(p);
+      end;
+
+
+   function CreateComObject(const ClassID : TGUID) : IUnknown;
+     begin
+       {!!!!!!!}
+       runerror(211);
+     end;
+
+
+   function CreateRemoteComObject(const MachineName : WideString;const ClassID : TGUID) : IUnknown;
+     begin
+       {!!!!!!!}
+       runerror(211);
+     end;
+
+
+   function CreateOleObject(const ClassName : string) : IDispatch;
+     begin
+       {!!!!!!!}
+       runerror(211);
+     end;
+
+
+   function GetActiveOleObject(const ClassName : string) : IDispatch;
+     begin
+       {!!!!!!!}
+       runerror(211);
+     end;
+
+
+{$endif VER1_0}
+
+end.
+{
+  $Log$
+  Revision 1.1  2005-03-28 15:09:35  peter
+  new winunits packages
+
+  Revision 1.3  2005/02/14 17:13:32  peter
+    * truncate log
+
+}

+ 0 - 0
packages/extra/winver/testver.pp → packages/extra/winunits/examples/testver.pp


+ 4 - 1
packages/extra/mmsystem/mmsystem.pp → packages/extra/winunits/mmsystem.pp

@@ -2858,7 +2858,10 @@ function DIBINDEX(n: longint): longint;
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.7  2005-02-14 17:13:21  peter
+  Revision 1.1  2005-03-28 15:09:35  peter
+  new winunits packages
+
+  Revision 1.7  2005/02/14 17:13:21  peter
     * truncate log
     * truncate log
 
 
 }
 }

+ 215 - 0
packages/extra/winunits/objbase.inc

@@ -0,0 +1,215 @@
+{
+    $Id$
+    This file is part of the Free Pascal run time library.
+
+    Contains the corresponding declarations to objbase.h
+    Used objbase.h, file date 2001-09-14 from MingW-C
+    This file is heavily edited after conversion!
+
+ **********************************************************************}
+{$ifdef read_interface}
+
+  function CoBuildVersion:DWORD;stdcall; external  'ole32.dll' name 'CoBuildVersion';
+
+  function CoInitialize(_para1:PVOID):HRESULT;stdcall; external  'ole32.dll' name 'CoInitialize';
+
+  function CoInitializeEx(_para1:LPVOID; _para2:DWORD):HRESULT;stdcall; external  'ole32.dll' name 'CoInitializeEx';
+
+  procedure CoUninitialize;stdcall; external  'ole32.dll' name 'CoUninitialize';
+
+  function CoGetMalloc(_para1:DWORD; out _para2:IMalloc):HRESULT;stdcall; external  'ole32.dll' name 'CoGetMalloc';
+
+  function CoGetCurrentProcess:DWORD;stdcall; external  'ole32.dll' name 'CoGetCurrentProcess';
+
+  function CoRegisterMallocSpy(_para1:IMallocSpy):HRESULT;stdcall; external  'ole32.dll' name 'CoRegisterMallocSpy';
+
+  function CoRevokeMallocSpy:HRESULT;stdcall; external  'ole32.dll' name 'CoRevokeMallocSpy';
+
+  function CoCreateStandardMalloc(_para1:DWORD; out _para2:IMalloc):HRESULT;stdcall; external  'ole32.dll' name 'CoGetMalloc';
+
+  function CoGetClassObject(const _para1:TCLSID; _para2:DWORD; _para3:PVOID; const _para4:TIID; out _para5):HRESULT;stdcall; external  'ole32.dll' name 'CoGetClassObject';
+
+  function CoRegisterClassObject(const _para1:TCLSID; _para2:IUnknown; _para3:DWORD; _para4:DWORD; _para5:PDWORD):HRESULT;stdcall; external  'ole32.dll' name 'CoRegisterClassObject';
+
+  function CoRevokeClassObject(_para1:DWORD):HRESULT;stdcall; external  'ole32.dll' name 'CoRevokeClassObject';
+
+  function CoGetMarshalSizeMax(_para1:PULONG;const _para2:TIID; _para3:IUnknown; _para4:DWORD; _para5:PVOID;
+             _para6:DWORD):HRESULT;stdcall; external  'ole32.dll' name 'CoGetMarshalSizeMax';
+
+  function CoMarshalInterface(_para1:IStream;const _para2:TIID; _para3:IUnknown; _para4:DWORD; _para5:PVOID;
+             _para6:DWORD):HRESULT;stdcall; external  'ole32.dll' name 'CoMarshalInterface';
+
+  function CoUnmarshalInterface(_para1:IStream;const _para2:TIID; out _para3):HRESULT;stdcall; external  'ole32.dll' name 'CoUnmarshalInterface';
+
+  function CoMarshalHresult(_para1:IStream; _para2:HRESULT):HRESULT;stdcall; external  'ole32.dll' name 'CoMarshalHresult';
+
+  function CoUnmarshalHresult(_para1:IStream; _para2:HRESULT):HRESULT;stdcall; external  'ole32.dll' name 'CoUnmarshalHresult';
+
+  function CoReleaseMarshalData(_para1:IStream):HRESULT;stdcall; external  'ole32.dll' name 'CoReleaseMarshalData';
+
+  function CoDisconnectObject(_para1:IUnknown; _para2:DWORD):HRESULT;stdcall; external  'ole32.dll' name 'CoDisconnectObject';
+
+  function CoLockObjectExternal(_para1:IUnknown; _para2:BOOL; _para3:BOOL):HRESULT;stdcall; external  'ole32.dll' name 'CoLockObjectExternal';
+
+  function CoGetStandardMarshal(const _para1:TIID; _para2:IUnknown; _para3:DWORD; _para4:PVOID; _para5:DWORD;
+             out _para6:IMarshal):HRESULT;stdcall; external  'ole32.dll' name 'CoGetStandardMarshal';
+
+  function CoGetStdMarshalEx(_para1:IUnknown; _para2:DWORD; out _para3:IUnknown):HRESULT;stdcall; external  'ole32.dll' name 'CoGetStdMarshalEx';
+
+  function CoIsHandlerConnected(_para1:IUnknown):BOOL;stdcall; external  'ole32.dll' name 'CoIsHandlerConnected';
+
+  function CoHasStrongExternalConnections(_para1:IUnknown):BOOL;stdcall; external  'ole32.dll' name 'CoHasStrongExternalConnections';
+
+  function CoMarshalInterThreadInterfaceInStream(const _para1:TIID; _para2:IUnknown; out _para3:IStream):HRESULT;stdcall; external  'ole32.dll' name 'CoMarshalInterThreadInterfaceInStream';
+
+  function CoGetInterfaceAndReleaseStream(_para1:IStream;const _para2:TIID; out _para3):HRESULT;stdcall; external  'ole32.dll' name 'CoGetInterfaceAndReleaseStream';
+
+  function CoCreateFreeThreadedMarshaler(_para1:IUnknown; out _para2:IUnknown):HRESULT;stdcall; external  'ole32.dll' name 'CoCreateFreeThreadedMarshaler';
+
+  function CoLoadLibrary(_para1:LPOLESTR; _para2:BOOL):THandle;stdcall; external  'ole32.dll' name 'CoLoadLibrary';
+
+  procedure CoFreeLibrary(_para1:THandle);stdcall; external  'ole32.dll' name 'CoFreeLibrary';
+
+  procedure CoFreeAllLibraries;stdcall; external  'ole32.dll' name 'CoFreeAllLibraries';
+
+  procedure CoFreeUnusedLibraries;stdcall; external  'ole32.dll' name 'CoFreeUnusedLibraries';
+
+  function CoCreateInstance(const _para1:TCLSID; _para2:IUnknown; _para3:DWORD;const _para4:TIID;out _para5):HRESULT;stdcall; external  'ole32.dll' name 'CoCreateInstance';
+
+  function CoCreateInstanceEx(const _para1:TCLSID; _para2:IUnknown; _para3:DWORD; _para4:PCOSERVERINFO; _para5:DWORD;
+             _para6:PMULTI_QI):HRESULT;stdcall; external  'ole32.dll' name 'CoCreateInstanceEx';
+
+  function StringFromCLSID(const _para1:TCLSID; out _para2:POLESTR):HRESULT;stdcall; external  'ole32.dll' name 'StringFromCLSID';
+
+  function CLSIDFromString(_para1:LPOLESTR; _para2:LPCLSID):HRESULT;stdcall; external  'ole32.dll' name 'CLSIDFromString';
+
+  function StringFromIID(const _para1:TIID; out _para2:POLESTR):HRESULT;stdcall; external  'ole32.dll' name 'StringFromIID';
+
+  function IIDFromString(_para1:LPOLESTR; out _para2:TIID):HRESULT;stdcall; external  'ole32.dll' name 'IIDFromString';
+
+  function CoIsOle1Class(const _para1:TCLSID):BOOL;stdcall; external  'ole32.dll' name 'CoIsOle1Class';
+
+  function ProgIDFromCLSID(const _para1:TCLSID; out _para2:POLESTR):HRESULT;stdcall; external  'ole32.dll' name 'ProgIDFromCLSID';
+
+  function CLSIDFromProgID(_para1:POLESTR; _para2:LPCLSID):HRESULT;stdcall; external  'ole32.dll' name 'CLSIDFromProgID';
+
+  function StringFromGUID2(const _para1:TGUID; _para2:LPOLESTR; _para3:longint):longint;stdcall; external  'ole32.dll' name 'StringFromGUID2';
+
+  function CoCreateGuid(_para1:PGUID):HRESULT;stdcall; external  'ole32.dll' name 'CoCreateGuid';
+
+  function CoFileTimeToDosDateTime(_para1:PFILETIME; _para2:LPWORD; _para3:LPWORD):BOOL;stdcall; external  'ole32.dll' name 'CoFileTimeToDosDateTime';
+
+  function CoDosDateTimeToFileTime(_para1:WORD; _para2:WORD; _para3:PFILETIME):BOOL;stdcall; external  'ole32.dll' name 'CoDosDateTimeToFileTime';
+
+  function CoFileTimeNow(_para1:PFILETIME):HRESULT;stdcall; external  'ole32.dll' name 'CoFileTimeNow';
+
+  function CoRegisterMessageFilter(_para1:IMessageFilter;out _para2:IMessageFilter):HRESULT;stdcall; external  'ole32.dll' name 'CoRegisterMessageFilter';
+
+  function CoGetTreatAsClass(const _para1:TCLSID; _para2:LPCLSID):HRESULT;stdcall; external  'ole32.dll' name 'CoGetTreatAsClass';
+
+  function CoTreatAsClass(const _para1:TCLSID; const _para2:TCLSID):HRESULT;stdcall; external  'ole32.dll' name 'CoTreatAsClass';
+
+
+  type
+
+     LPFNGETCLASSOBJECT = function (const _para1:TCLSID; const _para2:TIID;out _para3):HRESULT;stdcall;
+
+     LPFNCANUNLOADNOW = function:HRESULT;stdcall;
+
+  function DllGetClassObject(const _para1:TCLSID; const _para2:TIID; out _para3):HRESULT;stdcall; external  'ole32.dll' name 'DllGetClassObject';
+
+  function DllCanUnloadNow:HRESULT;stdcall; external  'ole32.dll' name 'DllCanUnloadNow';
+
+  function CoTaskMemAlloc(_para1:ULONG):PVOID;stdcall; external  'ole32.dll' name 'CoTaskMemAlloc';
+
+  function CoTaskMemRealloc(_para1:PVOID; _para2:ULONG):PVOID;stdcall; external  'ole32.dll' name 'CoTaskMemRealloc';
+
+  procedure CoTaskMemFree(_para1:PVOID);stdcall; external  'ole32.dll' name 'CoTaskMemFree';
+
+  function CreateDataAdviseHolder(_para1:IDataAdviseHolder):HRESULT;stdcall; external  'ole32.dll' name 'CreateDataAdviseHolder';
+
+  function CreateDataCache(_para1:IUnknown; const _para2:TCLSID; const _para3:TIID; out _para4):HRESULT;stdcall; external  'ole32.dll' name 'CreateDataCache';
+
+(* Const before type ignored *)
+  function StgCreateDocfile(_para1:POLESTR; _para2:DWORD; _para3:DWORD; out _para4:IStorage):HRESULT;stdcall; external  'ole32.dll' name 'StgCreateDocfile';
+
+  function StgCreateDocfileOnILockBytes(_para1:ILockBytes; _para2:DWORD; _para3:DWORD; out _para4:IStorage):HRESULT;stdcall; external  'ole32.dll' name 'StgCreateDocfileOnILockBytes';
+
+(* Const before type ignored *)
+  function StgOpenStorage(_para1:POLESTR; _para2:IStorage; _para3:DWORD; _para4:SNB; _para5:DWORD;
+             out _para6:IStorage):HRESULT;stdcall; external  'ole32.dll' name 'StgOpenStorage';
+
+  function StgOpenStorageOnILockBytes(_para1:ILockBytes; _para2:IStorage; _para3:DWORD; _para4:SNB; _para5:DWORD;
+             out _para6:IStorage):HRESULT;stdcall; external  'ole32.dll' name 'StgOpenStorageOnILockBytes';
+
+  function StgIsStorageFile(_para1:POLESTR):HRESULT;stdcall; external  'ole32.dll' name 'StgIsStorageFile';
+
+  function StgIsStorageILockBytes(_para1:ILockBytes):HRESULT;stdcall; external  'ole32.dll' name 'StgIsStorageILockBytes';
+
+  function StgSetTimes(_para1:POLESTR; _para2:PFILETIME; _para3:PFILETIME; _para4:PFILETIME):HRESULT;stdcall; external  'ole32.dll' name 'StgSetTimes';
+
+  function BindMoniker(_para1:IMoniker; _para2:DWORD; _para3:TIID; out _para4):HRESULT;stdcall; external  'ole32.dll' name 'BindMoniker';
+
+  function MkParseDisplayName(_para1:IBindCtx; _para2:POLESTR; out _para3:PULONG; out _para4:IMoniker):HRESULT;stdcall; external  'ole32.dll' name 'MkParseDisplayName';
+
+  function MonikerRelativePathTo(_para1:IMoniker; _para2:IMoniker; out _para3:IMoniker; _para4:BOOL):HRESULT;stdcall; external  'ole32.dll' name 'MonikerRelativePathTo';
+
+  function MonikerCommonPrefixWith(_para1:IMoniker; _para2:IMoniker; _para3:PIMoniker):HRESULT;stdcall; external  'ole32.dll' name 'MonikerCommonPrefixWith';
+
+  function CreateBindCtx(_para1:DWORD;out _para2:IBindCtx):HRESULT;stdcall; external  'ole32.dll' name 'CreateBindCtx';
+
+  function CreateGenericComposite(_para1:IMoniker; _para2:IMoniker; out _para3:IMoniker):HRESULT;stdcall; external  'ole32.dll' name 'CreateGenericComposite';
+
+  function GetClassFile(_para1:POLESTR; out _para2:TCLSID):HRESULT;stdcall; external  'ole32.dll' name 'GetClassFile';
+
+  function CreateFileMoniker(_para1:POLESTR; out _para2:IMoniker):HRESULT;stdcall; external  'ole32.dll' name 'CreateFileMoniker';
+
+  function CreateItemMoniker(_para1:POLESTR; _para2:POLESTR;out _para3:IMoniker):HRESULT;stdcall; external  'ole32.dll' name 'CreateItemMoniker';
+
+  function CreateAntiMoniker(_para1:PIMoniker):HRESULT;stdcall; external  'ole32.dll' name 'CreateAntiMoniker';
+
+  function CreatePointerMoniker(_para1:IUnknown; out _para2:IMoniker):HRESULT;stdcall; external  'ole32.dll' name 'CreatePointerMoniker';
+
+  function GetRunningObjectTable(_para1:DWORD; _para2:IRunningObjectTable):HRESULT;stdcall; external  'ole32.dll' name 'GetRunningObjectTable';
+
+  function CoInitializeSecurity(_para1:PSECURITY_DESCRIPTOR; _para2:LONG; _para3:PSOLE_AUTHENTICATION_SERVICE; _para4:pointer; _para5:DWORD;
+             _para6:DWORD; _para7:pointer; _para8:DWORD; _para9:pointer):HRESULT;stdcall; external  'ole32.dll' name 'CoInitializeSecurity';
+
+  function CoGetCallContext(const _para1:TIID; _para2:Ppointer):HRESULT;stdcall; external  'ole32.dll' name 'CoGetCallContext';
+
+  function CoQueryProxyBlanket(_para1:IUnknown; _para2:PDWORD; _para3:PDWORD; _para4:POLESTR; _para5:PDWORD;
+             _para6:PDWORD; _para7:Pointer; _para8:PDWORD):HRESULT;stdcall; external  'ole32.dll' name 'CoQueryProxyBlanket';
+
+  function CoSetProxyBlanket(_para1:IUnknown; _para2:DWORD; _para3:DWORD; _para4:POLESTR; _para5:DWORD;
+             _para6:DWORD; _para7:pointer; _para8:DWORD):HRESULT;stdcall; external  'ole32.dll' name 'CoSetProxyBlanket';
+
+  function CoCopyProxy(_para1:IUnknown; var _para2:IUnknown):HRESULT;stdcall; external  'ole32.dll' name 'CoCopyProxy';
+
+  function CoQueryClientBlanket(_para1:PDWORD; _para2:PDWORD; _para3:POLESTR; _para4:PDWORD; _para5:PDWORD;
+             _para6:pointer; _para7:PDWORD):HRESULT;stdcall; external  'ole32.dll' name 'CoQueryClientBlanket';
+
+  function CoImpersonateClient:HRESULT;stdcall; external  'ole32.dll' name 'CoImpersonateClient';
+
+  function CoRevertToSelf:HRESULT;stdcall; external  'ole32.dll' name 'CoRevertToSelf';
+
+  function CoQueryAuthenticationServices(_para1:PDWORD; _para2:PSOLE_AUTHENTICATION_SERVICE):HRESULT;stdcall; external  'ole32.dll' name 'CoQueryAuthenticationServices';
+
+  function CoSwitchCallContext(_para1:IUnknown; var _para2:IUnknown):HRESULT;stdcall; external  'ole32.dll' name 'CoSwitchCallContext';
+
+  function CoGetInstanceFromFile(_para1:PCOSERVERINFO; _para2:PCLSID; _para3:IUnknown; _para4:DWORD; _para5:DWORD;
+             _para6:POLESTR; _para7:DWORD; _para8:PMULTI_QI):HRESULT;stdcall; external  'ole32.dll' name 'CoGetInstanceFromFile';
+
+  function CoGetInstanceFromIStorage(_para1:PCOSERVERINFO; _para2:PCLSID; _para3:IUnknown; _para4:DWORD; _para5:IStorage;
+             _para6:DWORD; _para7:PMULTI_QI):HRESULT;stdcall; external  'ole32.dll' name 'CoGetInstanceFromIStorage';
+
+{$endif read_interface}
+
+{
+  $Log$
+  Revision 1.1  2005-03-28 15:09:35  peter
+  new winunits packages
+
+  Revision 1.4  2005/02/14 17:13:32  peter
+    * truncate log
+
+}

+ 44 - 0
packages/extra/winunits/ole2.pp

@@ -0,0 +1,44 @@
+{
+    $Id$
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 1999-2000 by the Free Pascal development team.
+
+    Implemtents some stuff of OLE2, tries to be Delphi compatible
+
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ **********************************************************************}
+unit ole2;
+
+{$Mode ObjFpc}
+
+  interface
+
+    uses
+       windows;
+
+    type
+       IUnknown = class
+         public
+           function QueryInterface(const iid: TIID; var obj): HResult; virtual; {$ifndef VER0_99_10}stdcall;{$endif} abstract;
+           function AddRef: Longint; virtual; {$ifndef VER0_99_10}stdcall;{$endif} abstract;
+           function Release: Longint; virtual; {$ifndef VER0_99_10}stdcall;{$endif} abstract;
+       end;
+
+  implementation
+
+end.
+{
+  $Log$
+  Revision 1.1  2005-03-28 15:09:35  peter
+  new winunits packages
+
+  Revision 1.4  2005/02/14 17:13:32  peter
+    * truncate log
+
+}

+ 955 - 0
packages/extra/winunits/shellapi.pp

@@ -0,0 +1,955 @@
+{
+    $Id$
+    This file is part of the Free Pascal run time library.
+    This unit contains the record definition for the Win32 API
+    Copyright (c) 1999-2002 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.
+
+ ************************************************************************}
+
+{ leave out unused functions so the unit can be used on win2000 as well }
+{$ifndef NO_SMART_LINK}
+{$smartlink on}
+{$endif}
+
+{$PACKRECORDS C}
+{$calling stdcall}
+{$mode objfpc}
+
+Unit ShellApi;
+
+//+-------------------------------------------------------------------------
+//
+//  Microsoft Windows
+//  Copyright (c) Microsoft Corporation. All rights reserved.
+//
+//  File: shellapi.h
+//
+//  Header translation by Marco van de Voort for Free Pascal Platform
+//  SDK dl'ed January 2002
+//
+//--------------------------------------------------------------------------
+
+
+Interface
+
+Uses Windows;
+  {
+    shellapi.h -  SHELL.DLL functions, types, and definitions
+    Copyright (c) Microsoft Corporation. All rights reserved.             }
+
+Type   HDROP    = THandle;
+       UINT_PTR = ^UINT;
+       DWORD_PTR= ^DWORD;
+       pHICON   = ^HICON;
+       pBool    = ^BOOL;
+
+
+
+     STARTUPINFOW = record  // a guess. Omission should get fixed in Windows.
+          cb : DWORD;
+          lpReserved : LPTSTR;
+          lpDesktop : LPTSTR;
+          lpTitle : LPTSTR;
+          dwX : DWORD;
+          dwY : DWORD;
+          dwXSize : DWORD;
+          dwYSize : DWORD;
+          dwXCountChars : DWORD;
+          dwYCountChars : DWORD;
+          dwFillAttribute : DWORD;
+          dwFlags : DWORD;
+          wShowWindow : WORD;
+          cbReserved2 : WORD;
+          lpReserved2 : LPBYTE;
+          hStdInput : HANDLE;
+          hStdOutput : HANDLE;
+          hStdError : HANDLE;
+       end;
+     LPSTARTUPINFOW = ^STARTUPINFOW;
+     _STARTUPINFOW = STARTUPINFOW;
+     TSTARTUPINFOW = STARTUPINFOW;
+     PSTARTUPINFOW = ^STARTUPINFOW;
+
+
+{unicode}
+Function DragQueryFileA(arg1 : HDROP; arg2 : UINT;arg3 : LPSTR ; arg4 : UINT):UINT;external 'shell32.dll' name 'DragQueryFileA';
+Function DragQueryFileW(arg1 : HDROP; arg2 : UINT;arg3 : LPWSTR; arg4 : UINT):UINT;external 'shell32.dll' name 'DragQueryFileW';
+Function DragQueryFile(arg1 : HDROP; arg2 : UINT;arg3 : LPSTR ; arg4 : UINT):UINT;external 'shell32.dll' name 'DragQueryFileA';
+Function DragQueryFile(arg1 : HDROP; arg2 : UINT;arg3 : LPWSTR; arg4 : UINT):UINT;external 'shell32.dll' name 'DragQueryFileW';
+
+Function DragQueryPoint(arg1 : HDROP; arg2 :LPPOINT):BOOL; external 'shell32.dll' name 'DragQueryPoint';
+Procedure DragFinish(arg1 : HDROP);                     external 'shell32.dll' name 'DragFinish';
+Procedure DragAcceptFiles(hwnd : HWND;arg2: BOOL);      external 'shell32.dll' name 'DragAcceptFiles';
+
+Function ShellExecuteA(HWND: hwnd;lpOperation : LPCSTR ; lpFile : LPCSTR ; lpParameters : LPCSTR; lpDirectory:  LPCSTR; nShowCmd:LONGINT):HInst; external 'shell32.dll' name 'ShellExecuteA';
+Function ShellExecuteW(hwnd: HWND;lpOperation : LPCWSTR ; lpFile : LPCWSTR ; lpParameters : LPCWSTR; lpDirectory:  LPCWSTR; nShowCmd:LONGINT):HInst; external 'shell32.dll' name 'ShellExecuteW';
+Function ShellExecute(HWND: hwnd;lpOperation : LPCSTR ; lpFile : LPCSTR ; lpParameters : LPCSTR; lpDirectory:  LPCSTR; nShowCmd:LONGINT):HInst; external 'shell32.dll' name 'ShellExecuteA';
+Function ShellExecute(hwnd: HWND;lpOperation : LPCWSTR ; lpFile : LPCWSTR ; lpParameters : LPCWSTR; lpDirectory:  LPCWSTR; nShowCmd:LONGINT):HInst; external 'shell32.dll' name 'ShellExecuteW';
+
+Function FindExecutableA(lpFile : LPCSTR ;lpDirectory : LPCSTR ; lpResult : LPSTR):HInst;external 'shell32.dll' name 'FindExecutableA';
+Function FindExecutableW(lpFile : LPCWSTR;lpDirectory : LPCWSTR; lpResult : LPWSTR):HInst;external 'shell32.dll' name 'FindExecutableW';
+Function FindExecutable(lpFile : LPCSTR ;lpDirectory : LPCSTR ; lpResult : LPSTR):HInst;external 'shell32.dll' name 'FindExecutableA';
+Function FindExecutable(lpFile : LPCWSTR;lpDirectory : LPCWSTR; lpResult : LPWSTR):HInst;external 'shell32.dll' name 'FindExecutableW';
+
+Function CommandLineToArgvW(lpCmdLine : LPCWSTR;pNumArgs : plongint):pLPWSTR;external 'shell32.dll' name 'CommandLineToArgvW';
+
+Function ShellAboutA(HWND: hWnd; szApp : LPCSTR; szOtherStuff : LPCSTR; HICON : hIcon):Longint; external 'shell32.dll' name 'ShellAboutA';
+Function ShellAboutW(HWND: hWnd; szApp : LPCWSTR; szOtherStuff : LPCWSTR; HICON : hIcon):Longint; external 'shell32.dll' name 'ShellAboutW';
+Function ShellAbout(HWND: hWnd; szApp : LPCSTR; szOtherStuff : LPCSTR; HICON : hIcon):Longint; external 'shell32.dll' name 'ShellAboutA';
+Function ShellAbout(HWND: hWnd; szApp : LPCWSTR; szOtherStuff : LPCWSTR; HICON : hIcon):Longint; external 'shell32.dll' name 'ShellAboutW';
+
+Function DuplicateIcon(hinst : HINST; HICON: hIcon):HIcon; external 'shell32.dll' name 'DuplicateIcon';
+
+Function  ExtractAssociatedIconA(hInst : HINST; lpIconPath : LPSTR; lpiIcon : LPWORD):HICON;external 'shell32.dll' name 'ExtractAssociatedIconA';
+Function  ExtractAssociatedIconW(hInst : HINST; lpIconPath : LPWSTR; lpiIcon : LPWORD):HICON;external 'shell32.dll' name 'ExtractAssociatedIconW';
+Function  ExtractAssociatedIcon(hInst : HINST; lpIconPath : LPSTR; lpiIcon : LPWORD):HICON;external 'shell32.dll' name 'ExtractAssociatedIconA';
+Function  ExtractAssociatedIcon(hInst : HINST; lpIconPath : LPWSTR; lpiIcon : LPWORD):HICON;external 'shell32.dll' name 'ExtractAssociatedIconW';
+
+Function ExtractIconA(hInst: HINST; lpszExeFileName :LPCSTR ; nIconIndex : UINT):HICON;external 'shell32.dll' name 'ExtractIconA';
+Function ExtractIconW(hInst: HINST; lpszExeFileName :LPCWSTR ; nIconIndex : UINT):HICON;external 'shell32.dll' name 'ExtractIconW';
+
+Function ExtractIcon(hInst: HINST; lpszExeFileName :LPCSTR ; nIconIndex : UINT):HICON;external 'shell32.dll' name 'ExtractIconA';
+Function ExtractIcon(hInst: HINST; lpszExeFileName :LPCWSTR ; nIconIndex : UINT):HICON;external 'shell32.dll' name 'ExtractIconW';
+
+// if(WINVER >= 0x0400)
+
+Type
+    { init with sizeof(DRAGINFO)  }
+
+       _DRAGINFOA = Record
+                     uSize       : UINT;
+                     pt          : POINT;
+                     fNC         : BOOL;
+                     lpFileList  : LPSTR;
+                     grfKeyState : DWORD;
+                   end;
+       DRAGINFOA   = _DRAGINFOA;
+       TDRAGINFOA  = _DRAGINFOA;
+       LPDRAGINFOA = ^_DRAGINFOA;
+
+    { init with sizeof(DRAGINFO)  }
+
+       _DRAGINFOW = Record
+                     uSize       : UINT;
+                     pt          : POINT;
+                     fNC         : BOOL;
+                     lpFileList  : LPWSTR;
+                     grfKeyState : DWORD;
+                    end;
+       DRAGINFOW   = _DRAGINFOW;
+       TDRAGINFOW  = _DRAGINFOW;
+       LPDRAGINFOW = ^_DRAGINFOW;
+
+{$ifdef UNICODE}
+       DRAGINFO         = DRAGINFOW;
+       TDRAGINFO        = DRAGINFOW;
+       LPDRAGINFO       = LPDRAGINFOW;
+{$else}
+       DRAGINFO         = DRAGINFOA;
+       TDRAGINFO        = DRAGINFOW;
+       LPDRAGINFO       = LPDRAGINFOA;
+{$endif}
+
+Const
+       ABM_NEW                  = $00000000;
+       ABM_REMOVE               = $00000001;
+       ABM_QUERYPOS             = $00000002;
+       ABM_SETPOS               = $00000003;
+       ABM_GETSTATE             = $00000004;
+       ABM_GETTASKBARPOS        = $00000005;
+       ABM_ACTIVATE             = $00000006;     { lParam == TRUE/FALSE means activate/deactivate }
+       ABM_GETAUTOHIDEBAR       = $00000007;
+       ABM_SETAUTOHIDEBAR       = $00000008;     { this can fail at any time.  MUST check the result }
+                                                 { lParam = TRUE/FALSE  Set/Unset }
+                                                 { uEdge = what edge }
+       ABM_WINDOWPOSCHANGED     = $0000009;
+       ABM_SETSTATE             = $0000000a;
+       ABN_STATECHANGE          = $0000000;      { these are put in the wparam of callback messages }
+       ABN_POSCHANGED           = $0000001;
+       ABN_FULLSCREENAPP        = $0000002;
+       ABN_WINDOWARRANGE        = $0000003;      { lParam == TRUE means hide }
+
+       { flags for get state }
+       ABS_AUTOHIDE             = $0000001;
+       ABS_ALWAYSONTOP          = $0000002;
+       ABE_LEFT                 = 0;
+       ABE_TOP                  = 1;
+       ABE_RIGHT                = 2;
+       ABE_BOTTOM               = 3;
+
+
+Type
+
+       _AppBarData        = Record
+                             cbSize             : DWORD;
+                             hWnd               : HWND;
+                             uCallbackMessage   : UINT;
+                             uEdge              : UINT;
+                             rc                 : RECT;
+                             lParam             : LPARAM; { message specific }
+                            end;
+       APPBARDATA         = _AppBarData;
+       TAPPBARDATA        = _AppBarData;
+       PAPPBARDATA        = ^_AppBarData;
+
+
+Function SHAppBarMessage(dwMessage : DWORD; pData : APPBARDATA):UINT_PTR;external 'shell32.dll' name 'SHAppBarMessage';
+
+    //
+    //  EndAppBar
+    //
+
+Function   DoEnvironmentSubstA(szString: LPSTR; cchString:UINT):DWORD;external 'shell32.dll' name 'DoEnvironmentSubstA';
+Function   DoEnvironmentSubstW(szString: LPWSTR; cchString:UINT):DWORD;external 'shell32.dll' name 'DoEnvironmentSubstW';
+Function   DoEnvironmentSubst(szString: LPSTR; cchString:UINT):DWORD;external 'shell32.dll' name 'DoEnvironmentSubstA';
+Function   DoEnvironmentSubst(szString: LPWSTR; cchString:UINT):DWORD;external 'shell32.dll' name 'DoEnvironmentSubstW';
+
+{Macro}
+function EIRESID(x : longint) : longint;
+
+Function ExtractIconExA(lpszFile : LPCSTR; nIconIndex:Longint; phiconLarge:pHICON; phiconSmall:pHIcon; nIcons:UINT):UINT;   external 'shell32.dll' name 'ExtractIconExA';
+Function ExtractIconExW(lpszFile : LPCWSTR; nIconIndex:Longint; phiconLarge:pHICON; phiconSmall:pHIcon; nIcons:UINT):UINT;  external 'shell32.dll' name 'ExtractIconExW';
+Function ExtractIconExA(lpszFile : LPCSTR; nIconIndex:Longint; var phiconLarge:HICON;var phiconSmall:HIcon; nIcons:UINT):UINT;   external 'shell32.dll' name 'ExtractIconExA';
+Function ExtractIconExW(lpszFile : LPCWSTR; nIconIndex:Longint; var phiconLarge:HICON;var phiconSmall:HIcon; nIcons:UINT):UINT;  external 'shell32.dll' name 'ExtractIconExW';
+
+Function ExtractIconEx (lpszFile : LPCSTR; nIconIndex:Longint; phiconLarge:pHICON; phiconSmall:pHIcon; nIcons:UINT):UINT; external 'shell32.dll' name 'ExtractIconExA';
+Function ExtractIconEx (lpszFile : LPCWSTR; nIconIndex:Longint; phiconLarge:pHICON; phiconSmall:pHIcon; nIcons:UINT):UINT; external 'shell32.dll' name 'ExtractIconExW';
+Function ExtractIconEx (lpszFile : LPCSTR; nIconIndex:Longint; var phiconLarge:HICON;var phiconSmall:HIcon; nIcons:UINT):UINT; external 'shell32.dll' name 'ExtractIconExA';
+Function ExtractIconEx (lpszFile : LPCWSTR; nIconIndex:Longint; var phiconLarge:HICON;var phiconSmall:HIcon; nIcons:UINT):UINT; external 'shell32.dll' name 'ExtractIconExW';
+
+//
+// Shell File Operations
+//
+
+//ifndef FO_MOVE  //these need to be kept in sync with the ones in shlobj.h}
+Const
+       FO_MOVE                  = $0001;
+       FO_COPY                  = $0002;
+       FO_DELETE                = $0003;
+       FO_RENAME                = $0004;
+       FOF_MULTIDESTFILES       = $0001;
+       FOF_CONFIRMMOUSE         = $0002;
+       FOF_SILENT               = $0004;    { don't create progress/report }
+       FOF_RENAMEONCOLLISION    = $0008;
+       FOF_NOCONFIRMATION       = $0010;    { Don't prompt the user. }
+       FOF_WANTMAPPINGHANDLE    = $0020;    { Fill in SHFILEOPSTRUCT.hNameMappings }
+       FOF_ALLOWUNDO            = $0040;    { Must be freed using SHFreeNameMappings }
+       FOF_FILESONLY            = $0080;    { on *.*, do only files }
+       FOF_SIMPLEPROGRESS       = $0100;    { means don't show names of files }
+       FOF_NOCONFIRMMKDIR       = $0200;    { don't confirm making any needed dirs }
+       FOF_NOERRORUI            = $0400;    { don't put up error UI }
+       FOF_NOCOPYSECURITYATTRIBS= $0800;    { dont copy NT file Security Attributes }
+       FOF_NORECURSION          = $1000;    { don't recurse into directories. }
+
+//if (_WIN32_IE >= 0x0500)
+       FOF_NO_CONNECTED_ELEMENTS= $2000;    { don't operate on connected elements. }
+       FOF_WANTNUKEWARNING      = $4000;    { during delete operation, warn if nuking instead of recycling (partially overrides FOF_NOCONFIRMATION) }
+//endif
+
+//if (_WIN32_WINNT >= 0x0501)
+       FOF_NORECURSEREPARSE     = $8000;    { treat reparse points as objects, not containers }
+//endif
+
+Type
+       FILEOP_FLAGS             = WORD;
+
+Const
+       PO_DELETE                = $0013;    { printer is being deleted }
+       PO_RENAME                = $0014;    { printer is being renamed }
+
+       PO_PORTCHANGE            = $0020;    { port this printer connected to is being changed }
+                                            { if this id is set, the strings received by }
+                                            { the copyhook are a doubly-null terminated }
+                                            { list of strings.  The first is the printer }
+                                            { name and the second is the printer port. }
+
+       PO_REN_PORT              = $0034;    { PO_RENAME and PO_PORTCHANGE at same time. }
+
+{ no POF_ flags currently defined }
+
+Type
+
+       PRINTEROP_FLAGS = WORD;
+//endif}
+
+    { FO_MOVE }
+    { implicit parameters are: }
+    {      if pFrom or pTo are unqualified names the current directories are }
+    {      taken from the global current drive/directory settings managed }
+    {      by Get/SetCurrentDrive/Directory }
+    { }
+    {      the global confirmation settings }
+    { only used if FOF_SIMPLEPROGRESS }
+
+Type
+
+       _SHFILEOPSTRUCTA         = Record
+                                   hwnd              : HWND;
+                                   wFunc             : UINT;
+                                   pFrom             : LPCSTR;
+                                   pTo               : LPCSTR;
+                                   fFlags            : FILEOP_FLAGS;
+                                   fAnyOperationsAborted : BOOL;
+                                   hNameMappings     : LPVOID;
+                                   lpszProgressTitle : LPCSTR;     { only used if FOF_SIMPLEPROGRESS }
+                                  end;
+       SHFILEOPSTRUCTA          = _SHFILEOPSTRUCTA;
+       TSHFILEOPSTRUCTA         = _SHFILEOPSTRUCTA;
+       LPSHFILEOPSTRUCTA        = ^_SHFILEOPSTRUCTA;
+
+
+       _SHFILEOPSTRUCTW         = record
+                                   hwnd              : HWND;
+                                   wFunc             : UINT;
+                                   pFrom             : LPCWSTR;
+                                   pTo               : LPCWSTR;
+                                   fFlags            : FILEOP_FLAGS;
+                                   fAnyOperationsAborted : BOOL;
+                                   hNameMappings     : LPVOID;
+                                   lpszProgressTitle : LPCWSTR;
+                                  end;
+       SHFILEOPSTRUCTW          = _SHFILEOPSTRUCTW;
+       TSHFILEOPSTRUCTW         = _SHFILEOPSTRUCTW;
+       LPSHFILEOPSTRUCTW        = ^_SHFILEOPSTRUCTW;
+{$ifdef UNICODE}
+       SHFILEOPSTRUCT           = SHFILEOPSTRUCTW;
+       TSHFILEOPSTRUCT          = SHFILEOPSTRUCTW;
+       LPSHFILEOPSTRUCT         = LPSHFILEOPSTRUCTW;
+{$else}
+       SHFILEOPSTRUCT           = SHFILEOPSTRUCTA;
+       TSHFILEOPSTRUCT          = SHFILEOPSTRUCTA;
+       LPSHFILEOPSTRUCT         = LPSHFILEOPSTRUCTA;
+{$endif}
+
+Function SHFileOperationA(lpFileOp:LPSHFILEOPSTRUCTA ):Longint;external 'shell32.dll' name 'SHFileOperationA';
+Function SHFileOperationW(lpFileOp:LPSHFILEOPSTRUCTW ):Longint;external 'shell32.dll' name 'SHFileOperationW';
+
+Function SHFileOperation(lpFileOp:LPSHFILEOPSTRUCTA ):Longint;external 'shell32.dll' name 'SHFileOperationA';
+Function SHFileOperation(lpFileOp:LPSHFILEOPSTRUCTW ):Longint;external 'shell32.dll' name 'SHFileOperationW';
+
+Procedure SHFreeNameMappings(hNameMappings : THandle);external 'shell32.dll' name 'SHFreeNameMappings';
+
+Type
+
+       _SHNAMEMAPPINGA          = Record
+                                   pszOldPath : LPSTR;
+                                   pszNewPath : LPSTR;
+                                   cchOldPath : longint;
+                                   cchNewPath : longint;
+                                  end;
+       SHNAMEMAPPINGA           = _SHNAMEMAPPINGA;
+       TSHNAMEMAPPINGA          = _SHNAMEMAPPINGA;
+       LPSHNAMEMAPPINGA         = ^_SHNAMEMAPPINGA;
+
+       _SHNAMEMAPPINGW          = Record
+                                   pszOldPath : LPWSTR;
+                                   pszNewPath : LPWSTR;
+                                   cchOldPath : longint;
+                                   cchNewPath : longint;
+                                  end;
+       SHNAMEMAPPINGW           = _SHNAMEMAPPINGW;
+       TSHNAMEMAPPINGW          = _SHNAMEMAPPINGW;
+       LPSHNAMEMAPPINGW         = ^_SHNAMEMAPPINGW;
+{$ifndef UNICODE}
+       SHNAMEMAPPING            = SHNAMEMAPPINGW;
+       TSHNAMEMAPPING           = SHNAMEMAPPINGW;
+       LPSHNAMEMAPPING          = LPSHNAMEMAPPINGW;
+{$else}
+       SHNAMEMAPPING            = SHNAMEMAPPINGA;
+       TSHNAMEMAPPING           = SHNAMEMAPPINGA;
+       LPSHNAMEMAPPING          = LPSHNAMEMAPPINGA;
+{$endif}
+
+    //
+    // End Shell File Operations
+    //
+    //
+    //  Begin ShellExecuteEx and family
+    //
+
+
+    { ShellExecute() and ShellExecuteEx() error codes  }
+    { regular WinExec() codes  }
+
+
+    const
+       SE_ERR_FNF               = 2;    { file not found }
+       SE_ERR_PNF               = 3;    { path not found }
+       SE_ERR_ACCESSDENIED      = 5;    { access denied }
+       SE_ERR_OOM               = 8;    { out of memory }
+       SE_ERR_DLLNOTFOUND       = 32;
+// endif   WINVER >= 0x0400
+
+    { error values for ShellExecute() beyond the regular WinExec() codes  }
+       SE_ERR_SHARE             = 26;
+       SE_ERR_ASSOCINCOMPLETE   = 27;
+       SE_ERR_DDETIMEOUT        = 28;
+       SE_ERR_DDEFAIL           = 29;
+       SE_ERR_DDEBUSY           = 30;
+       SE_ERR_NOASSOC           = 31;
+
+//if(WINVER >= 0x0400)}
+
+    { Note CLASSKEY overrides CLASSNAME }
+
+       SEE_MASK_CLASSNAME       = $00000001;
+       SEE_MASK_CLASSKEY        = $00000003;
+    { Note INVOKEIDLIST overrides IDLIST }
+       SEE_MASK_IDLIST          = $00000004;
+       SEE_MASK_INVOKEIDLIST    = $0000000c;
+       SEE_MASK_ICON            = $00000010;
+       SEE_MASK_HOTKEY          = $00000020;
+       SEE_MASK_NOCLOSEPROCESS  = $00000040;
+       SEE_MASK_CONNECTNETDRV   = $00000080;
+       SEE_MASK_FLAG_DDEWAIT    = $00000100;
+       SEE_MASK_DOENVSUBST      = $00000200;
+       SEE_MASK_FLAG_NO_UI      = $00000400;
+       SEE_MASK_UNICODE         = $00004000;
+       SEE_MASK_NO_CONSOLE      = $00008000;
+       SEE_MASK_ASYNCOK         = $00100000;
+       SEE_MASK_HMONITOR        = $00200000;
+//if (_WIN32_IE >= 0x0500)
+       SEE_MASK_NOQUERYCLASSSTORE= $01000000;
+       SEE_MASK_WAITFORINPUTIDLE= $02000000;
+//endif  (_WIN32_IE >= 0x500)
+//if (_WIN32_IE >= 0x0560)
+       SEE_MASK_FLAG_LOG_USAGE  = $04000000;
+//endif
+    { (_WIN32_IE >= 0x560) }
+
+    type
+
+       _SHELLEXECUTEINFOA       = record
+                                   cbSize : DWORD;
+                                   fMask : ULONG;
+                                   hwnd : HWND;
+                                   lpVerb : LPCSTR;
+                                   lpFile : LPCSTR;
+                                   lpParameters : LPCSTR;
+                                   lpDirectory : LPCSTR;
+                                   nShow : longint;
+                                   hInstApp : HINST;
+                                   lpIDList : LPVOID;
+                                   lpClass : LPCSTR;
+                                   hkeyClass : HKEY;
+                                   dwHotKey : DWORD;
+                                   DUMMYUNIONNAME : record
+                                                      case longint of
+                                                       0 : ( hIcon : HANDLE );
+                                                       1 : ( hMonitor : HANDLE );
+                                                      end;
+                                   hProcess : HANDLE;
+                                  end;
+
+       SHELLEXECUTEINFOA        = _SHELLEXECUTEINFOA;
+       TSHELLEXECUTEINFOA       = _SHELLEXECUTEINFOA;
+       LPSHELLEXECUTEINFOA      = ^_SHELLEXECUTEINFOA;
+
+
+       _SHELLEXECUTEINFOW       = record
+                                   cbSize : DWORD;
+                                   fMask : ULONG;
+                                   hwnd : HWND;
+                                   lpVerb : lpcwstr;
+                                   lpFile : lpcwstr;
+                                   lpParameters : lpcwstr;
+                                   lpDirectory : lpcwstr;
+                                   nShow : longint;
+                                   hInstApp : HINST;
+                                   lpIDList : LPVOID;
+                                   lpClass : LPCWSTR;
+                                   hkeyClass : HKEY;
+                                   dwHotKey : DWORD;
+                                   DUMMYUNIONNAME : record
+                                                      case longint of
+                                                       0 : ( hIcon : HANDLE );
+                                                       1 : ( hMonitor : HANDLE );
+                                                      end;
+                                   hProcess : HANDLE;
+                                  end;
+
+       SHELLEXECUTEINFOW        = _SHELLEXECUTEINFOW;
+       TSHELLEXECUTEINFOW       = _SHELLEXECUTEINFOW;
+       LPSHELLEXECUTEINFOW      = ^_SHELLEXECUTEINFOW;
+
+{$ifdef UNICODE}
+       SHELLEXECUTEINFO         = SHELLEXECUTEINFOW;
+       TSHELLEXECUTEINFO        = SHELLEXECUTEINFOW;
+       LPSHELLEXECUTEINFO       = LPSHELLEXECUTEINFOW;
+{$else}
+       SHELLEXECUTEINFO         = SHELLEXECUTEINFOA;
+       TSHELLEXECUTEINFO        = SHELLEXECUTEINFOA;
+       LPSHELLEXECUTEINFO       = LPSHELLEXECUTEINFOA;
+{$endif}
+
+Function ShellExecuteExA(lpExecInfo: LPSHELLEXECUTEINFOA):Bool;external 'shell32.dll' name 'ShellExecuteExA';
+Function ShellExecuteExW(lpExecInfo: LPSHELLEXECUTEINFOW):Bool;external 'shell32.dll' name 'ShellExecuteExW';
+Function ShellExecuteEx(lpExecInfo: LPSHELLEXECUTEINFOA):Bool;external 'shell32.dll' name 'ShellExecuteExA';
+Function ShellExecuteEx(lpExecInfo: LPSHELLEXECUTEINFOW):Bool;external 'shell32.dll' name 'ShellExecuteExW';
+
+Procedure WinExecErrorA(HWND : hwnd; error : Longint;lpstrFileName:LPCSTR; lpstrTitle:LPCSTR);   external 'shell32.dll' name 'WinExecErrorA';
+Procedure WinExecErrorW(HWND : hwnd; error : Longint;lpstrFileName:LPCWSTR; lpstrTitle:LPCWSTR); external 'shell32.dll' name 'WinExecErrorW';
+Procedure WinExecError(HWND : hwnd; error : Longint;lpstrFileName:LPCSTR; lpstrTitle:LPCSTR); external 'shell32.dll' name 'WinExecErrorA';
+Procedure WinExecError(HWND : hwnd; error : Longint;lpstrFileName:LPCWSTR; lpstrTitle:LPCWSTR); external 'shell32.dll' name 'WinExecErrorW';
+
+type
+
+     _SHCREATEPROCESSINFOW      = record
+                                   cbSize               : DWORD;
+                                   fMask                : ULONG;
+                                   hwnd                 : HWND;
+                                   pszFile              : LPCWSTR;
+                                   pszParameters        : LPCWSTR;
+                                   pszCurrentDirectory  : LPCWSTR;
+                             {in}  hUserToken           : HANDLE;
+                             {in}  lpProcessAttributes  : LPSECURITY_ATTRIBUTES;
+                             {in}  lpThreadAttributes   : LPSECURITY_ATTRIBUTES;
+                             {in}  bInheritHandles      : BOOL;
+                             {in}  dwCreationFlags      : DWORD;
+                             {in}  lpStartupInfo        : LPSTARTUPINFOW;
+                             {out} lpProcessInformation : LPPROCESS_INFORMATION;
+                                  end;
+     SHCREATEPROCESSINFOW       = _SHCREATEPROCESSINFOW;
+     TSHCREATEPROCESSINFOW      = _SHCREATEPROCESSINFOW;
+     PSHCREATEPROCESSINFOW      = ^_SHCREATEPROCESSINFOW;
+
+Function SHCreateProcessAsUserW(pscpi : PSHCREATEPROCESSINFOW):Bool;external 'shell32.dll' name 'SHCreateProcessAsUserW';
+
+    //
+    //  End ShellExecuteEx and family }
+    //
+
+    //
+    // RecycleBin
+    //
+
+    { struct for query recycle bin info }
+
+Type
+       _SHQUERYRBINFO           = record
+                                   cbSize       : DWORD;
+                                   i64Size      : int64;
+                                   i64NumItems  : int64;
+                                  end;
+       SHQUERYRBINFO            = _SHQUERYRBINFO;
+       TSHQUERYRBINFO           = _SHQUERYRBINFO;
+       LPSHQUERYRBINFO          = ^_SHQUERYRBINFO;
+
+       { flags for SHEmptyRecycleBin }
+
+const
+       SHERB_NOCONFIRMATION     = $00000001;
+       SHERB_NOPROGRESSUI       = $00000002;
+       SHERB_NOSOUND            = $00000004;
+
+function SHQueryRecycleBinA(pszRootPath:LPCSTR; pSHQueryRBInfo:LPSHQUERYRBINFO):HRESULT;external 'shell32.dll' name 'SHQueryRecycleBinA';
+function SHQueryRecycleBinW(pszRootPath:LPCWSTR; pSHQueryRBInfo:LPSHQUERYRBINFO):HRESULT;external 'shell32.dll' name 'SHQueryRecycleBinW';
+function SHQueryRecycleBin(pszRootPath:LPCSTR; pSHQueryRBInfo:LPSHQUERYRBINFO):HRESULT;external 'shell32.dll' name 'SHQueryRecycleBinA';
+function SHQueryRecycleBin(pszRootPath:LPCWSTR; pSHQueryRBInfo:LPSHQUERYRBINFO):HRESULT;external 'shell32.dll' name 'SHQueryRecycleBinW';
+
+function SHEmptyRecycleBinA(hwnd:HWND; pszRootPath:LPCSTR; dwFlags:DWORD):HRESULT;external 'shell32.dll' name 'SHEmptyRecycleBinA';
+function SHEmptyRecycleBinW(hwnd:HWND; pszRootPath:LPCWSTR; dwFlags:DWORD):HRESULT;external 'shell32.dll' name 'SHEmptyRecycleBinW';
+function SHEmptyRecycleBin(hwnd:HWND; pszRootPath:LPCSTR; dwFlags:DWORD):HRESULT;external 'shell32.dll' name 'SHEmptyRecycleBinA';
+function SHEmptyRecycleBin(hwnd:HWND; pszRootPath:LPCWSTR; dwFlags:DWORD):HRESULT;external 'shell32.dll' name 'SHEmptyRecycleBinW';
+
+//
+// end of RecycleBin
+//
+
+//
+// Tray notification definitions
+//
+
+Type
+
+       _NOTIFYICONDATAA         = record
+                                   cbSize               : DWORD;
+                                   hWnd                 : HWND;
+                                   uID                  : UINT;
+                                   uFlags               : UINT;
+                                   uCallbackMessage     : UINT;
+                                   hIcon                : HICON;
+                                   {$ifdef IELower5}
+                                    szTip               : array[0..63] of CHAR;
+                                   {$else}
+                                    szTip               : array[0..127] of CHAR;
+                                   {$endif}
+                                   {$ifdef IEhigherEqual5}
+                                    dwState             : DWORD;
+                                    dwStateMask         : DWORD;
+                                    szInfo              : array[0..255] of CHAR;
+                                    DUMMYUNIONNAME      : record
+                                                           case longint of
+                                                               0 : ( uTimeout : UINT );
+                                                               1 : ( uVersion : UINT );
+                                                              end;
+                                    szInfoTitle : array[0..63] of CHAR;
+                                    dwInfoFlags : DWORD;
+                                   {$endif}
+                                   {$ifdef IEHighEq6}
+                                    guidItem : GUID;
+                                   {$endif}
+                                   end;
+       NOTIFYICONDATAA          = _NOTIFYICONDATAA;
+       TNOTIFYICONDATAA         = _NOTIFYICONDATAA;
+       PNOTIFYICONDATAA         = ^_NOTIFYICONDATAA;
+
+
+       _NOTIFYICONDATAW         = record
+                                   cbSize               : DWORD;
+                                   hWnd                 : HWND;
+                                   uID                  : UINT;
+                                   uFlags               : UINT;
+                                   uCallbackMessage     : UINT;
+                                   hIcon                : HICON;
+                                   {$ifdef IELower5}
+                                    szTip               : array[0..63] of WCHAR;
+                                   {$else}
+                                    szTip               : array[0..127] of WCHAR;
+                                   {$endif}
+                                   {$ifdef IEhigherEqual5}
+                                    dwState             : DWORD;
+                                    dwStateMask         : DWORD;
+                                    szInfo              : array[0..255] of WCHAR;
+                                    DUMMYUNIONNAME      : record
+                                                           case longint of
+                                                               0 : ( uTimeout : UINT );
+                                                               1 : ( uVersion : UINT );
+                                                              end;
+                                    szInfoTitle : array[0..63] of CHAR;
+                                    dwInfoFlags : DWORD;
+                                   {$endif}
+                                   {$ifdef IEHighEq6}
+                                    guidItem : GUID;
+                                   {$endif}
+                                   end;
+       NOTIFYICONDATAW          = _NOTIFYICONDATAW;
+       TNOTIFYICONDATAW         = _NOTIFYICONDATAW;
+       PNOTIFYICONDATAW         = ^_NOTIFYICONDATAW;
+{$ifdef UNICODE}
+       NOTIFYICONDATA           = NOTIFYICONDATAW;
+       TNOTIFYICONDATA          = NOTIFYICONDATAW;
+       PNOTIFYICONDATA          = PNOTIFYICONDATAW;
+{$else}
+       NOTIFYICONDATA           = NOTIFYICONDATAA;
+       TNOTIFYICONDATA          = NOTIFYICONDATAA;
+       PNOTIFYICONDATA          = PNOTIFYICONDATAA;
+{$endif}
+    { UNICODE }
+
+    {
+
+#define NOTIFYICONDATAA_V1_SIZE     FIELD_OFFSET(NOTIFYICONDATAA, szTip[64])
+#define NOTIFYICONDATAW_V1_SIZE     FIELD_OFFSET(NOTIFYICONDATAW, szTip[64])
+#ifdef UNICODE
+#define NOTIFYICONDATA_V1_SIZE      NOTIFYICONDATAW_V1_SIZE
+#else
+#define NOTIFYICONDATA_V1_SIZE      NOTIFYICONDATAA_V1_SIZE
+#endif
+
+#define NOTIFYICONDATAA_V2_SIZE     FIELD_OFFSET(NOTIFYICONDATAA, guidItem)
+#define NOTIFYICONDATAW_V2_SIZE     FIELD_OFFSET(NOTIFYICONDATAW, guidItem)
+#ifdef UNICODE
+#define NOTIFYICONDATA_V2_SIZE      NOTIFYICONDATAW_V2_SIZE
+#else
+#define NOTIFYICONDATA_V2_SIZE      NOTIFYICONDATAA_V2_SIZE
+#endif
+}
+
+
+    const
+       NIN_SELECT               = WM_USER + 0;
+       NINF_KEY                 = $1;
+       NIN_KEYSELECT            = NIN_SELECT or NINF_KEY;
+// if (_WIN32_IE >= 0x0501)}
+
+       NIN_BALLOONSHOW          = WM_USER + 2;
+       NIN_BALLOONHIDE          = WM_USER + 3;
+       NIN_BALLOONTIMEOUT       = WM_USER + 4;
+       NIN_BALLOONUSERCLICK     = WM_USER + 5;
+       NIM_ADD                  = $00000000;
+       NIM_MODIFY               = $00000001;
+       NIM_DELETE               = $00000002;
+//if (_WIN32_IE >= 0x0500)}
+
+       NIM_SETFOCUS             = $00000003;
+       NIM_SETVERSION           = $00000004;
+       NOTIFYICON_VERSION       = 3;
+
+       NIF_MESSAGE              = $00000001;
+       NIF_ICON                 = $00000002;
+       NIF_TIP                  = $00000004;
+// if (_WIN32_IE >= 0x0500)}
+       NIF_STATE                = $00000008;
+       NIF_INFO                 = $00000010;
+//if (_WIN32_IE >= 0x600)}
+
+       NIF_GUID                 = $00000020;
+//if (_WIN32_IE >= 0x0500)}
+
+       NIS_HIDDEN               = $00000001;
+       NIS_SHAREDICON           = $00000002;
+    { says this is the source of a shared icon }
+    { Notify Icon Infotip flags }
+       NIIF_NONE                = $00000000;
+    { icon flags are mutually exclusive }
+    { and take only the lowest 2 bits }
+       NIIF_INFO                = $00000001;
+       NIIF_WARNING             = $00000002;
+       NIIF_ERROR               = $00000003;
+       NIIF_ICON_MASK           = $0000000F;
+//if (_WIN32_IE >= 0x0501)}
+
+       NIIF_NOSOUND             = $00000010;
+
+Function Shell_NotifyIconA( dwMessage: Dword;lpData: PNOTIFYICONDATAA):Bool;external 'shell32.dll' name 'Shell_NotifyIconA';
+Function Shell_NotifyIconW( dwMessage: Dword;lpData: PNOTIFYICONDATAW):Bool;external 'shell32.dll' name 'Shell_NotifyIconW';
+
+Function Shell_NotifyIcon( dwMessage: Dword;lpData: PNOTIFYICONDATAA):Bool;external 'shell32.dll' name 'Shell_NotifyIconA';
+Function Shell_NotifyIcon( dwMessage: Dword;lpData: PNOTIFYICONDATAW):Bool;external 'shell32.dll' name 'Shell_NotifyIconW';
+//
+// End Tray Notification Icons
+//
+
+//
+// Begin SHGetFileInfo
+//
+    {
+       The SHGetFileInfo API provides an easy way to get attributes
+       for a file given a pathname.
+
+         PARAMETERS
+
+           pszPath              file name to get info about
+           dwFileAttributes     file attribs, only used with SHGFI_USEFILEATTRIBUTES
+           psfi                 place to return file info
+           cbFileInfo           size of structure
+           uFlags               flags
+
+         RETURN
+           TRUE if things worked
+      }
+    { out: icon }
+    { out: icon index }
+    { out: SFGAO_ flags }
+    { out: display name (or path) }
+    { out: type name }
+
+    type
+
+       _SHFILEINFOA                     = record
+                                            hIcon         : HICON;                          { out: icon }
+                                            iIcon         : longint;                        { out: icon index }
+                                            dwAttributes  : DWORD;                          { out: SFGAO_ flags }
+                                            szDisplayName : array[0..(MAX_PATH)-1] of CHAR; { out: display name (or path) }
+                                            szTypeName    : array[0..79] of CHAR;           { out: type name }
+                                           end;
+       SHFILEINFOA                      = _SHFILEINFOA;
+       TSHFILEINFOA                     = _SHFILEINFOA;
+       pSHFILEINFOA                     = ^_SHFILEINFOA;
+
+       _SHFILEINFOW                     = record
+                                            hIcon         : HICON;                          { out: icon }
+                                            iIcon         : longint;                        { out: icon index }
+                                            dwAttributes  : DWORD;                          { out: SFGAO_ flags }
+                                            szDisplayName : array[0..(MAX_PATH)-1] of WCHAR;{ out: display name (or path) }
+                                            szTypeName    : array[0..79] of WCHAR;          { out: type name }
+                                           end;
+       SHFILEINFOW                      = _SHFILEINFOW;
+       TSHFILEINFOW                     = _SHFILEINFOW;
+       pSHFILEINFOW                     = ^_SHFILEINFOW;
+
+{$ifdef UNICODE}
+       SHFILEINFO                       = SHFILEINFOW;
+       TSHFILEINFO                      = SHFILEINFOW;
+       pFILEINFO                        = SHFILEINFOW;
+{$else}
+       SHFILEINFO                       = SHFILEINFOA;
+       TSHFILEINFO                      = SHFILEINFOA;
+       pFILEINFO                        = SHFILEINFOA;
+{$endif}
+    { NOTE: This is also in shlwapi.h.  Please keep in synch. }
+
+    const
+       SHGFI_ICON               = $000000100;    { get Icon}
+       SHGFI_DISPLAYNAME        = $000000200;    { get display name }
+       SHGFI_TYPENAME           = $000000400;    { get type name }
+       SHGFI_ATTRIBUTES         = $000000800;    { get attributes }
+       SHGFI_ICONLOCATION       = $000001000;    { get icon location}
+       SHGFI_EXETYPE            = $000002000;    { return exe type }
+       SHGFI_SYSICONINDEX       = $000004000;    { get system icon index }
+       SHGFI_LINKOVERLAY        = $000008000;    { put a link overlay on icon }
+       SHGFI_SELECTED           = $000010000;    { show icon in selected state }
+       SHGFI_ATTR_SPECIFIED     = $000020000;    { get only specified attributes }
+       SHGFI_LARGEICON          = $000000000;    { get large icon }
+       SHGFI_SMALLICON          = $000000001;    { get small icon }
+       SHGFI_OPENICON           = $000000002;    { get open icon }
+       SHGFI_SHELLICONSIZE      = $000000004;    { get shell size icon }
+       SHGFI_PIDL               = $000000008;    { pszPath is a pidl }
+       SHGFI_USEFILEATTRIBUTES  = $000000010;    { use passed dwFileAttribute }
+//if (_WIN32_IE >= 0x0500)}
+       SHGFI_ADDOVERLAYS        = $000000020;    { apply the appropriate overlays }
+       SHGFI_OVERLAYINDEX       = $000000040;    { Get the index of the overlay }
+                                                 { in the upper 8 bits of the iIcon  }
+Function SHGetFileInfoA(pszPath: LPCSTR; dwFileAttributes : DWORD; psfi: pSHFILEINFOA; cbFileInfo,UFlags: UINT):DWORD;external 'shell32.dll' name 'SHGetFileInfoA';
+Function SHGetFileInfoW(pszPath: LPCWSTR; dwFileAttributes : DWORD; psfi: pSHFILEINFOW; cbFileInfo,UFlags: UINT):DWORD;external 'shell32.dll' name 'SHGetFileInfoW';
+Function SHGetFileInfo(pszPath: LPCSTR; dwFileAttributes : DWORD; psfi: pSHFILEINFOA; cbFileInfo,UFlags: UINT):DWORD;external 'shell32.dll' name 'SHGetFileInfoA';
+
+Function SHGetFileInfoA(pszPath: LPCSTR; dwFileAttributes : DWORD; var psfi: TSHFILEINFOA; cbFileInfo,UFlags: UINT):DWORD;external 'shell32.dll' name 'SHGetFileInfoA';
+Function SHGetFileInfoW(pszPath: LPCWSTR; dwFileAttributes : DWORD; var psfi: TSHFILEINFOW; cbFileInfo,UFlags: UINT):DWORD;external 'shell32.dll' name 'SHGetFileInfoW';
+Function SHGetFileInfo(pszPath: LPCSTR; dwFileAttributes : DWORD; var psfi: TSHFILEINFOA; cbFileInfo,UFlags: UINT):DWORD;external 'shell32.dll' name 'SHGetFileInfoA';
+Function SHGetFileInfo(pszPath: LPCWSTR; dwFileAttributes : DWORD; var psfi: TSHFILEINFOW; cbFileInfo,UFlags: UINT):DWORD;external 'shell32.dll' name 'SHGetFileInfoW';
+
+Function SHGetDiskFreeSpaceExA( pszDirectoryName : LPCSTR; pulFreeBytesAvailableToCaller : pULARGE_INTEGER; pulTotalNumberOfBytes : pULARGE_INTEGER;pulTotalNumberOfFreeBytes: pULARGE_INTEGER):Bool;external 'shell32.dll' name 'SHGetDiskFreeSpaceExA';
+Function SHGetDiskFreeSpaceExW( pszDirectoryName : LPCWSTR; pulFreeBytesAvailableToCaller : pULARGE_INTEGER; pulTotalNumberOfBytes : pULARGE_INTEGER;pulTotalNumberOfFreeBytes: pULARGE_INTEGER):Bool;external 'shell32.dll' name 'SHGetDiskFreeSpaceExW';
+Function SHGetDiskFreeSpaceEx( pszDirectoryName : LPCSTR; pulFreeBytesAvailableToCaller : pULARGE_INTEGER; pulTotalNumberOfBytes : pULARGE_INTEGER;pulTotalNumberOfFreeBytes: pULARGE_INTEGER):Bool;external 'shell32.dll' name 'SHGetDiskFreeSpaceExA';
+Function SHGetDiskFreeSpace( pszDirectoryName : LPCSTR; pulFreeBytesAvailableToCaller : pULARGE_INTEGER; pulTotalNumberOfBytes : pULARGE_INTEGER;pulTotalNumberOfFreeBytes: pULARGE_INTEGER):Bool;external 'shell32.dll' name 'SHGetDiskFreeSpaceExA';
+Function SHGetDiskFreeSpaceEx( pszDirectoryName : LPCWSTR; pulFreeBytesAvailableToCaller : pULARGE_INTEGER; pulTotalNumberOfBytes : pULARGE_INTEGER;pulTotalNumberOfFreeBytes: pULARGE_INTEGER):Bool;external 'shell32.dll' name 'SHGetDiskFreeSpaceExW';
+Function SHGetDiskFreeSpace( pszDirectoryName : LPCWSTR; pulFreeBytesAvailableToCaller : pULARGE_INTEGER; pulTotalNumberOfBytes : pULARGE_INTEGER;pulTotalNumberOfFreeBytes: pULARGE_INTEGER):Bool;external 'shell32.dll' name 'SHGetDiskFreeSpaceExW';
+
+Function SHGetNewLinkInfoA(pszLinkTo:LPCSTR;pszDir:LPCSTR; pszName:LPSTR; pfMustCopy: pBool; uFlags:UINT):Bool;external 'shell32.dll' name 'SHGetNewLinkInfoA';
+Function SHGetNewLinkInfoW(pszLinkTo:LPCWSTR;pszDir:LPCWSTR; pszName:LPWSTR; pfMustCopy: pBool; uFlags:UINT):Bool;external 'shell32.dll' name 'SHGetNewLinkInfoW';
+
+Function SHGetNewLinkInfo (pszLinkTo:LPCSTR;pszDir:LPCSTR; pszName:LPSTR; pfMustCopy: pBool; uFlags:UINT):Bool;external 'shell32.dll' name 'SHGetNewLinkInfoA';
+Function SHGetNewLinkInfo (pszLinkTo:LPCWSTR;pszDir:LPCWSTR; pszName:LPWSTR; pfMustCopy: pBool; uFlags:UINT):Bool;external 'shell32.dll' name 'SHGetNewLinkInfoW';
+
+    const
+       SHGNLI_PIDL              = $000000001;    { pszLinkTo is a pidl }
+       SHGNLI_PREFIXNAME        = $000000002;    { Make name "Shortcut to xxx" }
+       SHGNLI_NOUNIQUE          = $000000004;    { don't do the unique name generation }
+// {if (_WIN32_IE >= 0x0501)}
+       SHGNLI_NOLNK             = $000000008;    { don't add ".lnk" extension }
+// {$endif}
+    { _WIN2_IE >= 0x0501 }
+//
+// End SHGetFileInfo
+//
+
+    { Printer stuff }
+       PRINTACTION_OPEN             = 0;
+       PRINTACTION_PROPERTIES       = 1;
+       PRINTACTION_NETINSTALL       = 2;
+       PRINTACTION_NETINSTALLLINK   = 3;
+       PRINTACTION_TESTPAGE         = 4;
+       PRINTACTION_OPENNETPRN       = 5;
+{$ifdef WINNT}
+       PRINTACTION_DOCUMENTDEFAULTS = 6;
+       PRINTACTION_SERVERPROPERTIES = 7;
+{$endif}
+
+Function SHInvokePrinterCommandA(HWND: hwnd; uAction:UINT; lpBuf1: LPCSTR; lpBuf2: LPCSTR; fModal:Bool):Bool;external 'shell32.dll' name 'SHInvokePrinterCommandA';
+Function SHInvokePrinterCommandW(HWND: hwnd; uAction:UINT; lpBuf1: LPCWSTR; lpBuf2: LPCWSTR; fModal:Bool):Bool;external 'shell32.dll' name 'SHInvokePrinterCommandW';
+Function SHInvokePrinterCommand(HWND: hwnd; uAction:UINT; lpBuf1: LPCSTR; lpBuf2: LPCSTR; fModal:Bool):Bool;external 'shell32.dll' name 'SHInvokePrinterCommandA';
+Function SHInvokePrinterCommand(HWND: hwnd; uAction:UINT; lpBuf1: LPCWSTR; lpBuf2: LPCWSTR; fModal:Bool):Bool;external 'shell32.dll' name 'SHInvokePrinterCommandW';
+
+// WINVER >= 0x0400
+//if (_WIN32_WINNT >= 0x0500) || (_WIN32_WINDOWS >= 0x0500)
+    //
+    // The SHLoadNonloadedIconOverlayIdentifiers API causes the shell's
+    // icon overlay manager to load any registered icon overlay
+    // identifers that are not currently loaded.  This is useful if an
+    // overlay identifier did not load at shell startup but is needed
+    // and can be loaded at a later time.  Identifiers already loaded
+    // are not affected.  Overlay identifiers implement the
+    // IShellIconOverlayIdentifier interface.
+    //
+    // Returns:
+    //      S_OK
+    //
+
+function SHLoadNonloadedIconOverlayIdentifiers:HResult; external 'shell32.dll' name 'SHInvokePrinterCommandW';
+
+    //
+    // The SHIsFileAvailableOffline API determines whether a file
+    // or folder is available for offline use.
+    //
+    // Parameters:
+    //     pwszPath             file name to get info about
+    //     pdwStatus            (optional) OFFLINE_STATUS_* flags returned here
+    //
+    // Returns:
+    //     S_OK                 File/directory is available offline, unless
+    //                            OFFLINE_STATUS_INCOMPLETE is returned.
+    //     E_INVALIDARG         Path is invalid, or not a net path
+    //     E_FAIL               File/directory is not available offline
+    //
+    // Notes:
+    //     OFFLINE_STATUS_INCOMPLETE is never returned for directories.
+    //     Both OFFLINE_STATUS_LOCAL and OFFLINE_STATUS_REMOTE may be returned,
+    //     indicating "open in both places." This is common when the server is online.
+    //
+function SHIsFileAvailableOffline(pwszPath:LPCWSTR; pdwStatus:LPDWORD):HRESULT; external 'shell32.dll' name 'SHIsFileAvailableOffline';
+
+const
+       OFFLINE_STATUS_LOCAL         = $0001;    { If open, it's open locally }
+       OFFLINE_STATUS_REMOTE        = $0002;    { If open, it's open remotely }
+       OFFLINE_STATUS_INCOMPLETE    = $0004;    { The local copy is currently incomplete. }
+                                                { The file will not be available offline }
+                                                { until it has been synchronized. }
+    {  sets the specified path to use the string resource }
+    {  as the UI instead of the file system name }
+
+function SHSetLocalizedName(pszPath:LPWSTR; pszResModule:LPCWSTR; idsRes:longint):HRESULT;external 'shell32.dll' name 'SHSetLocalizedName';
+
+//if         _WIN32_IE >= 0x0600}
+
+function SHEnumerateUnreadMailAccountsA(hKeyUser:HKEY; dwIndex:DWORD; pszMailAddress:LPSTR; cchMailAddress:longint):HRESULT;external 'shell32.dll' name 'SHEnumerateUnreadMailAccountsA';
+function SHEnumerateUnreadMailAccountsW(hKeyUser:HKEY; dwIndex:DWORD; pszMailAddress:LPWSTR; cchMailAddress:longint):HRESULT;external 'shell32.dll' name 'SHEnumerateUnreadMailAccountsW';
+
+function SHEnumerateUnreadMailAccounts(hKeyUser:HKEY; dwIndex:DWORD; pszMailAddress:LPWSTR; cchMailAddress:longint):HRESULT;external 'shell32.dll' name 'SHEnumerateUnreadMailAccountsW';
+
+function SHGetUnreadMailCountA(hKeyUser:HKEY; pszMailAddress:LPCSTR; pdwCount:PDWORD; pFileTime:PFILETIME; pszShellExecuteCommand:LPSTR;cchShellExecuteCommand:longint):HRESULT;external 'shell32.dll' name 'SHGetUnreadMailCountA';
+function SHGetUnreadMailCountW(hKeyUser:HKEY; pszMailAddress:LPCWSTR; pdwCount:PDWORD; pFileTime:PFILETIME; pszShellExecuteCommand:LPWSTR;cchShellExecuteCommand:longint):HRESULT;external 'shell32.dll' name 'SHGetUnreadMailCountW';
+function SHGetUnreadMailCount(hKeyUser:HKEY; pszMailAddress:LPCSTR; pdwCount:PDWORD; pFileTime:PFILETIME; pszShellExecuteCommand:LPSTR;cchShellExecuteCommand:longint):HRESULT;external 'shell32.dll' name 'SHGetUnreadMailCountA';
+function SHGetUnreadMailCount(hKeyUser:HKEY; pszMailAddress:LPCWSTR; pdwCount:PDWORD; pFileTime:PFILETIME; pszShellExecuteCommand:LPWSTR;cchShellExecuteCommand:longint):HRESULT;external 'shell32.dll' name 'SHGetUnreadMailCountW';
+
+function SHSetUnreadMailCountA(pszMailAddress:LPCSTR; dwCount:DWORD; pszShellExecuteCommand:LPCSTR):HRESULT;external 'shell32.dll' name 'SHSetUnreadMailCountA';
+function SHSetUnreadMailCountW(pszMailAddress:LPCWSTR; dwCount:DWORD; pszShellExecuteCommand:LPCWSTR):HRESULT;external 'shell32.dll' name 'SHSetUnreadMailCountW';
+function SHSetUnreadMailCount(pszMailAddress:LPCSTR; dwCount:DWORD; pszShellExecuteCommand:LPCSTR):HRESULT;external 'shell32.dll' name 'SHSetUnreadMailCountA';
+function SHSetUnreadMailCount(pszMailAddress:LPCWSTR; dwCount:DWORD; pszShellExecuteCommand:LPCWSTR):HRESULT;external 'shell32.dll' name 'SHSetUnreadMailCountW';
+
+//  _WIN32_IE >= 0x0600      }
+//  if         _WIN32_IE >= 0x0600}
+
+function SHGetImageList(iImageList:longint;CONST riid:TIID; ppvObj:Ppointer):HRESULT;external 'shell32.dll' name 'SHGetImageList';
+
+Const
+       SHIL_LARGE                   = 0;    { normally 32x32 }
+       SHIL_SMALL                   = 1;    { normally 16x16 }
+       SHIL_EXTRALARGE              = 2;
+       SHIL_SYSSMALL                = 3;    { like SHIL_SMALL, but tracks system small icon metric correctly }
+       SHIL_LAST                    = SHIL_SYSSMALL;
+
+    { Function call types for ntshrui folder sharing helpers }
+
+//typedef HRESULT (STDMETHODCALLTYPE *PFNSHOWSHAREFOLDERUIW)(IN HWND hwndParent, IN LPCSTR pszPath);
+//typedef HRESULT (STDMETHODCALLTYPE *PFNSHOWSHAREFOLDERUIW)(IN HWND hwndParent, IN LPCWSTR pszPath);
+
+implementation
+
+function EIRESID(x : longint) : longint;
+Begin
+  EIRESID:=-x;
+End;
+
+end.
+{
+  $Log$
+  Revision 1.1  2005-03-28 15:09:35  peter
+  new winunits packages
+
+  Revision 1.8  2005/02/14 17:13:32  peter
+    * truncate log
+
+  Revision 1.7  2005/02/03 20:48:56  florian
+    * fixed SHGetFileInfo
+
+}

+ 118 - 0
packages/extra/winunits/shfolder.pp

@@ -0,0 +1,118 @@
+{
+    $Id$
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 1999-2000 by the Free Pascal development team
+
+    Interface to shfolder.dll
+
+    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.
+
+ **********************************************************************}
+
+{ ---------------------------------------------------------------------
+  shfolder.dll is distributed standard with IE5.5, so it should ship
+  with 2000/XP or higher but is likely to be installed on NT/95/98 or
+  ME as well.  It works on all these systems.
+
+  The info found here is also in the registry:
+  HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\
+  HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\
+
+  Note that not all CSIDL_* constants are supported by shlfolder.dll,
+  they should be supported by the shell32.dll, though again not on all
+  systems.
+  ---------------------------------------------------------------------}
+
+Unit shfolder;
+
+Interface
+
+Uses
+  windows;
+
+Const
+  LibName = 'SHFolder.dll';
+
+Const
+
+  CSIDL_PROGRAMS                = $0002; { %SYSTEMDRIVE%\Program Files                                      }
+  CSIDL_PERSONAL                = $0005; { %USERPROFILE%\My Documents                                       }
+  CSIDL_FAVORITES               = $0006; { %USERPROFILE%\Favorites                                          }
+  CSIDL_STARTUP                 = $0007; { %USERPROFILE%\Start menu\Programs\Startup                        }
+  CSIDL_RECENT                  = $0008; { %USERPROFILE%\Recent                                             }
+  CSIDL_SENDTO                  = $0009; { %USERPROFILE%\Sendto                                             }
+  CSIDL_STARTMENU               = $000B; { %USERPROFILE%\Start menu                                         }
+  CSIDL_MYMUSIC                 = $000D; { %USERPROFILE%\Documents\My Music                                 }
+  CSIDL_MYVIDEO                 = $000E; { %USERPROFILE%\Documents\My Videos                                }
+  CSIDL_DESKTOPDIRECTORY        = $0010; { %USERPROFILE%\Desktop                                            }
+  CSIDL_NETHOOD                 = $0013; { %USERPROFILE%\NetHood                                            }
+  CSIDL_TEMPLATES               = $0015; { %USERPROFILE%\Templates                                          }
+  CSIDL_COMMON_STARTMENU        = $0016; { %PROFILEPATH%\All users\Start menu                               }
+  CSIDL_COMMON_PROGRAMS         = $0017; { %PROFILEPATH%\All users\Start menu\Programs                      }
+  CSIDL_COMMON_STARTUP          = $0018; { %PROFILEPATH%\All users\Start menu\Programs\Startup              }
+  CSIDL_COMMON_DESKTOPDIRECTORY = $0019; { %PROFILEPATH%\All users\Desktop                                  }
+  CSIDL_APPDATA                 = $001A; { %USERPROFILE%\Application Data (roaming)                         }
+  CSIDL_PRINTHOOD               = $001B; { %USERPROFILE%\Printhood                                          }
+  CSIDL_LOCAL_APPDATA           = $001C; { %USERPROFILE%\Local Settings\Application Data (non roaming)      }
+  CSIDL_COMMON_FAVORITES        = $001F; { %PROFILEPATH%\All users\Favorites                                }
+  CSIDL_INTERNET_CACHE          = $0020; { %USERPROFILE%\Local Settings\Temporary Internet Files            }
+  CSIDL_COOKIES                 = $0021; { %USERPROFILE%\Cookies                                            }
+  CSIDL_HISTORY                 = $0022; { %USERPROFILE%\Local settings\History                             }
+  CSIDL_COMMON_APPDATA          = $0023; { %PROFILESPATH%\All Users\Application Data                        }
+  CSIDL_WINDOWS                 = $0024; { %SYSTEMROOT%                                                     }
+  CSIDL_SYSTEM                  = $0025; { %SYSTEMROOT%\SYSTEM32 (may be system on 95/98/ME)                }
+  CSIDL_PROGRAM_FILES           = $0026; { %SYSTEMDRIVE%\Program Files                                      }
+  CSIDL_MYPICTURES              = $0027; { %USERPROFILE%\My Documents\My Pictures                           }
+  CSIDL_PROFILE                 = $0028; { %USERPROFILE%                                                    }
+  CSIDL_PROGRAM_FILES_COMMON    = $002B; { %SYSTEMDRIVE%\Program Files\Common                               }
+  CSIDL_COMMON_TEMPLATES        = $002D; { %PROFILEPATH%\All Users\Templates                                }
+  CSIDL_COMMON_DOCUMENTS        = $002E; { %PROFILEPATH%\All Users\Documents                                }
+  CSIDL_COMMON_ADMINTOOLS       = $002F; { %PROFILEPATH%\All Users\Start Menu\Programs\Administrative Tools }
+  CSIDL_ADMINTOOLS              = $0030; { %USERPROFILE%\Start Menu\Programs\Administrative Tools           }
+  CSIDL_COMMON_MUSIC            = $0035; { %PROFILEPATH%\All Users\Documents\my music                       }
+  CSIDL_COMMON_PICTURES         = $0036; { %PROFILEPATH%\All Users\Documents\my pictures                    }
+  CSIDL_COMMON_VIDEO            = $0037; { %PROFILEPATH%\All Users\Documents\my videos                      }
+  CSIDL_CDBURN_AREA             = $003B; { %USERPROFILE%\Local Settings\Application Data\Microsoft\CD Burning }
+  CSIDL_PROFILES                = $003E; { %PROFILEPATH%                                                    }
+
+  CSIDL_FLAG_CREATE             = $8000; { (force creation of requested folder if it doesn't exist yet)     }
+
+{ Original entry points }
+
+Function SHGetFolderPathA(Ahwnd: HWND; Csidl: Integer; Token: THandle; Flags: DWord; Path: PChar): HRESULT; stdcall; external LibName name 'SHGetFolderPathA';
+Function SHGetFolderPathW(Ahwnd: HWND; Csidl: Integer; Token: THandle; Flags: DWord; Path: PChar): HRESULT; stdcall; external LibName name 'SHGetFolderPathW';
+
+Function SHGetFolderPath (Ahwnd: HWND; Csidl: Integer; Token: THandle; Flags: DWord; Path: PChar): HRESULT; stdcall; external LibName name 'SHGetFolderPathA';
+
+
+{ For Delphi compatibility }
+
+type
+  PFNSHGetFolderPathA = Function(Ahwnd: HWND; Csidl: Integer; Token: THandle; Flags: DWord; Path: PChar): HRESULT; stdcall;
+  PFNSHGetFolderPathW = Function(Ahwnd: HWND; Csidl: Integer; Token: THandle; Flags: DWord; Path: PChar): HRESULT; stdcall;
+  PFNSHGetFolderPath = PFNSHGetFolderPathA;
+
+  TSHGetFolderPathA = PFNSHGetFolderPathA;
+  TSHGetFolderPathW = PFNSHGetFolderPathW;
+  TSHGetFolderPath = TSHGetFolderPathA;
+
+implementation
+
+const
+  SHFolderDll = 'SHFolder.dll';
+
+end.
+{
+  $Log$
+  Revision 1.1  2005-03-28 15:09:35  peter
+  new winunits packages
+
+  Revision 1.4  2005/02/14 17:13:32  peter
+    * truncate log
+
+}

+ 19 - 0
packages/extra/winunits/shlobj.pp

@@ -0,0 +1,19 @@
+{
+  $Id$
+}
+unit shlobj;
+
+  interface
+
+  implementation
+
+end.
+{
+  $Log$
+  Revision 1.1  2005-03-28 15:09:35  peter
+  new winunits packages
+
+  Revision 1.2  2005/02/14 17:13:32  peter
+    * truncate log
+
+}

+ 0 - 0
packages/extra/winver/winver.pp → packages/extra/winunits/winver.pp


+ 0 - 17
packages/extra/winver/Makefile.fpc

@@ -1,17 +0,0 @@
-#
-#   Makefile.fpc for Winver unit
-#
-
-[package]
-name=winver
-version=1.9.8
-
-[target]
-units=winver
-examples=testver
-
-[install]
-fpcpackage=y
-
-[default]
-fpcdir=../../..