summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormarco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2>2008-01-05 19:00:24 +0000
committermarco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2>2008-01-05 19:00:24 +0000
commit590766ec86d3e2396100b1bbdbd454b813d27ce6 (patch)
treeee473cf18940da55e74b32c1b593ca28e13c4612
parent7b68c9617b9b36942619bc83e1d57d0c2aa354bf (diff)
downloadfpc-590766ec86d3e2396100b1bbdbd454b813d27ce6.tar.gz
* base units from base/winunits to winunits-base
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@9638 3ad0048d-3df7-0310-abae-a5850022a9f2
-rw-r--r--packages/winunits-base/Makefile2745
-rw-r--r--packages/winunits-base/Makefile.fpc30
-rw-r--r--packages/winunits-base/fpmake.inc24
-rw-r--r--packages/winunits-base/fpmake.pp17
-rw-r--r--packages/winunits-base/src/activex.pp3388
-rw-r--r--packages/winunits-base/src/buildwinutilsbase.pp29
-rw-r--r--packages/winunits-base/src/comconst.pp30
-rw-r--r--packages/winunits-base/src/commctrl.pp12471
-rw-r--r--packages/winunits-base/src/comobj.pp1060
-rw-r--r--packages/winunits-base/src/flatsb.pp115
-rw-r--r--packages/winunits-base/src/mmsystem.pp2702
-rw-r--r--packages/winunits-base/src/ole2.pp92
-rw-r--r--packages/winunits-base/src/oleserver.pp205
-rw-r--r--packages/winunits-base/src/richedit.pp632
-rw-r--r--packages/winunits-base/src/shellapi.pp938
-rw-r--r--packages/winunits-base/src/shfolder.pp108
-rw-r--r--packages/winunits-base/src/shlobj.pp75
-rw-r--r--packages/winunits-base/src/winver.pp75
18 files changed, 24736 insertions, 0 deletions
diff --git a/packages/winunits-base/Makefile b/packages/winunits-base/Makefile
new file mode 100644
index 0000000000..2e82ddcaf2
--- /dev/null
+++ b/packages/winunits-base/Makefile
@@ -0,0 +1,2745 @@
+#
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2008/01/05]
+#
+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-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded
+BSDs = freebsd netbsd openbsd darwin
+UNIXs = linux $(BSDs) solaris qnx
+LIMIT83fs = go32v2 os2 emx watcom
+OSNeedsComspecToRunBatch = go32v2 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 COMSPEC
+ifneq ($(findstring $(OS_SOURCE),$(OSNeedsComspecToRunBatch)),)
+RUNBATCH=$(COMSPEC) /C
+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))
+ifneq ($(CPU_TARGET),)
+FPC:=$(shell $(FPCPROG) -P$(CPU_TARGET) -PB)
+else
+FPC:=$(shell $(FPCPROG) -PB)
+endif
+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 $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
+override PACKAGE_NAME=winunits-base
+override PACKAGE_VERSION=2.2.0
+ifeq ($(FULL_TARGET),i386-linux)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override TARGET_UNITS+=buildwinutilsbase
+endif
+ifeq ($(FULL_TARGET),i386-linux)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver shfolder richedit
+endif
+ifeq ($(FULL_TARGET),i386-linux)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override TARGET_RSTS+=jwawintype comconst
+endif
+ifeq ($(FULL_TARGET),i386-linux)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override TARGET_EXAMPLES+=examples
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override TARGET_EXAMPLES+=examples
+endif
+override INSTALL_BUILDUNIT=buildwinutilsbase
+override INSTALL_FPCPACKAGE=y
+ifeq ($(FULL_TARGET),i386-linux)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override COMPILER_OPTIONS+=-Ur
+endif
+ifeq ($(FULL_TARGET),i386-linux)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override COMPILER_SOURCEDIR+=src
+endif
+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
+ifndef INSTALL_SHAREDDIR
+INSTALL_SHAREDDIR=$(INSTALL_PREFIX)/lib
+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
+SHAREDLIBPREFIX=libfp
+STATICLIBPREFIX=libp
+IMPORTLIBPREFIX=libimp
+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
+ifeq ($(OS_TARGET),gba)
+EXEEXT=.gba
+SHAREDLIBEXT=.so
+SHORTSUFFIX=gba
+endif
+ifeq ($(OS_TARGET),symbian)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=symbian
+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=.s
+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 /gtar$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(TARPROG),)
+TARPROG:=$(strip $(wildcard $(addsuffix /tar$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(TARPROG),)
+TARPROG= __missing_command_TARPROG
+else
+TARPROG:=$(firstword $(TARPROG))
+endif
+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=vj
+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-darwin)
+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),i386-wince)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+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),m68k-embedded)
+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-amiga)
+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),powerpc-embedded)
+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),sparc-embedded)
+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),x86_64-darwin)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+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
+ifneq ($(CPU_TARGET),$(CPU_SOURCE))
+override FPCOPT+=-P$(CPU_TARGET)
+endif
+ifeq ($(OS_SOURCE),openbsd)
+override FPCOPT+=-FD$(NEW_BINUTILS_PATH)
+endif
+ifndef CROSSBOOTSTRAP
+ifneq ($(BINUTILSPREFIX),)
+override FPCOPT+=-XP$(BINUTILSPREFIX)
+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
+ifneq ($(findstring 2.0.,$(FPC_VERSION)),)
+ifeq ($(CPU_TARGET),i386)
+FPCCPUOPT:=-OG2p3
+endif
+ifeq ($(CPU_TARGET),powerpc)
+FPCCPUOPT:=-O1r
+endif
+else
+FPCCPUOPT:=-O2
+endif
+override FPCOPT+=-Ur -Xs $(FPCCPUOPT) -n
+override FPCOPTDEF+=RELEASE
+endif
+ifdef STRIP
+override FPCOPT+=-Xs
+endif
+ifdef OPTIMIZE
+override FPCOPT+=-O2
+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
+ifdef CREATESHARED
+override FPCOPT+=-Cg
+ifeq ($(CPU_TARGET),i386)
+override FPCOPT+=-Aas
+endif
+endif
+ifeq ($(findstring 2.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),linux)
+ifeq ($(CPU_TARGET),x86_64)
+override FPCOPT+=-Cg
+endif
+endif
+endif
+ifdef LINKSHARED
+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 AFULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+override AFULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+ifneq ($(AFULL_TARGET),$(AFULL_SOURCE))
+override ACROSSCOMPILE=1
+endif
+ifdef ACROSSCOMPILE
+override FPCOPT+=$(CROSSOPT)
+endif
+override COMPILER:=$(FPC) $(FPCOPT)
+ifeq (,$(findstring -s ,$(COMPILER)))
+EXECPPAS=
+else
+ifeq ($(FULL_SOURCE),$(FULL_TARGET))
+ifdef RUNBATCH
+EXECPPAS:=@$(RUNBATCH) $(PPAS)
+else
+EXECPPAS:=@$(PPAS)
+endif
+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_examples
+ifneq ($(TARGET_EXAMPLES),)
+HASEXAMPLES=1
+override EXAMPLESOURCEFILES:=$(wildcard $(addsuffix .pp,$(TARGET_EXAMPLES)) $(addsuffix .pas,$(TARGET_EXAMPLES)) $(addsuffix .lpr,$(TARGET_EXAMPLES)) $(addsuffix .dpr,$(TARGET_EXAMPLES)))
+override EXAMPLEFILES:=$(addsuffix $(EXEEXT),$(TARGET_EXAMPLES))
+override EXAMPLEOFILES:=$(addsuffix $(OEXT),$(TARGET_EXAMPLES)) $(addprefix $(STATICLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_EXAMPLES))) $(addprefix $(IMPORTLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_EXAMPLES)))
+override CLEANEXEFILES+=$(EXAMPLEFILES) $(EXAMPLEOFILES)
+ifeq ($(OS_TARGET),os2)
+override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_EXAMPLES))
+endif
+ifeq ($(OS_TARGET),emx)
+override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_EXAMPLES))
+endif
+endif
+ifneq ($(TARGET_EXAMPLEDIRS),)
+HASEXAMPLES=1
+endif
+fpc_examples: all $(EXAMPLEFILES) $(addsuffix _all,$(TARGET_EXAMPLEDIRS))
+.PHONY: fpc_all fpc_smart fpc_debug fpc_release fpc_shared
+$(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 %.inc $(COMPILER_INCLUDEDIR)
+vpath %$(OEXT) $(COMPILER_UNITTARGETDIR)
+vpath %$(PPUEXT) $(COMPILER_UNITTARGETDIR)
+.PHONY: fpc_shared
+override INSTALLTARGET+=fpc_shared_install
+ifndef SHARED_LIBVERSION
+SHARED_LIBVERSION=$(FPC_VERSION)
+endif
+ifndef SHARED_LIBNAME
+SHARED_LIBNAME=$(PACKAGE_NAME)
+endif
+ifndef SHARED_FULLNAME
+SHARED_FULLNAME=$(SHAREDLIBPREFIX)$(SHARED_LIBNAME)-$(SHARED_LIBVERSION)$(SHAREDLIBEXT)
+endif
+ifndef SHARED_LIBUNITS
+SHARED_LIBUNITS:=$(TARGET_UNITS) $(TARGET_IMPLICITUNITS)
+override SHARED_LIBUNITS:=$(filter-out $(INSTALL_BUILDUNIT),$(SHARED_LIBUNITS))
+endif
+fpc_shared:
+ifdef HASSHAREDLIB
+ $(MAKE) all CREATESHARED=1 LINKSHARED=1 CREATESMART=1
+ifneq ($(SHARED_BUILD),n)
+ $(PPUMOVE) -q $(SHARED_LIBUNITS) -i$(COMPILER_UNITTARGETDIR) -o$(SHARED_FULLNAME) -d$(COMPILER_UNITTARGETDIR)
+endif
+else
+ @$(ECHO) Shared Libraries not supported
+endif
+fpc_shared_install:
+ifneq ($(SHARED_BUILD),n)
+ifneq ($(SHARED_LIBUNITS),)
+ifneq ($(wildcard $(COMPILER_UNITTARGETDIR)/$(SHARED_FULLNAME)),)
+ $(INSTALL) $(COMPILER_UNITTARGETDIR)/$(SHARED_FULLNAME) $(INSTALL_SHAREDDIR)
+endif
+endif
+endif
+.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))) $(addprefix $(IMPORTLIBPREFIX),$(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
+ifdef RUNBATCH
+ $(RUNBATCH) (ZIPWRAPPER)
+else
+ $(ZIPWRAPPER)
+endif
+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))) $(addprefix $(IMPORTLIBPREFIX),$(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: fpc_examples
+shared: fpc_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
+.NOTPARALLEL:
diff --git a/packages/winunits-base/Makefile.fpc b/packages/winunits-base/Makefile.fpc
new file mode 100644
index 0000000000..d760cce047
--- /dev/null
+++ b/packages/winunits-base/Makefile.fpc
@@ -0,0 +1,30 @@
+#
+# Makefile.fpc for WinUnits
+#
+
+[package]
+name=winunits-base
+version=2.2.0
+
+[target]
+units=buildwinutilsbase
+implicitunits=flatsb winver mmsystem comobj comconst commctrl ole2 activex shellapi shlobj oleserver \
+ shfolder richedit
+
+examples=examples
+
+rsts = jwawintype comconst
+
+[install]
+buildunit=buildwinutilsbase
+fpcpackage=y
+
+[default]
+fpcdir=../..
+
+[compiler]
+options=-Ur
+sourcedir=src
+
+[rules]
+.NOTPARALLEL:
diff --git a/packages/winunits-base/fpmake.inc b/packages/winunits-base/fpmake.inc
new file mode 100644
index 0000000000..46baeb8484
--- /dev/null
+++ b/packages/winunits-base/fpmake.inc
@@ -0,0 +1,24 @@
+ StartPackage('winunits-base');
+ {$IF defined(ALLPACKAGES)}
+ Directory:='winunits-base';
+ {$ELSEIF defined(EXTRAPACKAGES)}
+ Directory:='winunits-base';
+ {$ENDIF}
+ OS:=[win32,win64];
+ T:=Targets.AddUnit('buildwinutils');
+ T.Install:=False;
+ T:=Targets.AddUnit('activex');
+ T:=Targets.AddUnit('comconst');
+ T:=Targets.AddUnit('commctrl');
+ T:=Targets.AddUnit('comobj');
+ T:=Targets.AddUnit('flatsb');
+ T:=Targets.AddUnit('mmsystem');
+ T:=Targets.AddUnit('ole2');
+ T:=Targets.AddUnit('oleserver');
+ T:=Targets.AddUnit('richedit');
+ T:=Targets.AddUnit('shellapi');
+ T:=Targets.AddUnit('shfolder');
+ T:=Targets.AddUnit('shlobj');
+ T:=Targets.AddUnit('winver');
+ T:=Targets.AddExampleunit('examples');
+ EndPackage;
diff --git a/packages/winunits-base/fpmake.pp b/packages/winunits-base/fpmake.pp
new file mode 100644
index 0000000000..d4b6178682
--- /dev/null
+++ b/packages/winunits-base/fpmake.pp
@@ -0,0 +1,17 @@
+{$mode objfpc}{$H+}
+program fpmake;
+
+uses fpmkunit;
+
+Var
+ T : TTarget;
+
+begin
+ With Installer do
+ begin
+ { Base packages }
+ {$i fpmake.inc}
+ Run;
+ end;
+end.
+
diff --git a/packages/winunits-base/src/activex.pp b/packages/winunits-base/src/activex.pp
new file mode 100644
index 0000000000..7c79775dbc
--- /dev/null
+++ b/packages/winunits-base/src/activex.pp
@@ -0,0 +1,3388 @@
+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
+
+Uses variants,Windows,ctypes,types;
+
+
+type
+{ extra types }
+ TOleChar = Types.TOleChar;
+ POleStr = Types.POleStr;
+ PPOleStr = Types.PPOleStr;
+ TBStr = POleStr;
+ PBStr = ^TBStr;
+ TOleEnum = type LongWord;
+ LargeInt = Types.LargeInt;
+ LargeUInt = Types.LargeUInt;
+ PLargeInt = Types.PLargeInt;
+ PLargeUInt = Types.PLargeUInt;
+
+{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;
+
+CONST
+ GUID_NULL : TGUID = '{00000000-0000-0000-0000-000000000000}';
+
+ // 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;
+
+ DISPATCH_METHOD = $1;
+ DISPATCH_PROPERTYGET = $2;
+ DISPATCH_PROPERTYPUT = $4;
+ DISPATCH_PROPERTYPUTREF = $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;
+
+ PSYSINT = ^SYSINT;
+ SYSINT = LongInt;
+ PSYSUINT = ^SYSUINT;
+ SYSUINT = LongWord;
+
+// 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: IUnknown; // get these out (you must set to NULL before calling)
+ hr : HResult;
+ END;
+ MULTI_QI = TagMULTI_QI;
+ PMulti_QI = PMultiQI;
+ TMultiQI = tagMULTI_QI;
+
+ PMultiQIArray = ^TMultiQIArray;
+ TMultiQIArray = array[0..65535] of TMultiQI;
+
+
+ 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 = types.tagSTATSTG;
+
+ TStatStg = tagSTATSTG;
+ PStatStg = types.PStatStg;
+ 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;
+
+ tagSAFEARRAY = record
+ cDims: USHORT;
+ fFeatures: USHORT;
+ cbElements: ULONG;
+ cLocks: ULONG;
+ pvData: PVOID;
+ rgsabound: array[0..0] of SAFEARRAYBOUND;
+ end;
+ TSafeArray = tagSAFEARRAY;
+ SAFEARRAY = TSafeArray;
+ PSafeArray = ^TSafeArray;
+
+// 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;
+ rgdispidNamedArgs : lpDISPID;
+ cArgs,
+ cNamedArgs : UINT;
+ End;
+ DISPPARAMS = tagDISPPARAMS;
+ TDispParams = tagDISPPARAMS;
+ PDispParams = ^TDispParams;
+
+ PExcepInfo = ^TExcepInfo;
+ TFNDeferredFillIn = function(info : PExcepInfo): HRESULT;stdcall;
+ 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 : ULONG; // 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 : pointer;
+ pfnDeferredFillIn : TFNDeferredFillIn;
+ SCODE : scode;
+ End;
+
+ EXCEPINFO = tagEXCEPINFO;
+ TExcepInfo = 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;
+
+
+// Forward interfaces.
+
+ IStream = Types.IStream;
+ 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;
+
+ PLicInfo = ^TLicInfo;
+ tagLICINFO = record
+ cbLicInfo : ULONG;
+ fRuntimeKeyAvail : BOOL;
+ fLicVerified : BOOL;
+ end;
+ TLicInfo = tagLICINFO;
+ LICINFO = TLicInfo;
+
+ IClassFactory2 = interface(IClassFactory)
+ ['{B196B28F-BAB4-101A-B69C-00AA00341D07}']
+ function GetLicInfo(var licInfo: TLicInfo): HResult; stdcall;
+ function RequestLicKey(dwResrved: DWORD; out bstrKey: WideString): HResult; stdcall;
+ function CreateInstanceLic(const unkOuter: IUnknown; const unkReserved: IUnknown;
+ const iid: TIID; const bstrKey: WideString; out vObject): 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 = Types.ISequentialStream;
+ {interface(IUnknown)
+ ['{0c733a30-2a1c-11ce-ade5-00aa0044773d}']
+ function Read(pv : Pointer;cb : ULONG;pcbRead : PULONG) : HRESULT;stdcall;
+ function Write(pv : Pointer;cb : ULONG;pcbWritten : PULONG): HRESULT;stdcall;
+ end;
+ }
+
+ { defined above by pulling it in from types IStream = interface(ISequentialStream)
+ ['{0000000C-0000-0000-C000-000000000046}']
+ function Seek(dlibMove : LargeInt; dwOrigin: Longint;
+ out libNewPosition : LargeInt): HResult; stdcall;
+ function SetSize(libNewSize : LargeInt) : HRESULT;stdcall;
+ function CopyTo(stm: IStream;cb : LargeInt;out cbRead : LargeInt;
+ out cbWritten: LargeInt) : HRESULT;stdcall;
+ function Commit(grfCommitFlags : Longint) : HRESULT; stdcall;
+ function Revert : HRESULT; stdcall;
+ function LockRegion(libOffset : LargeInt;cb : LargeInt;
+ dwLockType: Longint) : HRESULT;stdcall;
+ function UnlockRegion(libOffset: LargeInt;cb: LargeInt;
+ 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 GetCanonicalFormatEtc(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 EnumDAdvise(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;
+
+
+ tagOleMenuGroupWidths = record
+ width : array[0..5] Of LONG;
+ end;
+ OLEMENUGROUPWIDTHS = tagOleMenuGroupWidths;
+ TOleMenuGroupWidths = tagOleMenuGroupWidths;
+ LPOLEMENUGROUPWIDTHS = ^OLEMENUGROUPWIDTHS;
+ POleMenuGroupWidths = LPOLEMENUGROUPWIDTHS;
+
+
+ IProvideClassInfo = Interface (IUnknown)
+ ['{B196B283-BAB4-101A-B69C-00AA00341D07}']
+ function GetClassInfo(out pptti : ITypeInfo):HResult; StdCall;
+ end;
+ IProvideClassInfo2 = Interface (IProvideClassInfo)
+ ['{A6BC3AC0-DBAA-11CE-9DE3-00AA004BB851}']
+ function GetGUID(dwguid:DWord;out pguid:TGUID):HResult; StdCall;
+ end;
+
+{ ******************************************************************************************************************
+ stuff from objbase.h
+ ****************************************************************************************************************** }
+
+{ 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';
+
+{ OleIdl.h }
+type
+ IOleInPlaceActiveObject = interface;
+
+ IOleAdviseHolder = interface(IUnknown)
+ ['{00000111-0000-0000-C000-000000000046}']
+ function Advise(const advise: IAdviseSink; out dwConnection: DWORD): HResult;StdCall;
+ function Unadvise(dwConnection: DWORD): HResult;StdCall;
+ function EnumAdvise(out enumAdvise: IEnumStatData): HResult;StdCall;
+ function SendOnRename(const mk: IMoniker): HResult;StdCall;
+ function SendOnSave: HResult;StdCall;
+ function SendOnClose: HResult;StdCall;
+ end;
+
+ IEnumOLEVERB = interface(IUnknown)
+ ['{00000104-0000-0000-C000-000000000046}']
+ function Next(celt: ULONG; out elt; pceltFetched: PULONG): HResult;StdCall;
+ function Skip(celt: ULONG): HResult;StdCall;
+ function Reset: HResult;StdCall;
+ function Clone(out ppenum: IEnumOLEVERB): HResult;StdCall;
+ end;
+
+ IDropSource = interface(IUnknown)
+ ['{00000121-0000-0000-C000-000000000046}']
+ function QueryContinueDrag(fEscapePressed: BOOL;
+ grfKeyState: Longint):HResult;StdCall;
+ function GiveFeedback(dwEffect: Longint): HResult;StdCall;
+ end;
+
+ IOleObject = interface(IUnknown)
+ ['{00000112-0000-0000-C000-000000000046}']
+ function SetClientSite(const clientSite: IOleClientSite): HResult;StdCall;
+ function GetClientSite(out clientSite: IOleClientSite): HResult;StdCall;
+ function SetHostNames(szContainerApp: POleStr; szContainerObj: POleStr): HResult;StdCall;
+ function Close(dwSaveOption: DWORD): HResult;StdCall;
+ function SetMoniker(dwWhichMoniker: DWORD; const mk: IMoniker): HResult;StdCall;
+ function GetMoniker(dwAssign: DWORD; dwWhichMoniker: DWORD; out mk: IMoniker): HResult;StdCall;
+ function InitFromData(const dataObject: IDataObject; fCreation: BOOL; dwReserved: DWORD): HResult;StdCall;
+ function GetClipboardData(dwReserved: DWORD; out dataObject: IDataObject): HResult;StdCall;
+ function DoVerb(iVerb: LONG; msg: PMsg; const activeSite: IOleClientSite; lindex: LONG; hwndParent: HWND; const posRect: TRect): HResult;StdCall;
+ function EnumVerbs(out enumOleVerb: IEnumOleVerb): HResult;StdCall;
+ function Update: HResult;StdCall;
+ function IsUpToDate: HResult;StdCall;
+ function GetUserClassID(out clsid: TCLSID): HResult;StdCall;
+ function GetUserType(dwFormOfType: DWORD; out pszUserType: POleStr): HResult;StdCall;
+ function SetExtent(dwDrawAspect: DWORD; const size: TPoint): HResult;StdCall;
+ function GetExtent(dwDrawAspect: DWORD; out size: TPoint): HResult;StdCall;
+ function Advise(const advSink: IAdviseSink; out dwConnection: Longint): HResult;StdCall;
+ function Unadvise(dwConnection: DWORD): HResult;StdCall;
+ function EnumAdvise(out enumAdvise: IEnumStatData): HResult;StdCall;
+ function GetMiscStatus(dwAspect: DWORD; out dwStatus: DWORD): HResult;StdCall;
+ function SetColorScheme(const logpal: TLogPalette): HResult;StdCall;
+ end;
+
+ IDropTarget = interface(IUnknown)
+ ['{00000122-0000-0000-C000-000000000046}']
+ function DragEnter(const dataObj: IDataObject; grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD): HResult;StdCall;
+ function DragOver(grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD): HResult;StdCall;
+ function DragLeave: HResult;StdCall;
+ function Drop(const dataObj: IDataObject; grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD):HResult;StdCall;
+ end;
+
+ IOleInPlaceUIWindow = interface(IOleWindow)
+ ['{00000115-0000-0000-C000-000000000046}']
+ function GetBorder(out rectBorder: TRect):HResult;StdCall;
+ function RequestBorderSpace(const borderwidths: TRect):HResult;StdCall;
+ function SetBorderSpace(const borderwidths: TRect):HResult;StdCall;
+ function SetActiveObject(const activeObject: IOleInPlaceActiveObject;pszObjName: POleStr):HResult;StdCall;
+ end;
+
+ IOleInPlaceActiveObject = interface(IOleWindow)
+ ['{00000117-0000-0000-C000-000000000046}']
+ function TranslateAccelerator(var msg: TMsg):HResult;StdCall;
+ function OnFrameWindowActivate(fActivate: BOOL):HResult;StdCall;
+ function OnDocWindowActivate(fActivate: BOOL):HResult;StdCall;
+ function ResizeBorder(const rcBorder: TRect; const uiWindow: IOleInPlaceUIWindow; fFrameWindow: BOOL):HResult;StdCall;
+ function EnableModeless(fEnable: BOOL):HResult;StdCall;
+ end;
+
+ IOleInPlaceFrame = interface(IOleInPlaceUIWindow)
+ ['{00000116-0000-0000-C000-000000000046}']
+ function InsertMenus(hmenuShared: HMenu; var menuWidths: TOleMenuGroupWidths): HResult;StdCall;
+ function SetMenu(hmenuShared: HMenu; holemenu: HMenu; hwndActiveObject: HWnd): HResult;StdCall;
+ function RemoveMenus(hmenuShared: HMenu): HResult;StdCall;
+ function SetStatusText(pszStatusText: POleStr): HResult;StdCall;
+ function EnableModeless(fEnable: BOOL): HResult;StdCall;
+ function TranslateAccelerator(var msg: TMsg; wID: Word): HResult;StdCall;
+ end;
+
+ tagOIFI = record
+ cb: UINT;
+ fMDIApp: BOOL;
+ hwndFrame: HWND;
+ haccel: HAccel;
+ cAccelEntries: UINT;
+ end;
+ TOleInPlaceFrameInfo = tagOIFI;
+ POleInPlaceFrameInfo = ^TOleInPlaceFrameInfo;
+ OLEINPLACEFRAMEINFO = tagOIFI;
+
+{ ole2.h }
+
+ type
+ WINOLEAPI = HResult;
+ TLCID = DWORD;
+
+ const
+ OLEIVERB_PRIMARY = 0;
+ OLEIVERB_SHOW = -(1);
+ OLEIVERB_OPEN = -(2);
+ OLEIVERB_HIDE = -(3);
+ OLEIVERB_UIACTIVATE = -(4);
+ OLEIVERB_INPLACEACTIVATE = -(5);
+ OLEIVERB_DISCARDUNDOSTATE = -(6);
+ { for OleCreateEmbeddingHelper flags; roles low word; options high word }
+ EMBDHLP_INPROC_HANDLER = $0000;
+ EMBDHLP_INPROC_SERVER = $0001;
+ EMBDHLP_CREATENOW = $00000000;
+ EMBDHLP_DELAYCREATE = $00010000;
+ { extended create function flags }
+ OLECREATE_LEAVERUNNING = $00000001;
+ { pull the MIDL generated header }
+
+ function OleBuildVersion:DWORD;stdcall;external 'ole32.dll' name 'OleBuildVersion';
+
+ { helper functions }
+ function ReadClassStg(pStg:IStorage; pclsid:PCLSID):WINOLEAPI;stdcall;external 'ole32.dll' name 'ReadClassStg';
+
+ function WriteClassStg(pStg:IStorage;const rclsid:TLCID):WINOLEAPI;stdcall;external 'ole32.dll' name 'WriteClassStg';
+
+ function ReadClassStm(pStm:IStream; pclsid:PCLSID):WINOLEAPI;stdcall;external 'ole32.dll' name 'ReadClassStm';
+
+ function WriteClassStm(pStm:IStream;const rclsid:TLCID):WINOLEAPI;stdcall;external 'ole32.dll' name 'WriteClassStm';
+
+ function WriteFmtUserTypeStg(pstg:IStorage; cf:CLIPFORMAT; lpszUserType:LPOLESTR):WINOLEAPI;stdcall;external 'ole32.dll' name 'WriteFmtUserTypeStg';
+
+ function ReadFmtUserTypeStg(pstg:IStorage; pcf:PCLIPFORMAT;out lplpszUserType:POleStr):WINOLEAPI;stdcall;external 'ole32.dll' name 'ReadFmtUserTypeStg';
+
+ { init/term }
+ function OleInitialize(pvReserved:LPVOID):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleInitialize';
+
+ procedure OleUninitialize;stdcall;external 'ole32.dll' name 'OleUninitialize';
+
+ { APIs to query whether (Embedded/Linked) object can be created from
+ the data object }
+ function OleQueryLinkFromData(pSrcDataObject:IDataObject):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleQueryLinkFromData';
+
+ function OleQueryCreateFromData(pSrcDataObject:IDataObject):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleQueryCreateFromData';
+
+ { Object creation APIs } function OleCreate(const rclsid:TLCID; const riid:TIID;
+ renderopt:DWORD; pFormatEtc:LPFORMATETC; pClientSite:IOleClientSite;
+ pStg:IStorage; out ppvObj):WINOLEAPI;stdcall;external 'ole32.dll' name
+ 'OleCreate';
+
+ function OleCreateEx(const rclsid:TLCID; const riid:TIID; dwFlags:DWORD; renderopt:DWORD; cFormats:ULONG;
+ rgAdvf:PDWORD; rgFormatEtc:LPFORMATETC; lpAdviseSink:IAdviseSink; rgdwConnection:PDWORD; pClientSite:IOleClientSite;
+ pStg:IStorage; out ppvObj):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleCreateEx';
+
+ function OleCreateFromData(pSrcDataObj:IDataObject; const riid:TIID; renderopt:DWORD; pFormatEtc:LPFORMATETC; pClientSite:IOleClientSite;
+ pStg:IStorage; out ppvObj):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleCreateFromData';
+
+ function OleCreateFromDataEx(pSrcDataObj:IDataObject; const riid:TIID; dwFlags:DWORD; renderopt:DWORD; cFormats:ULONG;
+ rgAdvf:PDWORD; rgFormatEtc:LPFORMATETC; lpAdviseSink:IAdviseSink; rgdwConnection:PDWORD; pClientSite:IOleClientSite;
+ pStg:IStorage; out ppvObj):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleCreateFromDataEx';
+
+ function OleCreateLinkFromData(pSrcDataObj:IDataObject; const riid:TIID; renderopt:DWORD; pFormatEtc:LPFORMATETC; pClientSite:IOleClientSite;
+ pStg:IStorage; out ppvObj):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleCreateLinkFromData';
+
+ function OleCreateLinkFromDataEx(pSrcDataObj:IDataObject; const riid:TIID; dwFlags:DWORD; renderopt:DWORD; cFormats:ULONG;
+ rgAdvf:PDWORD; rgFormatEtc:LPFORMATETC; lpAdviseSink:IAdviseSink; rgdwConnection:PDWORD; pClientSite:IOleClientSite;
+ pStg:IStorage; out ppvObj):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleCreateLinkFromDataEx';
+
+ function OleCreateStaticFromData(pSrcDataObj:IDataObject; const iid:TIID; renderopt:DWORD; pFormatEtc:LPFORMATETC; pClientSite:IOleClientSite;
+ pStg:IStorage; out ppvObj):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleCreateStaticFromData';
+
+ function OleCreateLink(pmkLinkSrc:IMoniker; constriid:TIID; renderopt:DWORD; lpFormatEtc:LPFORMATETC; pClientSite:IOleClientSite;
+ pStg:IStorage; out ppvObj):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleCreateLink';
+
+ function OleCreateLinkEx(pmkLinkSrc:IMoniker; const riid:TIID; dwFlags:DWORD; renderopt:DWORD; cFormats:ULONG;
+ rgAdvf:PDWORD; rgFormatEtc:LPFORMATETC; lpAdviseSink:IAdviseSink; rgdwConnection:PDWORD; pClientSite:IOleClientSite;
+ pStg:IStorage; out ppvObj):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleCreateLinkEx';
+
+ function OleCreateLinkToFile(lpszFileName:POleStr; const riid:TIID; renderopt:DWORD; lpFormatEtc:LPFORMATETC; pClientSite:IOleClientSite;
+ pStg:IStorage; out ppvObj):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleCreateLinkToFile';
+
+ function OleCreateLinkToFileEx(lpszFileName:POleStr; const riid:TIID; dwFlags:DWORD; renderopt:DWORD; cFormats:ULONG;
+ rgAdvf:PDWORD; rgFormatEtc:LPFORMATETC; lpAdviseSink:IAdviseSink; rgdwConnection:PDWORD; pClientSite:IOleClientSite;
+ pStg:IStorage; out ppvObj):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleCreateLinkToFileEx';
+
+ function OleCreateFromFile(const rclsid:TLCID; lpszFileName:POleStr; const riid:TIID; renderopt:DWORD; lpFormatEtc:LPFORMATETC;
+ pClientSite:IOleClientSite; pStg:IStorage; out ppvObj):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleCreateFromFile';
+
+ function OleCreateFromFileEx(const rclsid:TLCID; lpszFileName:POleStr; const riid:TIID; dwFlags:DWORD; renderopt:DWORD;
+ cFormats:ULONG; rgAdvf:PDWORD; rgFormatEtc:LPFORMATETC; lpAdviseSink:IAdviseSink; rgdwConnection:PDWORD;
+ pClientSite:IOleClientSite; pStg:IStorage; out ppvObj):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleCreateFromFileEx';
+
+ function OleLoad(pStg:IStorage; const riid:TIID; pClientSite:IOleClientSite; out ppvObj):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleLoad';
+
+ function OleSave(pPS:IPersistStorage; pStg:IStorage; fSameAsLoad:BOOL):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleSave';
+
+ function OleLoadFromStream(pStm:IStream; const iidInterface:TIID; out ppvObj):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleLoadFromStream';
+
+ function OleSaveToStream(pPStm:IPersistStream; pStm:IStream):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleSaveToStream';
+
+ function OleSetContainedObject(pUnknown:IUnknown; fContained:BOOL):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleSetContainedObject';
+
+ function OleNoteObjectVisible(pUnknown:IUnknown; fVisible:BOOL):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleNoteObjectVisible';
+
+ { Drag/Drop APIs }
+ function RegisterDragDrop(hwnd:HWND; pDropTarget:IDropTarget):WINOLEAPI;stdcall;external 'ole32.dll' name 'RegisterDragDrop';
+
+ function RevokeDragDrop(hwnd:HWND):WINOLEAPI;stdcall;external 'ole32.dll' name 'RevokeDragDrop';
+
+ function DoDragDrop(pDataObj:IDataObject; pDropSource:IDropSource; dwOKEffects:DWORD; pdwEffect:LPDWORD):WINOLEAPI;stdcall;external 'ole32.dll' name 'DoDragDrop';
+
+ { Clipboard APIs }
+ function OleSetClipboard(pDataObj:IDataObject):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleSetClipboard';
+
+ function OleGetClipboard(out ppDataObj:IDataObject):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleGetClipboard';
+
+ function OleFlushClipboard:WINOLEAPI;stdcall;external 'ole32.dll' name 'OleFlushClipboard';
+
+ function OleIsCurrentClipboard(pDataObj:IDataObject):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleIsCurrentClipboard';
+
+type
+ HOLEMENU = HMenu;
+
+ { InPlace Editing APIs }
+ function OleCreateMenuDescriptor(hmenuCombined:HMENU; lpMenuWidths:LPOLEMENUGROUPWIDTHS):HOLEMENU;stdcall;external 'ole32.dll' name 'OleCreateMenuDescriptor';
+
+ function OleSetMenuDescriptor(holemenu:HOLEMENU; hwndFrame:HWND; hwndActiveObject:HWND; lpFrame:IOleInPlaceFrame; lpActiveObj:IOleInPlaceActiveObject):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleSetMenuDescriptor';
+
+ function OleDestroyMenuDescriptor(holemenu:HOLEMENU):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleDestroyMenuDescriptor';
+
+ function OleTranslateAccelerator(lpFrame:IOleInPlaceFrame; lpFrameInfo:TOleInPlaceFrameInfo; lpmsg:LPMSG):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleTranslateAccelerator';
+
+ { Helper APIs }
+ function OleDuplicateData(hSrc:HANDLE; cfFormat:CLIPFORMAT; uiFlags:UINT):HANDLE;stdcall;external 'ole32.dll' name 'OleDuplicateData';
+
+ function OleDraw(pUnknown:IUnknown; dwAspect:DWORD; hdcDraw:HDC;const lprcBounds:TRect):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleDraw';
+
+ function OleRun(pUnknown:IUnknown):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleRun';
+
+ function OleIsRunning(pObject:IOleObject):BOOL;stdcall;external 'ole32.dll' name 'OleIsRunning';
+
+ function OleLockRunning(pUnknown:IUnknown; fLock:BOOL; fLastUnlockCloses:BOOL):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleLockRunning';
+
+ procedure ReleaseStgMedium(_para1:LPSTGMEDIUM);stdcall;external 'ole32.dll' name 'ReleaseStgMedium';
+
+ function CreateOleAdviseHolder(out ppOAHolder:IOleAdviseHolder):WINOLEAPI;stdcall;external 'ole32.dll' name 'CreateOleAdviseHolder';
+
+ function OleCreateDefaultHandler(const clsid:TLCID; pUnkOuter:IUnknown; const riid:TIID; out lplpObj):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleCreateDefaultHandler';
+
+ function OleCreateEmbeddingHelper(const clsid:TLCID; pUnkOuter:IUnknown; flags:DWORD; pCF:IClassFactory; const riid:TIID;
+ out lplpObj):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleCreateEmbeddingHelper';
+
+ function IsAccelerator(hAccel:HACCEL; cAccelEntries:longint; lpMsg:LPMSG; lpwCmd:PWORD):BOOL;stdcall;external 'ole32.dll' name 'IsAccelerator';
+
+ { Icon extraction Helper APIs }
+ function OleGetIconOfFile(lpszPath:LPOLESTR; fUseFileAsLabel:BOOL):HGLOBAL;stdcall;external 'ole32.dll' name 'OleGetIconOfFile';
+
+ function OleGetIconOfClass(const rclsid:TLCID; lpszLabel:LPOLESTR; fUseTypeAsLabel:BOOL):HGLOBAL;stdcall;external 'ole32.dll' name 'OleGetIconOfClass';
+
+ function OleMetafilePictFromIconAndLabel(hIcon:HICON; lpszLabel:LPOLESTR; lpszSourceFile:LPOLESTR; iIconIndex:UINT):HGLOBAL;stdcall;external 'ole32.dll' name 'OleMetafilePictFromIconAndLabel';
+
+ { Registration Database Helper APIs }
+ function OleRegGetUserType(const clsid:TLCID; dwFormOfType:DWORD;out pszUserType:POleStr):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleRegGetUserType';
+
+ function OleRegGetMiscStatus(const clsid:TLCID; dwAspect:DWORD; pdwStatus:PDWORD):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleRegGetMiscStatus';
+
+ function OleRegEnumFormatEtc(const clsid:TLCID; dwDirection:DWORD;out ppenum:IEnumFormatEtc):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleRegEnumFormatEtc';
+
+ function OleRegEnumVerbs(const clsid:TLCID;out ppenum:IEnumOLEVERB):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleRegEnumVerbs';
+
+{$ifdef _MAC}
+ { WlmOLE helper APIs }
+
+ function WlmOleCheckoutMacInterface(pUnk:IUnknown; out ppv):WINOLEAPI;stdcall;external 'ole32.dll' name 'WlmOleCheckoutMacInterface';
+
+ function WlmOleCheckinMacInterface(pUnk:IUnknown):WINOLEAPI;stdcall;external 'ole32.dll' name 'WlmOleCheckinMacInterface';
+
+ function WlmOleWrapMacInterface(pUnk:IUnknown; const riid:TIID; out ppv):WINOLEAPI;stdcall;external 'ole32.dll' name 'WlmOleWrapMacInterface';
+
+ function WlmOleUnwrapMacInterface(pv:LPVOID):WINOLEAPI;stdcall;external 'ole32.dll' name 'WlmOleUnwrapMacInterface';
+
+ function WlmOleCheckoutWinInterface(pUnk:LPVOID; ppv:PIUnknown):WINOLEAPI;stdcall;external 'ole32.dll' name 'WlmOleCheckoutWinInterface';
+
+ function WlmOleCheckinWinInterface(pUnk:LPVOID):WINOLEAPI;stdcall;external 'ole32.dll' name 'WlmOleCheckinWinInterface';
+
+ function WlmOleWrapWinInterface(pUnk:LPVOID; const riid:TIID; ppv:PIUnknown):WINOLEAPI;stdcall;external 'ole32.dll' name 'WlmOleWrapWinInterface';
+
+ function WlmOleUnwrapWinInterface(pv:LPVOID):WINOLEAPI;stdcall;external 'ole32.dll' name 'WlmOleUnwrapWinInterface';
+
+ procedure WlmOleVersion;stdcall;external 'ole32.dll' name 'WlmOleVersion';
+
+ procedure WlmOleSetInPlaceWindow(hwnd:HWND);stdcall;external 'ole32.dll' name 'WlmOleSetInPlaceWindow';
+
+ { typedef HRESULT (STDAPICALLTYPE* OLEWRAPPROC) (TIID riid, LPVOID* ppvWin, LPVOID* ppvMac); }
+ function WlmOleRegisterUserWrap(procNew:OLEWRAPPROC; pprocOld:POLEWRAPPROC):WINOLEAPI;stdcall;external 'ole32.dll' name 'WlmOleRegisterUserWrap';
+
+{$endif}
+ { OLE 1.0 conversion APIS }
+ {**** OLE 1.0 OLESTREAM declarations ************************************ }
+
+ type
+ LPOLESTREAM = ^_OLESTREAM;
+ _OLESTREAMVTBL = record
+ Get : function (p : POleStr;out o;dw : DWORD) : DWORD;
+ Put : function (p : POleStr;const o;dw : DWORD) : DWORD;
+ end;
+ OLESTREAMVTBL = _OLESTREAMVTBL;
+
+ LPOLESTREAMVTBL = OLESTREAMVTBL;
+
+ _OLESTREAM = record
+ lpstbl : LPOLESTREAMVTBL;
+ end;
+ OLESTREAM = _OLESTREAM;
+(* Const before type ignored *)
+
+ function OleConvertOLESTREAMToIStorage(_lpolestream:LPOLESTREAM; pstg:IStorage; ptd:PDVTARGETDEVICE):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleConvertOLESTREAMToIStorage';
+
+ function OleConvertIStorageToOLESTREAM(pstg:IStorage; lpolestream:LPOLESTREAM):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleConvertIStorageToOLESTREAM';
+
+ { Storage Utility APIs }
+ function GetHGlobalFromILockBytes(plkbyt:ILockBytes;out phglobal:HGLOBAL):WINOLEAPI;stdcall;external 'ole32.dll' name 'GetHGlobalFromILockBytes';
+
+ function CreateILockBytesOnHGlobal(hGlobal:HGLOBAL; fDeleteOnRelease:BOOL;out pplkbyt:ILockBytes):WINOLEAPI;stdcall;external 'ole32.dll' name 'CreateILockBytesOnHGlobal';
+
+ function GetHGlobalFromStream(pstm:IStream;out phglobal:HGLOBAL):WINOLEAPI;stdcall;external 'ole32.dll' name 'GetHGlobalFromStream';
+
+ function CreateStreamOnHGlobal(hGlobal:HGLOBAL; fDeleteOnRelease:BOOL;out stm:IStream):WINOLEAPI;stdcall;external 'ole32.dll' name 'CreateStreamOnHGlobal';
+
+ { ConvertTo APIS }
+ function OleDoAutoConvert(pStg:IStorage; pClsidNew:LPCLSID):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleDoAutoConvert';
+
+ function OleGetAutoConvert(const clsidOld:TLCID; pClsidNew:LPCLSID):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleGetAutoConvert';
+
+ function OleSetAutoConvert(const clsidOld:TLCID; clsidNew:TLCID):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleSetAutoConvert';
+
+ function GetConvertStg(pStg:IStorage):WINOLEAPI;stdcall;external 'ole32.dll' name 'GetConvertStg';
+
+ function SetConvertStg(pStg:IStorage; fConvert:BOOL):WINOLEAPI;stdcall;external 'ole32.dll' name 'SetConvertStg';
+
+ { Presentation data to OLESTREAM }
+ { format }
+ { width }
+ { height }
+ { size bytes }
+ { bits }
+ function OleConvertIStorageToOLESTREAMEx(pstg:IStorage; cfFormat:CLIPFORMAT; lWidth:LONG; lHeight:LONG; dwSize:DWORD;
+ pmedium:LPSTGMEDIUM; polestm:LPOLESTREAM):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleConvertIStorageToOLESTREAMEx';
+
+ { Presentation data from OLESTREAM }
+ { format }
+ { width }
+ { height }
+ { size bytes }
+ function OleConvertOLESTREAMToIStorageEx(polestm:LPOLESTREAM; pstg:IStorage; pcfFormat:PCLIPFORMAT; plwWidth:PLONG; plHeight:PLONG;
+ pdwSize:PDWORD; pmedium:LPSTGMEDIUM):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleConvertOLESTREAMToIStorageEx';
+
+
+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;
+
+
+
+ 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 CLSIDFromProgID(_para1:POLESTR; out _para2:TCLSID):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';
+
+ type
+ TDispID = DISPID;
+
+ TDispIDList = array[0..65535] of TDispID;
+ PDispIDList = ^TDispIDList;
+
+ REFIID = TIID;
+ TREFIID = TIID;
+
+ function SetErrorInfo(dwReserved:ULONG;errinfo:IErrorInfo):HResult;stdcall; external 'ole32.dll' name 'SetErrorInfo';
+ function GetErrorInfo(dwReserved:ULONG;out errinfo:IErrorInfo):HResult;stdcall; external 'ole32.dll' name 'GetErrorInfo';
+ function CreateErrorInfo(out errinfo:ICreateErrorInfo):HResult;stdcall; external 'ole32.dll' name 'CreateErrorInfo';
+
+ const
+ oleaut32dll = 'oleaut32.dll';
+
+ function SysAllocString(psz: pointer): Integer; external oleaut32dll name 'SysAllocString';
+ function SysAllocStringLen(psz: pointer; len:dword): Integer; external oleaut32dll name 'SysAllocStringLen';
+ procedure SysFreeString(bstr:pointer); external oleaut32dll name 'SysFreeString';
+ function SysStringLen(bstr:pointer):UINT; external oleaut32dll name 'SysStringLen';
+ function SysReAllocString(var bstr:pointer;psz: pointer): Integer; external oleaut32dll name 'SysReAllocString';
+ function SysReAllocStringLen(var bstr:pointer;psz: pointer; len:dword): Integer; external oleaut32dll name 'SysReAllocStringLen';
+
+ { Active object registration API }
+ const
+ ACTIVEOBJECT_STRONG = 0;
+ ACTIVEOBJECT_WEAK = 1;
+
+ function RegisterActiveObject(unk: IUnknown; const clsid: TCLSID; dwFlags: DWORD; out dwRegister: culong): HResult; external oleaut32dll name 'RegisterActiveObject';
+ function RevokeActiveObject(dwRegister: culong; pvReserved: Pointer) : HResult; external oleaut32dll name 'RevokeActiveObject';
+ function GetActiveObject(const clsid: TCLSID; pvReserved: Pointer; out unk: IUnknown) : HResult; external oleaut32dll name 'GetActiveObject';
+
+function Succeeded(Res: HResult) : Boolean;inline;
+function Failed(Res: HResult) : Boolean;inline;
+function ResultCode(Res: HResult) : Longint;inline;
+function ResultFacility(Res: HResult): Longint;inline;
+function ResultSeverity(Res: HResult): Longint;inline;
+function MakeResult(Severity, Facility, Code: Longint): HResult;inline;
+
+implementation
+
+function Succeeded(Res: HResult) : Boolean;inline;
+ begin
+ Result := Res and $80000000 = 0;
+ end;
+
+
+function Failed(Res: HResult) : Boolean;inline;
+ begin
+ Result := Res and $80000000 <> 0;
+ end;
+
+
+function ResultCode(Res: HResult) : Longint;inline;
+ begin
+ Result := Res and $0000FFFF;
+ end;
+
+
+function ResultFacility(Res: HResult): Longint;inline;
+ begin
+ Result := (Res shr 16) and $00001FFF;
+ end;
+
+
+function ResultSeverity(Res: HResult): Longint;inline;
+ begin
+ Result := Res shr 31;
+ end;
+
+
+function MakeResult(Severity, Facility, Code: Longint): HResult;inline;
+ begin
+ Result := (Severity shl 31) or (Facility shl 16) or Code;
+ end;
+
+
+end.
diff --git a/packages/winunits-base/src/buildwinutilsbase.pp b/packages/winunits-base/src/buildwinutilsbase.pp
new file mode 100644
index 0000000000..e226f2e69f
--- /dev/null
+++ b/packages/winunits-base/src/buildwinutilsbase.pp
@@ -0,0 +1,29 @@
+{
+ Dummy unit to compile everything in one go
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library 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. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+}
+unit buildwinutilsbase;
+
+interface
+
+uses
+ flatsb, winver, mmsystem, comconst, commctrl, comobj,
+ ole2, activex, shellapi, shlobj, oleserver, shfolder, richedit;
+
+implementation
+
+end.
diff --git a/packages/winunits-base/src/comconst.pp b/packages/winunits-base/src/comconst.pp
new file mode 100644
index 0000000000..c57f7ea246
--- /dev/null
+++ b/packages/winunits-base/src/comconst.pp
@@ -0,0 +1,30 @@
+{
+ This file is part of the Free Pascal run time library.
+ Copyright (c) 2006 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+}
+{$inline on}
+unit comconst;
+
+ interface
+
+ resourcestring
+ SNoMethod = 'Method ''%s'' is not supported by automation object';
+ SOleError = 'OLE error %.8x';
+ SVarNotObject = 'Variant does not reference an automation object';
+ SDCOMNotInstalled = 'DCOM not installed';
+
+ implementation
+
+end.
+
diff --git a/packages/winunits-base/src/commctrl.pp b/packages/winunits-base/src/commctrl.pp
new file mode 100644
index 0000000000..a6b53e295d
--- /dev/null
+++ b/packages/winunits-base/src/commctrl.pp
@@ -0,0 +1,12471 @@
+{
+ This file is part of the Free Pascal run time library.
+ Copyright (c) 1999-2004 by Marco van de Voort
+ member of the Free Pascal development team.
+
+ See the file COPYING.FPC, included in this distribution,
+ for details about the copyright.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ Original copyright statement follows.
+
+ **************************************************************************
+ * *
+ * commctrl.h - - Interface for the Windows Common Controls *
+ * *
+ * Version 1.2 *
+ * *
+ * Copyright (c) Microsoft Corporation. All rights reserved. *
+ * *
+ **************************************************************************
+
+ Note: This is an initial translation, and probably _full_ of bugs, this
+ is because my conversion tool was flawed, and a lot of postediting
+ was needed, which is bound to introduce bugs and inconsequencies
+
+ This is an huge unit, and its maintenance and compability is not
+ a top-priority.
+ I prefer patches as bugfix over bugreports, and
+ preferably patches with lots of fixes at once.
+
+ If you can't make a patch, at least research the bug thoroughly,
+ and provide as much info as possible (which windows version,
+ the C prototype from the sdk, etc)
+
+ Help the FPC team, and try to do as much as possible yourself.
+}
+
+
+Unit CommCtrl;
+Interface
+
+{$Mode ObjFPC}
+Uses Windows,CTypes,ActiveX;
+
+// --------------------
+
+// --------------------
+CONST CommCtrlDLL = 'comctl32.dll';
+
+// Some reasonal defaults.
+// for XP only set NT to $%0501 and IE to $0600
+//
+// The NT conditional is only used for XP/no XP.
+
+{$DEFINE WIN32_IE=$0500}
+{$DEFINE IE3PLUS}
+{$DEFINE IE4PLUS}
+{$define IE5plus}
+{$define WIN32XP}
+{$define ie501plus}
+
+{$ifdef win32}
+ {$define _win32}
+{$endif win32}
+
+{$ifdef win64}
+ {$define _win32}
+{$endif win64}
+
+{$DEFINE WIN32_WINNT=0} // NO XP
+{$DEFINE __IStream_INTERFACE_DEFINED__} // lpstream defined in activex afaik.
+
+// Sanity check in source. Not translated:
+//if (WIN32_IE < $0400) && defined(WIN32_WINNT) && (WIN32_WINNT >= $0500)}
+// #error _WIN32_IE setting conflicts with _WIN32_WINNT setting
+
+//
+// Users of this header may define any number of these constants to avoid
+// the definitions of each functional group.
+//
+// NOTOOLBAR Customizable bitmap-button toolbar control.
+// NOUPDOWN Up and Down arrow increment/decrement control.
+// NOSTATUSBAR Status bar control.
+// NOMENUHELP APIs to help manage menus, especially with a status bar.
+// NOTRACKBAR Customizable column-width tracking control.
+// NODRAGLIST APIs to make a listbox source and sink drag&drop actions.
+// NOPROGRESS Progress gas gauge.
+// NOHOTKEY HotKey control
+// NOHEADER Header bar control.
+// NOIMAGEAPIS ImageList apis.
+// NOLISTVIEW ListView control.
+// NOTREEVIEW TreeView control.
+// NOTABCONTROL Tab control.
+// NOANIMATE Animate control.
+// NOBUTTON Button control.
+// NOSTATIC Static control.
+// NOEDIT Edit control.
+// NOLISTBOX Listbox control.
+// NOCOMBOBOX Combobox control.
+// NOSCROLLBAR Scrollbar control.
+//
+//=============================================================================
+
+// include <prsht.h>
+
+Procedure InitCommonControls; stdcall; external commctrldll name 'InitCommonControls';
+
+{$ifdef ie3plus}
+TYPE
+
+ tagINITCOMMONCONTROLSEX = Record
+ dwSize : DWORD; // size of this structure
+ dwICC : DWORD; // flags indicating which classes to be initialized
+ END;
+ _INITCOMMONCONTROLSEX = tagINITCOMMONCONTROLSEX;
+ LPINITCOMMONCONTROLSEX = ^tagINITCOMMONCONTROLSEX;
+ TINITCOMMONCONTROLSEX = tagINITCOMMONCONTROLSEX;
+ PINITCOMMONCONTROLSEX = ^tagINITCOMMONCONTROLSEX;
+
+CONST
+ ICC_LISTVIEW_CLASSES = $00000001; // listview, header
+ ICC_TREEVIEW_CLASSES = $00000002; // treeview, tooltips
+ ICC_BAR_CLASSES = $00000004; // toolbar, statusbar, trackbar, tooltips
+ ICC_TAB_CLASSES = $00000008; // tab, tooltips
+ ICC_UPDOWN_CLASS = $00000010; // updown
+ ICC_PROGRESS_CLASS = $00000020; // progress
+ ICC_HOTKEY_CLASS = $00000040; // hotkey
+ ICC_ANIMATE_CLASS = $00000080; // animate
+ ICC_WIN95_CLASSES = $000000FF;
+ ICC_DATE_CLASSES = $00000100; // month picker, date picker, time picker, updown
+ ICC_USEREX_CLASSES = $00000200; // comboex
+ ICC_COOL_CLASSES = $00000400; // rebar (coolbar) control
+{$ifdef ie4plus}
+ ICC_INTERNET_CLASSES = $00000800;
+ ICC_PAGESCROLLER_CLASS = $00001000; // page scroller
+ ICC_NATIVEFNTCTL_CLASS = $00002000; // native font control
+{$ENDIF}
+{$ifdef WIN32XP}
+ ICC_STANDARD_CLASSES = $00004000;
+ ICC_LINK_CLASS = $00008000;
+{$ENDIF}
+
+function InitCommonControlsEx(var rec : TINITCOMMONCONTROLSEX):BOOL; stdcall; external commctrldll name 'InitCommonControlsEx';
+{$ENDIF} // _WIN32_IE >= 0x0300
+
+CONST
+ ODT_HEADER = 100;
+ ODT_TAB = 101;
+ ODT_LISTVIEW = 102;
+
+//====== WM_NOTIFY codes (NMHDR.code values) ==================================
+
+
+CONST
+ NM_FIRST = (0- 0); // generic to all controls
+ NM_LAST = (0- 99);
+
+ LVN_FIRST = (0-100); // listview
+ LVN_LAST = (0-199);
+
+// Property sheet reserved (0U-200U) - (0U-299U) - see prsht.h
+
+ HDN_FIRST = (0-300); // header
+ HDN_LAST = (0-399);
+
+ TVN_FIRST = (0-400); // treeview
+ TVN_LAST = (0-499);
+
+ TTN_FIRST = (0-520); // tooltips
+ TTN_LAST = (0-549);
+
+ TCN_FIRST = (0-550); // tab control
+ TCN_LAST = (0-580);
+
+// Shell reserved (0U-580U) - (0U-589U)
+
+ CDN_FIRST = (0-601); // common dialog (new)
+ CDN_LAST = (0-699);
+
+ TBN_FIRST = (0-700); // toolbar
+ TBN_LAST = (0-720);
+
+ UDN_FIRST = (0-721); // updown
+ UDN_LAST = (0-740);
+{$ifdef ie3plus}
+ MCN_FIRST = (0-750); // monthcal
+ MCN_LAST = (0-759);
+
+ DTN_FIRST = (0-760); // datetimepick
+ DTN_LAST = (0-799);
+
+ CBEN_FIRST = (0-800); // combo box ex
+ CBEN_LAST = (0-830);
+
+ RBN_FIRST = (0-831); // rebar
+ RBN_LAST = (0-859);
+{$ENDIF}
+
+{$ifdef ie4plus}
+ IPN_FIRST = (0-860); // internet address
+ IPN_LAST = (0-879); // internet address
+
+ SBN_FIRST = (0-880); // status bar
+ SBN_LAST = (0-899);
+
+ PGN_FIRST = (0-900); // Pager Control
+ PGN_LAST = (0-950);
+
+{$ENDIF}
+
+{$ifdef ie5plus}
+{$IFNDEF WMN_FIRST}
+ WMN_FIRST = (0-1000);
+ WMN_LAST = (0-1200);
+{$ENDIF}
+{$ENDIF}
+
+{$ifdef Win32XP}
+ BCN_FIRST = (0-1250);
+ BCN_LAST = (0-1350);
+{$ENDIF}
+
+ 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;
+ PNMCustomDraw = PNMCUSTOMDRAWINFO;
+ TNMCustomDraw = tagNMCUSTOMDRAWINFO;
+
+ tagNMTTCUSTOMDRAW = Record
+ nmcd : NMCUSTOMDRAW;
+ uDrawFlags : UINT;
+ END;
+ NMTTCUSTOMDRAW = tagNMTTCUSTOMDRAW;
+ LPNMTTCUSTOMDRAW = ^tagNMTTCUSTOMDRAW;
+ TNMTTCUSTOMDRAW = tagNMTTCUSTOMDRAW;
+ PNMTTCUSTOMDRAW = ^tagNMTTCUSTOMDRAW;
+
+
+{$ENDIF} // _WIN32_IE >= 0x0300
+
+
+//====== IMAGE APIS ===========================================================
+
+{$IFNDEF NOIMAGEAPIS}
+
+
+CONST
+ CLR_NONE = DWORD($FFFFFFFF);
+ CLR_DEFAULT = DWORD($FF000000);
+
+
+{$IFNDEF IMAGELISTDRAWPARAMS}
+{$ifdef ie3plus}
+TYPE
+ _IMAGELISTDRAWPARAMS = Record
+ cbSize : DWORD;
+ himl : HIMAGELIST;
+ i : cint;
+ hdcDst : HDC;
+ x : cint;
+ y : cint;
+ cx : cint;
+ cy : cint;
+ xBitmap : cint; // x offest from the upperleft of bitmap
+ yBitmap : cint; // y offset from the upperleft of bitmap
+ rgbBk : COLORREF;
+ rgbFg : COLORREF;
+ fStyle : UINT;
+ dwRop : DWORD;
+{$ifdef win32xp}
+ fState : DWORD;
+ Frame : DWORD;
+ crEffect : COLORREF;
+{$ENDIF}
+ END;
+ 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; stdcall; external commctrldll name 'ImageList_Create';
+function ImageList_Destroy(himl:HIMAGELIST):BOOL; stdcall; external commctrldll name 'ImageList_Destroy';
+
+function ImageList_GetImageCount(himl:HIMAGELIST):cint; stdcall; external commctrldll name 'ImageList_GetImageCount';
+{$ifdef ie3plus}
+function ImageList_SetImageCount(himl:HIMAGELIST;uNewCount:UINT):BOOL; stdcall; external commctrldll name 'ImageList_SetImageCount';
+{$ENDIF}
+
+function ImageList_Add(himl:HIMAGELIST;hbmImage:HBITMAP;hbmMask:HBITMAP):cint; stdcall; external commctrldll name 'ImageList_Add';
+
+function ImageList_ReplaceIcon(himl:HIMAGELIST;i:cint;hicon:HICON):cint; stdcall; external commctrldll name 'ImageList_ReplaceIcon';
+function ImageList_SetBkColor(himl:HIMAGELIST;clrBk:COLORREF):COLORREF; stdcall; external commctrldll name 'ImageList_SetBkColor';
+function ImageList_GetBkColor(himl:HIMAGELIST):COLORREF; stdcall; external commctrldll name 'ImageList_GetBkColor';
+function ImageList_SetOverlayImage(himl:HIMAGELIST;iImage:cint;iOverlay:cint):BOOL; stdcall; external commctrldll name 'ImageList_SetOverlayImage';
+
+// Macro 11
+Function ImageList_AddIcon(Himl:HIMAGELIST;hicon:HICON):cint;
+
+CONST
+ ILD_NORMAL = $00000000;
+ ILD_TRANSPARENT = $00000001;
+ ILD_MASK = $00000010;
+ ILD_IMAGE = $00000020;
+{$ifdef ie3plus}
+ ILD_ROP = $00000040;
+{$ENDIF}
+ ILD_BLEND25 = $00000002;
+ ILD_BLEND50 = $00000004;
+ ILD_OVERLAYMASK = $00000F00;
+
+// Macro 12
+// #define INDEXTOOVERLAYMASK(i) ((i) << 8)
+
+CONST
+ ILD_PRESERVEALPHA = $00001000; // This preserves the alpha channel in dest
+ ILD_SCALE = $00002000; // Causes the image to be scaled to cx, cy instead of clipped
+ ILD_DPISCALE = $00004000;
+
+ 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; stdcall; external commctrldll name 'ImageList_Draw';
+
+
+{$IFDEF _WIN32}
+
+function ImageList_Replace(himl:HIMAGELIST;i:cint;hbmImage:HBITMAP;hbmMask:HBITMAP):BOOL; stdcall; external commctrldll name 'ImageList_Replace';
+
+function ImageList_AddMasked(himl:HIMAGELIST;hbmImage:HBITMAP;crMask:COLORREF):cint; stdcall; external commctrldll name 'ImageList_AddMasked';
+function ImageList_DrawEx(himl:HIMAGELIST;i:cint;hdcDst:HDC;x:cint;y:cint;dx:cint;dy:cint;rgbBk:COLORREF;rgbFg:COLORREF;fStyle:UINT):BOOL; stdcall; external commctrldll name 'ImageList_DrawEx';
+{$ifdef ie3plus}
+function ImageList_DrawIndirect(pimldp:PIMAGELISTDRAWPARAMS):BOOL; stdcall; external commctrldll name 'ImageList_DrawIndirect';
+{$ENDIF}
+function ImageList_Remove(himl:HIMAGELIST;i:cint):BOOL; stdcall; external commctrldll name 'ImageList_Remove';
+function ImageList_GetIcon(himl:HIMAGELIST;i:cint;flags:UINT):HICON; stdcall; external commctrldll name 'ImageList_GetIcon';
+function ImageList_LoadImageA(hi:HINST;lpbmp:LPCSTR;cx:cint;cGrow:cint;crMask:COLORREF;uType:UINT;uFlags:UINT):HIMAGELIST; stdcall; external commctrldll name 'ImageList_LoadImageA';
+function ImageList_LoadImageW(hi:HINST;lpbmp:LPCWSTR;cx:cint;cGrow:cint;crMask:COLORREF;uType:UINT;uFlags:UINT):HIMAGELIST; stdcall; external commctrldll name 'ImageList_LoadImageW';
+function ImageList_LoadImage(hi:HINST;lpbmp:LPCSTR;cx:cint;cGrow:cint;crMask:COLORREF;uType:UINT;uFlags:UINT):HIMAGELIST; stdcall; external commctrldll name 'ImageList_LoadImageA';
+function ImageList_LoadImage(hi:HINST;lpbmp:LPCWSTR;cx:cint;cGrow:cint;crMask:COLORREF;uType:UINT;uFlags:UINT):HIMAGELIST; stdcall; external commctrldll name 'ImageList_LoadImageW';
+
+{$IFDEF UNICODE}
+// function ImageList_LoadImageW(hi:HINSTANCE;lpbmp:LPCWSTR;cx:cint;cGrow:cint;crMask:COLORREF;uType:UINT;uFlags:UINT):HIMAGELIST; external commctrldll name 'ImageList_LoadImageW';
+{$ELSE}
+// function ImageList_LoadImageA(hi:HINSTANCE;lpbmp:LPCSTR;cx:cint;cGrow:cint;crMask:COLORREF;uType:UINT;uFlags:UINT):HIMAGELIST; external commctrldll name 'ImageList_LoadImageA';
+{$ENDIF}
+
+{$ifdef ie3plus}
+
+CONST
+ ILCF_MOVE = ($00000000);
+ ILCF_SWAP = ($00000001);
+
+function ImageList_Copy(himlDst:HIMAGELIST;iDst:cint;himlSrc:HIMAGELIST;iSrc:cint;uFlags:UINT):BOOL; stdcall; external commctrldll name 'ImageList_Copy';
+{$ENDIF}
+
+function ImageList_BeginDrag(himlTrack:HIMAGELIST;iTrack:cint;dxHotspot:cint;dyHotspot:cint):BOOL; stdcall; external commctrldll name 'ImageList_BeginDrag';
+function ImageList_EndDrag:BOOL; stdcall; external commctrldll name 'ImageList_EndDrag';
+function ImageList_DragEnter(hwndLock:HWND;x:cint;y:cint):BOOL; stdcall; external commctrldll name 'ImageList_DragEnter';
+function ImageList_DragLeave(hwndLock:HWND):BOOL; stdcall; external commctrldll name 'ImageList_DragLeave';
+function ImageList_DragMove(x:cint;y:cint):BOOL; stdcall; external commctrldll name 'ImageList_DragMove';
+function ImageList_SetDragCursorImage(himlDrag:HIMAGELIST;iDrag:cint;dxHotspot:cint;dyHotspot:cint):BOOL; stdcall; external commctrldll name 'ImageList_SetDragCursorImage';
+
+function ImageList_DragShowNolock(fShow:BOOL):BOOL; stdcall; external commctrldll name 'ImageList_DragShowNolock';
+function ImageList_GetDragImage(ppt:PPOINT;pptHotspot:PPOINT):HIMAGELIST; stdcall; external commctrldll name 'ImageList_GetDragImage';
+
+// Macro 13
+Procedure ImageList_RemoveAll(himl:HIMAGELIST);
+
+// Macro 14
+Procedure ImageList_ExtractIcon(hi:longint; {dummy?} himl:HIMAGELIST;i:cint);
+
+
+// Macro 15
+Procedure ImageList_LoadBitmap(hi:HInst;bmp:LPCTSTR;cx:cint;cGrow:cint;crMask:COLORREF);
+
+{$IFDEF __IStream_INTERFACE_DEFINED__}
+
+function ImageList_Read(pstm:ISTREAM):HIMAGELIST; stdcall; external commctrldll name 'ImageList_Read';
+function ImageList_Write(himl:HIMAGELIST;pstm:ISTREAM):BOOL; stdcall; external commctrldll name 'ImageList_Write';
+
+{$ifdef Win32XP}
+
+CONST
+ ILP_NORMAL = 0; // Writes or reads the stream using new sematics for this version of comctl32
+ ILP_DOWNLEVEL = 1; // Write or reads the stream using downlevel sematics.
+
+
+function ImageList_ReadEx(dwFlags:DWORD;pstm:ISTREAM;riid:REFIID;ppv:PPointer):HRESULT; stdcall; external commctrldll name 'ImageList_ReadEx';
+function ImageList_WriteEx(himl:HIMAGELIST;dwFlags:DWORD;pstm:ISTREAM):HRESULT; stdcall; external commctrldll name 'ImageList_WriteEx';
+{$ENDIF}
+
+{$ENDIF}
+
+{$IFNDEF IMAGEINFO}
+TYPE
+
+ _IMAGEINFO = Record
+ hbmImage : HBITMAP;
+ hbmMask : HBITMAP;
+ Unused1 : cint;
+ Unused2 : cint;
+ rcImage : RECT;
+ END;
+ IMAGEINFO = _IMAGEINFO;
+ LPIMAGEINFO = ^_IMAGEINFO;
+ TIMAGEINFO = _IMAGEINFO;
+ PIMAGEINFO = ^_IMAGEINFO;
+
+{$ENDIF}
+
+function ImageList_GetIconSize(himl:HIMAGELIST;cx:Pint;cy:Pint):BOOL; stdcall; external commctrldll name 'ImageList_GetIconSize';
+function ImageList_GetIconSize(himl:HIMAGELIST;var cx:cint;var cy:cint):BOOL; stdcall; external commctrldll name 'ImageList_GetIconSize';
+function ImageList_SetIconSize(himl:HIMAGELIST;cx:cint;cy:cint):BOOL; stdcall; external commctrldll name 'ImageList_SetIconSize';
+function ImageList_GetImageInfo(himl:HIMAGELIST;i:cint;pImageInfo:PIMAGEINFO):BOOL; stdcall; external commctrldll name 'ImageList_GetImageInfo';
+function ImageList_GetImageInfo(himl:HIMAGELIST;i:cint;var pImageInfo:_IMAGEINFO):BOOL; stdcall; external commctrldll name 'ImageList_GetImageInfo';
+function ImageList_Merge(himl1:HIMAGELIST;i1:cint;himl2:HIMAGELIST;i2:cint;dx:cint;dy:cint):HIMAGELIST; stdcall; external commctrldll name 'ImageList_Merge';
+{$ifdef ie4plus}
+function ImageList_Duplicate(himl:HIMAGELIST):HIMAGELIST; stdcall; external commctrldll name 'ImageList_Duplicate';
+{$ENDIF}
+
+
+{$ENDIF}
+
+
+{$ENDIF}
+
+
+//====== HEADER CONTROL =======================================================
+
+{$IFNDEF NOHEADER}
+
+{$IFDEF _WIN32}
+
+CONST
+ WC_HEADERA = 'SysHeader32';
+ WC_HEADERW = {L}'SysHeader32';
+{$IFDEF UNICODE}
+ WC_HEADER = WC_HEADERW;
+{$ELSE}
+ WC_HEADER = WC_HEADERA;
+{$ENDIF}
+
+{$ELSE}
+
+CONST
+ WC_HEADER = 'SysHeader';
+{$ENDIF}
+
+CONST
+
+// begin_r_commctrl
+
+ HDS_HORZ = $0000;
+ HDS_BUTTONS = $0002;
+{$ifdef ie3plus}
+ HDS_HOTTRACK = $0004;
+{$ENDIF}
+ HDS_HIDDEN = $0008;
+
+{$ifdef ie3plus}
+ HDS_DRAGDROP = $0040;
+ HDS_FULLDRAG = $0080;
+{$ENDIF}
+{$ifdef ie5plus}
+ HDS_FILTERBAR = $0100;
+{$ENDIF}
+
+{$ifdef win32xp}
+ HDS_FLAT = $0200;
+{$ENDIF}
+// 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;
+ THDItem = THD_ITEMA;
+ PHDItem = PHD_ITEMA;
+
+
+// #define HDITEMA_V1_SIZE CCSIZEOF_STRUCT(HDITEMA, lParam)
+// #define HDITEMW_V1_SIZE CCSIZEOF_STRUCT(HDITEMW, lParam)
+
+
+ _HD_ITEMW = Record
+ mask : UINT;
+ cxy : cint;
+ pszText : LPWSTR;
+ hbm : HBITMAP;
+ cchTextMax : cint;
+ fmt : cint;
+ lParam : LPARAM;
+{$ifdef ie3plus}
+ iImage : cint; // index of bitmap in ImageList
+ iOrder : cint;
+{$ENDIF}
+{$ifdef ie5plus}
+ _type : UINT; // [in] filter type (defined what pvFilter is a pointer to)
+ pvFilter : Pointer; // [in] fillter data see above
+{$ENDIF}
+ 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
+ case integer of
+ 1: (pt : POINT;flags : UINT;iItem : cint);
+ { delphi }
+ 2: (point : POINT;dummyflags : UINT;Item : cint);
+ END;
+ HDHITTESTINFO = _HD_HITTESTINFO;
+ HD_HITTESTINFO = _HD_HITTESTINFO;
+ LPHDHITTESTINFO = ^_HD_HITTESTINFO;
+ THD_HITTESTINFO = _HD_HITTESTINFO;
+ PHD_HITTESTINFO = ^_HD_HITTESTINFO;
+ THDHitTestInfo = THD_HITTESTINFO;
+ PHDHitTestInfo = LPHDHITTESTINFO;
+
+
+CONST
+ HDM_HITTEST = (HDM_FIRST + 6);
+
+{$ifdef ie3plus}
+
+ HDM_GETITEMRECT = (HDM_FIRST + 7);
+
+// Macro 22
+Function Header_GetItemRect( hwnd : hwnd; iItem : WPARAM; lprc : LPARAM):BOOL;
+
+CONST
+ HDM_SETIMAGELIST = (HDM_FIRST + 8);
+
+// Macro 23
+Function Header_SetImageList( hwnd : hwnd; himl : LPARAM):HIMAGELIST;
+
+CONST
+ HDM_GETIMAGELIST = (HDM_FIRST + 9);
+
+// Macro 24
+Function Header_GetImageList( hwnd : hwnd):HIMAGELIST;
+
+CONST
+ HDM_ORDERTOINDEX = (HDM_FIRST + 15);
+
+// Macro 25
+Function Header_OrderToIndex( hwnd : hwnd; i : WPARAM):cint;
+
+CONST
+ HDM_CREATEDRAGIMAGE = (HDM_FIRST + 16); // wparam = which item (by index)
+
+// Macro 26
+Function Header_CreateDragImage( hwnd : hwnd; i : WPARAM):HIMAGELIST;
+
+CONST
+ HDM_GETORDERARRAY = (HDM_FIRST + 17);
+
+// Macro 27
+Function Header_GetOrderArray( hwnd : hwnd; iCount : WPARAM; lpi : LPARAM):BOOL;
+
+CONST
+ HDM_SETORDERARRAY = (HDM_FIRST + 18);
+
+// Macro 28
+Function Header_SetOrderArray( hwnd : hwnd; iCount : WPARAM; lpi : PInteger):BOOL;inline;
+
+// lparam = int array of size HDM_GETITEMCOUNT
+// the array specifies the order that all items should be displayed.
+// e.g. { 2, 0, 1}
+// says the index 2 item should be shown in the 0ths position
+// index 0 should be shown in the 1st position
+// index 1 should be shown in the 2nd position
+
+
+CONST
+ HDM_SETHOTDIVIDER = (HDM_FIRST + 19);
+
+// Macro 29
+Function Header_SetHotDivider( hwnd : hwnd; fPos : WPARAM; dw : LPARAM):cint;
+
+// convenience message for external dragdrop
+// wParam = BOOL specifying whether the lParam is a dwPos of the cursor
+// position or the index of which divider to hotlight
+// lParam = depends on wParam (-1 and wParm = FALSE turns off hotlight)
+{$ENDIF} // _WIN32_IE >= 0x0300
+
+{$ifdef ie5plus}
+CONST
+ HDM_SETBITMAPMARGIN = (HDM_FIRST + 20);
+
+// Macro 30
+Function Header_SetBitmapMargin( hwnd : hwnd; iWidth : WPARAM):cint;
+
+CONST
+ HDM_GETBITMAPMARGIN = (HDM_FIRST + 21);
+
+// Macro 31
+Function Header_GetBitmapMargin( hwnd : hwnd):cint;
+
+{$ENDIF}
+
+
+{$ifdef ie4plus}
+
+CONST
+ HDM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT;
+
+// Macro 32
+Function Header_SetUnicodeFormat( hwnd : hwnd; fUnicode : WPARAM):BOOL;
+
+CONST
+ HDM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT;
+
+// Macro 33
+Function Header_GetUnicodeFormat( hwnd : hwnd):BOOL;
+
+{$ENDIF}
+
+{$ifdef ie5plus}
+CONST
+ HDM_SETFILTERCHANGETIMEOUT = (HDM_FIRST+22);
+
+// Macro 34
+Function Header_SetFilterChangeTimeout( hwnd : hwnd; i : LPARAM):cint;
+
+CONST
+ HDM_EDITFILTER = (HDM_FIRST+23);
+
+// Macro 35
+Function Header_EditFilter( hwnd : hwnd; i : WPARAM; fDiscardChanges :cint ):cint;
+
+
+// Clear filter takes -1 as a column value to indicate that all
+// the filter should be cleared. When this happens you will
+// only receive a single filter changed notification.
+
+CONST
+ HDM_CLEARFILTER = (HDM_FIRST+24);
+
+// Macro 36
+Function Header_ClearFilter( hwnd : hwnd; i : WPARAM):cint;
+
+// Macro 37
+Function Header_ClearAllFilters( hwnd : hwnd):cint;
+
+{$ENDIF}
+
+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;
+ case integer of
+ 1: (iItem : cint;iButton : cint;pitem : PHDITEMA);
+ { delphi: }
+ 2: (Item : cint;Button : cint);
+ END;
+ NMHEADERA = tagNMHEADERA;
+ LPNMHEADERA = ^tagNMHEADERA;
+ TNMHEADERA = tagNMHEADERA;
+ PNMHEADERA = ^tagNMHEADERA;
+
+ tagNMHEADERW = Record
+ hdr : NMHDR;
+ iItem : cint;
+ iButton : cint;
+ pitem : PHDITEMW;
+ END;
+ NMHEADERW = tagNMHEADERW;
+ LPNMHEADERW = ^tagNMHEADERW;
+ TNMHEADERW = tagNMHEADERW;
+ PNMHEADERW = ^tagNMHEADERW;
+
+
+{$IFDEF UNICODE}
+ NMHEADER = NMHEADERW;
+ LPNMHEADER = LPNMHEADERW;
+{$ELSE}
+ NMHEADER = NMHEADERA;
+ LPNMHEADER = LPNMHEADERA;
+{$ENDIF}
+
+
+{$ifdef ie3plus}
+ HD_NOTIFYA = NMHEADERA;
+ HD_NOTIFYW = NMHEADERW;
+{$ELSE}
+// tagNMHEADERA = _HD_NOTIFY;
+// NMHEADERA = HD_NOTIFYA;
+// tagHMHEADERW = _HD_NOTIFYW;
+// NMHEADERW = HD_NOTIFYW;
+{$ENDIF}
+
+ HD_NOTIFY = NMHEADER;
+ THDNotify = HD_NOTIFY;
+ PHDNotify = ^HD_NOTIFY;
+
+ tagNMHDDISPINFOW = Record
+ hdr : NMHDR;
+ iItem : cint;
+ mask : UINT;
+ pszText : LPWSTR;
+ cchTextMax : cint;
+ iImage : cint;
+ lParam : LPARAM;
+ END;
+ NMHDDISPINFOW = tagNMHDDISPINFOW;
+ LPNMHDDISPINFOW = ^tagNMHDDISPINFOW;
+ TNMHDDISPINFOW = tagNMHDDISPINFOW;
+ PNMHDDISPINFOW = ^tagNMHDDISPINFOW;
+
+
+ tagNMHDDISPINFOA = Record
+ hdr : NMHDR;
+ iItem : cint;
+ mask : UINT;
+ pszText : LPSTR;
+ cchTextMax : cint;
+ iImage : cint;
+ lParam : LPARAM;
+ END;
+ NMHDDISPINFOA = tagNMHDDISPINFOA;
+ LPNMHDDISPINFOA = ^tagNMHDDISPINFOA;
+ TNMHDDISPINFOA = tagNMHDDISPINFOA;
+ PNMHDDISPINFOA = ^tagNMHDDISPINFOA;
+
+
+
+{$IFDEF UNICODE}
+ NMHDDISPINFO = NMHDDISPINFOW;
+ LPNMHDDISPINFO = LPNMHDDISPINFOW;
+{$ELSE}
+ NMHDDISPINFO = NMHDDISPINFOA;
+ LPNMHDDISPINFO = LPNMHDDISPINFOA;
+{$ENDIF}
+
+{$ifdef ie5plus}
+ tagNMHDFILTERBTNCLICK = Record
+ hdr : NMHDR;
+ iItem : cint;
+ rc : RECT;
+ END;
+ NMHDFILTERBTNCLICK = tagNMHDFILTERBTNCLICK;
+ LPNMHDFILTERBTNCLICK = ^tagNMHDFILTERBTNCLICK;
+ TNMHDFILTERBTNCLICK = tagNMHDFILTERBTNCLICK;
+ PNMHDFILTERBTNCLICK = ^tagNMHDFILTERBTNCLICK;
+
+{$ENDIF}
+
+{$ENDIF} // NOHEADER
+
+
+//====== TOOLBAR CONTROL ======================================================
+
+{$IFNDEF NOTOOLBAR}
+
+{$IFDEF _WIN32}
+
+CONST
+ TOOLBARCLASSNAMEW = {L}'ToolbarWindow32';
+ TOOLBARCLASSNAMEA = 'ToolbarWindow32';
+
+{$IFDEF UNICODE}
+ TOOLBARCLASSNAME = TOOLBARCLASSNAMEW;
+{$ELSE}
+ TOOLBARCLASSNAME = TOOLBARCLASSNAMEA;
+{$ENDIF}
+
+{$ELSE}
+ TOOLBARCLASSNAME = 'ToolbarWindow';
+{$ENDIF}
+
+TYPE
+
+ _TBBUTTON = Record
+ iBitmap : cint;
+ idCommand : cint;
+ fsState : BYTE;
+ fsStyle : BYTE;
+{$IFDEF _WIN64}
+ bReserved : ARRAY[0..5] OF BYTE; // padding for alignment
+{$ELSE}
+{$IFDEF _WIN32}
+ bReserved : ARRAY[0..1] OF BYTE; // padding for alignment
+{$ENDIF}
+{$ENDIF}
+ dwData : DWORD_PTR;
+ iString : INT_PTR;
+ END;
+ TBBUTTON = _TBBUTTON;
+ PTBBUTTON = {NEAR} ^_TBBUTTON; // ???
+ LPTBBUTTON = ^_TBBUTTON;
+ TTBBUTTON = _TBBUTTON;
+// PTBBUTTON = ^_TBBUTTON;
+
+ LPCTBBUTTON = {const} ^TBBUTTON;
+
+
+ _COLORMAP = Record
+ xfrom : COLORREF;
+ xto : COLORREF;
+ END;
+ COLORMAP = _COLORMAP;
+ LPCOLORMAP = ^_COLORMAP;
+ TCOLORMAP = _COLORMAP;
+ PCOLORMAP = ^_COLORMAP;
+
+function CreateToolbarEx(hwnd:HWND;ws:DWORD;wID:UINT;nBitmaps:cint;
+ hBMInst:HINST;
+ wBMID:UINT_PTR;lpButtons:LPCTBBUTTON;iNumButtons:cint;dxButton:cint;
+ dyButton:cint;dxBitmap:cint;dyBitmap:cint;uStructSize:UINT):HWND; stdcall; external commctrldll name 'CreateToolbarEx';
+
+function CreateMappedBitmap(hInstance:HINST;idBitmap:INT_PTR;wFlags:UINT;lpColorMap:LPCOLORMAP;iNumMaps:cint):HBITMAP; stdcall; external commctrldll name 'CreateMappedBitmap';
+
+CONST
+ CMB_MASKED = $02;
+ TBSTATE_CHECKED = $01;
+ TBSTATE_PRESSED = $02;
+ TBSTATE_ENABLED = $04;
+ TBSTATE_HIDDEN = $08;
+ TBSTATE_INDETERMINATE = $10;
+ TBSTATE_WRAP = $20;
+{$ifdef ie3plus}
+ TBSTATE_ELLIPSES = $40;
+{$ENDIF}
+{$ifdef ie4plus}
+ TBSTATE_MARKED = $80;
+{$ENDIF}
+
+ TBSTYLE_BUTTON = $0000; // obsolete; use BTNS_BUTTON instead
+ TBSTYLE_SEP = $0001; // obsolete; use BTNS_SEP instead
+ TBSTYLE_CHECK = $0002; // obsolete; use BTNS_CHECK instead
+ TBSTYLE_GROUP = $0004; // obsolete; use BTNS_GROUP instead
+ TBSTYLE_CHECKGROUP = (TBSTYLE_GROUP OR TBSTYLE_CHECK);// obsolete; use BTNS_CHECKGROUP instead
+{$ifdef ie3plus}
+ TBSTYLE_DROPDOWN = $0008; // obsolete; use BTNS_DROPDOWN instead
+{$ENDIF}
+{$ifdef ie4plus}
+ TBSTYLE_AUTOSIZE = $0010; // obsolete; use BTNS_AUTOSIZE instead
+ TBSTYLE_NOPREFIX = $0020; // obsolete; use BTNS_NOPREFIX instead
+{$ENDIF}
+
+ TBSTYLE_TOOLTIPS = $0100;
+ TBSTYLE_WRAPABLE = $0200;
+ TBSTYLE_ALTDRAG = $0400;
+{$ifdef ie3plus}
+ TBSTYLE_FLAT = $0800;
+ TBSTYLE_LIST = $1000;
+ TBSTYLE_CUSTOMERASE = $2000;
+{$ENDIF}
+{$ifdef ie4plus}
+ TBSTYLE_REGISTERDROP = $4000;
+ TBSTYLE_TRANSPARENT = $8000;
+ TBSTYLE_EX_DRAWDDARROWS = $00000001;
+{$ENDIF}
+
+{$ifdef ie5plus}
+ BTNS_BUTTON = TBSTYLE_BUTTON; // 0x0000
+ BTNS_SEP = TBSTYLE_SEP; // 0x0001
+ BTNS_CHECK = TBSTYLE_CHECK; // 0x0002
+ BTNS_GROUP = TBSTYLE_GROUP; // 0x0004
+ BTNS_CHECKGROUP = TBSTYLE_CHECKGROUP; // (TBSTYLE_GROUP | TBSTYLE_CHECK)
+ BTNS_DROPDOWN = TBSTYLE_DROPDOWN; // 0x0008
+ BTNS_AUTOSIZE = TBSTYLE_AUTOSIZE; // 0x0010; automatically calculate the cx of the button
+ BTNS_NOPREFIX = TBSTYLE_NOPREFIX; // 0x0020; this button should not have accel prefix
+{$ifdef ie501plus}
+ BTNS_SHOWTEXT = $0040; // ignored unless TBSTYLE_EX_MIXEDBUTTONS is set
+{$ENDIF} // 0x0501
+ BTNS_WHOLEDROPDOWN = $0080; // draw drop-down arrow, but without split arrow section
+{$ENDIF}
+
+{$ifdef ie501plus}
+ TBSTYLE_EX_MIXEDBUTTONS = $00000008;
+ TBSTYLE_EX_HIDECLIPPEDBUTTONS = $00000010; // don't show partially obscured buttons
+{$ENDIF} // 0x0501
+
+
+{$ifdef win32xp}
+ TBSTYLE_EX_DOUBLEBUFFER = $00000080; // Double Buffer the toolbar
+{$ENDIF}
+
+{$ifdef ie4plus}
+// Custom Draw Structure
+TYPE
+
+ _NMTBCUSTOMDRAW = Record
+ nmcd : NMCUSTOMDRAW;
+ hbrMonoDither : HBRUSH;
+ hbrLines : HBRUSH; // For drawing lines on buttons
+ hpenLines : HPEN; // For drawing lines on buttons
+ clrText : COLORREF; // Color of text
+ clrMark : COLORREF; // Color of text bk when marked. (only if TBSTATE_MARKED)
+ clrTextHighlight : COLORREF; // Color of text when highlighted
+ clrBtnFace : COLORREF; // Background of the button
+ clrBtnHighlight : COLORREF; // 3D highlight
+ clrHighlightHotTrack : COLORREF; // In conjunction with fHighlightHotTrack
+
+ rcText : RECT; // Rect for text
+ nStringBkMode : cint;
+ nHLStringBkMode : cint;
+{$ifdef win32xp}
+ iListGap : cint;
+{$ENDIF}
+ END;
+ NMTBCUSTOMDRAW = _NMTBCUSTOMDRAW;
+ LPNMTBCUSTOMDRAW = ^_NMTBCUSTOMDRAW;
+ TNMTBCUSTOMDRAW = _NMTBCUSTOMDRAW;
+ PNMTBCUSTOMDRAW = ^_NMTBCUSTOMDRAW;
+
+
+// Toolbar custom draw return flags
+
+CONST
+ TBCDRF_NOEDGES = $00010000; // Don't draw button edges
+ TBCDRF_HILITEHOTTRACK = $00020000; // Use color of the button bk when hottracked
+ TBCDRF_NOOFFSET = $00040000; // Don't offset button if pressed
+ TBCDRF_NOMARK = $00080000; // Don't draw default highlight of image/text for TBSTATE_MARKED
+ TBCDRF_NOETCHEDEFFECT = $00100000; // Don't draw etched effect for disabled items
+{$ENDIF}
+
+{$ifdef ie5plus}
+ TBCDRF_BLENDICON = $00200000; // Use ILD_BLEND50 on the icon image
+ TBCDRF_NOBACKGROUND = $00400000; // Use ILD_BLEND50 on the icon image
+{$ENDIF}
+
+CONST
+ TB_ENABLEBUTTON = (WM_USER + 1);
+ TB_CHECKBUTTON = (WM_USER + 2);
+ TB_PRESSBUTTON = (WM_USER + 3);
+ TB_HIDEBUTTON = (WM_USER + 4);
+ TB_INDETERMINATE = (WM_USER + 5);
+{$ifdef ie4plus}
+ TB_MARKBUTTON = (WM_USER + 6);
+{$ENDIF}
+ TB_ISBUTTONENABLED = (WM_USER + 9);
+ TB_ISBUTTONCHECKED = (WM_USER + 10);
+ TB_ISBUTTONPRESSED = (WM_USER + 11);
+ TB_ISBUTTONHIDDEN = (WM_USER + 12);
+ TB_ISBUTTONINDETERMINATE = (WM_USER + 13);
+{$ifdef ie4plus}
+ TB_ISBUTTONHIGHLIGHTED = (WM_USER + 14);
+{$ENDIF}
+ TB_SETSTATE = (WM_USER + 17);
+ TB_GETSTATE = (WM_USER + 18);
+ TB_ADDBITMAP = (WM_USER + 19);
+
+{$IFDEF _WIN32}
+
+TYPE
+
+ tagTBADDBITMAP = Record
+ hInst : HINST;
+ nID : UINT_PTR;
+ END;
+ TBADDBITMAP = tagTBADDBITMAP;
+ LPTBADDBITMAP = ^tagTBADDBITMAP;
+ TTBADDBITMAP = tagTBADDBITMAP;
+ PTBADDBITMAP = ^tagTBADDBITMAP;
+
+
+
+CONST
+ HINST_COMMCTRL = HINST(-1);
+ IDB_STD_SMALL_COLOR = 0;
+ IDB_STD_LARGE_COLOR = 1;
+ IDB_VIEW_SMALL_COLOR = 4;
+ IDB_VIEW_LARGE_COLOR = 5;
+{$ifdef ie3plus}
+ IDB_HIST_SMALL_COLOR = 8;
+ IDB_HIST_LARGE_COLOR = 9;
+{$ENDIF}
+
+// icon indexes for standard bitmap
+
+ STD_CUT = 0;
+ STD_COPY = 1;
+ STD_PASTE = 2;
+ STD_UNDO = 3;
+ STD_REDOW = 4;
+ STD_DELETE = 5;
+ STD_FILENEW = 6;
+ STD_FILEOPEN = 7;
+ STD_FILESAVE = 8;
+ STD_PRINTPRE = 9;
+ STD_PROPERTIES = 10;
+ STD_HELP = 11;
+ STD_FIND = 12;
+ STD_REPLACE = 13;
+ STD_PRINT = 14;
+
+// icon indexes for standard view bitmap
+
+ VIEW_LARGEICONS = 0;
+ VIEW_SMALLICONS = 1;
+ VIEW_LIST = 2;
+ VIEW_DETAILS = 3;
+ VIEW_SORTNAME = 4;
+ VIEW_SORTSIZE = 5;
+ VIEW_SORTDATE = 6;
+ VIEW_SORTTYPE = 7;
+ VIEW_PARENTFOLDER = 8;
+ VIEW_NETCONNECT = 9;
+ VIEW_NETDISCONNECT = 10;
+ VIEW_NEWFOLDER = 11;
+{$ifdef ie4plus}
+ VIEW_VIEWMENU = 12;
+{$ENDIF}
+
+{$ifdef ie3plus}
+ HIST_BACK = 0;
+ HIST_FORWARD = 1;
+ HIST_FAVORITES = 2;
+ HIST_ADDTOFAVORITES = 3;
+ HIST_VIEWTREE = 4;
+{$ENDIF}
+
+{$ENDIF}
+
+{$ifdef ie4plus}
+ TB_ADDBUTTONSA = (WM_USER + 20);
+ TB_INSERTBUTTONA = (WM_USER + 21);
+{$ELSE}
+ TB_ADDBUTTONS = (WM_USER + 20);
+ TB_INSERTBUTTON = (WM_USER + 21);
+{$ENDIF}
+
+ TB_DELETEBUTTON = (WM_USER + 22);
+ TB_GETBUTTON = (WM_USER + 23);
+ TB_BUTTONCOUNT = (WM_USER + 24);
+ TB_COMMANDTOINDEX = (WM_USER + 25);
+
+{$IFDEF _WIN32}
+TYPE
+
+ tagTBSAVEPARAMSA = Record
+ hkr : HKEY;
+ pszSubKey : LPCSTR;
+ pszValueName : LPCSTR;
+ END;
+ TBSAVEPARAMSA = tagTBSAVEPARAMSA;
+ LPTBSAVEPARAMSA = ^tagTBSAVEPARAMSA;
+ TTBSAVEPARAMSA = tagTBSAVEPARAMSA;
+ PTBSAVEPARAMSA = ^tagTBSAVEPARAMSA;
+
+
+ tagTBSAVEPARAMSW = Record
+ hkr : HKEY;
+ pszSubKey : LPCWSTR;
+ pszValueName : LPCWSTR;
+ END;
+ TBSAVEPARAMSW = tagTBSAVEPARAMSW;
+ LPTBSAVEPARAMW = ^tagTBSAVEPARAMSW;
+ TTBSAVEPARAMSW = tagTBSAVEPARAMSW;
+ PTBSAVEPARAMSW = ^tagTBSAVEPARAMSW;
+
+
+{$IFDEF UNICODE}
+ TBSAVEPARAMS = TBSAVEPARAMSW;
+ LPTBSAVEPARAMS = LPTBSAVEPARAMSW;
+{$ELSE}
+ TBSAVEPARAMS = TBSAVEPARAMSA;
+ LPTBSAVEPARAMS = LPTBSAVEPARAMSA;
+{$ENDIF}
+
+{$ENDIF} // _WIN32
+
+
+CONST
+ TB_SAVERESTOREA = (WM_USER + 26);
+ TB_SAVERESTOREW = (WM_USER + 76);
+ TB_CUSTOMIZE = (WM_USER + 27);
+ TB_ADDSTRINGA = (WM_USER + 28);
+ TB_ADDSTRINGW = (WM_USER + 77);
+ TB_GETITEMRECT = (WM_USER + 29);
+ TB_BUTTONSTRUCTSIZE = (WM_USER + 30);
+ TB_SETBUTTONSIZE = (WM_USER + 31);
+ TB_SETBITMAPSIZE = (WM_USER + 32);
+ TB_AUTOSIZE = (WM_USER + 33);
+ TB_GETTOOLTIPS = (WM_USER + 35);
+ TB_SETTOOLTIPS = (WM_USER + 36);
+ TB_SETPARENT = (WM_USER + 37);
+ TB_SETROWS = (WM_USER + 39);
+ TB_GETROWS = (WM_USER + 40);
+ TB_SETCMDID = (WM_USER + 42);
+ TB_CHANGEBITMAP = (WM_USER + 43);
+ TB_GETBITMAP = (WM_USER + 44);
+ TB_GETBUTTONTEXTA = (WM_USER + 45);
+ TB_GETBUTTONTEXTW = (WM_USER + 75);
+ TB_REPLACEBITMAP = (WM_USER + 46);
+{$ifdef ie3plus}
+ TB_SETINDENT = (WM_USER + 47);
+ TB_SETIMAGELIST = (WM_USER + 48);
+ TB_GETIMAGELIST = (WM_USER + 49);
+ TB_LOADIMAGES = (WM_USER + 50);
+ TB_GETRECT = (WM_USER + 51); // wParam is the Cmd instead of index
+ TB_SETHOTIMAGELIST = (WM_USER + 52);
+ TB_GETHOTIMAGELIST = (WM_USER + 53);
+ TB_SETDISABLEDIMAGELIST = (WM_USER + 54);
+ TB_GETDISABLEDIMAGELIST = (WM_USER + 55);
+ TB_SETSTYLE = (WM_USER + 56);
+ TB_GETSTYLE = (WM_USER + 57);
+ TB_GETBUTTONSIZE = (WM_USER + 58);
+ TB_SETBUTTONWIDTH = (WM_USER + 59);
+ TB_SETMAXTEXTROWS = (WM_USER + 60);
+ TB_GETTEXTROWS = (WM_USER + 61);
+{$ENDIF} // _WIN32_IE >= 0x0300
+
+CONST
+{$IFDEF UNICODE}
+
+ TB_SAVERESTORE = TB_SAVERESTOREW;
+ TB_ADDSTRING = TB_ADDSTRINGW;
+{$ELSE}
+ TB_GETBUTTONTEXT = TB_GETBUTTONTEXTA;
+ TB_SAVERESTORE = TB_SAVERESTOREA;
+ TB_ADDSTRING = TB_ADDSTRINGA;
+{$ENDIF}
+{$ifdef ie4plus}
+
+CONST
+ TB_GETOBJECT = (WM_USER + 62); // wParam == IID, lParam void **ppv
+ TB_GETHOTITEM = (WM_USER + 71);
+ TB_SETHOTITEM = (WM_USER + 72); // wParam == iHotItem
+ TB_SETANCHORHIGHLIGHT = (WM_USER + 73); // wParam == TRUE/FALSE
+ TB_GETANCHORHIGHLIGHT = (WM_USER + 74);
+ TB_MAPACCELERATORA = (WM_USER + 78); // wParam == ch, lParam int * pidBtn
+
+TYPE
+ TBINSERTMARK = Record
+ iButton : cint;
+ dwFlags : DWORD;
+ END;
+ LPTBINSERTMARK = ^TBINSERTMARK;
+ TTBINSERTMARK = TBINSERTMARK;
+ PTBINSERTMARK = ^TBINSERTMARK;
+
+
+CONST
+ TBIMHT_AFTER = $00000001; // TRUE = insert After iButton, otherwise before
+ TBIMHT_BACKGROUND = $00000002; // TRUE iff missed buttons completely
+
+ TB_GETINSERTMARK = (WM_USER + 79); // lParam == LPTBINSERTMARK
+ TB_SETINSERTMARK = (WM_USER + 80); // lParam == LPTBINSERTMARK
+ TB_INSERTMARKHITTEST = (WM_USER + 81); // wParam == LPPOINT lParam == LPTBINSERTMARK
+ TB_MOVEBUTTON = (WM_USER + 82);
+ TB_GETMAXSIZE = (WM_USER + 83); // lParam == LPSIZE
+ TB_SETEXTENDEDSTYLE = (WM_USER + 84); // For TBSTYLE_EX_*
+ TB_GETEXTENDEDSTYLE = (WM_USER + 85); // For TBSTYLE_EX_*
+ TB_GETPADDING = (WM_USER + 86);
+ TB_SETPADDING = (WM_USER + 87);
+ TB_SETINSERTMARKCOLOR = (WM_USER + 88);
+ TB_GETINSERTMARKCOLOR = (WM_USER + 89);
+
+ TB_SETCOLORSCHEME = CCM_SETCOLORSCHEME; // lParam is color scheme
+ TB_GETCOLORSCHEME = CCM_GETCOLORSCHEME; // fills in COLORSCHEME pointed to by lParam
+
+ TB_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT;
+ TB_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT;
+
+ TB_MAPACCELERATORW = (WM_USER + 90); // wParam == ch, lParam int * pidBtn
+
+CONST
+{$IFDEF UNICODE}
+ TB_MAPACCELERATOR = TB_MAPACCELERATORW;
+{$ELSE}
+ TB_MAPACCELERATOR = TB_MAPACCELERATORA;
+{$ENDIF}
+
+{$ENDIF} // _WIN32_IE >= 0x0400
+TYPE
+ TBREPLACEBITMAP = Record
+ hInstOld : HINST;
+ nIDOld : UINT_PTR;
+ hInstNew : HINST;
+ nIDNew : UINT_PTR;
+ nButtons : cint;
+ END;
+ LPTBREPLACEBITMAP = ^TBREPLACEBITMAP;
+ TTBREPLACEBITMAP = TBREPLACEBITMAP;
+ PTBREPLACEBITMAP = ^TBREPLACEBITMAP;
+
+
+{$IFDEF _WIN32}
+
+CONST
+ TBBF_LARGE = $0001;
+ TB_GETBITMAPFLAGS = (WM_USER + 41);
+
+{$ifdef ie4plus}
+ TBIF_IMAGE = $00000001;
+ TBIF_TEXT = $00000002;
+ TBIF_STATE = $00000004;
+ TBIF_STYLE = $00000008;
+ TBIF_LPARAM = $00000010;
+ TBIF_COMMAND = $00000020;
+ TBIF_SIZE = $00000040;
+
+{$ifdef ie5plus}
+ TBIF_BYINDEX = $80000000; // this specifies that the wparam in Get/SetButtonInfo is an index, not id
+{$ENDIF}
+
+TYPE
+
+ TBBUTTONINFOA = Record
+ cbSize : UINT;
+ dwMask : DWORD;
+ idCommand : cint;
+ iImage : cint;
+ fsState : BYTE;
+ fsStyle : BYTE;
+ cx : WORD;
+ lParam : DWORD_PTR;
+ pszText : LPSTR;
+ cchText : cint;
+ END;
+ LPTBBUTTONINFOA = ^TBBUTTONINFOA;
+ TTBBUTTONINFOA = TBBUTTONINFOA;
+ PTBBUTTONINFOA = ^TBBUTTONINFOA;
+
+
+ TBBUTTONINFOW = Record
+ cbSize : UINT;
+ dwMask : DWORD;
+ idCommand : cint;
+ iImage : cint;
+ fsState : BYTE;
+ fsStyle : BYTE;
+ cx : WORD;
+ lParam : DWORD_PTR;
+ pszText : LPWSTR;
+ cchText : cint;
+ END;
+ LPTBBUTTONINFOW = ^TBBUTTONINFOW;
+ TTBBUTTONINFOW= TBBUTTONINFOW;
+ PTBBUTTONINFOW= ^TBBUTTONINFOW;
+
+
+{$IFDEF UNICODE}
+ TBBUTTONINFO = TBBUTTONINFOW;
+ LPTBBUTTONINFO = LPTBBUTTONINFOW;
+{$ELSE}
+ TBBUTTONINFO = TBBUTTONINFOA;
+ LPTBBUTTONINFO = LPTBBUTTONINFOA;
+{$ENDIF}
+ TTBButtonInfo = TBBUTTONINFO;
+ PTBButtonInfo = LPTBBUTTONINFO;
+
+
+// BUTTONINFO APIs do NOT support the string pool.
+
+CONST
+ TB_GETBUTTONINFOW = (WM_USER + 63);
+ TB_SETBUTTONINFOW = (WM_USER + 64);
+ TB_GETBUTTONINFOA = (WM_USER + 65);
+ TB_SETBUTTONINFOA = (WM_USER + 66);
+
+{$IFDEF UNICODE}
+CONST
+ TB_GETBUTTONINFO = TB_GETBUTTONINFOW;
+ TB_SETBUTTONINFO = TB_SETBUTTONINFOW;
+{$ELSE}
+CONST
+ TB_GETBUTTONINFO = TB_GETBUTTONINFOA;
+ TB_SETBUTTONINFO = TB_SETBUTTONINFOA;
+{$ENDIF}
+
+CONST
+ TB_INSERTBUTTONW = (WM_USER + 67);
+ TB_ADDBUTTONSW = (WM_USER + 68);
+
+ TB_HITTEST = (WM_USER + 69);
+
+// New post Win95/NT4 for InsertButton and AddButton. if iString member
+// is a pointer to a string, it will be handled as a string like listview
+// (although LPSTR_TEXTCALLBACK is not supported).
+
+{$IFDEF UNICODE}
+CONST
+ TB_INSERTBUTTON = TB_INSERTBUTTONW;
+ TB_ADDBUTTONS = TB_ADDBUTTONSW;
+{$ELSE}
+CONST
+ TB_INSERTBUTTON = TB_INSERTBUTTONA;
+ TB_ADDBUTTONS = TB_ADDBUTTONSA;
+{$ENDIF}
+
+
+CONST
+ TB_SETDRAWTEXTFLAGS = (WM_USER + 70); // wParam == mask lParam == bit values
+
+{$ENDIF} // _WIN32_IE >= 0x0400
+
+{$ifdef ie5plus}
+
+ TB_GETSTRINGW = (WM_USER + 91);
+ TB_GETSTRINGA = (WM_USER + 92);
+{$IFDEF UNICODE}
+
+ TB_GETSTRING = TB_GETSTRINGW;
+{$ELSE}
+ TB_GETSTRING = TB_GETSTRINGA;
+{$ENDIF}
+
+
+{$ENDIF} // _WIN32_IE >= 0x0500
+
+{$ifdef win32xp}
+
+CONST
+ TBMF_PAD = $00000001;
+ TBMF_BARPAD = $00000002;
+ TBMF_BUTTONSPACING = $00000004;
+
+TYPE
+
+ TBMETRICS = Record
+ cbSize : UINT;
+ dwMask : DWORD;
+ cxPad : cint; // PAD
+ cyPad : cint;
+ cxBarPad : cint; // BARPAD
+ cyBarPad : cint;
+ cxButtonSpacing : cint; // BUTTONSPACING
+ cyButtonSpacing : cint;
+ END;
+ LPTBMETRICS = ^TBMETRICS;
+ TTBMETRICS = TBMETRICS;
+ PTBMETRICS = ^TBMETRICS;
+
+CONST
+ TB_GETMETRICS = (WM_USER + 101);
+ TB_SETMETRICS = (WM_USER + 102);
+{$ENDIF}
+
+
+{$ifdef win32xp}
+ TB_SETWINDOWTHEME = CCM_SETWINDOWTHEME;
+{$ENDIF}
+
+ TBN_GETBUTTONINFOA = (TBN_FIRST-0);
+ TBN_BEGINDRAG = (TBN_FIRST-1);
+ TBN_ENDDRAG = (TBN_FIRST-2);
+ TBN_BEGINADJUST = (TBN_FIRST-3);
+ TBN_ENDADJUST = (TBN_FIRST-4);
+ TBN_RESET = (TBN_FIRST-5);
+ TBN_QUERYINSERT = (TBN_FIRST-6);
+ TBN_QUERYDELETE = (TBN_FIRST-7);
+ TBN_TOOLBARCHANGE = (TBN_FIRST-8);
+ TBN_CUSTHELP = (TBN_FIRST-9);
+{$ifdef ie3plus}
+ TBN_DROPDOWN = (TBN_FIRST - 10);
+{$ENDIF}
+{$ifdef ie4plus}
+ TBN_GETOBJECT = (TBN_FIRST - 12);
+
+// Structure for TBN_HOTITEMCHANGE notification
+//
+TYPE
+
+ tagNMTBHOTITEM = Record
+ hdr : NMHDR;
+ idOld : cint;
+ idNew : cint;
+ dwFlags : DWORD; // HICF_*
+ END;
+ NMTBHOTITEM = tagNMTBHOTITEM;
+ LPNMTBHOTITEM = ^tagNMTBHOTITEM;
+ TNMTBHOTITEM = tagNMTBHOTITEM;
+ PNMTBHOTITEM = ^tagNMTBHOTITEM;
+
+
+// Hot item change flags
+
+CONST
+ HICF_OTHER = $00000000;
+ HICF_MOUSE = $00000001; // Triggered by mouse
+ HICF_ARROWKEYS = $00000002; // Triggered by arrow keys
+ HICF_ACCELERATOR = $00000004; // Triggered by accelerator
+ HICF_DUPACCEL = $00000008; // This accelerator is not unique
+ HICF_ENTERING = $00000010; // idOld is invalid
+ HICF_LEAVING = $00000020; // idNew is invalid
+ HICF_RESELECT = $00000040; // hot item reselected
+ HICF_LMOUSE = $00000080; // left mouse button selected
+ HICF_TOGGLEDROPDOWN = $00000100; // Toggle button's dropdown state
+
+
+ TBN_HOTITEMCHANGE = (TBN_FIRST - 13);
+ TBN_DRAGOUT = (TBN_FIRST - 14); // this is sent when the user clicks down on a button then drags off the button
+ TBN_DELETINGBUTTON = (TBN_FIRST - 15); // uses TBNOTIFY
+ TBN_GETDISPINFOA = (TBN_FIRST - 16); // This is sent when the toolbar needs some display information
+ TBN_GETDISPINFOW = (TBN_FIRST - 17); // This is sent when the toolbar needs some display information
+ TBN_GETINFOTIPA = (TBN_FIRST - 18);
+ TBN_GETINFOTIPW = (TBN_FIRST - 19);
+ TBN_GETBUTTONINFOW = (TBN_FIRST - 20);
+{$ifdef ie5plus}
+ TBN_RESTORE = (TBN_FIRST - 21);
+ TBN_SAVE = (TBN_FIRST - 22);
+ TBN_INITCUSTOMIZE = (TBN_FIRST - 23);
+ TBNRF_HIDEHELP = $00000001;
+ TBNRF_ENDCUSTOMIZE = $00000002;
+{$ENDIF} // (_WIN32_IE >= 0x0500)
+
+
+
+{$ifdef ie5plus}
+
+TYPE
+
+ tagNMTBSAVE = Record
+ hdr : NMHDR;
+ pData : PDWORD;
+ pCurrent : PDWORD;
+ cbData : UINT;
+ iItem : cint;
+ cButtons : cint;
+ tbButton : TBBUTTON;
+ END;
+ NMTBSAVE = tagNMTBSAVE;
+ LPNMTBSAVE = ^tagNMTBSAVE;
+ TNMTBSAVE = tagNMTBSAVE;
+ PNMTBSAVE = ^tagNMTBSAVE;
+
+
+ tagNMTBRESTORE = Record
+ hdr : NMHDR;
+ pData : PDWORD;
+ pCurrent : PDWORD;
+ cbData : UINT;
+ iItem : cint;
+ cButtons : cint;
+ cbBytesPerRecord : cint;
+ tbButton : TBBUTTON;
+ END;
+ NMTBRESTORE = tagNMTBRESTORE;
+ LPNMTBRESTORE = ^tagNMTBRESTORE;
+ TNMTBRESTORE = tagNMTBRESTORE;
+ PNMTBRESTORE = ^tagNMTBRESTORE;
+
+{$ENDIF} // (_WIN32_IE >= 0x0500)
+
+ tagNMTBGETINFOTIPA = Record
+ hdr : NMHDR;
+ pszText : LPSTR;
+ cchTextMax : cint;
+ iItem : cint;
+ lParam : LPARAM;
+ END;
+ NMTBGETINFOTIPA = tagNMTBGETINFOTIPA;
+ LPNMTBGETINFOTIPA = ^tagNMTBGETINFOTIPA;
+ TNMTBGETINFOTIPA = tagNMTBGETINFOTIPA;
+ PNMTBGETINFOTIPA = ^tagNMTBGETINFOTIPA;
+
+
+ tagNMTBGETINFOTIPW = Record
+ hdr : NMHDR;
+ pszText : LPWSTR;
+ cchTextMax : cint;
+ iItem : cint;
+ lParam : LPARAM;
+ END;
+ NMTBGETINFOTIPW = tagNMTBGETINFOTIPW;
+ LPNMTBGETINFOTIPW = ^tagNMTBGETINFOTIPW;
+ TNMTBGETINFOTIPW = tagNMTBGETINFOTIPW;
+ PNMTBGETINFOTIPW = ^tagNMTBGETINFOTIPW;
+
+
+{$IFDEF UNICODE}
+CONST
+ TBN_GETINFOTIP = TBN_GETINFOTIPW;
+TYPE
+ NMTBGETINFOTIP = NMTBGETINFOTIPW;
+ LPNMTBGETINFOTIP = LPNMTBGETINFOTIPW;
+{$ELSE}
+CONST
+ TBN_GETINFOTIP = TBN_GETINFOTIPA;
+TYPE
+ NMTBGETINFOTIP = NMTBGETINFOTIPA;
+ LPNMTBGETINFOTIP = LPNMTBGETINFOTIPA;
+{$ENDIF}
+
+
+CONST
+ TBNF_IMAGE = $00000001;
+ TBNF_TEXT = $00000002;
+ TBNF_DI_SETITEM = $10000000;
+
+TYPE
+
+ NMTBDISPINFOA = Record
+ hdr : NMHDR;
+ dwMask : DWORD; // [in] Specifies the values requested .[out] Client ask the data to be set for future use
+ idCommand : cint; // [in] id of button we're requesting info for
+ lParam : DWORD_PTR; // [in] lParam of button
+ iImage : cint; // [out] image index
+ pszText : LPSTR; // [out] new text for item
+ cchText : cint; // [in] size of buffer pointed to by pszText
+ END;
+ LPNMTBDISPINFOA = ^NMTBDISPINFOA;
+ TNMTBDISPINFOA = NMTBDISPINFOA;
+ PNMTBDISPINFOA = ^NMTBDISPINFOA;
+
+
+ NMTBDISPINFOW = Record
+ hdr : NMHDR;
+ dwMask : DWORD; //[in] Specifies the values requested .[out] Client ask the data to be set for future use
+ idCommand : cint; // [in] id of button we're requesting info for
+ lParam : DWORD_PTR; // [in] lParam of button
+ iImage : cint; // [out] image index
+ pszText : LPWSTR; // [out] new text for item
+ cchText : cint; // [in] size of buffer pointed to by pszText
+ END;
+ LPNMTBDISPINFOW = ^NMTBDISPINFOW;
+ TNMTBDISPINFOW = NMTBDISPINFOW;
+ PNMTBDISPINFOW = ^NMTBDISPINFOW;
+
+{$IFDEF UNICODE}
+CONST
+ TBN_GETDISPINFO = TBN_GETDISPINFOW;
+TYPE
+ NMTBDISPINFO = NMTBDISPINFOW;
+ LPNMTBDISPINFO = LPNMTBDISPINFOW;
+{$ELSE}
+CONST
+ TBN_GETDISPINFO = TBN_GETDISPINFOA;
+TYPE
+ NMTBDISPINFO = NMTBDISPINFOA;
+ LPNMTBDISPINFO = LPNMTBDISPINFOA;
+{$ENDIF}
+
+// Return codes for TBN_DROPDOWN
+
+CONST
+ TBDDRET_DEFAULT = 0;
+ TBDDRET_NODEFAULT = 1;
+ TBDDRET_TREATPRESSED = 2; // Treat as a standard press button
+
+{$ENDIF}
+{$IFDEF UNICODE}
+ TBN_GETBUTTONINFO = TBN_GETBUTTONINFOW;
+{$ELSE}
+ TBN_GETBUTTONINFO = TBN_GETBUTTONINFOA;
+{$ENDIF}
+TYPE
+
+{$ifdef ie3plus}
+ tagNMTOOLBARA = Record
+ hdr : NMHDR;
+ iItem : cint;
+ tbButton : TBBUTTON;
+ cchText : cint;
+ pszText : LPSTR;
+{$ifdef ie5plus}
+ rcButton : RECT;
+{$ENDIF}
+ END;
+ NMTOOLBARA = tagNMTOOLBARA;
+ LPNMTOOLBARA = ^tagNMTOOLBARA;
+ LPNMTOOLBAR = LPNMTOOLBARA;
+ TNMTOOLBARA = tagNMTOOLBARA;
+ PNMTOOLBARA = LPNMTOOLBARA;
+{$ENDIF}
+ LPTBNOTIFY = LPNMTOOLBARA;
+ TBNOTIFYA = NMTOOLBARA;
+
+
+{$ifdef ie3plus}
+ tagNMTOOLBARW = Record
+ hdr : NMHDR;
+ iItem : cint;
+ tbButton : TBBUTTON;
+ cchText : cint;
+ pszText : LPWSTR;
+{$ifdef ie5plus}
+ rcButton : RECT;
+{$ENDIF}
+ END;
+ NMTOOLBARW = tagNMTOOLBARW;
+ LPNMTOOLBARW = ^tagNMTOOLBARW;
+ TNMTOOLBARW = tagNMTOOLBARW;
+ PNMTOOLBARW = ^tagNMTOOLBARW;
+{$ENDIF}
+
+
+{$ifdef ie3plus}
+ TBNOTIFYW = NMTOOLBARW;
+ LPTBNOTIFYA = LPNMTOOLBARA;
+{$ELSE}
+ tagNMTOOLBARA = tagTBNOTIFYA;
+ NMTOOLBARA = TBNOTIFYA;
+ LPNMTOOLBARA = LPTBNOTIFYA;
+ tagNMTOOLBARW = tagTBNOTIFYW;
+ NMTOOLBARW = TBNOTIFYW;
+ LPNMTOOLBARW = LPTBNOTIFYW;
+{$ENDIF}
+
+
+{$IFDEF UNICODE}
+ NMTOOLBAR = NMTOOLBARW;
+ LPNMTOOLBAR = LPNMTOOLBARW;
+{$ELSE}
+ NMTOOLBAR = NMTOOLBARA;
+ TNMTOOLBAR = NMTOOLBARA;
+ PNMTOOLBAR = LPNMTOOLBARA;
+
+{$ENDIF}
+
+ TBNOTIFY = NMTOOLBAR;
+{$ENDIF}
+
+{$ENDIF} // NOTOOLBAR
+
+ LPTBNOTIFYW = LPNMTOOLBARW;
+
+{$ifdef ie3plus}
+//====== REBAR CONTROL ========================================================
+
+{$IFNDEF NOREBAR}
+
+{$IFDEF _WIN32}
+
+CONST
+ REBARCLASSNAMEW = {L}'ReBarWindow32';
+ REBARCLASSNAMEA = 'ReBarWindow32';
+
+{$IFDEF UNICODE}
+ REBARCLASSNAME = REBARCLASSNAMEW;
+{$ELSE}
+ REBARCLASSNAME = REBARCLASSNAMEA;
+{$ENDIF}
+
+{$ELSE}
+
+CONST
+ REBARCLASSNAME = 'ReBarWindow';
+{$ENDIF}
+
+CONST
+ RBIM_IMAGELIST = $00000001;
+
+// begin_r_commctrl
+
+{$ifdef ie4plus}
+ RBS_TOOLTIPS = $0100;
+ RBS_VARHEIGHT = $0200;
+ RBS_BANDBORDERS = $0400;
+ RBS_FIXEDORDER = $0800;
+ RBS_REGISTERDROP = $1000;
+ RBS_AUTOSIZE = $2000;
+ RBS_VERTICALGRIPPER = $4000; // this always has the vertical gripper (default for horizontal mode)
+ RBS_DBLCLKTOGGLE = $8000;
+{$ELSE}
+ RBS_TOOLTIPS = $00000100;
+ RBS_VARHEIGHT = $00000200;
+ RBS_BANDBORDERS = $00000400;
+ RBS_FIXEDORDER = $00000800;
+{$ENDIF} // _WIN32_IE >= 0x0400
+
+
+// end_r_commctrl
+
+TYPE
+
+ tagREBARINFO = Record
+ cbSize : UINT;
+ fMask : UINT;
+{$IFNDEF NOIMAGEAPIS}
+ himl : HIMAGELIST;
+{$ELSE}
+ himl : HANDLE;
+{$ENDIF}
+ END;
+ REBARINFO = tagREBARINFO;
+ LPREBARINFO = ^tagREBARINFO;
+ TREBARINFO = tagREBARINFO;
+ PREBARINFO = ^tagREBARINFO;
+
+
+CONST
+ RBBS_BREAK = $00000001; // break to new line
+ RBBS_FIXEDSIZE = $00000002; // band can't be sized
+ RBBS_CHILDEDGE = $00000004; // edge around top & bottom of child window
+ RBBS_HIDDEN = $00000008; // don't show
+ RBBS_NOVERT = $00000010; // don't show when vertical
+ RBBS_FIXEDBMP = $00000020; // bitmap doesn't move during band resize
+{$ifdef ie4plus }
+ RBBS_VARIABLEHEIGHT = $00000040; // allow autosizing of this child vertically
+ RBBS_GRIPPERALWAYS = $00000080; // always show the gripper
+ RBBS_NOGRIPPER = $00000100; // never show the gripper
+{$ifdef ie5plus}
+ RBBS_USECHEVRON = $00000200; // display drop-down button for this band if it's sized smaller than ideal width
+{$ifdef IE501plus}
+ RBBS_HIDETITLE = $00000400; // keep band title hidden
+ RBBS_TOPALIGN = $00000800; // keep band title hidden
+{$ENDIF} // 0x0501 //
+{$ENDIF} // 0x0500 //
+{$ENDIF} // 0x0400 //
+
+ RBBIM_STYLE = $00000001;
+ RBBIM_COLORS = $00000002;
+ RBBIM_TEXT = $00000004;
+ RBBIM_IMAGE = $00000008;
+ RBBIM_CHILD = $00000010;
+ RBBIM_CHILDSIZE = $00000020;
+ RBBIM_SIZE = $00000040;
+ RBBIM_BACKGROUND = $00000080;
+ RBBIM_ID = $00000100;
+{$ifdef ie4plus}
+ RBBIM_IDEALSIZE = $00000200;
+ RBBIM_LPARAM = $00000400;
+ RBBIM_HEADERSIZE = $00000800; // control the size of the header
+{$ENDIF}
+
+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;
+
+ TRebarBandInfo = REBARBANDINFO;
+ PRebarBandInfo = ^LPREBARBANDINFO;
+
+// REBARBANDINFO_V3_SIZE = REBARBANDINFOA_V3_SIZE;
+{$ENDIF}
+
+CONST
+ RB_INSERTBANDA = (WM_USER + 1);
+ RB_DELETEBAND = (WM_USER + 2);
+ RB_GETBARINFO = (WM_USER + 3);
+ RB_SETBARINFO = (WM_USER + 4);
+{$ifdef IE4plus}
+ RB_GETBANDINFO = (WM_USER + 5);
+ RB_GETBANDINFO_PRE_IE4 = (WM_USER + 5);
+{$ENDIF}
+ RB_SETBANDINFOA = (WM_USER + 6);
+ RB_SETPARENT = (WM_USER + 7);
+{$ifdef ie4plus}
+ RB_HITTEST = (WM_USER + 8);
+ RB_GETRECT = (WM_USER + 9);
+{$ENDIF}
+ RB_INSERTBANDW = (WM_USER + 10);
+ RB_SETBANDINFOW = (WM_USER + 11);
+ RB_GETBANDCOUNT = (WM_USER + 12);
+ RB_GETROWCOUNT = (WM_USER + 13);
+ RB_GETROWHEIGHT = (WM_USER + 14);
+{$ifdef ie4plus}
+ RB_IDTOINDEX = (WM_USER + 16); // wParam == id
+ RB_GETTOOLTIPS = (WM_USER + 17);
+ RB_SETTOOLTIPS = (WM_USER + 18);
+ RB_SETBKCOLOR = (WM_USER + 19); // sets the default BK color
+ RB_GETBKCOLOR = (WM_USER + 20); // defaults to CLR_NONE
+ RB_SETTEXTCOLOR = (WM_USER + 21);
+ RB_GETTEXTCOLOR = (WM_USER + 22); // defaults to 0x00000000
+
+{$ifdef Win32XP}
+ RBSTR_CHANGERECT = $0001; // flags for RB_SIZETORECT
+{$ENDIF}
+
+ RB_SIZETORECT = (WM_USER + 23); // resize the rebar/break bands and such to this rect (lparam)
+{$ENDIF} // _WIN32_IE >= 0x0400
+
+ RB_SETCOLORSCHEME = CCM_SETCOLORSCHEME; // lParam is color scheme
+ RB_GETCOLORSCHEME = CCM_GETCOLORSCHEME; // fills in COLORSCHEME pointed to by lParam
+
+{$IFDEF UNICODE}
+ RB_INSERTBAND = RB_INSERTBANDW;
+ RB_SETBANDINFO = RB_SETBANDINFOW;
+{$ELSE}
+ RB_INSERTBAND = RB_INSERTBANDA;
+ RB_SETBANDINFO = RB_SETBANDINFOA;
+{$ENDIF}
+
+{$ifdef ie4plus}
+// for manual drag control
+// lparam == cursor pos
+ // -1 means do it yourself.
+ // -2 means use what you had saved before
+
+CONST
+ RB_BEGINDRAG = (WM_USER + 24);
+ RB_ENDDRAG = (WM_USER + 25);
+ RB_DRAGMOVE = (WM_USER + 26);
+ RB_GETBARHEIGHT = (WM_USER + 27);
+ RB_GETBANDINFOW = (WM_USER + 28);
+ RB_GETBANDINFOA = (WM_USER + 29);
+
+//TYPE
+{$IFDEF UNICODE}
+// RB_GETBANDINFO = RB_GETBANDINFOW;
+{$ELSE}
+// RB_GETBANDINFO = RB_GETBANDINFOA;
+{$ENDIF}
+
+CONST
+ RB_MINIMIZEBAND = (WM_USER + 30);
+ RB_MAXIMIZEBAND = (WM_USER + 31);
+
+ RB_GETDROPTARGET = (CCM_GETDROPTARGET);
+
+ RB_GETBANDBORDERS = (WM_USER + 34); // returns in lparam = lprc the amount of edges added to band wparam
+
+ RB_SHOWBAND = (WM_USER + 35); // show/hide band
+ RB_SETPALETTE = (WM_USER + 37);
+ RB_GETPALETTE = (WM_USER + 38);
+ RB_MOVEBAND = (WM_USER + 39);
+
+ RB_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT;
+ RB_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT;
+
+{$ENDIF} // _WIN32_IE >= 0x0400
+
+{$ifdef win32xp}
+ RB_GETBANDMARGINS = (WM_USER + 40);
+ RB_SETWINDOWTHEME = CCM_SETWINDOWTHEME;
+{$ENDIF}
+
+{$ifdef 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;
+ PRBHitTestInfo = PRB_HITTESTINFO;
+ TRBHitTestInfo = TRB_HITTESTINFO;
+
+
+{$ENDIF} // _WIN32_IE >= 0x0400
+{$ENDIF} // NOREBAR
+{$ENDIF} // _WIN32_IE >= 0x0300
+
+//====== TOOLTIPS CONTROL =====================================================
+
+{$IFNDEF NOTOOLTIPS}
+
+{$IFDEF _WIN32}
+
+CONST
+ TOOLTIPS_CLASSW = {L}'tooltips_class32';
+ TOOLTIPS_CLASSA = 'tooltips_class32';
+
+{$IFDEF UNICODE}
+ TOOLTIPS_CLASS = TOOLTIPS_CLASSW;
+{$ELSE}
+ TOOLTIPS_CLASS = TOOLTIPS_CLASSA;
+{$ENDIF}
+
+{$ELSE}
+
+CONST
+ TOOLTIPS_CLASS = 'tooltips_class';
+{$ENDIF}
+
+
+
+TYPE
+
+ tagTOOLINFOA = Record
+ cbSize : UINT;
+ uFlags : UINT;
+ hwnd : HWND;
+ uId : UINT_PTR;
+ rect : RECT;
+ hinst : HINST;
+ lpszText : LPSTR;
+{$ifdef ie3plus}
+ lParam : LPARAM;
+{$ENDIF}
+{$ifdef Win32XP}
+ lpReserved : Pointer;
+{$ENDIF}
+ END;
+ TTTOOLINFOA = tagTOOLINFOA;
+ PTOOLINFOA = {near} ^tagTOOLINFOA;
+ LPTTTOOLINFOA = ^tagTOOLINFOA;
+ TTOOLINFOA = tagTOOLINFOA;
+ LPTOOLINFOA = ^tagTOOLINFOA;
+
+
+ tagTOOLINFOW = Record
+ cbSize : UINT;
+ uFlags : UINT;
+ hwnd : HWND;
+ uId : UINT_PTR;
+ rect : RECT;
+ hinst : HINST;
+ lpszText : LPWSTR;
+{$ifdef ie3plus}
+ lParam : LPARAM;
+{$ENDIF}
+{$ifdef Win32XP}
+ lpReserved : Pointer;
+{$ENDIF}
+ END;
+ TTTOOLINFOW = tagTOOLINFOW;
+ PTOOLINFOW = {near} ^tagTOOLINFOW;
+ LPTTTOOLINFOW = ^tagTOOLINFOW;
+ TTOOLINFOW = tagTOOLINFOW;
+ LPTOOLINFOW = ^tagTOOLINFOW;
+
+
+{$IFDEF UNICODE}
+ TTTOOLINFO = TTTOOLINFOW;
+ PTOOLINFO = PTOOLINFOW;
+ LPTTTOOLINFO = LPTTTOOLINFOW;
+// TTTOOLINFO_V1_SIZE = TTTOOLINFOW_V1_SIZE;
+{$ELSE}
+ PTOOLINFO = PTOOLINFOA;
+ TTTOOLINFO = TTTOOLINFOA;
+ LPTTTOOLINFO = LPTTTOOLINFOA;
+// TTTOOLINFO_V1_SIZE = TTTOOLINFOA_V1_SIZE;
+{$ENDIF}
+
+
+TYPE
+
+{$ifdef ie3plus}
+// LPTOOLINFOA = LPTTTOOLINFOA;
+// LPTOOLINFOW = LPTTTOOLINFOW;
+ TOOLINFOA = TTTOOLINFOA;
+ TOOLINFOW = TTTOOLINFOW;
+{$ELSE}
+// TTTOOLINFOA = TOOLINFOA;
+// LPTTTOOLINFOA = LPTOOLINFOA;
+// TTTOOLINFOW = TOOLINFOW;
+// LPTTTOOLINFOW = LPTOOLINFOW;
+{$ENDIF}
+
+
+
+ LPTOOLINFO = LPTTTOOLINFO;
+
+ TOOLINFO = TTTOOLINFO;
+
+// #define TTTOOLINFOA_V1_SIZE CCSIZEOF_STRUCT(TTTOOLINFOA, lpszText)
+// #define TTTOOLINFOW_V1_SIZE CCSIZEOF_STRUCT(TTTOOLINFOW, lpszText)
+// #define TTTOOLINFOA_V2_SIZE CCSIZEOF_STRUCT(TTTOOLINFOA, lParam)
+// #define TTTOOLINFOW_V2_SIZE CCSIZEOF_STRUCT(TTTOOLINFOW, lParam)
+// #define TTTOOLINFOA_V3_SIZE CCSIZEOF_STRUCT(TTTOOLINFOA, lpReserved)
+// #define TTTOOLINFOW_V3_SIZE CCSIZEOF_STRUCT(TTTOOLINFOW, lpReserved)
+
+
+CONST
+// begin_r_commctrl
+
+ TTS_ALWAYSTIP = $01;
+ TTS_NOPREFIX = $02;
+{$ifdef ie5plus}
+ TTS_NOANIMATE = $10;
+ TTS_NOFADE = $20;
+ TTS_BALLOON = $40;
+ TTS_CLOSE = $80;
+{$ENDIF}
+
+// 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;
+ TTOOLTIPTEXTW = NMTTDISPINFOW;
+ PTOOLTIPTEXTW = LPNMTTDISPINFOW;
+{$ELSE}
+// tagNMTTDISPINFOA = tagTOOLTIPTEXTA;
+ NMTTDISPINFOA = TOOLTIPTEXTA;
+// LPNMTTDISPINFOA = LPTOOLTIPTEXTA;
+ tagNMTTDISPINFOW = tagTOOLTIPTEXTW;
+ NMTTDISPINFOW = TOOLTIPTEXTW;
+ LPNMTTDISPINFOW = LPTOOLTIPTEXTW;
+{$ENDIF}
+
+TYPE
+
+{$IFDEF UNICODE}
+ NMTTDISPINFO = NMTTDISPINFOW;
+ LPNMTTDISPINFO = LPNMTTDISPINFOW;
+// NMTTDISPINFO_V1_SIZE = NMTTDISPINFOW_V1_SIZE;
+{$ELSE}
+ NMTTDISPINFO = NMTTDISPINFOA;
+ LPNMTTDISPINFO = LPNMTTDISPINFOA;
+// NMTTDISPINFO_V1_SIZE = NMTTDISPINFOA_V1_SIZE;
+{$ENDIF}
+
+ TOOLTIPTEXT = NMTTDISPINFO;
+ LPTOOLTIPTEXT = LPNMTTDISPINFO;
+
+{$ENDIF} // NOTOOLTIPS
+
+
+//====== STATUS BAR CONTROL ===================================================
+
+{$IFNDEF NOSTATUSBAR}
+
+// begin_r_commctrl
+CONST
+ SBARS_SIZEGRIP = $0100;
+{$ifdef ie5plus}
+ SBARS_TOOLTIPS = $0800;
+{$ENDIF}
+
+{$ifdef ie4plus}
+// this is a status bar flag, preference to SBARS_TOOLTIPS
+ SBT_TOOLTIPS = $0800;
+{$ENDIF}
+
+// end_r_commctrl
+
+procedure DrawStatusTextA(hDC:HDC;lprc:LPRECT;pszText:LPCSTR;uFlags:UINT); stdcall; external commctrldll name 'DrawStatusTextA';
+Procedure DrawStatusTextW(hDC:HDC;lprc:LPRECT;pszText:LPCWSTR;uFlags:UINT); stdcall; external commctrldll name 'DrawStatusTextW';
+
+function CreateStatusWindowA(style:LONG;lpszText:LPCSTR;hwndParent:HWND;wID:UINT):HWND; stdcall; external commctrldll name 'CreateStatusWindowA';
+function CreateStatusWindowW(style:LONG;lpszText:LPCWSTR;hwndParent:HWND;wID:UINT):HWND; stdcall; external commctrldll name 'CreateStatusWindowW';
+
+
+{$IFDEF UNICODE}
+function CreateStatusWindow(style:LONG;lpszText:LPCSTR;hwndParent:HWND;wID:UINT):HWND; stdcall; external commctrldll name 'CreateStatusWindowA';
+procedure DrawStatusText(hDC:HDC;lprc:LPRECT;pszText:LPCSTR;uFlags:UINT); stdcall; external commctrldll name 'DrawStatusTextA';
+{$ELSE}
+function CreateStatusWindow(style:LONG;lpszText:LPCWSTR;hwndParent:HWND;wID:UINT):HWND; stdcall; external commctrldll name 'CreateStatusWindowW';
+Procedure DrawStatusText(hDC:HDC;lprc:LPRECT;pszText:LPCWSTR;uFlags:UINT); stdcall; external commctrldll name 'DrawStatusTextW';
+{$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); stdcall; external commctrldll name 'MenuHelp';
+function ShowHideMenuCtl(hWnd:HWND;uFlags:UINT_PTR;lpInfo:LPINT):BOOL; stdcall; external commctrldll name 'ShowHideMenuCtl';
+Procedure GetEffectiveClientRect(hWnd:HWND;lprc:LPRECT;lpInfo:LPINT); stdcall; external commctrldll name 'GetEffectiveClientRect';
+
+CONST
+ MINSYSCOMMAND = SC_SIZE;
+{$ENDIF}
+
+
+//====== TRACKBAR CONTROL =====================================================
+
+{$IFNDEF NOTRACKBAR}
+
+CONST
+
+{$IFDEF _WIN32}
+
+ TRACKBAR_CLASSA = 'msctls_trackbar32';
+ TRACKBAR_CLASSW = {L}'msctls_trackbar32';
+
+{$IFDEF UNICODE}
+ TRACKBAR_CLASS = TRACKBAR_CLASSW;
+{$ELSE}
+ TRACKBAR_CLASS = TRACKBAR_CLASSA;
+{$ENDIF}
+{$ELSE}
+ TRACKBAR_CLASS = 'msctls_trackbar';
+{$ENDIF}
+
+// begin_r_commctrl
+
+ TBS_AUTOTICKS = $0001;
+ TBS_VERT = $0002;
+ TBS_HORZ = $0000;
+ TBS_TOP = $0004;
+ TBS_BOTTOM = $0000;
+ TBS_LEFT = $0004;
+ TBS_RIGHT = $0000;
+ TBS_BOTH = $0008;
+ TBS_NOTICKS = $0010;
+ TBS_ENABLESELRANGE = $0020;
+ TBS_FIXEDLENGTH = $0040;
+ TBS_NOTHUMB = $0080;
+{$ifdef ie3plus}
+ TBS_TOOLTIPS = $0100;
+{$ENDIF}
+{$ifdef ie5plus}
+ TBS_REVERSED = $0200; // Accessibility hint: the smaller number (usually the min value) means "high" and the larger number (usually the max value) means "low"
+{$ENDIF}
+
+{$ifdef ie501plus}
+ TBS_DOWNISLEFT = $0400; // Down=Left and Up=Right (default is Down=Right and Up=Left)
+{$ENDIF}
+
+// 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; stdcall; external commctrldll name 'MakeDragList';
+Procedure DrawInsert(handParent:HWND;hLB:HWND;nItem:cint); stdcall; external commctrldll name 'DrawInsert';
+function LBItemFromPt(hLB:HWND;pt:POINT;bAutoScroll:BOOL):cint; stdcall; external commctrldll name 'LBItemFromPt';
+
+{$ENDIF}
+
+//====== UPDOWN CONTROL =======================================================
+
+{$IFNDEF NOUPDOWN}
+CONST
+{$IFDEF _WIN32}
+
+ UPDOWN_CLASSA = 'msctls_updown32';
+ UPDOWN_CLASSW = {L}'msctls_updown32';
+
+{$IFDEF UNICODE}
+ UPDOWN_CLASS = UPDOWN_CLASSW;
+{$ELSE}
+ UPDOWN_CLASS = UPDOWN_CLASSA;
+{$ENDIF}
+{$ELSE}
+ UPDOWN_CLASS = 'msctls_updown';
+{$ENDIF}
+
+TYPE
+
+ _UDACCEL = Record
+ nSec : UINT;
+ nInc : UINT;
+ END;
+ UDACCEL = _UDACCEL;
+ LPUDACCEL = ^_UDACCEL;
+ TUDACCEL = _UDACCEL;
+ PUDACCEL = ^_UDACCEL;
+
+CONST
+ UD_MAXVAL = $7fff;
+ UD_MINVAL = (-UD_MAXVAL);
+
+// begin_r_commctrl
+
+ UDS_WRAP = $0001;
+ UDS_SETBUDDYINT = $0002;
+ UDS_ALIGNRIGHT = $0004;
+ UDS_ALIGNLEFT = $0008;
+ UDS_AUTOBUDDY = $0010;
+ UDS_ARROWKEYS = $0020;
+ UDS_HORZ = $0040;
+ UDS_NOTHOUSANDS = $0080;
+{$ifdef ie3plus}
+ UDS_HOTTRACK = $0100;
+{$ENDIF}
+
+// end_r_commctrl
+
+ UDM_SETRANGE = (WM_USER+101);
+ UDM_GETRANGE = (WM_USER+102);
+ UDM_SETPOS = (WM_USER+103);
+ UDM_GETPOS = (WM_USER+104);
+ UDM_SETBUDDY = (WM_USER+105);
+ UDM_GETBUDDY = (WM_USER+106);
+ UDM_SETACCEL = (WM_USER+107);
+ UDM_GETACCEL = (WM_USER+108);
+ UDM_SETBASE = (WM_USER+109);
+ UDM_GETBASE = (WM_USER+110);
+{$ifdef ie4plus}
+ UDM_SETRANGE32 = (WM_USER+111);
+ UDM_GETRANGE32 = (WM_USER+112); // wParam & lParam are LPINT
+ UDM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT;
+ UDM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT;
+{$ENDIF}
+{$ifdef ie5plus}
+ UDM_SETPOS32 = (WM_USER+113);
+ UDM_GETPOS32 = (WM_USER+114);
+{$ENDIF}
+
+function CreateUpDownControl(dwStyle:DWORD;x:cint;y:cint;cx:cint;cy:cint;hParent:HWND;nID:cint;hInst:HINST;hBuddy:HWND;nUpper:cint;nLower:cint;nPos:cint):HWND; stdcall; external commctrldll name 'CreateUpDownControl';
+
+TYPE
+ _NM_UPDOWN = Record
+ hdr : NMHDR;
+ iPos : cint;
+ iDelta : cint;
+ END;
+ NMUPDOWN = _NM_UPDOWN;
+ LPNMUPDOWN = ^_NM_UPDOWN;
+ TNM_UPDOWN = _NM_UPDOWN;
+ PNM_UPDOWN = ^_NM_UPDOWN;
+
+{$ifdef ie3plus}
+ NM_UPDOWN = NMUPDOWN;
+ LPNM_UPDOWN = LPNMUPDOWN;
+{$ELSE}
+ NMUPDOWN = NM_UPDOWN;
+ LPNMUPDOWN = LPNM_UPDOWN;
+{$ENDIF}
+
+CONST
+ UDN_DELTAPOS = (UDN_FIRST - 1);
+
+{$ENDIF} // NOUPDOWN
+
+
+//====== PROGRESS CONTROL =====================================================
+
+{$IFNDEF NOPROGRESS}
+
+CONST
+
+{$IFDEF _WIN32}
+
+ PROGRESS_CLASSA = 'msctls_progress32';
+ PROGRESS_CLASSW = {L}'msctls_progress32';
+
+{$IFDEF UNICODE}
+ PROGRESS_CLASS = PROGRESS_CLASSW;
+{$ELSE}
+ PROGRESS_CLASS = PROGRESS_CLASSA;
+{$ENDIF}
+
+{$ELSE}
+ PROGRESS_CLASS = 'msctls_progress';
+{$ENDIF}
+
+// begin_r_commctrl
+
+{$ifdef ie3plus}
+ PBS_SMOOTH = $01;
+ PBS_VERTICAL = $04;
+{$ENDIF}
+
+// end_r_commctrl
+
+ PBM_SETRANGE = (WM_USER+1);
+ PBM_SETPOS = (WM_USER+2);
+ PBM_DELTAPOS = (WM_USER+3);
+ PBM_SETSTEP = (WM_USER+4);
+ PBM_STEPIT = (WM_USER+5);
+{$ifdef ie3plus}
+ PBM_SETRANGE32 = (WM_USER+6); // lParam = high, wParam = low
+
+TYPE
+ PBRANGE = Record
+ iLow : cint;
+ iHigh : cint;
+ END;
+ PPBRANGE = ^PBRANGE;
+ TPBRANGE = PBRANGE;
+// PPBRANGE = ^PBRANGE;
+
+
+CONST
+ PBM_GETRANGE = (WM_USER+7); // wParam = return (TRUE ? low : high). lParam = PPBRANGE or NULL
+ PBM_GETPOS = (WM_USER+8);
+{$ifdef ie4plus}
+ PBM_SETBARCOLOR = (WM_USER+9); // lParam = bar color
+{$ENDIF} // _WIN32_IE >= 0x0400
+ PBM_SETBKCOLOR = CCM_SETBKCOLOR; // lParam = bkColor
+{$ENDIF} // _WIN32_IE >= 0x0300
+
+
+{$ENDIF} // NOPROGRESS
+
+
+//====== HOTKEY CONTROL =======================================================
+
+{$IFNDEF NOHOTKEY}
+ HOTKEYF_SHIFT = $01;
+ HOTKEYF_CONTROL = $02;
+ HOTKEYF_ALT = $04;
+{$IFDEF _MAC}
+ HOTKEYF_EXT = $80;
+{$ELSE}
+ HOTKEYF_EXT = $08;
+{$ENDIF}
+ HKCOMB_NONE = $0001;
+ HKCOMB_S = $0002;
+ HKCOMB_C = $0004;
+ HKCOMB_A = $0008;
+ HKCOMB_SC = $0010;
+ HKCOMB_SA = $0020;
+ HKCOMB_CA = $0040;
+ HKCOMB_SCA = $0080;
+
+ HKM_SETHOTKEY = (WM_USER+1);
+ HKM_GETHOTKEY = (WM_USER+2);
+ HKM_SETRULES = (WM_USER+3);
+
+{$IFDEF _WIN32}
+ HOTKEY_CLASSA = 'msctls_hotkey32';
+ HOTKEY_CLASSW = widestring('msctls_hotkey32');
+{$IFDEF UNICODE}
+ HOTKEY_CLASS = HOTKEY_CLASSW;
+{$ELSE}
+ HOTKEY_CLASS = HOTKEY_CLASSA;
+{$ENDIF}
+{$ELSE}
+ HOTKEY_CLASS = 'msctls_hotkey';
+{$ENDIF}
+
+{$ENDIF} // NOHOTKEY
+ HOTKEYCLASS = HOTKEY_CLASSA;
+
+// begin_r_commctrl
+
+//====== COMMON CONTROL STYLES ================================================
+
+ CCS_TOP = DWORD($00000001){L};
+ CCS_NOMOVEY = DWORD($00000002){L};
+ CCS_BOTTOM = DWORD($00000003){L};
+ CCS_NORESIZE = DWORD($00000004){L};
+ CCS_NOPARENTALIGN = DWORD($00000008){L};
+ CCS_ADJUSTABLE = DWORD($00000020){L};
+ CCS_NODIVIDER = DWORD($00000040){L};
+{$ifdef ie3plus}
+ CCS_VERT = DWORD($00000080){L};
+ CCS_LEFT = (CCS_VERT OR CCS_TOP);
+ CCS_RIGHT = (CCS_VERT OR CCS_BOTTOM);
+ CCS_NOMOVEX = (CCS_VERT OR CCS_NOMOVEY);
+{$ENDIF}
+
+// end_r_commctrl
+
+//====== LISTVIEW CONTROL =====================================================
+
+{$IFNDEF NOLISTVIEW}
+
+{$IFDEF _WIN32}
+ WC_LISTVIEWA = 'SysListView32';
+ WC_LISTVIEWW = {L}'SysListView32';
+{$IFDEF UNICODE}
+ WC_LISTVIEW = WC_LISTVIEWW;
+{$ELSE}
+ WC_LISTVIEW = WC_LISTVIEWA;
+{$ENDIF}
+{$ELSE}
+ WC_LISTVIEW = 'SysListView';
+{$ENDIF}
+
+// begin_r_commctrl
+
+ LVS_ICON = $0000;
+ LVS_REPORT = $0001;
+ LVS_SMALLICON = $0002;
+ LVS_LIST = $0003;
+ LVS_TYPEMASK = $0003;
+ LVS_SINGLESEL = $0004;
+ LVS_SHOWSELALWAYS = $0008;
+ LVS_SORTASCENDING = $0010;
+ LVS_SORTDESCENDING = $0020;
+ LVS_SHAREIMAGELISTS = $0040;
+ LVS_NOLABELWRAP = $0080;
+ LVS_AUTOARRANGE = $0100;
+ LVS_EDITLABELS = $0200;
+{$ifdef ie3plus}
+ LVS_OWNERDATA = $1000;
+{$ENDIF}
+ LVS_NOSCROLL = $2000;
+
+ LVS_TYPESTYLEMASK = $fc00;
+
+ LVS_ALIGNTOP = $0000;
+ LVS_ALIGNLEFT = $0800;
+ LVS_ALIGNMASK = $0c00;
+
+ LVS_OWNERDRAWFIXED = $0400;
+ LVS_NOCOLUMNHEADER = $4000;
+ LVS_NOSORTHEADER = $8000;
+
+// end_r_commctrl
+
+{$ifdef ie4plus}
+ LVM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT;
+
+// Macro 38
+Function ListView_SetUnicodeFormat( hwnd : hwnd; fUnicode : WPARAM):BOOL;
+
+CONST
+ LVM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT;
+
+// Macro 39
+Function ListView_GetUnicodeFormat( hwnd : hwnd):BOOL;
+
+{$ENDIF}
+CONST
+ LVM_GETBKCOLOR = (LVM_FIRST + 0);
+
+// Macro 40
+Function ListView_GetBkColor( hwnd : hwnd):COLORREF;
+
+CONST
+ LVM_SETBKCOLOR = (LVM_FIRST + 1);
+
+// Macro 41
+Function ListView_SetBkColor( hwnd : hwnd; clrBk : COLORREF):BOOL;
+
+CONST
+ LVM_GETIMAGELIST = (LVM_FIRST + 2);
+
+// Macro 42
+Function ListView_GetImageList( hwnd : hwnd; iImageList : CINT):HIMAGELIST;
+
+CONST
+ LVSIL_NORMAL = 0;
+ LVSIL_SMALL = 1;
+ LVSIL_STATE = 2;
+
+ 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;
+ TLVItem = LVITEM;
+ PLVItem = LPLVITEM;
+
+CONST
+ LPSTR_TEXTCALLBACKW = LPWSTR(-1);
+ LPSTR_TEXTCALLBACKA = LPSTR (-1);
+{$IFDEF UNICODE}
+ LPSTR_TEXTCALLBACK = LPSTR_TEXTCALLBACKW;
+{$ELSE}
+ LPSTR_TEXTCALLBACK = LPSTR_TEXTCALLBACKA;
+{$ENDIF}
+
+
+CONST
+ I_IMAGECALLBACK = (-1);
+{$ifdef ie501plus}
+ I_IMAGENONE = (-2);
+{$ENDIF} // 0x0501
+
+{$ifdef win32xp}
+// For tileview
+ I_COLUMNSCALLBACK = UINT(-1);
+{$ENDIF}
+
+ LVM_GETITEMA = (LVM_FIRST + 5);
+ LVM_GETITEMW = (LVM_FIRST + 75);
+
+{$IFDEF UNICODE}
+ LVM_GETITEM = LVM_GETITEMW;
+{$ELSE}
+ LVM_GETITEM = LVM_GETITEMA;
+{$ENDIF}
+
+// Macro 46
+Function ListView_GetItem( hwnd : hwnd;var pitem : LV_ITEM ):BOOL;
+
+CONST
+ LVM_SETITEMA = (LVM_FIRST + 6);
+ LVM_SETITEMW = (LVM_FIRST + 76);
+
+{$IFDEF UNICODE}
+ LVM_SETITEM = LVM_SETITEMW;
+{$ELSE}
+ LVM_SETITEM = LVM_SETITEMA;
+{$ENDIF}
+
+// Macro 47
+Function ListView_SetItem( hwnd : hwnd;const pitem : LV_ITEM ):BOOL;
+
+
+CONST
+ LVM_INSERTITEMA = (LVM_FIRST + 7);
+ LVM_INSERTITEMW = (LVM_FIRST + 77);
+{$IFDEF UNICODE}
+ LVM_INSERTITEM = LVM_INSERTITEMW;
+{$ELSE}
+ LVM_INSERTITEM = LVM_INSERTITEMA;
+{$ENDIF}
+
+// Macro 48
+Function ListView_InsertItem( hwnd : hwnd;Const pitem : LV_ITEM ):cint;
+
+CONST
+ LVM_DELETEITEM = (LVM_FIRST + 8);
+
+// Macro 49
+Function ListView_DeleteItem( hwnd : hwnd; i : cint):BOOL;
+
+CONST
+ LVM_DELETEALLITEMS = (LVM_FIRST + 9);
+
+// Macro 50
+Function ListView_DeleteAllItems( hwnd : hwnd):BOOL;
+
+CONST
+ LVM_GETCALLBACKMASK = (LVM_FIRST + 10);
+
+// Macro 51
+Function ListView_GetCallbackMask( hwnd : hwnd):BOOL;
+
+
+CONST
+ LVM_SETCALLBACKMASK = (LVM_FIRST + 11);
+
+// Macro 52
+Function ListView_SetCallbackMask( hwnd : hwnd; mask : UINT):BOOL;
+
+
+CONST
+ LVNI_ALL = $0000;
+ LVNI_FOCUSED = $0001;
+ LVNI_SELECTED = $0002;
+ LVNI_CUT = $0004;
+ LVNI_DROPHILITED = $0008;
+
+ LVNI_ABOVE = $0100;
+ LVNI_BELOW = $0200;
+ LVNI_TOLEFT = $0400;
+ LVNI_TORIGHT = $0800;
+
+
+ LVM_GETNEXTITEM = (LVM_FIRST + 12);
+
+// Macro 53
+Function ListView_GetNextItem( hwnd : hwnd; i : cint; flags : cint ):cint;
+
+CONST
+ LVFI_PARAM = $0001;
+ LVFI_STRING = $0002;
+ LVFI_PARTIAL = $0008;
+ LVFI_WRAP = $0020;
+ LVFI_NEARESTXY = $0040;
+
+
+TYPE
+
+ tagLVFINDINFOA = Record
+ flags : UINT;
+ psz : LPCSTR;
+ lParam : LPARAM;
+ pt : POINT;
+ vkDirection : UINT;
+ END;
+ LVFINDINFOA = tagLVFINDINFOA;
+ LPFINDINFOA = ^tagLVFINDINFOA;
+ TLVFINDINFOA = tagLVFINDINFOA;
+ PLVFINDINFOA = ^tagLVFINDINFOA;
+
+
+ tagLVFINDINFOW = Record
+ flags : UINT;
+ psz : LPCWSTR;
+ lParam : LPARAM;
+ pt : POINT;
+ vkDirection : UINT;
+ END;
+ LVFINDINFOW = tagLVFINDINFOW;
+ LPFINDINFOW = ^tagLVFINDINFOW;
+ TLVFINDINFOW = tagLVFINDINFOW;
+ PLVFINDINFOW = ^tagLVFINDINFOW;
+
+{$IFDEF UNICODE}
+ LVFINDINFO = LVFINDINFOW;
+{$ELSE}
+ LVFINDINFO = LVFINDINFOA;
+{$ENDIF}
+
+{$ifdef ie3plus}
+ LV_FINDINFOA = LVFINDINFOA;
+ LV_FINDINFOW = LVFINDINFOW;
+{$ELSE}
+ tagLVFINDINFOA = _LV_FINDINFOA;
+ LVFINDINFOA = LV_FINDINFOA;
+ tagLVFINDINFOW = _LV_FINDINFOW;
+ LVFINDINFOW = LV_FINDINFOW;
+{$ENDIF}
+
+ TLVFindInfo = LVFINDINFO;
+ PLVFindInfo = ^LVFindInfo;
+
+ LV_FINDINFO = LVFINDINFO;
+
+CONST
+ LVM_FINDITEMA = (LVM_FIRST + 13);
+ LVM_FINDITEMW = (LVM_FIRST + 83);
+{$IFDEF UNICODE}
+ LVM_FINDITEM = LVM_FINDITEMW;
+{$ELSE}
+ LVM_FINDITEM = LVM_FINDITEMA;
+{$ENDIF}
+
+// Macro 54
+Function ListView_FindItem( hwnd : hwnd; iStart : cint;const plvfi : LV_FINDINFO ):cint;
+
+CONST
+ LVIR_BOUNDS = 0;
+ LVIR_ICON = 1;
+ LVIR_LABEL = 2;
+ LVIR_SELECTBOUNDS = 3;
+
+
+ LVM_GETITEMRECT = (LVM_FIRST + 14);
+
+// Macro 55 NI
+Function ListView_GetItemRect( hwnd : hwnd; i : cint;var prc : TRect;code : cint):BOOL;
+
+CONST
+ LVM_SETITEMPOSITION = (LVM_FIRST + 15);
+
+// Macro 56
+Function ListView_SetItemPosition( hwndLV : hwnd; i : cint; x : cint ; y : cint ):BOOL;
+
+CONST
+ LVM_GETITEMPOSITION = (LVM_FIRST + 16);
+
+// Macro 57
+Function ListView_GetItemPosition( hwndLV : hwnd; i : cint;var ppt : POINT ):BOOL;
+
+CONST
+ LVM_GETSTRINGWIDTHA = (LVM_FIRST + 17);
+ LVM_GETSTRINGWIDTHW = (LVM_FIRST + 87);
+{$IFDEF UNICODE}
+ LVM_GETSTRINGWIDTH = LVM_GETSTRINGWIDTHW;
+{$ELSE}
+ LVM_GETSTRINGWIDTH = LVM_GETSTRINGWIDTHA;
+{$ENDIF}
+
+// Macro 58
+Function ListView_GetStringWidth( hwndLV : hwnd; psz : LPCTSTR):cint;
+
+CONST
+ LVHT_NOWHERE = $0001;
+ LVHT_ONITEMICON = $0002;
+ LVHT_ONITEMLABEL = $0004;
+ LVHT_ONITEMSTATEICON = $0008;
+ LVHT_ONITEM = (LVHT_ONITEMICON OR LVHT_ONITEMLABEL OR LVHT_ONITEMSTATEICON);
+
+ LVHT_ABOVE = $0008;
+ LVHT_BELOW = $0010;
+ LVHT_TORIGHT = $0020;
+ LVHT_TOLEFT = $0040;
+
+
+
+// #define LVHITTESTINFO_V1_SIZE CCSIZEOF_STRUCT(LVHITTESTINFO, iItem)
+
+TYPE
+
+ tagLVHITTESTINFO = Record
+ pt : POINT;
+ flags : UINT;
+ iItem : cint;
+{$ifdef ie3plus}
+ iSubItem : cint; // this is was NOT in win95. valid only for LVM_SUBITEMHITTEST
+{$ENDIF}
+ END;
+ LVHITTESTINFO = tagLVHITTESTINFO;
+ LPLVHITTESTINFO = ^tagLVHITTESTINFO;
+ TLVHITTESTINFO = tagLVHITTESTINFO;
+ PLVHITTESTINFO = ^tagLVHITTESTINFO;
+
+{$ifdef ie3plus}
+ LV_HITTESTINFO = LVHITTESTINFO;
+{$ELSE}
+ tagLVHITTESTINFO = _LV_HITTESTINFO;
+ LVHITTESTINFO = LV_HITTESTINFO;
+{$ENDIF}
+
+CONST
+ LVM_HITTEST = (LVM_FIRST + 18);
+
+// Macro 59
+Function ListView_HitTest( hwndLV : hwnd;var pinfo : LV_HITTESTINFO ):cint;
+
+CONST
+ LVM_ENSUREVISIBLE = (LVM_FIRST + 19);
+
+// Macro 60
+Function ListView_EnsureVisible( hwndLV : hwnd; i : cint; fPartialOK : cint ):BOOL;inline;
+Function ListView_EnsureVisible( hwndLV : hwnd; i : cint; fPartialOK : BOOL ):BOOL;inline;
+
+CONST
+ LVM_SCROLL = (LVM_FIRST + 20);
+
+// Macro 61
+Function ListView_Scroll( hwndLV : hwnd; dx : cint; dy : cint):BOOL;
+
+CONST
+ LVM_REDRAWITEMS = (LVM_FIRST + 21);
+
+// Macro 62
+Function ListView_RedrawItems( hwndLV : hwnd; iFirst : cint; iLast : cint):BOOL;
+
+CONST
+ LVA_DEFAULT = $0000;
+ LVA_ALIGNLEFT = $0001;
+ LVA_ALIGNTOP = $0002;
+ LVA_ALIGNRIGHT = $0003;
+ LVA_ALIGNBOTTOM = $0004;
+ LVA_SNAPTOGRID = $0005;
+ LVA_SORTASCENDING = $0100;
+ LVA_SORTDESCENDING = $0200;
+ LVM_ARRANGE = (LVM_FIRST + 22);
+
+// Macro 63
+Function ListView_Arrange( hwndLV : hwnd; code : UINT):BOOL;
+
+CONST
+ LVM_EDITLABELA = (LVM_FIRST + 23);
+ LVM_EDITLABELW = (LVM_FIRST + 118);
+{$IFDEF UNICODE}
+
+ LVM_EDITLABEL = LVM_EDITLABELW;
+{$ELSE}
+ LVM_EDITLABEL = LVM_EDITLABELA;
+{$ENDIF}
+
+// Macro 64
+Function ListView_EditLabel( hwndLV : hwnd; i : cint):HWND;
+
+CONST
+ LVM_GETEDITCONTROL = (LVM_FIRST + 24);
+
+// Macro 65
+Function ListView_GetEditControl( hwndLV : hwnd):HWND;
+
+
+// #define LVCOLUMNA_V1_SIZE CCSIZEOF_STRUCT(LVCOLUMNA, iSubItem)
+// #define LVCOLUMNW_V1_SIZE CCSIZEOF_STRUCT(LVCOLUMNW, iSubItem)
+
+TYPE
+
+ tagLVCOLUMNA = Record
+ mask : UINT;
+ fmt : cint;
+ cx : cint;
+ pszText : LPSTR;
+ cchTextMax : cint;
+ iSubItem : cint;
+{$ifdef ie3plus}
+ iImage : cint;
+ iOrder : cint;
+{$ENDIF}
+ 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;
+ TLVColumn = LVCOLUMN;
+ PLVColumn = LPLVCOLUMN;
+
+CONST
+ LVCF_FMT = $0001;
+ LVCF_WIDTH = $0002;
+ LVCF_TEXT = $0004;
+ LVCF_SUBITEM = $0008;
+{$ifdef ie3plus}
+ LVCF_IMAGE = $0010;
+ LVCF_ORDER = $0020;
+{$ENDIF}
+
+ 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;inline;
+Function ListView_CreateDragImage( hwnd : hwnd; i : cint; const lpptUpLeft : POINT):HIMAGELIST;inline;
+
+CONST
+ LVM_GETVIEWRECT = (LVM_FIRST + 34);
+
+// Macro 74
+Function ListView_GetViewRect( hwnd : hwnd;var prc : RECT ):BOOL;
+
+CONST
+ LVM_GETTEXTCOLOR = (LVM_FIRST + 35);
+
+// Macro 75
+Function ListView_GetTextColor( hwnd : hwnd):COLORREF;
+
+CONST
+ LVM_SETTEXTCOLOR = (LVM_FIRST + 36);
+
+// Macro 76
+Function ListView_SetTextColor( hwnd : hwnd; clrText : COLORREF):BOOL;
+
+CONST
+ LVM_GETTEXTBKCOLOR = (LVM_FIRST + 37);
+
+// Macro 77
+Function ListView_GetTextBkColor( hwnd : hwnd):COLORREF;
+
+CONST
+ LVM_SETTEXTBKCOLOR = (LVM_FIRST + 38);
+
+// Macro 78
+Function ListView_SetTextBkColor( hwnd : hwnd; clrTextBk : COLORREF):BOOL;
+
+
+CONST
+ LVM_GETTOPINDEX = (LVM_FIRST + 39);
+
+// Macro 79
+Function ListView_GetTopIndex( hwndLV : hwnd):cint;
+
+CONST
+ LVM_GETCOUNTPERPAGE = (LVM_FIRST + 40);
+
+// Macro 80
+Function ListView_GetCountPerPage( hwndLV : hwnd):cint;
+
+CONST
+ LVM_GETORIGIN = (LVM_FIRST + 41);
+
+// Macro 81
+Function ListView_GetOrigin( hwndLV : hwnd;var ppt : POINT ):BOOL;
+
+CONST
+ LVM_UPDATE = (LVM_FIRST + 42);
+
+// Macro 82
+Function ListView_Update( hwndLV : hwnd; i : WPARAM):BOOL;
+
+CONST
+ LVM_SETITEMSTATE = (LVM_FIRST + 43);
+
+// Macro 83
+Procedure ListView_SetItemState(hwndLV :hwnd; i :cint ;data,mask:UINT);
+
+{$ifdef ie3plus}
+// Macro 84
+Procedure ListView_SetCheckState( hwndLV : hwnd; i : cint ; fCheck : bool );
+
+{$ENDIF}
+
+
+CONST
+ LVM_GETITEMSTATE = (LVM_FIRST + 44);
+
+// Macro 85
+Function ListView_GetItemState( hwndLV : hwnd; i : WPARAM; mask : LPARAM):UINT;
+
+
+{$ifdef ie3plus}
+
+// Macro 86
+Function ListView_GetCheckState( hwndLV : hwnd; i : WPARAM):UINT;
+
+{$ENDIF}
+
+CONST
+ LVM_GETITEMTEXTA = (LVM_FIRST + 45);
+ LVM_GETITEMTEXTW = (LVM_FIRST + 115);
+
+{$IFDEF UNICODE}
+ LVM_GETITEMTEXT = LVM_GETITEMTEXTW;
+{$ELSE}
+ LVM_GETITEMTEXT = LVM_GETITEMTEXTA;
+{$ENDIF}
+
+// Macro 87
+Procedure ListView_GetItemText(hwndLV:hwnd; i : WPARAM ;iSubItem : cint ;pszText : Pointer;cchTextMax :cint);
+
+CONST
+ LVM_SETITEMTEXTA = (LVM_FIRST + 46);
+ LVM_SETITEMTEXTW = (LVM_FIRST + 116);
+
+{$IFDEF UNICODE}
+ LVM_SETITEMTEXT = LVM_SETITEMTEXTW;
+{$ELSE}
+ LVM_SETITEMTEXT = LVM_SETITEMTEXTA;
+{$ENDIF}
+
+// Macro 88
+Procedure ListView_SetItemText(hwndLV:hwnd; i : WPARAM ;iSubItem : cint ;pszText : Pointer);
+
+{$ifdef ie3plus}
+// these flags only apply to LVS_OWNERDATA listviews in report or list mode
+
+CONST
+ LVSICF_NOINVALIDATEALL = $00000001;
+ LVSICF_NOSCROLL = $00000002;
+{$ENDIF}
+
+ LVM_SETITEMCOUNT = (LVM_FIRST + 47);
+
+// Macro 89
+Procedure ListView_SetItemCount( hwndLV : hwnd; cItems : WPARAM);
+
+{$ifdef ie3plus}
+
+// Macro 90
+Procedure ListView_SetItemCountEx( hwndLV : hwnd; cItems : WPARAM; dwFlags : LPARAM);
+
+{$ENDIF}
+
+TYPE
+ PFNLVCOMPARE=Function(a,b,c:LPARAM):cint;
+ TLVCompare = PFNLVCOMPARE;
+
+CONST
+ LVM_SORTITEMS = (LVM_FIRST + 48);
+
+// Macro 91
+Function ListView_SortItems( hwndLV : hwnd;pfnCompare : PFNLVCOMPARE; lPrm : LPARAM):BOOL;
+
+CONST
+ LVM_SETITEMPOSITION32 = (LVM_FIRST + 49);
+
+// Macro 92
+Procedure ListView_SetItemPosition32(hwndLV:hwnd; i:cint;x0,y0:long);
+
+CONST
+ LVM_GETSELECTEDCOUNT = (LVM_FIRST + 50);
+
+// Macro 93
+Function ListView_GetSelectedCount( hwndLV : hwnd):UINT;
+
+CONST
+ LVM_GETITEMSPACING = (LVM_FIRST + 51);
+
+// Macro 94
+Function ListView_GetItemSpacing( hwndLV : hwnd; fSmall : cint ):DWORD;
+
+CONST
+ LVM_GETISEARCHSTRINGA = (LVM_FIRST + 52);
+ LVM_GETISEARCHSTRINGW = (LVM_FIRST + 117);
+
+{$IFDEF UNICODE}
+ LVM_GETISEARCHSTRING = LVM_GETISEARCHSTRINGW;
+{$ELSE}
+ LVM_GETISEARCHSTRING = LVM_GETISEARCHSTRINGA;
+{$ENDIF}
+
+// Macro 95
+Function ListView_GetISearchString( hwndLV : hwnd; lpsz : LPTSTR):BOOL;
+
+
+{$ifdef ie3plus}
+
+CONST
+ LVM_SETICONSPACING = (LVM_FIRST + 53);
+// -1 for cx and cy means we'll use the default (system settings)
+// 0 for cx or cy means use the current setting (allows you to change just one param)
+
+// Macro 96
+Function ListView_SetIconSpacing( hwndLV : hwnd; cx, cy : cint ):DWORD;
+
+CONST
+ LVM_SETEXTENDEDLISTVIEWSTYLE = (LVM_FIRST + 54); // optional wParam == mask
+
+// Macro 97
+Function ListView_SetExtendedListViewStyle( hwndLV : hwnd; dw : cint ):DWORD;
+
+{$ifdef ie4plus}
+
+// Macro 98
+Function ListView_SetExtendedListViewStyleEx( hwndLV : hwnd; dwMask, dw : cint ):DWORD;
+
+{$ENDIF}
+
+CONST
+ LVM_GETEXTENDEDLISTVIEWSTYLE = (LVM_FIRST + 55);
+
+// Macro 99
+Function ListView_GetExtendedListViewStyle( hwndLV : hwnd):DWORD;
+
+CONST
+ LVS_EX_GRIDLINES = $00000001;
+ LVS_EX_SUBITEMIMAGES = $00000002;
+ LVS_EX_CHECKBOXES = $00000004;
+ LVS_EX_TRACKSELECT = $00000008;
+ LVS_EX_HEADERDRAGDROP = $00000010;
+ LVS_EX_FULLROWSELECT = $00000020; // applies to report mode only
+ LVS_EX_ONECLICKACTIVATE = $00000040;
+ LVS_EX_TWOCLICKACTIVATE = $00000080;
+{$ifdef ie4plus}
+ LVS_EX_FLATSB = $00000100;
+ LVS_EX_REGIONAL = $00000200;
+ LVS_EX_INFOTIP = $00000400; // listview does InfoTips for you
+ LVS_EX_UNDERLINEHOT = $00000800;
+ LVS_EX_UNDERLINECOLD = $00001000;
+ LVS_EX_MULTIWORKAREAS = $00002000;
+{$ENDIF}
+{$ifdef ie5plus}
+ LVS_EX_LABELTIP = $00004000; // listview unfolds partly hidden labels if it does not have infotip text
+ LVS_EX_BORDERSELECT = $00008000; // border selection style instead of highlight
+{$ENDIF} // End (_WIN32_IE >= 0x0500)
+{$ifdef win32xp}
+ LVS_EX_DOUBLEBUFFER = $00010000;
+ LVS_EX_HIDELABELS = $00020000;
+ LVS_EX_SINGLEROW = $00040000;
+ LVS_EX_SNAPTOGRID = $00080000; // Icons automatically snap to grid.
+ LVS_EX_SIMPLESELECT = $00100000; // Also changes overlay rendering to top right for icon mode.
+{$ENDIF}
+
+ LVM_GETSUBITEMRECT = (LVM_FIRST + 56);
+
+// Macro 100
+Function ListView_GetSubItemRect( hwnd : hwnd; iItem : cint;iSubItem, code :cint ;prc:LPRECT):BOOL;
+
+CONST
+ LVM_SUBITEMHITTEST = (LVM_FIRST + 57);
+
+// Macro 101
+Function ListView_SubItemHitTest( hwnd : hwnd; plvhti : LPLVHITTESTINFO):cint;
+
+CONST
+ LVM_SETCOLUMNORDERARRAY = (LVM_FIRST + 58);
+
+// Macro 102
+Function ListView_SetColumnOrderArray( hwnd : hwnd; iCount : WPARAM; pi : LPINT):BOOL;
+
+CONST
+ LVM_GETCOLUMNORDERARRAY = (LVM_FIRST + 59);
+
+// Macro 103
+Function ListView_GetColumnOrderArray( hwnd : hwnd; iCount : WPARAM; pi : LPINT):BOOL;
+
+
+CONST
+ LVM_SETHOTITEM = (LVM_FIRST + 60);
+
+// Macro 104
+Function ListView_SetHotItem( hwnd : hwnd; i : WPARAM):cint;
+
+CONST
+ LVM_GETHOTITEM = (LVM_FIRST + 61);
+
+// Macro 105
+Function ListView_GetHotItem( hwnd : hwnd):cint;
+
+CONST
+ LVM_SETHOTCURSOR = (LVM_FIRST + 62);
+
+// Macro 106
+Function ListView_SetHotCursor( hwnd : hwnd; hcur : LPARAM):HCURSOR;
+
+CONST
+ LVM_GETHOTCURSOR = (LVM_FIRST + 63);
+
+// Macro 107
+Function ListView_GetHotCursor( hwnd : hwnd):HCURSOR;
+
+CONST
+ LVM_APPROXIMATEVIEWRECT = (LVM_FIRST + 64);
+
+// Macro 108
+Function ListView_ApproximateViewRect( hwnd : hwnd; iWidth, iHeight, iCount : cint ):DWORD;
+
+{$ENDIF} // _WIN32_IE >= 0x0300
+
+{$ifdef ie4plus}
+
+CONST
+ LV_MAX_WORKAREAS = 16;
+ LVM_SETWORKAREAS = (LVM_FIRST + 65);
+
+// Macro 109
+Function ListView_SetWorkAreas( hwnd : hwnd; nWorkAreas : cint;var prc : RECT ):BOOL;inline;
+Function ListView_SetWorkAreas( hwnd : hwnd; nWorkAreas : cint; prc : PRECT ):BOOL;inline;
+
+CONST
+ LVM_GETWORKAREAS = (LVM_FIRST + 70);
+
+// Macro 110
+Function ListView_GetWorkAreas( hwnd : hwnd; nWorkAreas : cint;var prc : RECT ):BOOL;
+
+CONST
+ LVM_GETNUMBEROFWORKAREAS = (LVM_FIRST + 73);
+
+// Macro 111
+Function ListView_GetNumberOfWorkAreas( hwnd : hwnd;var pnWorkAreas : UINT ):BOOL;
+
+CONST
+ LVM_GETSELECTIONMARK = (LVM_FIRST + 66);
+
+// Macro 112
+Function ListView_GetSelectionMark( hwnd : hwnd):cint;
+
+CONST
+ LVM_SETSELECTIONMARK = (LVM_FIRST + 67);
+
+// Macro 113
+Function ListView_SetSelectionMark( hwnd : hwnd; i : LPARAM):cint;
+
+CONST
+ LVM_SETHOVERTIME = (LVM_FIRST + 71);
+
+// Macro 114
+Function ListView_SetHoverTime( hwndLV : hwnd; dwHoverTimeMs : LPARAM):DWORD;
+
+CONST
+ LVM_GETHOVERTIME = (LVM_FIRST + 72);
+
+// Macro 115
+Function ListView_GetHoverTime( hwndLV : hwnd):DWORD;
+
+CONST
+ LVM_SETTOOLTIPS = (LVM_FIRST + 74);
+
+// Macro 116
+Function ListView_SetToolTips( hwndLV : hwnd; hwndNewHwnd : WPARAM):HWND;
+
+CONST
+ LVM_GETTOOLTIPS = (LVM_FIRST + 78);
+
+// Macro 117
+Function ListView_GetToolTips( hwndLV : hwnd):HWND;
+
+CONST
+ LVM_SORTITEMSEX = (LVM_FIRST + 81);
+
+// Macro 118
+Function ListView_SortItemsEx( hwndLV : hwnd; _pfnCompare : PFNLVCOMPARE; _lPrm : LPARAM):BOOL;
+
+TYPE
+
+ tagLVBKIMAGEA = Record
+ ulFlags : ULONG; // LVBKIF_*
+ hbm : HBITMAP;
+ pszImage : LPSTR;
+ cchImageMax : UINT;
+ xOffsetPercent : cint;
+ yOffsetPercent : cint;
+ END;
+ LVBKIMAGEA = tagLVBKIMAGEA;
+ LPLVBKIMAGEA = ^tagLVBKIMAGEA;
+ TLVBKIMAGEA = tagLVBKIMAGEA;
+ PLVBKIMAGEA = ^tagLVBKIMAGEA;
+
+ tagLVBKIMAGEW = Record
+ ulFlags : ULONG; // LVBKIF_*
+ hbm : HBITMAP;
+ pszImage : LPWSTR;
+ cchImageMax : UINT;
+ xOffsetPercent : cint;
+ yOffsetPercent : cint;
+ END;
+ LVBKIMAGEW = tagLVBKIMAGEW;
+ LPLVBKIMAGEW = ^tagLVBKIMAGEW;
+ TLVBKIMAGEW = tagLVBKIMAGEW;
+ PLVBKIMAGEW = ^tagLVBKIMAGEW;
+
+CONST
+ LVBKIF_SOURCE_NONE = $00000000;
+ LVBKIF_SOURCE_HBITMAP = $00000001;
+ LVBKIF_SOURCE_URL = $00000002;
+ LVBKIF_SOURCE_MASK = $00000003;
+ LVBKIF_STYLE_NORMAL = $00000000;
+ LVBKIF_STYLE_TILE = $00000010;
+ LVBKIF_STYLE_MASK = $00000010;
+{$ifdef win32xp}
+ LVBKIF_FLAG_TILEOFFSET = $00000100;
+ LVBKIF_TYPE_WATERMARK = $10000000;
+{$ENDIF}
+
+ LVM_SETBKIMAGEA = (LVM_FIRST + 68);
+ LVM_SETBKIMAGEW = (LVM_FIRST + 138);
+ LVM_GETBKIMAGEA = (LVM_FIRST + 69);
+ LVM_GETBKIMAGEW = (LVM_FIRST + 139);
+
+{$ifdef win32xp}
+ LVM_SETSELECTEDCOLUMN = (LVM_FIRST + 140);
+
+// Macro 119
+Procedure ListView_SetSelectedColumn( hwnd : hwnd; iCol : WPARAM);
+
+CONST
+ LVM_SETTILEWIDTH = (LVM_FIRST + 141);
+
+// Macro 120
+Procedure ListView_SetTileWidth( hwnd : hwnd; cpWidth : WPARAM);
+
+CONST
+ LV_VIEW_ICON = $0000;
+ LV_VIEW_DETAILS = $0001;
+ LV_VIEW_SMALLICON = $0002;
+ LV_VIEW_LIST = $0003;
+ LV_VIEW_TILE = $0004;
+ LV_VIEW_MAX = $0004;
+ LVM_SETVIEW = (LVM_FIRST + 142);
+
+// Macro 121
+Function ListView_SetView( hwnd : hwnd; iView : DWORD):DWORD;
+
+CONST
+ LVM_GETVIEW = (LVM_FIRST + 143);
+
+// Macro 122
+Function ListView_GetView( hwnd : hwnd):DWORD;
+
+CONST
+ LVGF_NONE = $00000000;
+ LVGF_HEADER = $00000001;
+ LVGF_FOOTER = $00000002;
+ LVGF_STATE = $00000004;
+ LVGF_ALIGN = $00000008;
+ LVGF_GROUPID = $00000010;
+
+ 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}
+ PNMLVFindItem = LPNMLVFINDITEM;
+ TNMLVFindItem = NMLVFINDITEM;
+
+ tagNMLVODSTATECHANGE = Record
+ hdr : NMHDR;
+ iFrom : cint;
+ iTo : cint;
+ uNewState : UINT;
+ uOldState : UINT;
+ END;
+ NMLVODSTATECHANGE = tagNMLVODSTATECHANGE;
+ LPNMLVODSTATECHANGE = ^tagNMLVODSTATECHANGE;
+ TNMLVODSTATECHANGE = tagNMLVODSTATECHANGE;
+ PNMLVODSTATECHANGE = ^tagNMLVODSTATECHANGE;
+
+
+ PNM_ODSTATECHANGE = LPNMLVODSTATECHANGE;
+ LPNM_ODSTATECHANGE = LPNMLVODSTATECHANGE;
+
+
+ NM_ODSTATECHANGE = NMLVODSTATECHANGE;
+{$ENDIF} // _WIN32_IE >= 0x0300
+
+CONST
+ LVN_ITEMCHANGING = (LVN_FIRST-0);
+ LVN_ITEMCHANGED = (LVN_FIRST-1);
+ LVN_INSERTITEM = (LVN_FIRST-2);
+ LVN_DELETEITEM = (LVN_FIRST-3);
+ LVN_DELETEALLITEMS = (LVN_FIRST-4);
+ LVN_BEGINLABELEDITA = (LVN_FIRST-5);
+ LVN_BEGINLABELEDITW = (LVN_FIRST-75);
+ LVN_ENDLABELEDITA = (LVN_FIRST-6);
+ LVN_ENDLABELEDITW = (LVN_FIRST-76);
+ LVN_COLUMNCLICK = (LVN_FIRST-8);
+ LVN_BEGINDRAG = (LVN_FIRST-9);
+ LVN_BEGINRDRAG = (LVN_FIRST-11);
+
+{$ifdef ie3plus}
+ LVN_ODCACHEHINT = (LVN_FIRST-13);
+ LVN_ODFINDITEMA = (LVN_FIRST-52);
+ LVN_ODFINDITEMW = (LVN_FIRST-79);
+
+ LVN_ITEMACTIVATE = (LVN_FIRST-14);
+ LVN_ODSTATECHANGED = (LVN_FIRST-15);
+
+Const
+{$IFDEF UNICODE}
+ LVN_ODFINDITEM = LVN_ODFINDITEMW;
+{$ELSE}
+ LVN_ODFINDITEM = LVN_ODFINDITEMA;
+{$ENDIF}
+{$ENDIF} // _WIN32_IE >= 0x0300
+
+
+CONST
+{$ifdef ie4plus}
+ LVN_HOTTRACK = (LVN_FIRST-21);
+{$ENDIF}
+
+ LVN_GETDISPINFOA = (LVN_FIRST-50);
+ LVN_GETDISPINFOW = (LVN_FIRST-77);
+ LVN_SETDISPINFOA = (LVN_FIRST-51);
+ LVN_SETDISPINFOW = (LVN_FIRST-78);
+
+Const
+{$IFDEF UNICODE}
+ LVN_BEGINLABELEDIT = LVN_BEGINLABELEDITW;
+ LVN_ENDLABELEDIT = LVN_ENDLABELEDITW;
+ LVN_GETDISPINFO = LVN_GETDISPINFOW;
+ LVN_SETDISPINFO = LVN_SETDISPINFOW;
+{$ELSE}
+ LVN_BEGINLABELEDIT = LVN_BEGINLABELEDITA;
+ LVN_ENDLABELEDIT = LVN_ENDLABELEDITA;
+ LVN_GETDISPINFO = LVN_GETDISPINFOA;
+ LVN_SETDISPINFO = LVN_SETDISPINFOA;
+{$ENDIF}
+
+CONST
+ LVIF_DI_SETITEM = $1000;
+
+TYPE
+
+ tagLVDISPINFO = Record
+ hdr : NMHDR;
+ item : LVITEMA;
+ END;
+ NMLVDISPINFOA = tagLVDISPINFO;
+ LPNMLVDISPINFOA = ^tagLVDISPINFO;
+ TLVDISPINFO = tagLVDISPINFO;
+ PLVDISPINFO = ^tagLVDISPINFO;
+
+
+ tagLVDISPINFOW = Record
+ hdr : NMHDR;
+ item : LVITEMW;
+ END;
+ NMLVDISPINFOW = tagLVDISPINFOW;
+ LPNMLVDISPINFOW = ^tagLVDISPINFOW;
+ TLVDISPINFOW = tagLVDISPINFOW;
+ PLVDISPINFOW = ^tagLVDISPINFOW;
+
+
+{$IFDEF UNICODE}
+ NMLVDISPINFO = NMLVDISPINFOW;
+{$ELSE}
+ NMLVDISPINFO = NMLVDISPINFOA;
+{$ENDIF}
+
+{$ifdef ie3plus}
+ LV_DISPINFOA = NMLVDISPINFOA;
+ LV_DISPINFOW = NMLVDISPINFOW;
+{$ELSE}
+ tagLVDISPINFO = _LV_DISPINFO;
+ NMLVDISPINFOA = LV_DISPINFOA;
+ tagLVDISPINFOW = _LV_DISPINFOW;
+ NMLVDISPINFOW = LV_DISPINFOW;
+{$ENDIF}
+
+
+ LV_DISPINFO = NMLVDISPINFO;
+
+CONST
+ LVN_KEYDOWN = (LVN_FIRST-55);
+
+
+
+{$IFDEF _WIN32}
+// include <pshpack1.h>
+{$ENDIF}
+
+TYPE
+ tagLVKEYDOWN = Record
+ hdr : NMHDR;
+ wVKey : WORD;
+ flags : UINT;
+ END;
+ NMLVKEYDOWN = tagLVKEYDOWN;
+ LPNMLVKEYDOWN = ^tagLVKEYDOWN;
+ TLVKEYDOWN = tagLVKEYDOWN;
+ PLVKEYDOWN = ^tagLVKEYDOWN;
+
+
+{$IFDEF _WIN32}
+//include <poppack.h>
+{$ENDIF}
+
+{$ifdef ie3plus}
+CONST
+ LVN_MARQUEEBEGIN = (LVN_FIRST-56);
+{$ENDIF}
+
+{$ifdef 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}
+ TTVItem = TVITEMA;
+ PTVItem = LPTVITEMA;
+
+
+
+
+
+{$IFDEF UNICODE}
+ TVITEMEX = TVITEMEXW;
+ LPTVITEMEX = LPTVITEMEXW;
+{$ELSE}
+ TVITEMEX = TVITEMEXA;
+ LPTVITEMEX = LPTVITEMEXA;
+{$ENDIF} // UNICODE
+
+
+{$ENDIF}
+
+{$IFDEF UNICODE}
+ TVITEM = TVITEMW;
+ LPTVITEM = LPTVITEMW;
+{$ELSE}
+ TVITEM = TVITEMA;
+ LPTVITEM = LPTVITEMA;
+{$ENDIF}
+
+ LPTV_ITEM = LPTVITEM;
+ TV_ITEM = TVITEM;
+
+CONST
+ TVI_ROOT = HTREEITEM(ULONG_PTR(-$10000));
+ TVI_FIRST = HTREEITEM(ULONG_PTR(-$0FFFF));
+ TVI_LAST = HTREEITEM(ULONG_PTR(-$0FFFE));
+ TVI_SORT = HTREEITEM(ULONG_PTR(-$0FFFD));
+
+
+
+// #define TVINSERTSTRUCTA_V1_SIZE CCSIZEOF_STRUCT(TVINSERTSTRUCTA, item)
+// #define TVINSERTSTRUCTW_V1_SIZE CCSIZEOF_STRUCT(TVINSERTSTRUCTW, item)
+Type
+ tagTVINSERTSTRUCTA = Record
+ hParent : HTREEITEM;
+ hInsertAfter : HTREEITEM;
+{$ifdef ie4plus}
+ case boolean of
+ false: (itemex : TVITEMEXA);
+ True: (item : TV_ITEMA);
+{$ELSE}
+ item : TV_ITEMA;
+{$ENDIF}
+ END;
+ TVINSERTSTRUCTA = tagTVINSERTSTRUCTA;
+ LPTVINSERTSTRUCTA = ^tagTVINSERTSTRUCTA;
+ TTVINSERTSTRUCTA = tagTVINSERTSTRUCTA;
+ PTVINSERTSTRUCTA = ^tagTVINSERTSTRUCTA;
+ TTVINSERTSTRUCT = TTVINSERTSTRUCTA;
+ PTVINSERTSTRUCT = PTVINSERTSTRUCTA;
+
+
+ tagTVINSERTSTRUCTW = Record
+ hParent : HTREEITEM;
+ hInsertAfter : HTREEITEM;
+{$ifdef ie4plus}
+ case boolean of
+ false: (itemex : TVITEMEXW);
+ True: (item : TV_ITEMW);
+{$ELSE}
+ item : TV_ITEMW;
+{$ENDIF}
+ END;
+ TVINSERTSTRUCTW = tagTVINSERTSTRUCTW;
+ LPTVINSERTSTRUCTW = ^tagTVINSERTSTRUCTW;
+ TTVINSERTSTRUCTW = tagTVINSERTSTRUCTW;
+ PTVINSERTSTRUCTW = ^tagTVINSERTSTRUCTW;
+
+
+{$IFDEF UNICODE}
+ TVINSERTSTRUCT = TVINSERTSTRUCTW;
+ LPTVINSERTSTRUCT = LPTVINSERTSTRUCTW;
+// TVINSERTSTRUCT_V1_SIZE = TVINSERTSTRUCTW_V1_SIZE;
+{$ELSE}
+ TVINSERTSTRUCT = TVINSERTSTRUCTA;
+ LPTVINSERTSTRUCT = LPTVINSERTSTRUCTA;
+// TVINSERTSTRUCT_V1_SIZE = TVINSERTSTRUCTA_V1_SIZE;
+{$ENDIF}
+CONST
+ TVM_INSERTITEMA = (TV_FIRST + 0);
+ TVM_INSERTITEMW = (TV_FIRST + 50);
+{$IFDEF UNICODE}
+ TVM_INSERTITEM = TVM_INSERTITEMW;
+{$ELSE}
+ TVM_INSERTITEM = TVM_INSERTITEMA;
+{$ENDIF}
+
+TYPE
+{$ifdef ie3plus}
+ LPTV_INSERTSTRUCTA = LPTVINSERTSTRUCTA;
+ LPTV_INSERTSTRUCTW = LPTVINSERTSTRUCTW;
+ TV_INSERTSTRUCTA = TVINSERTSTRUCTA;
+ TV_INSERTSTRUCTW = TVINSERTSTRUCTW;
+{$ELSE}
+ tagTVINSERTSTRUCTA = _TV_INSERTSTRUCTA;
+ TVINSERTSTRUCTA = TV_INSERTSTRUCTA;
+ LPTVINSERTSTRUCTA = LPTV_INSERTSTRUCTA;
+ tagTVINSERTSTRUCTW = _TV_INSERTSTRUCTW;
+ TVINSERTSTRUCTW = TV_INSERTSTRUCTW;
+ LPTVINSERTSTRUCTW = LPTV_INSERTSTRUCTW;
+{$ENDIF}
+
+
+ TV_INSERTSTRUCT = TVINSERTSTRUCT;
+ LPTV_INSERTSTRUCT = LPTVINSERTSTRUCT;
+
+
+// Macro 156
+Function TreeView_InsertItem( hwnd : hwnd; lpis : LPTV_INSERTSTRUCT):HTREEITEM;inline;
+Function TreeView_InsertItem( hwnd : hwnd; const lpis : TV_INSERTSTRUCT):HTREEITEM;inline;
+
+CONST
+ TVM_DELETEITEM = (TV_FIRST + 1);
+
+// Macro 157
+Function TreeView_DeleteItem( hwnd : hwnd; hitem : HTREEITEM):BOOL;
+
+// Macro 158
+Function TreeView_DeleteAllItems( hwnd : hwnd):BOOL;
+
+CONST
+ TVM_EXPAND = (TV_FIRST + 2);
+
+// Macro 159
+Function TreeView_Expand( hwnd : hwnd; hitem : HTREEITEM; code : WPARAM):BOOL;
+
+CONST
+ TVE_COLLAPSE = $0001;
+ TVE_EXPAND = $0002;
+ TVE_TOGGLE = $0003;
+{$ifdef ie3plus}
+ TVE_EXPANDPARTIAL = $4000;
+{$ENDIF}
+ TVE_COLLAPSERESET = $8000;
+
+
+ TVM_GETITEMRECT = (TV_FIRST + 4);
+
+// Macro 160
+Function TreeView_GetItemRect( hwnd : hwnd; hitem: HTREEITEM; code : WPARAM; prc : pRECT):BOOL;inline;
+Function TreeView_GetItemRect( hwnd : hwnd; hitem: HTREEITEM; var prc : TRECT;code : Bool):BOOL;inline;
+
+CONST
+ TVM_GETCOUNT = (TV_FIRST + 5);
+
+// Macro 161
+Function TreeView_GetCount( hwnd : hwnd):UINT;
+
+CONST
+ TVM_GETINDENT = (TV_FIRST + 6);
+
+// Macro 162
+Function TreeView_GetIndent( hwnd : hwnd):UINT;
+
+CONST
+ TVM_SETINDENT = (TV_FIRST + 7);
+
+// Macro 163
+Function TreeView_SetIndent( hwnd : hwnd; indent : WPARAM):BOOL;
+
+CONST
+ TVM_GETIMAGELIST = (TV_FIRST + 8);
+
+// Macro 164
+Function TreeView_GetImageList( hwnd : hwnd; iImage : cint ):HIMAGELIST;
+
+CONST
+ TVSIL_NORMAL = 0;
+ TVSIL_STATE = 2;
+
+
+ TVM_SETIMAGELIST = (TV_FIRST + 9);
+
+// Macro 165
+Function TreeView_SetImageList( hwnd : hwnd; himl : HIMAGELIST; iImage : cint):HIMAGELIST;
+
+CONST
+ TVM_GETNEXTITEM = (TV_FIRST + 10);
+
+// Macro 166
+Function TreeView_GetNextItem( hwnd : hwnd; hitem : HTREEITEM; code : WPARAM):HTREEITEM;
+
+CONST
+ TVGN_ROOT = $0000;
+ TVGN_NEXT = $0001;
+ TVGN_PREVIOUS = $0002;
+ TVGN_PARENT = $0003;
+ TVGN_CHILD = $0004;
+ TVGN_FIRSTVISIBLE = $0005;
+ TVGN_NEXTVISIBLE = $0006;
+ TVGN_PREVIOUSVISIBLE = $0007;
+ TVGN_DROPHILITE = $0008;
+ TVGN_CARET = $0009;
+
+{$ifdef ie4plus}
+ TVGN_LASTVISIBLE = $000A;
+{$ENDIF} // _WIN32_IE >= 0x0400
+
+{$ifdef win32xp}
+ TVSI_NOSINGLEEXPAND = $8000; // Should not conflict with TVGN flags.
+{$ENDIF}
+
+function TreeView_GetChild(hwnd:hwnd; hitem:HTREEITEM) : HTREEITEM;inline;
+function TreeView_GetNextSibling(hwnd:hwnd; hitem:HTREEITEM) : HTREEITEM;inline;
+function TreeView_GetPrevSibling(hwnd:hwnd; hitem:HTREEITEM) : HTREEITEM;inline;
+function TreeView_GetParent(hwnd:hwnd; hitem:HTREEITEM) : HTREEITEM;inline;
+function TreeView_GetFirstVisible(hwnd:hwnd) : HTREEITEM;inline;
+function TreeView_GetNextVisible(hwnd:hwnd; hitem:HTREEITEM) : HTREEITEM;inline;
+function TreeView_GetPrevVisible(hwnd:hwnd; hitem:HTREEITEM) : HTREEITEM;inline;
+function TreeView_GetSelection(hwnd:hwnd) : HTREEITEM;inline;
+function TreeView_GetDropHilight(hwnd:hwnd) : HTREEITEM;inline;
+function TreeView_GetDropHilite(hwnd:hwnd) : HTREEITEM;inline;
+function TreeView_GetRoot(hwnd:hwnd) : HTREEITEM;inline;
+function TreeView_GetLastVisible(hwnd:hwnd) : HTREEITEM;inline;
+
+
+CONST
+ TVM_SELECTITEM = (TV_FIRST + 11);
+
+// Macro 178
+Function TreeView_Select( hwnd : hwnd; hitem : HTREEITEM; code : WPARAM):BOOL;
+
+// Macro 179
+Procedure TreeView_SelectItem(hwnd:hwnd; hitem:HTREEITEM);
+
+// Macro 180
+Procedure TreeView_SelectDropTarget(hwnd:hwnd; hitem:HTREEITEM);
+
+// Macro 181
+Procedure TreeView_SelectSetFirstVisible(hwnd:hwnd; hitem:HTREEITEM);
+
+CONST
+ TVM_GETITEMA = (TV_FIRST + 12);
+ TVM_GETITEMW = (TV_FIRST + 62);
+
+{$IFDEF UNICODE}
+
+TYPE
+ TVM_GETITEM = TVM_GETITEMW;
+{$ELSE}
+ TVM_GETITEM = TVM_GETITEMA;
+{$ENDIF}
+
+// Macro 182
+
+
+Function TreeView_GetItem( hwnd : hwnd;var pitem : TV_ITEM ):BOOL;
+
+
+
+
+CONST
+ TVM_SETITEMA = (TV_FIRST + 13);
+ TVM_SETITEMW = (TV_FIRST + 63);
+
+{$IFDEF UNICODE}
+
+TYPE
+ TVM_SETITEM = TVM_SETITEMW;
+{$ELSE}
+ TVM_SETITEM = TVM_SETITEMA;
+{$ENDIF}
+
+// Macro 183
+
+
+Function TreeView_SetItem( hwnd : hwnd;const pitem : TV_ITEM ):BOOL;
+
+
+CONST
+ TVM_EDITLABELA = (TV_FIRST + 14);
+ TVM_EDITLABELW = (TV_FIRST + 65);
+{$IFDEF UNICODE}
+
+TYPE
+ TVM_EDITLABEL = TVM_EDITLABELW;
+{$ELSE}
+ TVM_EDITLABEL = TVM_EDITLABELA;
+{$ENDIF}
+
+// Macro 184
+
+
+Function TreeView_EditLabel( hwnd : hwnd; hitem : HTREEITEM):HWND;
+
+
+
+
+CONST
+ TVM_GETEDITCONTROL = (TV_FIRST + 15);
+// Macro 185
+
+
+Function TreeView_GetEditControl( hwnd : hwnd):HWND;
+
+
+
+
+CONST
+ TVM_GETVISIBLECOUNT = (TV_FIRST + 16);
+// Macro 186
+
+
+Function TreeView_GetVisibleCount( hwnd : hwnd):UINT;
+
+
+
+
+CONST
+ TVM_HITTEST = (TV_FIRST + 17);
+
+TYPE
+
+ tagTVHITTESTINFO = Record
+ pt : POINT;
+ flags : UINT;
+ hItem : HTREEITEM;
+ END;
+ TVHITTESTINFO = tagTVHITTESTINFO;
+ LPTVHITTESTINFO = ^tagTVHITTESTINFO;
+ TTVHITTESTINFO = tagTVHITTESTINFO;
+ PTVHITTESTINFO = ^tagTVHITTESTINFO;
+
+
+{$ifdef ie3plus}
+ LPTV_HITTESTINFO = LPTVHITTESTINFO;
+ TV_HITTESTINFO = TVHITTESTINFO;
+{$ELSE}
+ tagTVHITTESTINFO = _TV_HITTESTINFO;
+ TVHITTESTINFO = TV_HITTESTINFO;
+
+ LPTVHITTESTINFO = LPTV_HITTESTINFO;
+{$ENDIF}
+
+
+CONST
+ TVHT_NOWHERE = $0001;
+ TVHT_ONITEMICON = $0002;
+ TVHT_ONITEMLABEL = $0004;
+ TVHT_ONITEM = (TVHT_ONITEMICON OR TVHT_ONITEMLABEL OR TVHT_ONITEMSTATEICON);
+ TVHT_ONITEMINDENT = $0008;
+ TVHT_ONITEMBUTTON = $0010;
+ TVHT_ONITEMRIGHT = $0020;
+ TVHT_ONITEMSTATEICON = $0040;
+
+ TVHT_ABOVE = $0100;
+ TVHT_BELOW = $0200;
+ TVHT_TORIGHT = $0400;
+ TVHT_TOLEFT = $0800;
+
+
+ TVM_CREATEDRAGIMAGE = (TV_FIRST + 18);
+
+// Macro 187
+Function TreeView_HitTest( hwnd : hwnd; lpht : LPTV_HITTESTINFO):HTREEITEM;inline;
+Function TreeView_HitTest( hwnd : hwnd; var lpht : TV_HITTESTINFO):HTREEITEM;inline;
+
+
+// Macro 188
+
+
+Function TreeView_CreateDragImage( hwnd : hwnd; hitem : HTREEITEM):HIMAGELIST;
+
+
+
+
+CONST
+ TVM_SORTCHILDREN = (TV_FIRST + 19);
+// Macro 189
+
+
+Function TreeView_SortChildren( hwnd : hwnd; hitem : HTREEITEM; recurse : WPARAM):BOOL;
+
+
+
+
+CONST
+ TVM_ENSUREVISIBLE = (TV_FIRST + 20);
+// Macro 190
+
+
+Function TreeView_EnsureVisible( hwnd : hwnd; hitem : HTREEITEM):BOOL;
+
+
+
+
+
+CONST
+ TVM_ENDEDITLABELNOW = (TV_FIRST + 22);
+// Macro 192
+
+
+Function TreeView_EndEditLabelNow( hwnd : hwnd; fCancel : WPARAM):BOOL;inline;
+Function TreeView_EndEditLabelNow( hwnd : hwnd; fCancel : Bool):BOOL;inline;
+
+
+
+
+CONST
+ TVM_GETISEARCHSTRINGA = (TV_FIRST + 23);
+ TVM_GETISEARCHSTRINGW = (TV_FIRST + 64);
+
+{$IFDEF UNICODE}
+
+TYPE
+ TVM_GETISEARCHSTRING= TVM_GETISEARCHSTRINGW;
+{$ELSE}
+ TVM_GETISEARCHSTRING= TVM_GETISEARCHSTRINGA;
+{$ENDIF}
+
+{$ifdef ie3plus}
+
+CONST
+ TVM_SETTOOLTIPS = (TV_FIRST + 24);
+// Macro 193
+
+
+Function TreeView_SetToolTips( hwnd : hwnd; hwndTT : WPARAM):HWND;
+
+
+CONST
+ TVM_GETTOOLTIPS = (TV_FIRST + 25);
+// Macro 194
+
+
+Function TreeView_GetToolTips( hwnd : hwnd):HWND;
+
+{$ENDIF}
+
+// Macro 195
+
+
+Function TreeView_GetISearchString( hwndTV : hwnd; lpsz : LPTSTR):BOOL;
+
+
+{$ifdef ie4plus}
+
+CONST
+ TVM_SETINSERTMARK = (TV_FIRST + 26);
+// Macro 196
+
+
+Function TreeView_SetInsertMark( hwnd : hwnd; hItem : LPARAM ; fAfter : WPARAM ):BOOL;
+
+
+
+CONST
+ TVM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT;
+// Macro 197
+
+
+Function TreeView_SetUnicodeFormat( hwnd : hwnd; fUnicode : WPARAM):BOOL;
+
+
+
+CONST
+ TVM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT;
+// Macro 198
+
+
+Function TreeView_GetUnicodeFormat( hwnd : hwnd):BOOL;
+
+
+{$ENDIF}
+
+{$ifdef ie4plus}
+
+CONST
+ TVM_SETITEMHEIGHT = (TV_FIRST + 27);
+// Macro 199
+
+
+Function TreeView_SetItemHeight( hwnd : hwnd; iHeight : WPARAM):cint;
+
+
+CONST
+ TVM_GETITEMHEIGHT = (TV_FIRST + 28);
+// Macro 200
+
+
+Function TreeView_GetItemHeight( hwnd : hwnd):cint;
+
+
+
+CONST
+ TVM_SETBKCOLOR = (TV_FIRST + 29);
+// Macro 201
+
+
+Function TreeView_SetBkColor( hwnd : hwnd; clr : LPARAM):COLORREF;
+
+
+
+CONST
+ TVM_SETTEXTCOLOR = (TV_FIRST + 30);
+// Macro 202
+
+
+Function TreeView_SetTextColor( hwnd : hwnd; clr : LPARAM):COLORREF;
+
+
+
+CONST
+ TVM_GETBKCOLOR = (TV_FIRST + 31);
+
+// Macro 203
+Function TreeView_GetBkColor( hwnd : hwnd):COLORREF;
+
+
+CONST
+ TVM_GETTEXTCOLOR = (TV_FIRST + 32);
+
+// Macro 204
+Function TreeView_GetTextColor( hwnd : hwnd):COLORREF;
+
+
+
+CONST
+ TVM_SETSCROLLTIME = (TV_FIRST + 33);
+
+// Macro 205
+Function TreeView_SetScrollTime( hwnd : hwnd; uTime :wparam ):UINT;
+
+
+
+CONST
+ TVM_GETSCROLLTIME = (TV_FIRST + 34);
+// Macro 206
+
+
+Function TreeView_GetScrollTime( hwnd : hwnd):UINT;
+
+
+
+
+CONST
+ TVM_SETINSERTMARKCOLOR = (TV_FIRST + 37);
+// Macro 207
+
+
+Function TreeView_SetInsertMarkColor( hwnd : hwnd; clr : LPARAM):COLORREF;
+
+
+CONST
+ TVM_GETINSERTMARKCOLOR = (TV_FIRST + 38);
+// Macro 208
+
+
+Function TreeView_GetInsertMarkColor( hwnd : hwnd):COLORREF;
+
+
+{$ENDIF} // (_WIN32_IE >= 0x0400)
+
+{$ifdef ie5plus}
+// tvm_?etitemstate only uses mask, state and stateMask.
+// so unicode or ansi is irrelevant.
+// Macro 209
+
+Procedure TreeView_SetItemState(hwndTV:HWND;hti:HTreeItem;data:UINT;_mask:UINT);
+
+
+// Macro 210
+
+Procedure TreeView_SetCheckState( hwndTV : hwnd; hti : HTreeItem ; fCheck : bool );
+
+
+CONST
+ TVM_GETITEMSTATE = (TV_FIRST + 39);
+
+// Macro 211
+Function TreeView_GetItemState( hwndTV : hwnd; hti : 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;
+ TTVCompare = PFNTVCOMPARE;
+
+
+ tagTVSORTCB = Record
+ hParent : HTREEITEM;
+ lpfnCompare : PFNTVCOMPARE;
+ lParam : LPARAM;
+ END;
+ TVSORTCB = tagTVSORTCB;
+ LPTVSORTCB = ^tagTVSORTCB;
+ TTVSORTCB = tagTVSORTCB;
+ PTVSORTCB = ^tagTVSORTCB;
+
+{$ifdef ie3plus}
+ LPTV_SORTCB = LPTVSORTCB;
+
+
+ TV_SORTCB = TVSORTCB;
+{$ELSE}
+ tagTVSORTCB = _TV_SORTCB;
+ TVSORTCB = TV_SORTCB;
+
+
+ LPTVSORTCB = LPTV_SORTCB;
+{$ENDIF}
+
+
+ tagNMTREEVIEWA = Record
+ hdr : NMHDR;
+ action : UINT;
+ itemOld : TVITEMA;
+ itemNew : TVITEMA;
+ ptDrag : POINT;
+ END;
+ NMTREEVIEWA = tagNMTREEVIEWA;
+ LPNMTREEVIEWA = ^tagNMTREEVIEWA;
+ TNMTREEVIEWA = tagNMTREEVIEWA;
+ PNMTREEVIEWA = ^tagNMTREEVIEWA;
+ PNMTreeView = PNMTreeViewA;
+ TNMTreeView = TNMTreeViewA;
+
+
+
+ tagNMTREEVIEWW = Record
+ hdr : NMHDR;
+ action : UINT;
+ itemOld : TVITEMW;
+ itemNew : TVITEMW;
+ ptDrag : POINT;
+ END;
+ NMTREEVIEWW = tagNMTREEVIEWW;
+ LPNMTREEVIEWW = ^tagNMTREEVIEWW;
+ TNMTREEVIEWW = tagNMTREEVIEWW;
+ PNMTREEVIEWW = ^tagNMTREEVIEWW;
+
+
+
+{$IFDEF UNICODE}
+ NMTREEVIEW = NMTREEVIEWW;
+ LPNMTREEVIEW = LPNMTREEVIEWW;
+{$ELSE}
+ NMTREEVIEW = NMTREEVIEWA;
+ LPNMTREEVIEW = LPNMTREEVIEWA;
+{$ENDIF}
+
+{$ifdef ie3plus}
+ LPNM_TREEVIEWA = LPNMTREEVIEWA;
+ LPNM_TREEVIEWW = LPNMTREEVIEWW;
+ NM_TREEVIEWW = NMTREEVIEWW;
+ NM_TREEVIEWA = NMTREEVIEWA;
+{$ELSE}
+ tagNMTREEVIEWA = _NM_TREEVIEWA;
+ tagNMTREEVIEWW = _NM_TREEVIEWW;
+ NMTREEVIEWA = NM_TREEVIEWA;
+ NMTREEVIEWW = NM_TREEVIEWW;
+ LPNMTREEVIEWA = LPNM_TREEVIEWA;
+ LPNMTREEVIEWW = LPNM_TREEVIEWW;
+{$ENDIF}
+
+ LPNM_TREEVIEW = LPNMTREEVIEW;
+ NM_TREEVIEW = NMTREEVIEW;
+
+
+
+CONST
+ TVN_SELCHANGINGA = (TVN_FIRST-1);
+ TVN_SELCHANGINGW = (TVN_FIRST-50);
+ TVN_SELCHANGEDA = (TVN_FIRST-2);
+ TVN_SELCHANGEDW = (TVN_FIRST-51);
+
+ TVC_UNKNOWN = $0000;
+ TVC_BYMOUSE = $0001;
+ TVC_BYKEYBOARD = $0002;
+
+ TVN_GETDISPINFOA = (TVN_FIRST-3);
+ TVN_GETDISPINFOW = (TVN_FIRST-52);
+ TVN_SETDISPINFOA = (TVN_FIRST-4);
+ TVN_SETDISPINFOW = (TVN_FIRST-53);
+
+ TVIF_DI_SETITEM = $1000;
+
+Type
+ tagTVDISPINFOA = Record
+ hdr : NMHDR;
+ item : TVITEMA;
+ END;
+ NMTVDISPINFOA = tagTVDISPINFOA;
+ LPNMTVDISPINFOA = ^tagTVDISPINFOA;
+ TTVDISPINFOA = tagTVDISPINFOA;
+ PTVDISPINFOA = ^tagTVDISPINFOA;
+ TTVDispInfo = TTVDISPINFOA;
+ PTVDispInfo = PTVDISPINFOA;
+
+
+ tagTVDISPINFOW = Record
+ hdr : NMHDR;
+ item : TVITEMW;
+ END;
+ NMTVDISPINFOW = tagTVDISPINFOW;
+ LPNMTVDISPINFOW = ^tagTVDISPINFOW;
+ TTVDISPINFOW = tagTVDISPINFOW;
+ PTVDISPINFOW = ^tagTVDISPINFOW;
+
+{$IFDEF UNICODE}
+ NMTVDISPINFO = NMTVDISPINFOW;
+ LPNMTVDISPINFO = LPNMTVDISPINFOW;
+{$ELSE}
+ NMTVDISPINFO = NMTVDISPINFOA;
+ LPNMTVDISPINFO = LPNMTVDISPINFOA;
+{$ENDIF}
+
+
+{$ifdef ie3plus}
+ TV_DISPINFOA = NMTVDISPINFOA;
+ TV_DISPINFOW = NMTVDISPINFOW;
+{$ELSE}
+ tagTVDISPINFOA = _TV_DISPINFOA;
+ NMTVDISPINFOA = TV_DISPINFOA;
+ tagTVDISPINFOW = _TV_DISPINFOW;
+ NMTVDISPINFOW = TV_DISPINFOW;
+{$ENDIF}
+ TV_DISPINFO = NMTVDISPINFO;
+
+
+CONST
+ TVM_SORTCHILDRENCB = (TV_FIRST + 21);
+
+// Macro 191
+Function TreeView_SortChildrenCB( hwnd : hwnd;psort :lpTV_sortcb; recurse : WPARAM):BOOL;inline;
+Function TreeView_SortChildrenCB( hwnd : hwnd;const psort :tagTVsortcb; recurse : WPARAM):BOOL;inline;
+
+CONST
+ TVN_ITEMEXPANDINGA = (TVN_FIRST-5);
+ TVN_ITEMEXPANDINGW = (TVN_FIRST-54);
+ TVN_ITEMEXPANDEDA = (TVN_FIRST-6);
+ TVN_ITEMEXPANDEDW = (TVN_FIRST-55);
+ TVN_BEGINDRAGA = (TVN_FIRST-7);
+ TVN_BEGINDRAGW = (TVN_FIRST-56);
+ TVN_BEGINRDRAGA = (TVN_FIRST-8);
+ TVN_BEGINRDRAGW = (TVN_FIRST-57);
+ TVN_DELETEITEMA = (TVN_FIRST-9);
+ TVN_DELETEITEMW = (TVN_FIRST-58);
+ TVN_BEGINLABELEDITA = (TVN_FIRST-10);
+ TVN_BEGINLABELEDITW = (TVN_FIRST-59);
+ TVN_ENDLABELEDITA = (TVN_FIRST-11);
+ TVN_ENDLABELEDITW = (TVN_FIRST-60);
+ TVN_KEYDOWN = (TVN_FIRST-12);
+
+{$ifdef ie4plus}
+ TVN_GETINFOTIPA = (TVN_FIRST-13);
+ TVN_GETINFOTIPW = (TVN_FIRST-14);
+ TVN_SINGLEEXPAND = (TVN_FIRST-15);
+
+ TVNRET_DEFAULT = 0;
+ TVNRET_SKIPOLD = 1;
+ TVNRET_SKIPNEW = 2;
+
+{$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}
+ TComboBoxExItem = COMBOBOXEXITEM;
+
+
+CONST
+ CBEM_INSERTITEMA = (WM_USER + 1);
+ CBEM_SETIMAGELIST = (WM_USER + 2);
+ CBEM_GETIMAGELIST = (WM_USER + 3);
+ CBEM_GETITEMA = (WM_USER + 4);
+ CBEM_SETITEMA = (WM_USER + 5);
+ CBEM_DELETEITEM = CB_DELETESTRING;
+ CBEM_GETCOMBOCONTROL = (WM_USER + 6);
+ CBEM_GETEDITCONTROL = (WM_USER + 7);
+{$ifdef ie4plus}
+ CBEM_SETEXSTYLE = (WM_USER + 8); // use SETEXTENDEDSTYLE instead
+ CBEM_SETEXTENDEDSTYLE = (WM_USER + 14); // lparam == new style, wParam (optional) == mask
+ CBEM_GETEXSTYLE = (WM_USER + 9); // use GETEXTENDEDSTYLE instead
+ CBEM_GETEXTENDEDSTYLE = (WM_USER + 9);
+ CBEM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT;
+ CBEM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT;
+{$ELSE}
+ CBEM_SETEXSTYLE = (WM_USER + 8);
+ CBEM_GETEXSTYLE = (WM_USER + 9);
+{$ENDIF}
+ CBEM_HASEDITCHANGED = (WM_USER + 10);
+ CBEM_INSERTITEMW = (WM_USER + 11);
+ CBEM_SETITEMW = (WM_USER + 12);
+ CBEM_GETITEMW = (WM_USER + 13);
+
+{$IFDEF UNICODE}
+
+ CBEM_INSERTITEM = CBEM_INSERTITEMW;
+ CBEM_SETITEM = CBEM_SETITEMW;
+ CBEM_GETITEM = CBEM_GETITEMW;
+{$ELSE}
+ CBEM_INSERTITEM = CBEM_INSERTITEMA;
+ CBEM_SETITEM = CBEM_SETITEMA;
+ CBEM_GETITEM = CBEM_GETITEMA;
+{$ENDIF}
+
+{$ifdef win32xp}
+
+ CBEM_SETWINDOWTHEME = CCM_SETWINDOWTHEME;
+{$ENDIF}
+
+ CBES_EX_NOEDITIMAGE = $00000001;
+ CBES_EX_NOEDITIMAGEINDENT = $00000002;
+ CBES_EX_PATHWORDBREAKPROC = $00000004;
+{$ifdef ie4plus}
+ CBES_EX_NOSIZELIMIT = $00000008;
+ CBES_EX_CASESENSITIVE = $00000010;
+
+TYPE
+
+ DummyStruct9 = Record
+ hdr : NMHDR;
+ ceItem : COMBOBOXEXITEMA;
+ END;
+ NMCOMBOBOXEXA = DummyStruct9;
+ PNMCOMBOBOXEXA = ^DummyStruct9;
+ TDummyStruct9 = DummyStruct9;
+ PDummyStruct9 = ^DummyStruct9;
+
+
+ DummyStruct10 = Record
+ hdr : NMHDR;
+ ceItem : COMBOBOXEXITEMW;
+ END;
+ NMCOMBOBOXEXW = DummyStruct10;
+ PNMCOMBOBOXEXW = ^DummyStruct10;
+ TDummyStruct10 = DummyStruct10;
+ PDummyStruct10 = ^DummyStruct10;
+
+
+
+{$ELSE}
+ DummyStruct11 = Record
+ hdr : NMHDR;
+ ceItem : COMBOBOXEXITEM;
+ END;
+ NMCOMBOBOXEX = DummyStruct11;
+ PNMCOMBOBOXEX = ^DummyStruct11;
+ TDummyStruct11 = DummyStruct11;
+ PDummyStruct11 = ^DummyStruct11;
+
+
+
+CONST
+ CBEN_GETDISPINFO = (CBEN_FIRST - 0);
+
+{$ENDIF} // _WIN32_IE >= 0x0400
+CONST
+{$ifdef ie4plus}
+ CBEN_GETDISPINFOA = (CBEN_FIRST - 0);
+{$ENDIF}
+ CBEN_INSERTITEM = (CBEN_FIRST - 1);
+ CBEN_DELETEITEM = (CBEN_FIRST - 2);
+ CBEN_BEGINEDIT = (CBEN_FIRST - 4);
+ CBEN_ENDEDITA = (CBEN_FIRST - 5);
+ CBEN_ENDEDITW = (CBEN_FIRST - 6);
+
+{$ifdef ie4plus}
+ CBEN_GETDISPINFOW = (CBEN_FIRST - 7);
+{$ENDIF}
+
+{$ifdef ie4plus}
+ CBEN_DRAGBEGINA = (CBEN_FIRST - 8);
+ CBEN_DRAGBEGINW = (CBEN_FIRST - 9);
+
+{$IFDEF UNICODE}
+
+ CBEN_DRAGBEGIN = CBEN_DRAGBEGINW;
+{$ELSE}
+ CBEN_DRAGBEGIN = CBEN_DRAGBEGINA;
+{$ENDIF}
+
+{$ENDIF} //(_WIN32_IE >= 0x0400)
+TYPE
+{$IFDEF UNICODE}
+ NMCOMBOBOXEX = NMCOMBOBOXEXW;
+ PNMCOMBOBOXEX = PNMCOMBOBOXEXW;
+CONST
+ CBEN_GETDISPINFO = CBEN_GETDISPINFOW;
+{$ELSE}
+ NMCOMBOBOXEX = NMCOMBOBOXEXA;
+ PNMCOMBOBOXEX = PNMCOMBOBOXEXA;
+CONST
+ CBEN_GETDISPINFO = CBEN_GETDISPINFOA;
+{$ENDIF}
+
+// lParam specifies why the endedit is happening
+{$IFDEF UNICODE}
+ CBEN_ENDEDIT = CBEN_ENDEDITW;
+{$ELSE}
+ CBEN_ENDEDIT = CBEN_ENDEDITA;
+{$ENDIF}
+
+
+CONST
+ CBENF_KILLFOCUS = 1;
+ CBENF_RETURN = 2;
+ CBENF_ESCAPE = 3;
+ CBENF_DROPDOWN = 4;
+
+ CBEMAXSTRLEN = 260;
+
+{$ifdef ie4plus}
+// CBEN_DRAGBEGIN sends this information ...
+
+TYPE
+
+ DummyStruct12 = Record
+ hdr : NMHDR;
+ iItemid : cint;
+ szText : Array[0..CBEMAXSTRLEN-1] OF WCHAR;
+ END;
+ NMCBEDRAGBEGINW = DummyStruct12;
+ LPNMCBEDRAGBEGINW = ^DummyStruct12;
+ PNMCBEDRAGBEGINW = ^DummyStruct12;
+ TDummyStruct12 = DummyStruct12;
+ PDummyStruct12 = ^DummyStruct12;
+
+
+
+ DummyStruct13 = Record
+ hdr : NMHDR;
+ iItemid : cint;
+ szText : Array[0..CBEMAXSTRLEN-1] OF char;
+ END;
+ NMCBEDRAGBEGINA = DummyStruct13;
+ LPNMCBEDRAGBEGINA = ^DummyStruct13;
+ PNMCBEDRAGBEGINA = ^DummyStruct13;
+ TDummyStruct13 = DummyStruct13;
+ PDummyStruct13 = ^DummyStruct13;
+
+
+{$IFDEF UNICODE}
+ NMCBEDRAGBEGIN = NMCBEDRAGBEGINW;
+ LPNMCBEDRAGBEGIN = LPNMCBEDRAGBEGINW;
+ PNMCBEDRAGBEGIN = PNMCBEDRAGBEGINW;
+{$ELSE}
+ NMCBEDRAGBEGIN = NMCBEDRAGBEGINA;
+ LPNMCBEDRAGBEGIN = LPNMCBEDRAGBEGINA;
+ PNMCBEDRAGBEGIN = PNMCBEDRAGBEGINA;
+{$ENDIF}
+{$ENDIF} // _WIN32_IE >= 0x0400
+
+// CBEN_ENDEDIT sends this information...
+// fChanged if the user actually did anything
+// iNewSelection gives what would be the new selection unless the notify is failed
+// iNewSelection may be CB_ERR if there's no match
+ DummyStruct14 = Record
+ hdr : NMHDR;
+ fChanged : BOOL;
+ iNewSelection : cint;
+ szText : Array[0..CBEMAXSTRLEN-1] OF WCHAR;
+ iWhy : cint;
+ END;
+ NMCBEENDEDITW = DummyStruct14;
+ LPNMCBEENDEDITW = ^DummyStruct14;
+ PNMCBEENDEDITW = ^DummyStruct14;
+ TDummyStruct14 = DummyStruct14;
+ PDummyStruct14 = ^DummyStruct14;
+
+
+ DummyStruct15 = Record
+ hdr : NMHDR;
+ fChanged : BOOL;
+ iNewSelection : cint;
+ szText : Array[0..CBEMAXSTRLEN-1] OF char;
+ iWhy : cint;
+ END;
+ NMCBEENDEDITA = DummyStruct15;
+ LPNMCBEENDEDITA = ^DummyStruct15;
+ PNMCBEENDEDITA = ^DummyStruct15;
+ TDummyStruct15 = DummyStruct15;
+ PDummyStruct15 = ^DummyStruct15;
+
+
+{$IFDEF UNICODE}
+ NMCBEENDEDIT = NMCBEENDEDITW;
+ LPNMCBEENDEDIT = LPNMCBEENDEDITW;
+ PNMCBEENDEDIT = PNMCBEENDEDITW;
+{$ELSE}
+ NMCBEENDEDIT = NMCBEENDEDITA;
+ LPNMCBEENDEDIT = LPNMCBEENDEDITA;
+ PNMCBEENDEDIT = PNMCBEENDEDITA;
+{$ENDIF}
+
+{$ENDIF}
+
+{$ENDIF} // _WIN32_IE >= 0x0300
+
+
+
+//====== TAB CONTROL ==========================================================
+
+{$IFNDEF NOTABCONTROL}
+
+{$IFDEF _WIN32}
+
+
+CONST
+ WC_TABCONTROLA = 'SysTabControl32';
+ WC_TABCONTROLW = {L}'SysTabControl32';
+
+{$IFDEF UNICODE}
+
+TYPE
+ WC_TABCONTROL = WC_TABCONTROLW;
+{$ELSE}
+ WC_TABCONTROL = WC_TABCONTROLA;
+{$ENDIF}
+
+{$ELSE}
+
+CONST
+ WC_TABCONTROL = 'SysTabControl';
+{$ENDIF}
+
+// begin_r_commctrl
+
+{$ifdef ie3plus}
+ TCS_SCROLLOPPOSITE = $0001; // assumes multiline tab
+ TCS_BOTTOM = $0002;
+ TCS_RIGHT = $0002;
+ TCS_MULTISELECT = $0004; // allow multi-select in button mode
+{$ENDIF}
+{$ifdef ie4plus}
+ TCS_FLATBUTTONS = $0008;
+{$ENDIF}
+ TCS_FORCEICONLEFT = $0010;
+ TCS_FORCELABELLEFT = $0020;
+{$ifdef ie3plus}
+ TCS_HOTTRACK = $0040;
+ TCS_VERTICAL = $0080;
+{$ENDIF}
+ TCS_TABS = $0000;
+ TCS_BUTTONS = $0100;
+ TCS_SINGLELINE = $0000;
+ TCS_MULTILINE = $0200;
+ TCS_RIGHTJUSTIFY = $0000;
+ TCS_FIXEDWIDTH = $0400;
+ TCS_RAGGEDRIGHT = $0800;
+ TCS_FOCUSONBUTTONDOWN = $1000;
+ TCS_OWNERDRAWFIXED = $2000;
+ TCS_TOOLTIPS = $4000;
+ TCS_FOCUSNEVER = $8000;
+
+// end_r_commctrl
+
+{$ifdef ie4plus}
+// EX styles for use with TCM_SETEXTENDEDSTYLE
+ TCS_EX_FLATSEPARATORS = $00000001;
+ TCS_EX_REGISTERDROP = $00000002;
+{$ENDIF}
+
+
+ TCM_GETIMAGELIST = (TCM_FIRST + 2);
+// Macro 217
+
+
+Function TabCtrl_GetImageList( hwnd : hwnd):HIMAGELIST;
+
+
+
+
+CONST
+ TCM_SETIMAGELIST = (TCM_FIRST + 3);
+// Macro 218
+
+
+Function TabCtrl_SetImageList( hwnd : hwnd; himl : HIMAGELIST):HIMAGELIST;
+
+
+
+
+CONST
+ TCM_GETITEMCOUNT = (TCM_FIRST + 4);
+// Macro 219
+
+
+Function TabCtrl_GetItemCount( hwnd : hwnd):cint;
+
+
+
+
+CONST
+ TCIF_TEXT = $0001;
+ TCIF_IMAGE = $0002;
+ TCIF_RTLREADING = $0004;
+ TCIF_PARAM = $0008;
+{$ifdef ie3plus}
+ TCIF_STATE = $0010;
+
+
+ TCIS_BUTTONPRESSED = $0001;
+{$ENDIF}
+{$ifdef ie4plus}
+ TCIS_HIGHLIGHTED = $0002;
+{$ENDIF}
+TYPE
+
+
+
+
+ tagTCITEMHEADERA = Record
+ mask : UINT;
+ lpReserved1 : UINT;
+ lpReserved2 : UINT;
+ pszText : LPSTR;
+ cchTextMax : cint;
+ iImage : cint;
+ END;
+ TCITEMHEADERA = tagTCITEMHEADERA;
+ LPTCITEMHEADERA = ^tagTCITEMHEADERA;
+ TTCITEMHEADERA = tagTCITEMHEADERA;
+ PTCITEMHEADERA = ^tagTCITEMHEADERA;
+
+
+ tagTCITEMHEADERW = Record
+ mask : UINT;
+ lpReserved1 : UINT;
+ lpReserved2 : UINT;
+ pszText : LPWSTR;
+ cchTextMax : cint;
+ iImage : cint;
+ END;
+ TCITEMHEADERW = tagTCITEMHEADERW;
+ LPTCITEMHEADERW = ^tagTCITEMHEADERW;
+ TTCITEMHEADERW = tagTCITEMHEADERW;
+ PTCITEMHEADERW = ^tagTCITEMHEADERW;
+
+
+{$IFDEF UNICODE}
+ TCITEMHEADER = TCITEMHEADERW;
+ LPTCITEMHEADER = LPTCITEMHEADERW;
+{$ELSE}
+ TCITEMHEADER = TCITEMHEADERA;
+ LPTCITEMHEADER = LPTCITEMHEADERA;
+{$ENDIF}
+
+
+{$ifdef ie3plus}
+ TC_ITEMHEADERA = TCITEMHEADERA;
+ TC_ITEMHEADERW = TCITEMHEADERW;
+{$ELSE}
+ tagTCITEMHEADERA = _TC_ITEMHEADERA;
+ TCITEMHEADERA = TC_ITEMHEADERA;
+ tagTCITEMHEADERW = _TC_ITEMHEADERW;
+ TCITEMHEADERW = TC_ITEMHEADERW;
+{$ENDIF}
+
+
+ TC_ITEMHEADER = TCITEMHEADER;
+
+
+
+
+
+ tagTCITEMA = Record
+ mask : UINT;
+{$ifdef ie3plus}
+ dwState : DWORD;
+ dwStateMask : DWORD;
+{$ELSE}
+ lpReserved1 : UINT;
+ lpReserved2 : UINT;
+{$ENDIF}
+ pszText : LPSTR;
+ cchTextMax : cint;
+ iImage : cint;
+ lParam : LPARAM;
+ END;
+ TCITEMA = tagTCITEMA;
+ LPTCITEMA = ^tagTCITEMA;
+ TTCITEMA = tagTCITEMA;
+ PTCITEMA = ^tagTCITEMA;
+
+
+ tagTCITEMW = Record
+ mask : UINT;
+{$ifdef ie3plus}
+ dwState : DWORD;
+ dwStateMask : DWORD;
+{$ELSE}
+ lpReserved1 : UINT;
+ lpReserved2 : UINT;
+{$ENDIF}
+ pszText : LPWSTR;
+ cchTextMax : cint;
+ iImage : cint;
+ lParam : LPARAM;
+ END;
+ TCITEMW = tagTCITEMW;
+ LPTCITEMW = ^tagTCITEMW;
+ TTCITEMW = tagTCITEMW;
+ PTCITEMW = ^tagTCITEMW;
+
+
+{$IFDEF UNICODE}
+ TCITEM = TCITEMW;
+ LPTCITEM = LPTCITEMW;
+{$ELSE}
+ TCITEM = TCITEMA;
+ LPTCITEM = LPTCITEMA;
+{$ENDIF}
+
+
+{$ifdef ie3plus}
+ TC_ITEMA = TCITEMA;
+ TC_ITEMW = TCITEMW;
+{$ELSE}
+ tagTCITEMA = _TC_ITEMA;
+ TCITEMA = TC_ITEMA;
+ tagTCITEMW = _TC_ITEMW;
+ TCITEMW = TC_ITEMW;
+{$ENDIF}
+
+
+ TC_ITEM = TCITEM;
+
+
+
+
+CONST
+ TCM_GETITEMA = (TCM_FIRST + 5);
+ TCM_GETITEMW = (TCM_FIRST + 60);
+
+{$IFDEF UNICODE}
+
+TYPE
+ TCM_GETITEM = TCM_GETITEMW;
+{$ELSE}
+ TCM_GETITEM = TCM_GETITEMA;
+{$ENDIF}
+
+// Macro 220
+Function TabCtrl_GetItem( hwnd : hwnd; iItem : cint;var pitem : TC_ITEM ):BOOL;
+
+
+
+
+CONST
+ TCM_SETITEMA = (TCM_FIRST + 6);
+ TCM_SETITEMW = (TCM_FIRST + 61);
+
+{$IFDEF UNICODE}
+
+TYPE
+ TCM_SETITEM = TCM_SETITEMW;
+{$ELSE}
+ TCM_SETITEM = TCM_SETITEMA;
+{$ENDIF}
+
+// Macro 221
+Function TabCtrl_SetItem( hwnd : hwnd; iItem : cint;var pitem : TC_ITEM ):BOOL;
+
+
+
+
+CONST
+ TCM_INSERTITEMA = (TCM_FIRST + 7);
+ TCM_INSERTITEMW = (TCM_FIRST + 62);
+
+{$IFDEF UNICODE}
+ TCM_INSERTITEM = TCM_INSERTITEMW;
+{$ELSE}
+ TCM_INSERTITEM = TCM_INSERTITEMA;
+{$ENDIF}
+
+// Macro 222
+Function TabCtrl_InsertItem( hwnd : hwnd; iItem : cint;CONST pitem : TC_ITEM ):cint;
+
+
+CONST
+ TCM_DELETEITEM = (TCM_FIRST + 8);
+
+// Macro 223
+Function TabCtrl_DeleteItem( hwnd : hwnd; i : cint):BOOL;
+
+CONST
+ TCM_DELETEALLITEMS = (TCM_FIRST + 9);
+
+// Macro 224
+Function TabCtrl_DeleteAllItems( hwnd : hwnd):BOOL;
+
+CONST
+ TCM_GETITEMRECT = (TCM_FIRST + 10);
+
+// Macro 225
+Function TabCtrl_GetItemRect( hwnd : hwnd; i : cint;var prc : RECT ):BOOL;
+
+CONST
+ TCM_GETCURSEL = (TCM_FIRST + 11);
+// Macro 226
+
+Function TabCtrl_GetCurSel( hwnd : hwnd):cint;
+
+
+CONST
+ TCM_SETCURSEL = (TCM_FIRST + 12);
+
+// Macro 227
+Function TabCtrl_SetCurSel( hwnd : hwnd; i : WPARAM):cint;
+
+CONST
+ TCHT_NOWHERE = $0001;
+ TCHT_ONITEMICON = $0002;
+ TCHT_ONITEMLABEL = $0004;
+ TCHT_ONITEM = (TCHT_ONITEMICON OR TCHT_ONITEMLABEL);
+
+TYPE
+
+ tagTCHITTESTINFO = Record
+ pt : POINT;
+ flags : UINT;
+ END;
+ TCHITTESTINFO = tagTCHITTESTINFO;
+ LPTCHITTESTINFO = ^tagTCHITTESTINFO;
+ TTCHITTESTINFO = tagTCHITTESTINFO;
+ PTCHITTESTINFO = ^tagTCHITTESTINFO;
+
+{$ifdef ie3plus}
+ LPTC_HITTESTINFO = LPTCHITTESTINFO;
+ TC_HITTESTINFO = TCHITTESTINFO;
+{$ELSE}
+ tagTCHITTESTINFO = _TC_HITTESTINFO;
+ TCHITTESTINFO = TC_HITTESTINFO;
+ LPTCHITTESTINFO = LPTC_HITTESTINFO;
+{$ENDIF}
+
+
+CONST
+ TCM_HITTEST = (TCM_FIRST + 13);
+
+// Macro 228
+Function TabCtrl_HitTest( hwndTC : hwnd;var pinfo : TC_HITTESTINFO ):cint;inline;
+Function TabCtrl_HitTest( hwndTC : hwnd;pinfo : LPTCHITTESTINFO ):cint;inline;
+
+CONST
+ TCM_SETITEMEXTRA = (TCM_FIRST + 14);
+
+// Macro 229
+Function TabCtrl_SetItemExtra( hwndTC : hwnd; cb : WPARAM):BOOL;
+
+
+
+
+CONST
+ TCM_ADJUSTRECT = (TCM_FIRST + 40);
+
+// Macro 230
+Function TabCtrl_AdjustRect( hwnd : hwnd; bLarger : BOOL;var prc : RECT ):cint;
+
+
+
+
+CONST
+ TCM_SETITEMSIZE = (TCM_FIRST + 41);
+
+// Macro 231
+Function TabCtrl_SetItemSize( hwnd : hwnd; x :wparam ; y : lparam ):DWORD;
+
+CONST
+ TCM_REMOVEIMAGE = (TCM_FIRST + 42);
+
+// Macro 232
+Procedure TabCtrl_RemoveImage( hwnd : hwnd; i : wparam );
+
+
+
+
+CONST
+ TCM_SETPADDING = (TCM_FIRST + 43);
+
+// Macro 233
+Procedure TabCtrl_SetPadding( hwnd : hwnd; cx : wparam ; cy : lparam );
+
+
+
+
+CONST
+ TCM_GETROWCOUNT = (TCM_FIRST + 44);
+
+// Macro 234
+Function TabCtrl_GetRowCount( hwnd : hwnd):cint;
+
+
+
+
+CONST
+ TCM_GETTOOLTIPS = (TCM_FIRST + 45);
+
+// Macro 235
+Function TabCtrl_GetToolTips( hwnd : hwnd):HWND;
+
+
+
+
+CONST
+ TCM_SETTOOLTIPS = (TCM_FIRST + 46);
+
+// Macro 236
+Procedure TabCtrl_SetToolTips( hwnd : hwnd; hwndTT : WPARAM);
+
+
+
+
+CONST
+ TCM_GETCURFOCUS = (TCM_FIRST + 47);
+// Macro 237
+
+
+Function TabCtrl_GetCurFocus( hwnd : hwnd):cint;
+
+
+
+CONST
+ TCM_SETCURFOCUS = (TCM_FIRST + 48);
+
+// Macro 238
+Procedure TabCtrl_SetCurFocus( hwnd : hwnd; i : LParam );
+
+
+{$ifdef ie3plus}
+
+CONST
+ TCM_SETMINTABWIDTH = (TCM_FIRST + 49);
+
+// Macro 239
+Function TabCtrl_SetMinTabWidth( hwnd : hwnd; x : WParam ):cint;
+
+
+CONST
+ TCM_DESELECTALL = (TCM_FIRST + 50);
+
+// Macro 240
+Procedure TabCtrl_DeselectAll( hwnd : hwnd; fExcludeFocus : WPARAM );
+
+{$ENDIF}
+
+{$ifdef ie4plus}
+CONST
+ TCM_HIGHLIGHTITEM = (TCM_FIRST + 51);
+
+// Macro 241
+Function TabCtrl_HighlightItem( hwnd : hwnd; i : WPARAM; fHighlight :bool):BOOL;
+
+
+
+CONST
+ TCM_SETEXTENDEDSTYLE = (TCM_FIRST + 52); // optional wParam == mask
+
+// Macro 242
+Function TabCtrl_SetExtendedStyle( hwnd : hwnd; dw :LPARAM ):DWORD;
+
+
+CONST
+ TCM_GETEXTENDEDSTYLE = (TCM_FIRST + 53);
+
+// Macro 243
+Function TabCtrl_GetExtendedStyle( hwnd : hwnd):DWORD;
+
+
+
+CONST
+ TCM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT;
+
+// Macro 244
+Function TabCtrl_SetUnicodeFormat( hwnd : hwnd; fUnicode : WPARAM):BOOL;
+
+
+
+CONST
+ TCM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT;
+
+// Macro 245
+Function TabCtrl_GetUnicodeFormat( hwnd : hwnd):BOOL;
+
+
+{$ENDIF} // _WIN32_IE >= 0x0400
+
+
+CONST
+ TCN_KEYDOWN = (TCN_FIRST - 0);
+
+
+{$IFDEF _WIN32}
+// #include <pshpack1.h>
+{$ENDIF}
+
+TYPE
+
+ tagTCKEYDOWN = Record
+ hdr : NMHDR;
+ wVKey : WORD;
+ flags : UINT;
+ END;
+ NMTCKEYDOWN = tagTCKEYDOWN;
+ TTCKEYDOWN = tagTCKEYDOWN;
+ PTCKEYDOWN = ^tagTCKEYDOWN;
+
+{$ifdef ie3plus}
+ TC_KEYDOWN = NMTCKEYDOWN;
+{$ELSE}
+ tagTCKEYDOWN = _TC_KEYDOWN;
+ NMTCKEYDOWN = TC_KEYDOWN;
+{$ENDIF}
+
+
+{$IFDEF _WIN32}
+// #include <poppack.h>
+{$ENDIF}
+
+
+CONST
+ TCN_SELCHANGE = (TCN_FIRST - 1);
+ TCN_SELCHANGING = (TCN_FIRST - 2);
+{$ifdef ie4plus}
+ TCN_GETOBJECT = (TCN_FIRST - 3);
+{$ENDIF} // _WIN32_IE >= 0x0400
+{$ifdef ie5plus}
+ TCN_FOCUSCHANGE = (TCN_FIRST - 4);
+{$ENDIF} // _WIN32_IE >= 0x0500
+{$ENDIF} // NOTABCONTROL
+
+//====== ANIMATE CONTROL ======================================================
+
+{$IFNDEF NOANIMATE}
+
+{$IFDEF _WIN32}
+
+ ANIMATE_CLASSW = {L}'SysAnimate32';
+ ANIMATE_CLASSA = 'SysAnimate32';
+
+{$IFDEF UNICODE}
+ ANIMATE_CLASS = ANIMATE_CLASSW;
+{$ELSE}
+ ANIMATE_CLASS = ANIMATE_CLASSA;
+{$ENDIF}
+
+// begin_r_commctrl
+
+
+CONST
+ ACS_CENTER = $0001;
+ ACS_TRANSPARENT = $0002;
+ ACS_AUTOPLAY = $0004;
+{$ifdef ie3plus}
+ ACS_TIMER = $0008; // don't use threads... use timers
+{$ENDIF}
+
+// end_r_commctrl
+
+ ACM_OPENA = (WM_USER+100);
+ ACM_OPENW = (WM_USER+103);
+
+{$IFDEF UNICODE}
+
+
+ ACM_OPEN = ACM_OPENW;
+{$ELSE}
+ ACM_OPEN = ACM_OPENA;
+{$ENDIF}
+
+
+CONST
+ ACM_PLAY = (WM_USER+101);
+ ACM_STOP = (WM_USER+102);
+
+
+ ACN_START = 1;
+ ACN_STOP = 2;
+
+
+// Macro 246
+
+
+Function Animate_Create(hwndP :HWND;id:HMENU;dwStyle:dword;hInstance:HINST):HWND;
+
+// Macro 247
+
+// #define Animate_Open(hwnd, szName) (BOOL)SNDMSG(hwnd, ACM_OPEN, 0, (LPARAM)(LPTSTR)(szName))
+// Macro 248
+
+// #define Animate_OpenEx(hwnd, hInst, szName) (BOOL)SNDMSG(hwnd, ACM_OPEN, (WPARAM)(hInst), (LPARAM)(LPTSTR)(szName))
+// Macro 249
+
+// #define Animate_Play(hwnd, from, to, rep) (BOOL)SNDMSG(hwnd, ACM_PLAY, (WPARAM)(rep), (LPARAM)MAKELONG(from, to))
+// Macro 250
+
+// #define Animate_Stop(hwnd) (BOOL)SNDMSG(hwnd, ACM_STOP, 0, 0)
+// Macro 251
+
+// #define Animate_Close(hwnd) Animate_Open(hwnd, NULL)
+// Macro 252
+
+// #define Animate_Seek(hwnd, frame) Animate_Play(hwnd, frame, frame, 1)
+{$ENDIF}
+
+{$ENDIF} // NOANIMATE
+
+{$ifdef ie3plus}
+//====== MONTHCAL CONTROL ======================================================
+
+{$IFNDEF NOMONTHCAL}
+{$IFDEF _WIN32}
+
+
+CONST
+ MONTHCAL_CLASSW = {L}'SysMonthCal32';
+ MONTHCAL_CLASSA = 'SysMonthCal32';
+
+
+{$IFDEF UNICODE}
+ MONTHCAL_CLASS = MONTHCAL_CLASSW;
+{$ELSE}
+ MONTHCAL_CLASS = MONTHCAL_CLASSA;
+{$ENDIF}
+
+TYPE
+// bit-packed array of "bold" info for a month
+// if a bit is on, that day is drawn bold
+
+ MONTHDAYSTATE = DWORD;
+ LPMONTHDAYSTATE = ^MONTHDAYSTATE;
+ TMonthDayState = MONTHDAYSTATE;
+ PMonthDayState = LPMONTHDAYSTATE;
+
+
+CONST
+ MCM_FIRST = $1000;
+
+// BOOL MonthCal_GetCurSel(HWND hmc, LPSYSTEMTIME pst)
+// returns FALSE if MCS_MULTISELECT
+// returns TRUE and sets *pst to the currently selected date otherwise
+
+
+
+
+CONST
+ MCM_GETCURSEL = (MCM_FIRST + 1);
+
+// Macro 253
+// #define MonthCal_GetCurSel(hmc, pst) (BOOL)SNDMSG(hmc, MCM_GETCURSEL, 0, (LPARAM)(pst))
+
+function MonthCal_GetCurSel(hwndMC:HWND; lpSysTime :LPSYSTEMTIME):Bool;
+
+// BOOL MonthCal_SetCurSel(HWND hmc, LPSYSTEMTIME pst)
+// returns FALSE if MCS_MULTISELECT
+// returns TURE and sets the currently selected date to *pst otherwise
+
+
+
+CONST
+ MCM_SETCURSEL = (MCM_FIRST + 2);
+
+// Macro 254
+// #define MonthCal_SetCurSel(hmc, pst) (BOOL)SNDMSG(hmc, MCM_SETCURSEL, 0, (LPARAM)(pst))
+// DWORD MonthCal_GetMaxSelCount(HWND hmc)
+// returns the maximum number of selectable days allowed
+
+function MonthCal_SetCurSel(hwndMC:HWND; lpSysTime :LPSYSTEMTIME):Bool;inline;
+function MonthCal_SetCurSel(hwndMC:HWND; var lpSysTime :TSYSTEMTIME):Bool;inline;
+
+
+CONST
+ MCM_GETMAXSELCOUNT = (MCM_FIRST + 3);
+
+// Macro 255
+// #define MonthCal_GetMaxSelCount(hmc) (DWORD)SNDMSG(hmc, MCM_GETMAXSELCOUNT, 0, 0L)
+// BOOL MonthCal_SetMaxSelCount(HWND hmc, UINT n)
+// sets the max number days that can be selected iff MCS_MULTISELECT
+
+function MonthCal_GetMaxSelCount(hwndMC:HWND):Bool;
+
+CONST
+ MCM_SETMAXSELCOUNT = (MCM_FIRST + 4);
+
+// Macro 256
+// #define MonthCal_SetMaxSelCount(hmc, n) (BOOL)SNDMSG(hmc, MCM_SETMAXSELCOUNT, (WPARAM)(n), 0L)
+
+function MonthCal_SetMaxSelCount(hwndMC:HWND;n:uint):Bool;
+
+// BOOL MonthCal_GetSelRange(HWND hmc, LPSYSTEMTIME rgst)
+// sets rgst[0] to the first day of the selection range
+// sets rgst[1] to the last day of the selection range
+
+CONST
+ MCM_GETSELRANGE = (MCM_FIRST + 5);
+
+// Macro 257
+// #define MonthCal_GetSelRange(hmc, rgst) SNDMSG(hmc, MCM_GETSELRANGE, 0, (LPARAM)(rgst))
+// BOOL MonthCal_SetSelRange(HWND hmc, LPSYSTEMTIME rgst)
+// selects the range of days from rgst[0] to rgst[1]
+
+function MonthCal_GetSelRange(hwndMC:HWND; lpSysTime :LPSYSTEMTIME):Bool;
+
+
+CONST
+ MCM_SETSELRANGE = (MCM_FIRST + 6);
+
+// Macro 258
+// #define MonthCal_SetSelRange(hmc, rgst) SNDMSG(hmc, MCM_SETSELRANGE, 0, (LPARAM)(rgst))
+// DWORD MonthCal_GetMonthRange(HWND hmc, DWORD gmr, LPSYSTEMTIME rgst)
+// if rgst specified, sets rgst[0] to the starting date and
+// and rgst[1] to the ending date of the the selectable (non-grayed)
+// days if GMR_VISIBLE or all the displayed days (including grayed)
+// if GMR_DAYSTATE.
+// returns the number of months spanned by the above range.
+
+function MonthCal_SetSelRange(hwndMC:HWND; lpSysTime :LPSYSTEMTIME):Bool;
+
+
+CONST
+ MCM_GETMONTHRANGE = (MCM_FIRST + 7);
+
+// Macro 259
+// #define MonthCal_GetMonthRange(hmc, gmr, rgst) (DWORD)SNDMSG(hmc, MCM_GETMONTHRANGE, (WPARAM)(gmr), (LPARAM)(rgst))
+// BOOL MonthCal_SetDayState(HWND hmc, int cbds, DAYSTATE *rgds)
+// cbds is the count of DAYSTATE items in rgds and it must be equal
+// to the value returned from MonthCal_GetMonthRange(hmc, GMR_DAYSTATE, NULL)
+// This sets the DAYSTATE bits for each month (grayed and non-grayed
+// days) displayed in the calendar. The first bit in a month's DAYSTATE
+// corresponts to bolding day 1, the second bit affects day 2, etc.
+
+function MonthCal_GetMonthRange(hwndMC:HWND; gmr: DWORD;lpSysTime :LPSYSTEMTIME):Bool;
+
+
+CONST
+ MCM_SETDAYSTATE = (MCM_FIRST + 8);
+
+// Macro 260
+// #define MonthCal_SetDayState(hmc, cbds, rgds) SNDMSG(hmc, MCM_SETDAYSTATE, (WPARAM)(cbds), (LPARAM)(rgds))
+// BOOL MonthCal_GetMinReqRect(HWND hmc, LPRECT prc)
+// sets *prc the minimal size needed to display one month
+// To display two months, undo the AdjustWindowRect calculation already done to
+// this rect, double the width, and redo the AdjustWindowRect calculation --
+// the monthcal control will display two calendars in this window (if you also
+// double the vertical size, you will get 4 calendars)
+// NOTE: if you want to gurantee that the "Today" string is not clipped,
+// get the MCM_GETMAXTODAYWIDTH and use the max of that width and this width
+
+function MonthCal_SetDayState(hwndMC:HWND; gmr: Longint;lpDay :LPMONTHDAYSTATE):Bool;
+
+
+CONST
+ MCM_GETMINREQRECT = (MCM_FIRST + 9);
+
+// Macro 261
+// #define MonthCal_GetMinReqRect(hmc, prc) SNDMSG(hmc, MCM_GETMINREQRECT, 0, (LPARAM)(prc))
+// set colors to draw control with -- see MCSC_ bits below
+
+function MonthCal_GetMinReqRect(hwndMC:HWND; lpr :LPRect):Bool;inline;
+function MonthCal_GetMinReqRect(hwndMC:HWND; var lpr :TRect):Bool;inline;
+
+
+CONST
+ MCM_SETCOLOR = (MCM_FIRST + 10);
+
+// Macro 262
+// #define MonthCal_SetColor(hmc, iColor, clr) SNDMSG(hmc, MCM_SETCOLOR, iColor, clr)
+
+function MonthCal_SetColor(hwndMC:HWND; ic:longint;clr:COLORREF):DWORD;inline;
+
+
+CONST
+ MCM_GETCOLOR = (MCM_FIRST + 11);
+
+// Macro 263
+// #define MonthCal_GetColor(hmc, iColor) SNDMSG(hmc, MCM_GETCOLOR, iColor, 0)
+
+function MonthCal_GetColor(hwndMC:HWND; ic:longint):Bool;
+
+
+CONST
+ MCSC_BACKGROUND = 0; // the background color (between months)
+ MCSC_TEXT = 1; // the dates
+ MCSC_TITLEBK = 2; // background of the title
+ MCSC_TITLETEXT = 3;
+ MCSC_MONTHBK = 4; // background within the month cal
+ MCSC_TRAILINGTEXT = 5; // the text color of header & trailing days
+
+// set what day is "today" send NULL to revert back to real date
+ MCM_SETTODAY = (MCM_FIRST + 12);
+
+// Macro 264
+// #define MonthCal_SetToday(hmc, pst) SNDMSG(hmc, MCM_SETTODAY, 0, (LPARAM)(pst))
+// get what day is "today"
+// returns BOOL for success/failure
+
+function MonthCal_SetToday(hwndMC:HWND; lps:LPSYSTEMTIME):Bool;
+
+
+CONST
+ MCM_GETTODAY = (MCM_FIRST + 13);
+
+// Macro 265
+// #define MonthCal_GetToday(hmc, pst) (BOOL)SNDMSG(hmc, MCM_GETTODAY, 0, (LPARAM)(pst))
+// determine what pinfo->pt is over
+
+function MonthCal_GetToday(hwndMC:HWND; lps:LPSYSTEMTIME):Bool;
+
+
+CONST
+ MCM_HITTEST = (MCM_FIRST + 14);
+
+TYPE
+
+ DummyStruct16 = Record
+ cbSize : UINT;
+ pt : POINT;
+ uHit : UINT; // out param
+ st : SYSTEMTIME;
+ 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))
+function DateTime_SetSystemTime(hdp: HWND; gd: DWORD; const pst: TSystemTime): BOOL;inline;
+
+// DWORD DateTime_GetRange(HWND hdp, LPSYSTEMTIME rgst)
+// modifies rgst[0] to be the minimum ALLOWABLE systemtime (or 0 if no minimum)
+// modifies rgst[1] to be the maximum ALLOWABLE systemtime (or 0 if no maximum)
+// returns GDTR_MIN|GDTR_MAX if there is a minimum|maximum limit
+
+CONST
+ DTM_GETRANGE = (DTM_FIRST + 3);
+// Macro 278
+
+// #define DateTime_GetRange(hdp, rgst) (DWORD)SNDMSG(hdp, DTM_GETRANGE, 0, (LPARAM)(rgst))
+
+// BOOL DateTime_SetRange(HWND hdp, DWORD gdtr, LPSYSTEMTIME rgst)
+// if GDTR_MIN, sets the minimum ALLOWABLE systemtime to rgst[0], otherwise removes minimum
+// if GDTR_MAX, sets the maximum ALLOWABLE systemtime to rgst[1], otherwise removes maximum
+// returns TRUE on success, FALSE on error (such as invalid parameters)
+
+CONST
+ DTM_SETRANGE = (DTM_FIRST + 4);
+// Macro 279
+
+// #define DateTime_SetRange(hdp, gd, rgst) (BOOL)SNDMSG(hdp, DTM_SETRANGE, (WPARAM)(gd), (LPARAM)(rgst))
+function DateTime_SetRange(hdp: HWND; gdtr: DWORD; rgst: PSystemTime): BOOL;inline;
+
+// BOOL DateTime_SetFormat(HWND hdp, LPCTSTR sz)
+// sets the display formatting string to sz (see GetDateFormat and GetTimeFormat for valid formatting chars)
+// NOTE: 'X' is a valid formatting character which indicates that the application
+// will determine how to display information. Such apps must support DTN_WMKEYDOWN,
+// DTN_FORMAT, and DTN_FORMATQUERY.
+
+CONST
+ DTM_SETFORMATA = (DTM_FIRST + 5);
+ DTM_SETFORMATW = (DTM_FIRST + 50);
+
+{$IFDEF UNICODE}
+
+TYPE
+ DTM_SETFORMAT = DTM_SETFORMATW;
+{$ELSE}
+ DTM_SETFORMAT = DTM_SETFORMATA;
+{$ENDIF}
+
+// Macro 280
+
+// #define DateTime_SetFormat(hdp, sz) (BOOL)SNDMSG(hdp, DTM_SETFORMAT, 0, (LPARAM)(sz))
+
+
+
+CONST
+ DTM_SETMCCOLOR = (DTM_FIRST + 6);
+// Macro 281
+
+// #define DateTime_SetMonthCalColor(hdp, iColor, clr) SNDMSG(hdp, DTM_SETMCCOLOR, iColor, clr)
+function DateTime_SetMonthCalColor(hdp: HWND; iColor: DWORD; clr: TColorRef): TColorRef;inline;
+
+CONST
+ DTM_GETMCCOLOR = (DTM_FIRST + 7);
+// Macro 282
+
+// #define DateTime_GetMonthCalColor(hdp, iColor) SNDMSG(hdp, DTM_GETMCCOLOR, iColor, 0)
+
+// HWND DateTime_GetMonthCal(HWND hdp)
+// returns the HWND of the MonthCal popup window. Only valid
+// between DTN_DROPDOWN and DTN_CLOSEUP notifications.
+
+CONST
+ DTM_GETMONTHCAL = (DTM_FIRST + 8);
+// Macro 283
+
+// #define DateTime_GetMonthCal(hdp) (HWND)SNDMSG(hdp, DTM_GETMONTHCAL, 0, 0)
+function DateTime_GetMonthCal(hdp: HWND): HWND;inline;
+
+{$ifdef ie4plus}
+
+
+CONST
+ DTM_SETMCFONT = (DTM_FIRST + 9);
+// Macro 284
+
+// #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}
+CONST
+ DTN_USERSTRING = DTN_USERSTRINGW;
+TYPE
+ NMDATETIMESTRING = NMDATETIMESTRINGW;
+ LPNMDATETIMESTRING = LPNMDATETIMESTRINGW;
+{$ELSE}
+CONST
+ DTN_USERSTRING = DTN_USERSTRINGA;
+TYPE
+ NMDATETIMESTRING = NMDATETIMESTRINGA;
+ LPNMDATETIMESTRING = LPNMDATETIMESTRINGA;
+{$ENDIF}
+ TNMDateTimeString = NMDATETIMESTRING;
+ PNMDateTimeString = LPNMDATETIMESTRING;
+
+
+
+CONST
+ DTN_WMKEYDOWNA = (DTN_FIRST + 3); // modify keydown on app format field (X)
+ DTN_WMKEYDOWNW = (DTN_FIRST + 16);
+TYPE
+
+ tagNMDATETIMEWMKEYDOWNA = Record
+ nmhdr : NMHDR;
+ nVirtKey : cint; // virtual key code of WM_KEYDOWN which MODIFIES an X field
+ pszFormat : LPCSTR; // format substring
+ st : SYSTEMTIME; // current systemtime, app should modify based on key
+ END;
+ NMDATETIMEWMKEYDOWNA = tagNMDATETIMEWMKEYDOWNA;
+ LPNMDATETIMEWMKEYDOWNA = ^tagNMDATETIMEWMKEYDOWNA;
+ TNMDATETIMEWMKEYDOWNA = tagNMDATETIMEWMKEYDOWNA;
+ PNMDATETIMEWMKEYDOWNA = ^tagNMDATETIMEWMKEYDOWNA;
+
+
+ tagNMDATETIMEWMKEYDOWNW = Record
+ nmhdr : NMHDR;
+ nVirtKey : cint; // virtual key code of WM_KEYDOWN which MODIFIES an X field
+ pszFormat : LPCWSTR; // format substring
+ st : SYSTEMTIME; // current systemtime, app should modify based on key
+ END;
+ NMDATETIMEWMKEYDOWNW = tagNMDATETIMEWMKEYDOWNW;
+ LPNMDATETIMEWMKEYDOWNW = ^tagNMDATETIMEWMKEYDOWNW;
+ TNMDATETIMEWMKEYDOWNW = tagNMDATETIMEWMKEYDOWNW;
+ PNMDATETIMEWMKEYDOWNW = ^tagNMDATETIMEWMKEYDOWNW;
+
+
+{$IFDEF UNICODE}
+CONST
+ DTN_WMKEYDOWN = DTN_WMKEYDOWNW;
+TYPE
+ NMDATETIMEWMKEYDOWN = NMDATETIMEWMKEYDOWNW;
+ LPNMDATETIMEWMKEYDOWN= LPNMDATETIMEWMKEYDOWNW;
+{$ELSE}
+CONST
+ DTN_WMKEYDOWN = DTN_WMKEYDOWNA;
+TYPE
+ NMDATETIMEWMKEYDOWN = NMDATETIMEWMKEYDOWNA;
+ LPNMDATETIMEWMKEYDOWN= LPNMDATETIMEWMKEYDOWNA;
+{$ENDIF}
+
+
+
+CONST
+ DTN_FORMATA = (DTN_FIRST + 4); // query display for app format field (X)
+ DTN_FORMATW = (DTN_FIRST + 17);
+TYPE
+
+ tagNMDATETIMEFORMATA = Record
+ nmhdr : NMHDR;
+ pszFormat : LPCSTR; // format substring
+ st : SYSTEMTIME; // current systemtime
+ pszDisplay : LPCSTR; // string to display
+ szDisplay : Array [0..63] OF CHAR; // buffer pszDisplay originally points at
+ END;
+ NMDATETIMEFORMATA = tagNMDATETIMEFORMATA;
+ LPNMDATETIMEFORMATA = ^tagNMDATETIMEFORMATA;
+ TNMDATETIMEFORMATA = tagNMDATETIMEFORMATA;
+ PNMDATETIMEFORMATA = ^tagNMDATETIMEFORMATA;
+
+
+ tagNMDATETIMEFORMATW = Record
+ nmhdr : NMHDR;
+ pszFormat : LPCWSTR; // format substring
+ st : SYSTEMTIME; // current systemtime
+ pszDisplay : LPCWSTR; // string to display
+ szDisplay : Array [0..63] OF WCHAR; // buffer pszDisplay originally points at
+ END;
+ NMDATETIMEFORMATW = tagNMDATETIMEFORMATW;
+ LPNMDATETIMEFORMATW = ^tagNMDATETIMEFORMATW;
+ TNMDATETIMEFORMATW = tagNMDATETIMEFORMATW;
+ PNMDATETIMEFORMATW = ^tagNMDATETIMEFORMATW;
+
+
+{$IFDEF UNICODE}
+CONST
+ DTN_FORMAT = DTN_FORMATW;
+TYPE
+ NMDATETIMEFORMAT = NMDATETIMEFORMATW;
+ LPNMDATETIMEFORMAT = LPNMDATETIMEFORMATW;
+{$ELSE}
+CONST
+ DTN_FORMAT = DTN_FORMATA;
+TYPE
+ NMDATETIMEFORMAT = NMDATETIMEFORMATA;
+ LPNMDATETIMEFORMAT = LPNMDATETIMEFORMATA;
+{$ENDIF}
+
+
+
+CONST
+ DTN_FORMATQUERYA = (DTN_FIRST + 5); // query formatting info for app format field (X)
+ DTN_FORMATQUERYW = (DTN_FIRST + 18);
+TYPE
+
+ tagNMDATETIMEFORMATQUERYA = Record
+ nmhdr : NMHDR;
+ pszFormat : LPCSTR; // format substring
+ szMax : SIZE; // max bounding rectangle app will use for this format string
+ END;
+ NMDATETIMEFORMATQUERYA = tagNMDATETIMEFORMATQUERYA;
+ LPNMDATETIMEFORMATQUERYA = ^tagNMDATETIMEFORMATQUERYA;
+ TNMDATETIMEFORMATQUERYA = tagNMDATETIMEFORMATQUERYA;
+ PNMDATETIMEFORMATQUERYA = ^tagNMDATETIMEFORMATQUERYA;
+
+
+ tagNMDATETIMEFORMATQUERYW = Record
+ nmhdr : NMHDR;
+ pszFormat : LPCWSTR; // format substring
+ szMax : SIZE; // max bounding rectangle app will use for this format string
+ END;
+ NMDATETIMEFORMATQUERYW = tagNMDATETIMEFORMATQUERYW;
+ LPNMDATETIMEFORMATQUERYW = ^tagNMDATETIMEFORMATQUERYW;
+ TNMDATETIMEFORMATQUERYW = tagNMDATETIMEFORMATQUERYW;
+ PNMDATETIMEFORMATQUERYW = ^tagNMDATETIMEFORMATQUERYW;
+
+
+{$IFDEF UNICODE}
+CONST
+ DTN_FORMATQUERY = DTN_FORMATQUERYW;
+TYPE
+ NMDATETIMEFORMATQUERY= NMDATETIMEFORMATQUERYW;
+ LPNMDATETIMEFORMATQUERY= LPNMDATETIMEFORMATQUERYW;
+{$ELSE}
+CONST
+ DTN_FORMATQUERY = DTN_FORMATQUERYA;
+TYPE
+ NMDATETIMEFORMATQUERY= NMDATETIMEFORMATQUERYA;
+ LPNMDATETIMEFORMATQUERY= LPNMDATETIMEFORMATQUERYA;
+{$ENDIF}
+
+
+
+CONST
+ DTN_DROPDOWN = (DTN_FIRST + 6); // MonthCal has dropped down
+ DTN_CLOSEUP = (DTN_FIRST + 7); // MonthCal is popping up
+
+
+ GDTR_MIN = $0001;
+ GDTR_MAX = $0002;
+
+ GDT_ERROR = -1;
+ GDT_VALID = 0;
+ GDT_NONE = 1;
+
+
+{$ENDIF} // _WIN32
+{$ENDIF} // NODATETIMEPICK
+
+
+{$ifdef ie4plus}
+
+{$IFNDEF NOIPADDRESS}
+
+///////////////////////////////////////////////
+/// IP Address edit control
+
+// Messages sent to IPAddress controls
+
+ IPM_CLEARADDRESS = (WM_USER+100); // no parameters
+ IPM_SETADDRESS = (WM_USER+101); // lparam = TCP/IP address
+ IPM_GETADDRESS = (WM_USER+102); // lresult = # of non black fields. lparam = LPDWORD for TCP/IP address
+ IPM_SETRANGE = (WM_USER+103); // wparam = field, lparam = range
+ IPM_SETFOCUS = (WM_USER+104); // wparam = field
+ IPM_ISBLANK = (WM_USER+105); // no parameters
+
+ WC_IPADDRESSW = {L}'SysIPAddress32';
+ WC_IPADDRESSA = 'SysIPAddress32';
+
+{$IFDEF UNICODE}
+
+TYPE
+ WC_IPADDRESS = WC_IPADDRESSW;
+{$ELSE}
+ WC_IPADDRESS = WC_IPADDRESSA;
+{$ENDIF}
+
+
+CONST
+ IPN_FIELDCHANGED = (IPN_FIRST - 0);
+TYPE
+
+ tagNMIPADDRESS = Record
+ hdr : NMHDR;
+ iField : cint;
+ iValue : cint;
+ END;
+ NMIPADDRESS = tagNMIPADDRESS;
+ LPNMIPADDRESS = ^tagNMIPADDRESS;
+ TNMIPADDRESS = tagNMIPADDRESS;
+ PNMIPADDRESS = ^tagNMIPADDRESS;
+
+
+// The following is a useful macro for passing the range values in the
+// IPM_SETRANGE message.
+
+// Macro 286
+
+// #define MAKEIPRANGE(low, high) ((LPARAM)(WORD)(((BYTE)(high) << 8) + (BYTE)(low)))
+
+// And this is a useful macro for making the IP Address to be passed
+// as a LPARAM.
+
+// Macro 287
+
+// #define MAKEIPADDRESS(b1,b2,b3,b4) ((LPARAM)(((DWORD)(b1)<<24)+((DWORD)(b2)<<16)+((DWORD)(b3)<<8)+((DWORD)(b4))))
+
+// Get individual number
+// Macro 288
+
+// #define FIRST_IPADDRESS(x) ((x>>24) & 0xff)
+// Macro 289
+
+// #define SECOND_IPADDRESS(x) ((x>>16) & 0xff)
+// Macro 290
+
+// #define THIRD_IPADDRESS(x) ((x>>8) & 0xff)
+// Macro 291
+
+// #define FOURTH_IPADDRESS(x) (x & 0xff)
+
+
+{$ENDIF} // NOIPADDRESS
+
+
+//---------------------------------------------------------------------------------------
+//---------------------------------------------------------------------------------------
+/// ====================== Pager Control =============================
+//---------------------------------------------------------------------------------------
+//---------------------------------------------------------------------------------------
+
+{$IFNDEF NOPAGESCROLLER}
+
+//Pager Class Name
+
+CONST
+ WC_PAGESCROLLERW = {L}'SysPager';
+ WC_PAGESCROLLERA = 'SysPager';
+
+{$IFDEF UNICODE}
+
+TYPE
+ WC_PAGESCROLLER = WC_PAGESCROLLERW;
+{$ELSE}
+ WC_PAGESCROLLER = WC_PAGESCROLLERA;
+{$ENDIF}
+
+
+//---------------------------------------------------------------------------------------
+// Pager Control Styles
+//---------------------------------------------------------------------------------------
+// begin_r_commctrl
+
+
+CONST
+ PGS_VERT = $00000000;
+ PGS_HORZ = $00000001;
+ PGS_AUTOSCROLL = $00000002;
+ PGS_DRAGNDROP = $00000004;
+
+// end_r_commctrl
+
+
+//---------------------------------------------------------------------------------------
+// Pager Button State
+//---------------------------------------------------------------------------------------
+//The scroll can be in one of the following control State
+ PGF_INVISIBLE = 0; // Scroll button is not visible
+ PGF_NORMAL = 1; // Scroll button is in normal state
+ PGF_GRAYED = 2; // Scroll button is in grayed state
+ PGF_DEPRESSED = 4; // Scroll button is in depressed state
+ PGF_HOT = 8; // Scroll button is in hot state
+
+
+// The following identifiers specifies the button control
+ PGB_TOPORLEFT = 0;
+ PGB_BOTTOMORRIGHT = 1;
+
+//---------------------------------------------------------------------------------------
+// Pager Control Messages
+//---------------------------------------------------------------------------------------
+ PGM_SETCHILD = (PGM_FIRST + 1); // lParam == hwnd
+// Macro 292
+
+
+Procedure Pager_SetChild( hwnd : hwnd; hwndChild : LPARAM);
+
+
+
+CONST
+ PGM_RECALCSIZE = (PGM_FIRST + 2);
+// Macro 293
+
+
+Procedure Pager_RecalcSize( hwnd : hwnd);
+
+
+
+CONST
+ PGM_FORWARDMOUSE = (PGM_FIRST + 3);
+// Macro 294
+
+
+Procedure Pager_ForwardMouse( hwnd : hwnd; bForward : WPARAM);
+
+
+
+CONST
+ PGM_SETBKCOLOR = (PGM_FIRST + 4);
+// Macro 295
+
+
+Function Pager_SetBkColor( hwnd : hwnd; clr : LPARAM):COLORREF;
+
+
+
+CONST
+ PGM_GETBKCOLOR = (PGM_FIRST + 5);
+// Macro 296
+
+
+Function Pager_GetBkColor( hwnd : hwnd):COLORREF;
+
+
+
+CONST
+ PGM_SETBORDER = (PGM_FIRST + 6);
+// Macro 297
+
+
+Function Pager_SetBorder( hwnd : hwnd; iBorder : LPARAM):cint;
+
+
+
+CONST
+ PGM_GETBORDER = (PGM_FIRST + 7);
+// Macro 298
+
+
+Function Pager_GetBorder( hwnd : hwnd):cint;
+
+
+
+CONST
+ PGM_SETPOS = (PGM_FIRST + 8);
+// Macro 299
+
+
+Function Pager_SetPos( hwnd : hwnd; iPos : LPARAM):cint;
+
+
+
+CONST
+ PGM_GETPOS = (PGM_FIRST + 9);
+// Macro 300
+
+
+Function Pager_GetPos( hwnd : hwnd):cint;
+
+
+
+CONST
+ PGM_SETBUTTONSIZE = (PGM_FIRST + 10);
+// Macro 301
+
+
+Function Pager_SetButtonSize( hwnd : hwnd; iSize : LPARAM):cint;
+
+
+
+CONST
+ PGM_GETBUTTONSIZE = (PGM_FIRST + 11);
+// Macro 302
+
+
+Function Pager_GetButtonSize( hwnd : hwnd):cint;
+
+
+
+CONST
+ PGM_GETBUTTONSTATE = (PGM_FIRST + 12);
+// Macro 303
+
+
+Function Pager_GetButtonState( hwnd : hwnd; iButton : LPARAM):DWORD;
+
+
+
+CONST
+ PGM_GETDROPTARGET = CCM_GETDROPTARGET;
+// Macro 304
+
+
+Procedure Pager_GetDropTarget( hwnd : hwnd; ppdt : LPARAM);
+
+//---------------------------------------------------------------------------------------
+//Pager Control Notification Messages
+//---------------------------------------------------------------------------------------
+
+
+// PGN_SCROLL Notification Message
+
+
+CONST
+ PGN_SCROLL = (PGN_FIRST-1);
+
+ PGF_SCROLLUP = 1;
+ PGF_SCROLLDOWN = 2;
+ PGF_SCROLLLEFT = 4;
+ PGF_SCROLLRIGHT = 8;
+
+
+//Keys down
+ PGK_SHIFT = 1;
+ PGK_CONTROL = 2;
+ PGK_MENU = 4;
+
+
+{$IFDEF _WIN32}
+// #include <pshpack1.h>
+{$ENDIF}
+
+// This structure is sent along with PGN_SCROLL notifications
+TYPE
+
+ DummyStruct17 = Record
+ hdr : NMHDR;
+ fwKeys : WORD; // Specifies which keys are down when this notification is send
+ rcParent : RECT; // Contains Parent Window Rect
+ iDir : cint; // Scrolling Direction
+ iXpos : cint; // Horizontal scroll position
+ iYpos : cint; // Vertical scroll position
+ iScroll : cint; // [in/out] Amount to scroll
+ END;
+ NMPGSCROLL = DummyStruct17;
+ LPNMPGSCROLL = ^DummyStruct17;
+ TNMPGScroll = NMPGSCROLL;
+ PNMPGScroll = LPNMPGSCROLL;
+
+
+{$IFDEF _WIN32}
+// #include <poppack.h>
+{$ENDIF}
+
+// PGN_CALCSIZE Notification Message
+
+
+CONST
+ PGN_CALCSIZE = (PGN_FIRST-2);
+
+ PGF_CALCWIDTH = 1;
+ PGF_CALCHEIGHT = 2;
+
+TYPE
+
+ DummyStruct18 = Record
+ hdr : NMHDR;
+ dwFlag : DWORD;
+ iWidth : cint;
+ iHeight : cint;
+ END;
+ NMPGCALCSIZE = DummyStruct18;
+ LPNMPGCALCSIZE = ^DummyStruct18;
+ TNMPGCalcSize = DummyStruct18;
+ PNMPGCalcSize = LPNMPGCALCSIZE;
+
+
+
+// PGN_HOTITEMCHANGE Notification Message
+
+
+CONST
+ PGN_HOTITEMCHANGE = (PGN_FIRST-3);
+
+{
+The PGN_HOTITEMCHANGE notification uses these notification
+flags defined in TOOLBAR:
+
+ HICF_ENTERING = $00000010; // idOld is invalid
+ HICF_LEAVING = $00000020; // idNew is invalid
+}
+
+// Structure for PGN_HOTITEMCHANGE notification
+//
+TYPE
+
+ tagNMPGHOTITEM = Record
+ hdr : NMHDR;
+ idOld : cint;
+ idNew : cint;
+ dwFlags : DWORD; // HICF_*
+ END;
+ NMPGHOTITEM = tagNMPGHOTITEM;
+ LPNMPGHOTITEM = ^tagNMPGHOTITEM;
+ TNMPGHOTITEM = tagNMPGHOTITEM;
+ PNMPGHOTITEM = ^tagNMPGHOTITEM;
+
+
+{$ENDIF} // NOPAGESCROLLER
+
+////====================== End Pager Control ==========================================
+
+//
+// === Native Font Control ===
+//
+{$IFNDEF NONATIVEFONTCTL}
+//NativeFont Class Name
+
+CONST
+ WC_NATIVEFONTCTLW = {L}'NativeFontCtl';
+ WC_NATIVEFONTCTLA = 'NativeFontCtl';
+
+{$IFDEF UNICODE}
+
+TYPE
+ WC_NATIVEFONTCTL = WC_NATIVEFONTCTLW;
+{$ELSE}
+ WC_NATIVEFONTCTL = WC_NATIVEFONTCTLA;
+{$ENDIF}
+
+// begin_r_commctrl
+
+// style definition
+
+CONST
+ NFS_EDIT = $0001;
+ NFS_STATIC = $0002;
+ NFS_LISTCOMBO = $0004;
+ NFS_BUTTON = $0008;
+ NFS_ALL = $0010;
+ NFS_USEFONTASSOC = $0020;
+
+// end_r_commctrl
+
+{$ENDIF} // NONATIVEFONTCTL
+// === End Native Font Control ===
+
+/// ====================== Button Control =============================
+
+{$IFNDEF NOBUTTON}
+
+{$IFDEF _WIN32}
+
+// Button Class Name
+ WC_BUTTONA = 'Button';
+ WC_BUTTONW = {L}'Button';
+
+CONST
+{$IFDEF UNICODE}
+ WC_BUTTON = WC_BUTTONW;
+{$ELSE}
+ WC_BUTTON = WC_BUTTONA;
+{$ENDIF}
+
+{$ELSE}
+
+ WC_BUTTON = 'Button';
+{$ENDIF}
+
+{$ifdef win32xp}
+ BUTTON_IMAGELIST_ALIGN_LEFT = 0;
+ BUTTON_IMAGELIST_ALIGN_RIGHT = 1;
+ BUTTON_IMAGELIST_ALIGN_TOP = 2;
+ BUTTON_IMAGELIST_ALIGN_BOTTOM = 3;
+ BUTTON_IMAGELIST_ALIGN_CENTER = 4; // Doesn't draw text
+
+TYPE
+
+ DummyStruct19 = Record
+ himl : HIMAGELIST; // Index: Normal, hot pushed, disabled. If count is less than 4, we use index 1
+ margin : RECT; // Margin around icon.
+ uAlign : UINT;
+ END;
+ BUTTON_IMAGELIST = DummyStruct19;
+ PBUTTON_IMAGELIST = ^DummyStruct19;
+ TDummyStruct19 = DummyStruct19;
+ PDummyStruct19 = ^DummyStruct19;
+
+
+
+CONST
+ BCM_GETIDEALSIZE = (BCM_FIRST + $0001);
+// Macro 305
+
+
+Function Button_GetIdealSize( hwnd : hwnd; psize : LPARAM):BOOL;
+
+
+
+CONST
+ BCM_SETIMAGELIST = (BCM_FIRST + $0002);
+// Macro 306
+
+
+Function Button_SetImageList( hwnd : hwnd; pbuttonImagelist : LPARAM):BOOL;
+
+
+
+CONST
+ BCM_GETIMAGELIST = (BCM_FIRST + $0003);
+// Macro 307
+
+
+Function Button_GetImageList( hwnd : hwnd; pbuttonImagelist : LPARAM):BOOL;
+
+
+
+CONST
+ BCM_SETTEXTMARGIN = (BCM_FIRST + $0004);
+// Macro 308
+
+
+Function Button_SetTextMargin( hwnd : hwnd; pmargin : LPARAM):BOOL;
+
+
+CONST
+ BCM_GETTEXTMARGIN = (BCM_FIRST + $0005);
+// Macro 309
+
+
+Function Button_GetTextMargin( hwnd : hwnd; pmargin : LPARAM):BOOL;
+
+
+TYPE
+
+ tagNMBCHOTITEM = Record
+ hdr : NMHDR;
+ dwFlags : DWORD; // HICF_*
+ END;
+ NMBCHOTITEM = tagNMBCHOTITEM;
+ LPNMBCHOTITEM = ^tagNMBCHOTITEM;
+ TNMBCHOTITEM = tagNMBCHOTITEM;
+ PNMBCHOTITEM = ^tagNMBCHOTITEM;
+
+
+
+CONST
+ BCN_HOTITEMCHANGE = (BCN_FIRST + $0001);
+
+ BST_HOT = $0200;
+
+{$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 + length('://'));
+
+ 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); stdcall; external commctrldll name 'InitMUILanguage';
+
+
+function GetMUILanguage:LANGID; stdcall; external commctrldll name 'GetMUILanguage';
+{$ENDIF} // NOMUI
+
+{$ENDIF} // _WIN32_IE >= 0x0400
+
+{$IFDEF _WIN32}
+//====== TrackMouseEvent =====================================================
+
+{$IFNDEF NOTRACKMOUSEEVENT}
+
+//
+// If the messages for TrackMouseEvent have not been defined then define them
+// now.
+//
+{$IFNDEF WM_MOUSEHOVER}
+
+CONST
+ WM_MOUSEHOVER = $02A1;
+ WM_MOUSELEAVE = $02A3;
+{$ENDIF}
+
+//
+// If the TRACKMOUSEEVENT structure and associated flags havent been declared
+// then declare them now.
+//
+{$IFNDEF TME_HOVER}
+
+ TME_HOVER = $00000001;
+ TME_LEAVE = $00000002;
+{$ifdef win32xp}
+ TME_NONCLIENT = $00000010;
+{$ENDIF} { WINVER >= 0x0500 }
+ TME_QUERY = $40000000;
+ TME_CANCEL = $80000000;
+
+
+
+ HOVER_DEFAULT = $FFFFFFFF;
+
+TYPE
+
+ tagTRACKMOUSEEVENT = Record
+ cbSize : DWORD;
+ dwFlags : DWORD;
+ hwndTrack : HWND;
+ dwHoverTime : DWORD;
+ END;
+ TRACKMOUSEEVENT = tagTRACKMOUSEEVENT;
+ LPTRACKMOUSEEVENT = ^tagTRACKMOUSEEVENT;
+ TTRACKMOUSEEVENT = tagTRACKMOUSEEVENT;
+ PTRACKMOUSEEVENT = ^tagTRACKMOUSEEVENT;
+
+
+{$ENDIF} // !TME_HOVER
+
+
+
+//
+// Declare _TrackMouseEvent. This API tries to use the window manager's
+// implementation of TrackMouseEvent if it is present, otherwise it emulates.
+//
+function _TrackMouseEvent(lpEventTrack:LPTRACKMOUSEEVENT):BOOL; stdcall; external commctrldll name '_TrackMouseEvent';
+
+{$ENDIF} // !NOTRACKMOUSEEVENT
+
+{$ifdef ie4plus}
+
+//====== Flat Scrollbar APIs=========================================
+{$IFNDEF NOFLATSBAPIS}
+
+
+CONST
+ WSB_PROP_CYVSCROLL = LONG($00000001);
+ WSB_PROP_CXHSCROLL = LONG($00000002);
+ WSB_PROP_CYHSCROLL = LONG($00000004);
+ WSB_PROP_CXVSCROLL = LONG($00000008);
+ WSB_PROP_CXHTHUMB = LONG($00000010);
+ WSB_PROP_CYVTHUMB = LONG($00000020);
+ WSB_PROP_VBKGCOLOR = LONG($00000040);
+ WSB_PROP_HBKGCOLOR = LONG($00000080);
+ WSB_PROP_VSTYLE = LONG($00000100);
+ WSB_PROP_HSTYLE = LONG($00000200);
+ WSB_PROP_WINSTYLE = LONG($00000400);
+ WSB_PROP_PALETTE = LONG($00000800);
+ WSB_PROP_MASK = LONG($00000FFF);
+
+ FSB_FLAT_MODE = 2;
+ FSB_ENCARTA_MODE = 1;
+ FSB_REGULAR_MODE = 0;
+
+function FlatSB_EnableScrollBar(hwnd:HWND;code : cint;p3 : UINT):BOOL; stdcall; external commctrldll name 'FlatSB_EnableScrollBar';
+function FlatSB_ShowScrollBar(hwnd:HWND;code : cint;p3 : BOOL):BOOL; stdcall; external commctrldll name 'FlatSB_ShowScrollBar';
+
+function FlatSB_GetScrollRange(hwnd:HWND;code : cint;p3 : LPINT;p4 : LPINT):BOOL; stdcall; external commctrldll name 'FlatSB_GetScrollRange';
+function FlatSB_GetScrollRange(hwnd:HWND;code : cint;var p3,p4 : cint):BOOL; stdcall; external commctrldll name 'FlatSB_GetScrollRange';
+function FlatSB_GetScrollInfo(hwnd:HWND;code : cint;ScrollInfo : LPSCROLLINFO):BOOL; stdcall; external commctrldll name 'FlatSB_GetScrollInfo';
+function FlatSB_GetScrollInfo(hwnd:HWND;code : cint;var ScrollInfo : TSCROLLINFO):BOOL; stdcall; external commctrldll name 'FlatSB_GetScrollInfo';
+
+function FlatSB_GetScrollPos(hwnd:HWND;code : cint):cint; stdcall; external commctrldll name 'FlatSB_GetScrollPos';
+
+
+function FlatSB_GetScrollProp(hwnd:HWND):BOOL; stdcall; external commctrldll name 'FlatSB_GetScrollProp';
+{$IFDEF _WIN64}
+function FlatSB_GetScrollPropPtr(hwnd:HWND;propIndex : cint;p3 : LPINT):BOOL; stdcall; external commctrldll name 'FlatSB_GetScrollPropPtr';
+{$ELSE}
+function FlatSB_GetScrollPropPtr(hwnd:HWND;code : cint):BOOL; stdcall; external commctrldll name 'FlatSB_GetScrollProp';
+{$ENDIF}
+
+
+function FlatSB_SetScrollPos(hWnd:HWND;nBar,nPos:cint;bRedraw:BOOL):cint; stdcall; external commctrldll name 'FlatSB_SetScrollPos';
+
+function FlatSB_SetScrollInfo(hWnd:HWND;BarFlag:cint;const ScrollInfo:TScrollInfo;Redraw:BOOL):cint; stdcall; external commctrldll name 'FlatSB_SetScrollInfo';
+
+
+function FlatSB_SetScrollRange(hWnd: HWND; nBar,nMinPos,nMaxPos: cint; bRedraw: BOOL):cint; stdcall; external commctrldll name 'FlatSB_SetScrollRange';
+function FlatSB_SetScrollProp(p1: HWND; index : UINT; newValue: INT_PTR; p4: BOOL):BOOL; stdcall; external commctrldll name 'FlatSB_SetScrollProp';
+
+function InitializeFlatSB(hWnd:HWND):BOOL; stdcall; external commctrldll name 'InitializeFlatSB';
+function UninitializeFlatSB(hWnd:HWND):HRESULT; stdcall; external commctrldll name 'UninitializeFlatSB';
+
+{$ENDIF} // NOFLATSBAPIS
+
+{$ENDIF} // _WIN32_IE >= 0x0400
+
+{$ENDIF} { _WIN32 }
+
+{$ENDIF} // _WIN32_IE >= 0x0300
+
+{$ifdef win32xp}
+//
+// subclassing stuff
+//
+TYPE
+ subclassproc=function (hwnd:HWND;uMsg:cUINT; wParam:WPARAM;lparam:LPARAM;uISubClass : UINT_PTR;dwRefData:DWORD_PTR):LRESULT; stdcall;
+
+{
+ (CALLBACK *SUBCLASSPROC)(HWND hWnd, UINT uMsg, WPARAM wParam, = LRESULT
+ LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData);
+
+typedef LRESULT (CALLBACK *SUBCLASSPROC)(HWND hWnd, UINT uMsg, WPARAM wParam,
+ LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData);
+
+ hwnd:HWND;uMsg:cUINT; wParam:WPARAM;lparam:LPARAM;uISubClass : CUINT_PTR;dwRefData:DWORD_PTR):LRESULT; stdcall;
+}
+
+function SetWindowSubclass(hWnd:HWND;pfnSubclass:SUBCLASSPROC;uIdSubclass:UINT_PTR;dwRefData:DWORD_PTR):BOOL; stdcall; external commctrldll name 'SetWindowSubclass';
+function GetWindowSubclass(hWnd:HWND;pfnSubclass:SUBCLASSPROC;uIdSubclass:UINT_PTR;pdwRefData:PDWORD_PTR):BOOL; stdcall; external commctrldll name 'GetWindowSubclass';
+function RemoveWindowSubclass(hWnd:HWND;pfnSubclass:SUBCLASSPROC;uIdSubclass:UINT_PTR):BOOL; stdcall; external commctrldll name 'RemoveWindowSubclass';
+
+function DefSubclassProc(hWnd:HWND;uMsg:UINT;wParam:WPARAM;lParam:LPARAM):LRESULT; stdcall; external commctrldll name 'DefSubclassProc';
+{$ENDIF}
+
+
+{$ifdef win32xp}
+
+function DrawShadowText(hdc:HDC;pszText:LPCWSTR;cch:UINT;prc:PRECT;dwFlags:DWORD;crText:COLORREF;crShadow:COLORREF;ixOffset:cint;iyOffset:cint):cint; stdcall; external commctrldll name 'DrawShadowText';
+{$ENDIF}
+
+
+IMPLEMENTATION
+
+// Macro 8
+
+//#define HANDLE_WM_NOTIFY(hwnd, wParam, lParam, fn) \
+// (fn)((hwnd), (int)(wParam), (NMHDR *)(lParam))
+
+Procedure HANDLE_WM_NOTIFY( hwnd : hwnd; wParam : cint;var _lParam : NMHDR ;fn:Pointer);
+
+TYPE FnType=procedure ( hwnd : hwnd; wParam : cint;tst:LPARAM); stdcall;
+
+Begin
+ fnType(fn)(hwnd, wParam, LPARAM(@_lParam));
+end;
+
+// Macro 9
+
+//#define FORWARD_WM_NOTIFY(hwnd, idFrom, pnmhdr, fn) \
+// (LRESULT)(fn)((hwnd), WM_NOTIFY, (WPARAM)(int)(idFrom), (LPARAM)(NMHDR *)(pnmhdr))
+
+Function FORWARD_WM_NOTIFY( hwnd : hwnd; idFrom : cint;var pnmhdr : NMHDR ; fn : pointer ):LRESULT;
+
+TYPE FnType=Function( hwnd : hwnd; wParam : cint;wparam2:cint;lparam1:lparam):LResult; stdcall;
+
+Begin
+ Result:=LRESULT(fntype(fn)(hwnd, WM_NOTIFY, idFrom, LPARAM(@pnmhdr)));
+end;
+
+// Macro 10
+// #define CCSIZEOF_STRUCT(structname, member) (((int)((LPBYTE)(&((structname*)0)->member) - ((LPBYTE)((structname*)0)))) + sizeof(((structname*)0)->member))
+
+
+// Macro 11
+// #define ImageList_AddIcon(himl, hicon) ImageList_ReplaceIcon(himl, -1, hicon)
+
+Function ImageList_AddIcon(Himl:HIMAGELIST;hicon:HICON):cint;
+Begin
+ Result:=ImageList_ReplaceIcon(himl,-1,hicon);
+end;
+
+
+// Macro 12
+// #define INDEXTOOVERLAYMASK(i) ((i) << 8)
+
+// Macro 13
+// #define ImageList_RemoveAll(himl) ImageList_Remove(himl, -1)
+
+Procedure ImageList_RemoveAll(himl:HIMAGELIST);
+Begin
+ ImageList_Remove(himl, -1)
+End;
+
+// Macro 14
+// #define ImageList_ExtractIcon(hi, himl, i) ImageList_GetIcon(himl, i, 0)
+
+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;bmp:LPCTSTR;cx:cint;cGrow:cint;crMask:COLORREF);
+
+Begin
+ ImageList_LoadImage(hi, bmp, cx, cGrow, crMask, IMAGE_BITMAP, 0);
+End;
+
+// Macro 16
+// #define Header_GetItemCount(hwndHD) \
+// (int)SNDMSG((hwndHD), HDM_GETITEMCOUNT, 0, DWord(0))
+
+Function Header_GetItemCount( hwndHD : hwnd):cint;
+
+Begin
+ Result:=cint(SendMessage((hwndHD), HDM_GETITEMCOUNT, 0, LPARAM(0)))
+end;
+
+
+// Macro 17
+//#define Header_InsertItem(hwndHD, i, phdi) \
+// (int)SNDMSG((hwndHD), HDM_INSERTITEM, (WPARAM)(int)(i), (LPARAM)(const HD_ITEM *)(phdi))
+
+Function Header_InsertItem( hwndHD : hwnd; i : cint;const phdi : HD_ITEM ):cint;
+
+Begin
+ Result:=cint(SendMessage((hwndHD), HDM_INSERTITEM, (i), LPARAM(@phdi)));
+end;
+
+// Macro 18
+//#define Header_DeleteItem(hwndHD, i) \
+// (BOOL)SNDMSG((hwndHD), HDM_DELETEITEM, (WPARAM)(int)(i), LPARAM(0))
+
+Function Header_DeleteItem( hwndHD : hwnd; i : cint):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwndHD), HDM_DELETEITEM, (i), LPARAM(0)));
+end;
+
+
+// Macro 19
+// #define Header_GetItem(hwndHD, i, phdi) \
+// (BOOL)SNDMSG((hwndHD), HDM_GETITEM, (WPARAM)(int)(i), (LPARAM)(HD_ITEM *)(phdi))
+
+Function Header_GetItem( hwndHD : hwnd; i : cint;var phdi : HD_ITEM ):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwndHD), HDM_GETITEM, (i), LPARAM(@phdi)));
+end;
+
+
+// Macro 20
+// #define Header_SetItem(hwndHD, i, phdi) \
+// (BOOL)SNDMSG((hwndHD), HDM_SETITEM, (WPARAM)(int)(i), (LPARAM)(const HD_ITEM *)(phdi))
+
+Function Header_SetItem( hwndHD : hwnd; i : cint;const phdi : HD_ITEM ):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwndHD), HDM_SETITEM, (i), LPARAM(@phdi)));
+end;
+
+
+// Macro 21
+// #define Header_Layout(hwndHD, playout) \
+// (BOOL)SNDMSG((hwndHD), HDM_LAYOUT, 0, (LPARAM)(HD_LAYOUT *)(playout))
+
+Function Header_Layout( hwndHD : hwnd;var playout : HD_LAYOUT ):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwndHD), HDM_LAYOUT, 0, LPARAM(@playout)))
+end;
+
+
+// Macro 22
+// #define Header_GetItemRect(hwnd, iItem, lprc) \
+// (BOOL)SNDMSG((hwnd), HDM_GETITEMRECT, (WPARAM)(iItem), (LPARAM)(lprc))
+
+Function Header_GetItemRect( hwnd : hwnd; iItem : WPARAM; lprc : LPARAM):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), HDM_GETITEMRECT, iItem, lprc));
+end;
+
+
+// Macro 23
+// #define Header_SetImageList(hwnd, himl) \
+// (HIMAGELIST)SNDMSG((hwnd), HDM_SETIMAGELIST, 0, (LPARAM)(himl))
+
+Function Header_SetImageList( hwnd : hwnd; himl : LPARAM):HIMAGELIST;
+
+Begin
+ Result:=HIMAGELIST(SendMessage((hwnd), HDM_SETIMAGELIST, 0, himl))
+end;
+
+
+// Macro 24
+// #define Header_GetImageList(hwnd) \
+// (HIMAGELIST)SNDMSG((hwnd), HDM_GETIMAGELIST, 0, 0)
+
+Function Header_GetImageList( hwnd : hwnd):HIMAGELIST;
+
+Begin
+ Result:=HIMAGELIST(SendMessage((hwnd), HDM_GETIMAGELIST, 0, 0))
+end;
+
+
+// Macro 25
+// #define Header_OrderToIndex(hwnd, i) \
+// (int)SNDMSG((hwnd), HDM_ORDERTOINDEX, (WPARAM)(i), 0)
+
+Function Header_OrderToIndex( hwnd : hwnd; i : WPARAM):cint;
+
+Begin
+ Result:=cint(SendMessage((hwnd), HDM_ORDERTOINDEX, (i), 0))
+end;
+
+
+// Macro 26
+// #define Header_CreateDragImage(hwnd, i) \
+// (HIMAGELIST)SNDMSG((hwnd), HDM_CREATEDRAGIMAGE, (WPARAM)(i), 0)
+
+Function Header_CreateDragImage( hwnd : hwnd; i : WPARAM):HIMAGELIST;
+
+Begin
+ Result:=HIMAGELIST(SendMessage((hwnd), HDM_CREATEDRAGIMAGE, (i), 0))
+end;
+
+
+// Macro 27
+// #define Header_GetOrderArray(hwnd, iCount, lpi) \
+// (BOOL)SNDMSG((hwnd), HDM_GETORDERARRAY, (WPARAM)(iCount), (LPARAM)(lpi))
+
+Function Header_GetOrderArray( hwnd : hwnd; iCount : WPARAM; lpi : LPARAM):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), HDM_GETORDERARRAY, iCount, lpi))
+end;
+
+
+// Macro 28
+// #define Header_SetOrderArray(hwnd, iCount, lpi) \
+// (BOOL)SNDMSG((hwnd), HDM_SETORDERARRAY, (WPARAM)(iCount), (LPARAM)(lpi))
+
+Function Header_SetOrderArray( hwnd : hwnd; iCount : WPARAM; lpi : PInteger):BOOL;inline;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), HDM_SETORDERARRAY, iCount, LPARAM(lpi)))
+end;
+
+
+// Macro 29
+// #define Header_SetHotDivider(hwnd, fPos, dw) \
+// (int)SNDMSG((hwnd), HDM_SETHOTDIVIDER, (WPARAM)(fPos), (LPARAM)(dw))
+
+Function Header_SetHotDivider( hwnd : hwnd; fPos : WPARAM; dw : LPARAM):cint;
+
+Begin
+ Result:=cint(SendMessage((hwnd), HDM_SETHOTDIVIDER, fPos, dw))
+end;
+
+
+{$ifdef ie5plus}
+// Macro 30
+// #define Header_SetBitmapMargin(hwnd, iWidth) \
+// (int)SNDMSG((hwnd), HDM_SETBITMAPMARGIN, (WPARAM)(iWidth), 0)
+
+Function Header_SetBitmapMargin( hwnd : hwnd; iWidth : WPARAM):cint;
+
+Begin
+ Result:=cint(SendMessage((hwnd), HDM_SETBITMAPMARGIN, iWidth, 0))
+end;
+
+
+// Macro 31
+// #define Header_GetBitmapMargin(hwnd) \
+// (int)SNDMSG((hwnd), HDM_GETBITMAPMARGIN, 0, 0)
+
+Function Header_GetBitmapMargin( hwnd : hwnd):cint;
+
+Begin
+ Result:=cint(SendMessage((hwnd), HDM_GETBITMAPMARGIN, 0, 0))
+end;
+
+{$ENDIF}
+
+// Macro 32
+// #define Header_SetUnicodeFormat(hwnd, fUnicode) \
+// (BOOL)SNDMSG((hwnd), HDM_SETUNICODEFORMAT, (WPARAM)(fUnicode), 0)
+
+Function Header_SetUnicodeFormat( hwnd : hwnd; fUnicode : WPARAM):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), HDM_SETUNICODEFORMAT, fUnicode, 0));
+end;
+
+
+// Macro 33
+// #define Header_GetUnicodeFormat(hwnd) \
+// (BOOL)SNDMSG((hwnd), HDM_GETUNICODEFORMAT, 0, 0)
+
+Function Header_GetUnicodeFormat( hwnd : hwnd):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), HDM_GETUNICODEFORMAT, 0, 0))
+end;
+
+
+{$ifdef IE5plus}
+// Macro 34
+// #define Header_SetFilterChangeTimeout(hwnd, i) \
+// (int)SNDMSG((hwnd), HDM_SETFILTERCHANGETIMEOUT, 0, (LPARAM)(i))
+
+Function Header_SetFilterChangeTimeout( hwnd : hwnd; i : LPARAM):cint;
+
+Begin
+ Result:=cint(SendMessage((hwnd), HDM_SETFILTERCHANGETIMEOUT, 0, (i)))
+end;
+
+
+// Macro 35
+// #define Header_EditFilter(hwnd, i, fDiscardChanges) \
+// (int)SNDMSG((hwnd), HDM_EDITFILTER, (WPARAM)(i), MAKELPARAM(fDiscardChanges, 0))
+
+Function Header_EditFilter( hwnd : hwnd; i : WPARAM; fDiscardChanges :cint ):cint;
+
+Begin
+ Result:=cint(SendMessage((hwnd), HDM_EDITFILTER, (i), MAKELPARAM(fDiscardChanges, 0)));
+end;
+
+
+// Macro 36
+// #define Header_ClearFilter(hwnd, i) \
+// (int)SNDMSG((hwnd), HDM_CLEARFILTER, (WPARAM)(i), 0)
+
+Function Header_ClearFilter( hwnd : hwnd; i : WPARAM):cint;
+
+Begin
+ Result:=cint(SendMessage((hwnd), HDM_CLEARFILTER, (i), 0))
+end;
+
+
+// Macro 37
+// #define Header_ClearAllFilters(hwnd) \
+// (int)SNDMSG((hwnd), HDM_CLEARFILTER, (WPARAM)-1, 0)
+
+Function Header_ClearAllFilters( hwnd : hwnd):cint;
+
+Begin
+ Result:=cint(SendMessage((hwnd), HDM_CLEARFILTER, WPARAM(-1), 0))
+end;
+{$endif}
+
+// Macro 38
+// #define ListView_SetUnicodeFormat(hwnd, fUnicode) \
+// (BOOL)SNDMSG((hwnd), LVM_SETUNICODEFORMAT, (WPARAM)(fUnicode), 0)
+
+Function ListView_SetUnicodeFormat( hwnd : hwnd; fUnicode : WPARAM):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), LVM_SETUNICODEFORMAT, fUnicode, 0));
+end;
+
+
+// Macro 39
+// #define ListView_GetUnicodeFormat(hwnd) \
+// (BOOL)SNDMSG((hwnd), LVM_GETUNICODEFORMAT, 0, 0)
+
+Function ListView_GetUnicodeFormat( hwnd : hwnd):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), LVM_GETUNICODEFORMAT, 0, 0))
+end;
+
+
+// Macro 40
+// #define ListView_GetBkColor(hwnd) \
+// (COLORREF)SNDMSG((hwnd), LVM_GETBKCOLOR, 0, LPARAM(0))
+
+Function ListView_GetBkColor( hwnd : hwnd):COLORREF;
+
+Begin
+ Result:=COLORREF(SendMessage((hwnd), LVM_GETBKCOLOR, 0, LPARAM(0)))
+end;
+
+
+// Macro 41
+// #define ListView_SetBkColor(hwnd, clrBk) \
+// (BOOL)SNDMSG((hwnd), LVM_SETBKCOLOR, 0, (LPARAM)(COLORREF)(clrBk))
+
+Function ListView_SetBkColor( hwnd : hwnd; clrBk : COLORREF):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), LVM_SETBKCOLOR, 0, clrBk))
+end;
+
+
+// Macro 42
+// #define ListView_GetImageList(hwnd, iImageList) \
+// (HIMAGELIST)SNDMSG((hwnd), LVM_GETIMAGELIST, (WPARAM)(INT)(iImageList), DWord(0))
+
+Function ListView_GetImageList( hwnd : hwnd; iImageList : CINT):HIMAGELIST;
+
+Begin
+ Result:=HIMAGELIST(SendMessage((hwnd), LVM_GETIMAGELIST, iImageList, LPARAM(0)))
+end;
+
+
+// Macro 43
+// #define ListView_SetImageList(hwnd, himl, iImageList) \
+// (HIMAGELIST)SNDMSG((hwnd), LVM_SETIMAGELIST, (WPARAM)(iImageList), (LPARAM)(HIMAGELIST)(himl))
+
+Function ListView_SetImageList( hwnd : hwnd; himl : HIMAGELIST; iImageList : WPARAM):HIMAGELIST;
+
+Begin
+ Result:=HIMAGELIST(SendMessage((hwnd), LVM_SETIMAGELIST, iImageList, himl))
+end;
+
+
+// Macro 44
+// #define ListView_GetItemCount(hwnd) \
+// (int)SNDMSG((hwnd), LVM_GETITEMCOUNT, 0, DWord(0))
+
+Function ListView_GetItemCount( hwnd : hwnd):cint;
+
+Begin
+ Result:=cint(SendMessage((hwnd), LVM_GETITEMCOUNT, 0, LPARAM(0)))
+end;
+
+
+// Macro 45
+// #define INDEXTOSTATEIMAGEMASK(i) ((i) << 12)
+
+// Macro 46
+// #define ListView_GetItem(hwnd, pitem) \
+// (BOOL)SNDMSG((hwnd), LVM_GETITEM, 0, (LPARAM)(LV_ITEM *)(pitem))
+
+Function ListView_GetItem( hwnd : hwnd;var pitem : LV_ITEM ):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), LVM_GETITEM, 0, LPARAM(@pitem)))
+end;
+
+
+// Macro 47
+// #define ListView_SetItem(hwnd, pitem) \
+// (BOOL)SNDMSG((hwnd), LVM_SETITEM, 0, (LPARAM)(const LV_ITEM *)(pitem))
+
+Function ListView_SetItem( hwnd : hwnd;const pitem : LV_ITEM ):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), LVM_SETITEM, 0, LPARAM(@pitem)))
+end;
+
+
+// Macro 48
+// #define ListView_InsertItem(hwnd, pitem) \
+// (int)SNDMSG((hwnd), LVM_INSERTITEM, 0, (LPARAM)(const LV_ITEM *)(pitem))
+
+Function ListView_InsertItem( hwnd : hwnd;Const pitem : LV_ITEM ):cint;
+
+Begin
+ Result:=cint(SendMessage((hwnd), LVM_INSERTITEM, 0, LPARAM(@pitem)))
+end;
+
+
+// Macro 49
+// #define ListView_DeleteItem(hwnd, i) \
+// (BOOL)SNDMSG((hwnd), LVM_DELETEITEM, (WPARAM)(int)(i), DWord(0))
+
+Function ListView_DeleteItem( hwnd : hwnd; i : cint):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), LVM_DELETEITEM, (i), LPARAM(0)))
+end;
+
+
+// Macro 50
+// #define ListView_DeleteAllItems(hwnd) \
+// (BOOL)SNDMSG((hwnd), LVM_DELETEALLITEMS, 0, DWord(0))
+
+Function ListView_DeleteAllItems( hwnd : hwnd):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), LVM_DELETEALLITEMS, 0, LPARAM(0)))
+end;
+
+
+// Macro 51
+// #define ListView_GetCallbackMask(hwnd) \
+// (BOOL)SNDMSG((hwnd), LVM_GETCALLBACKMASK, 0, 0)
+
+Function ListView_GetCallbackMask( hwnd : hwnd):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), LVM_GETCALLBACKMASK, 0, 0))
+end;
+
+
+// Macro 52
+// #define ListView_SetCallbackMask(hwnd, mask) \
+// (BOOL)SNDMSG((hwnd), LVM_SETCALLBACKMASK, (WPARAM)(UINT)(mask), 0)
+
+Function ListView_SetCallbackMask( hwnd : hwnd; mask : UINT):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), LVM_SETCALLBACKMASK, mask, 0))
+end;
+
+
+// Macro 53
+// #define ListView_GetNextItem(hwnd, i, flags) \
+// (int)SNDMSG((hwnd), LVM_GETNEXTITEM, (WPARAM)(int)(i), MAKELPARAM((flags), 0))
+
+Function ListView_GetNextItem( hwnd : hwnd; i : cint; flags : cint):cint;
+
+Begin
+ Result:=cint(SendMessage((hwnd), LVM_GETNEXTITEM, (i), MAKELPARAM((flags), 0)))
+end;
+
+
+// Macro 54
+// #define ListView_FindItem(hwnd, iStart, plvfi) \
+// (int)SNDMSG((hwnd), LVM_FINDITEM, (WPARAM)(int)(iStart), (LPARAM)(const LV_FINDINFO *)(plvfi))
+
+Function ListView_FindItem( hwnd : hwnd; iStart : cint;const plvfi : LV_FINDINFO ):cint;
+
+Begin
+ Result:=cint(SendMessage((hwnd), LVM_FINDITEM, iStart, LPARAM(@plvfi)))
+end;
+
+
+// Macro 55
+// #define ListView_GetItemRect(hwnd, i, prc, code) \
+// (BOOL)SNDMSG((hwnd), LVM_GETITEMRECT, (WPARAM)(int)(i), \
+// ((prc) ? (((RECT *)(prc))->left = (code),(LPARAM)(RECT *)(prc)) : (LPARAM)(RECT *)NULL))
+
+Function ListView_GetItemRect( hwnd : hwnd; i : cint;var prc : TRect;code : cint):BOOL;
+begin
+ if assigned(@prc) then
+ begin
+ prc.left:=Code;
+ Result:=BOOL(SendMessage(hWnd,LVM_GETITEMRECT,i,LPARAM(@prc)));
+ end
+ else
+ Result:=BOOL(SendMessage(hWnd,LVM_GETITEMRECT,i,0));
+end;
+
+
+// Macro 56
+// #define ListView_SetItemPosition(hwndLV, i, x, y) \
+// (BOOL)SNDMSG((hwndLV), LVM_SETITEMPOSITION, (WPARAM)(int)(i), MAKELPARAM((x), (y)))
+
+Function ListView_SetItemPosition( hwndLV : hwnd; i : cint; x : cint ; y : cint ):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwndLV), LVM_SETITEMPOSITION, (i), MAKELPARAM((x), (y))))
+end;
+
+
+// Macro 57
+// #define ListView_GetItemPosition(hwndLV, i, ppt) \
+// (BOOL)SNDMSG((hwndLV), LVM_GETITEMPOSITION, (WPARAM)(int)(i), (LPARAM)(POINT *)(ppt))
+
+Function ListView_GetItemPosition( hwndLV : hwnd; i : cint;var ppt : POINT ):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwndLV), LVM_GETITEMPOSITION, (i), LPAram(@ppt)))
+end;
+
+// Macro 58
+// #define ListView_GetStringWidth(hwndLV, psz) \
+// (int)SNDMSG((hwndLV), LVM_GETSTRINGWIDTH, 0, (LPARAM)(LPCTSTR)(psz))
+
+Function ListView_GetStringWidth( hwndLV : hwnd; psz : LPCTSTR):cint;
+
+Begin
+ Result:=cint(SendMessage((hwndLV), LVM_GETSTRINGWIDTH, 0, LPARAM(psz)))
+end;
+
+
+// Macro 59
+// #define ListView_HitTest(hwndLV, pinfo) \
+// (int)SNDMSG((hwndLV), LVM_HITTEST, 0, (LPARAM)(LV_HITTESTINFO *)(pinfo))
+
+Function ListView_HitTest( hwndLV : hwnd;var pinfo : LV_HITTESTINFO ):cint;
+
+Begin
+ Result:=cint(SendMessage((hwndLV), LVM_HITTEST, 0, LParam(@pinfo)))
+end;
+
+
+// Macro 60
+// #define ListView_EnsureVisible(hwndLV, i, fPartialOK) \
+// (BOOL)SNDMSG((hwndLV), LVM_ENSUREVISIBLE, (WPARAM)(int)(i), MAKELPARAM((fPartialOK), 0))
+
+Function ListView_EnsureVisible( hwndLV : hwnd; i : cint; fPartialOK : cint ):BOOL;inline;
+
+Begin
+ Result:=BOOL(SendMessage((hwndLV), LVM_ENSUREVISIBLE, (i), MAKELPARAM((fPartialOK), 0)))
+end;
+
+
+Function ListView_EnsureVisible( hwndLV : hwnd; i : cint; fPartialOK : BOOL ):BOOL;inline;
+
+Begin
+ Result:=BOOL(SendMessage((hwndLV), LVM_ENSUREVISIBLE, (i), LPARAM(fPartialOK)))
+end;
+
+
+// Macro 61
+// #define ListView_Scroll(hwndLV, dx, dy) \
+// (BOOL)SNDMSG((hwndLV), LVM_SCROLL, (WPARAM)(int)(dx), (LPARAM)(int)(dy))
+
+Function ListView_Scroll( hwndLV : hwnd; dx : cint; dy : cint):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwndLV), LVM_SCROLL, dx, dy))
+end;
+
+
+// Macro 62
+// #define ListView_RedrawItems(hwndLV, iFirst, iLast) \
+// (BOOL)SNDMSG((hwndLV), LVM_REDRAWITEMS, (WPARAM)(int)(iFirst), (LPARAM)(int)(iLast))
+
+Function ListView_RedrawItems( hwndLV : hwnd; iFirst : cint; iLast : cint):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwndLV), LVM_REDRAWITEMS, iFirst, iLast))
+end;
+
+
+// Macro 63
+// #define ListView_Arrange(hwndLV, code) \
+// (BOOL)SNDMSG((hwndLV), LVM_ARRANGE, (WPARAM)(UINT)(code), DWord(0))
+
+Function ListView_Arrange( hwndLV : hwnd; code : UINT):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwndLV), LVM_ARRANGE, code, LPARAM(0)))
+end;
+
+
+// Macro 64
+// #define ListView_EditLabel(hwndLV, i) \
+// (HWND)SNDMSG((hwndLV), LVM_EDITLABEL, (WPARAM)(int)(i), DWord(0))
+
+Function ListView_EditLabel( hwndLV : hwnd; i : cint):HWND;
+
+Begin
+ Result:=HWND(SendMessage((hwndLV), LVM_EDITLABEL, (i), LPARAM(0)))
+end;
+
+
+// Macro 65
+// #define ListView_GetEditControl(hwndLV) \
+// (HWND)SNDMSG((hwndLV), LVM_GETEDITCONTROL, 0, DWord(0))
+
+Function ListView_GetEditControl( hwndLV : hwnd):HWND;
+
+Begin
+ Result:=HWND(SendMessage((hwndLV), LVM_GETEDITCONTROL, 0, LPARAM(0)))
+end;
+
+
+// Macro 66
+// #define ListView_GetColumn(hwnd, iCol, pcol) \
+// (BOOL)SNDMSG((hwnd), LVM_GETCOLUMN, (WPARAM)(int)(iCol), (LPARAM)(LV_COLUMN *)(pcol))
+
+Function ListView_GetColumn( hwnd : hwnd; iCol : cint;var pcol : LV_COLUMN ):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), LVM_GETCOLUMN, iCol, LPARAM(@pcol)))
+end;
+
+
+// Macro 67
+// #define ListView_SetColumn(hwnd, iCol, pcol) \
+// (BOOL)SNDMSG((hwnd), LVM_SETCOLUMN, (WPARAM)(int)(iCol), (LPARAM)(const LV_COLUMN *)(pcol))
+
+Function ListView_SetColumn( hwnd : hwnd; iCol : cint; Const pcol : LV_COLUMN ):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), LVM_SETCOLUMN, iCol, LPARAM(@pcol)))
+end;
+
+
+// Macro 68
+// #define ListView_InsertColumn(hwnd, iCol, pcol) \
+// (int)SNDMSG((hwnd), LVM_INSERTCOLUMN, (WPARAM)(int)(iCol), (LPARAM)(const LV_COLUMN *)(pcol))
+
+Function ListView_InsertColumn( hwnd : hwnd; iCol : cint;const pcol : LV_COLUMN ):cint;
+
+Begin
+ Result:=cint(SendMessage((hwnd), LVM_INSERTCOLUMN, iCol, LPARAM(@pcol)))
+end;
+
+
+// Macro 69
+// #define ListView_DeleteColumn(hwnd, iCol) \
+// (BOOL)SNDMSG((hwnd), LVM_DELETECOLUMN, (WPARAM)(int)(iCol), 0)
+
+Function ListView_DeleteColumn( hwnd : hwnd; iCol : cint):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), LVM_DELETECOLUMN, iCol, 0))
+end;
+
+
+// Macro 70
+// #define ListView_GetColumnWidth(hwnd, iCol) \
+// (int)SNDMSG((hwnd), LVM_GETCOLUMNWIDTH, (WPARAM)(int)(iCol), 0)
+
+Function ListView_GetColumnWidth( hwnd : hwnd; iCol : cint):cint;
+
+Begin
+ Result:=cint(SendMessage((hwnd), LVM_GETCOLUMNWIDTH, iCol, 0))
+end;
+
+
+// Macro 71
+// #define ListView_SetColumnWidth(hwnd, iCol, cx) \
+// (BOOL)SNDMSG((hwnd), LVM_SETCOLUMNWIDTH, (WPARAM)(int)(iCol), MAKELPARAM((cx), 0))
+
+Function ListView_SetColumnWidth( hwnd : hwnd; iCol : cint; cx :cint ):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), LVM_SETCOLUMNWIDTH, iCol, MAKELPARAM((cx), 0)))
+end;
+
+
+// Macro 72
+// #define ListView_GetHeader(hwnd)\
+// (HWND)SNDMSG((hwnd), LVM_GETHEADER, 0, DWord(0))
+
+Function ListView_GetHeader( hwnd : hwnd):HWND;
+
+Begin
+ Result:=Windows.HWND(SendMessage((hwnd), LVM_GETHEADER, 0, LPARAM(0)));
+end;
+
+
+// Macro 73
+// #define ListView_CreateDragImage(hwnd, i, lpptUpLeft) \
+// (HIMAGELIST)SNDMSG((hwnd), LVM_CREATEDRAGIMAGE, (WPARAM)(int)(i), (LPARAM)(LPPOINT)(lpptUpLeft))
+
+Function ListView_CreateDragImage( hwnd : hwnd; i : cint; lpptUpLeft : LPPOINT):HIMAGELIST;inline;
+
+Begin
+ Result:=HIMAGELIST(SendMessage((hwnd), LVM_CREATEDRAGIMAGE, WPARAM(i), LPARAM(lpptUpLeft)))
+end;
+
+Function ListView_CreateDragImage( hwnd : hwnd; i : cint; const lpptUpLeft : POINT):HIMAGELIST;inline;
+
+Begin
+ Result:=HIMAGELIST(SendMessage((hwnd), LVM_CREATEDRAGIMAGE, WPARAM(i), LPARAM(@lpptUpLeft)))
+end;
+
+
+// Macro 74
+// #define ListView_GetViewRect(hwnd, prc) \
+// (BOOL)SNDMSG((hwnd), LVM_GETVIEWRECT, 0, (LPARAM)(RECT *)(prc))
+
+Function ListView_GetViewRect( hwnd : hwnd;var prc : RECT ):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), LVM_GETVIEWRECT, 0, LPARAM(@prc)))
+end;
+
+// Macro 75
+// #define ListView_GetTextColor(hwnd) \
+// (COLORREF)SNDMSG((hwnd), LVM_GETTEXTCOLOR, 0, DWord(0))
+
+Function ListView_GetTextColor( hwnd : hwnd):COLORREF;
+
+Begin
+ Result:=COLORREF(SendMessage((hwnd), LVM_GETTEXTCOLOR, 0, LPARAM(0)))
+end;
+
+
+// Macro 76
+// #define ListView_SetTextColor(hwnd, clrText) \
+// (BOOL)SNDMSG((hwnd), LVM_SETTEXTCOLOR, 0, (LPARAM)(COLORREF)(clrText))
+
+Function ListView_SetTextColor( hwnd : hwnd; clrText : COLORREF):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), LVM_SETTEXTCOLOR, 0, clrText))
+end;
+
+
+// Macro 77
+// #define ListView_GetTextBkColor(hwnd) \
+// (COLORREF)SNDMSG((hwnd), LVM_GETTEXTBKCOLOR, 0, DWord(0))
+
+Function ListView_GetTextBkColor( hwnd : hwnd):COLORREF;
+
+Begin
+ Result:=COLORREF(SendMessage((hwnd), LVM_GETTEXTBKCOLOR, 0, LPARAM(0)))
+end;
+
+
+// Macro 78
+// #define ListView_SetTextBkColor(hwnd, clrTextBk) \
+// (BOOL)SNDMSG((hwnd), LVM_SETTEXTBKCOLOR, 0, (LPARAM)(COLORREF)(clrTextBk))
+
+Function ListView_SetTextBkColor( hwnd : hwnd; clrTextBk : COLORREF):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), LVM_SETTEXTBKCOLOR, 0, clrTextBk))
+end;
+
+
+// Macro 79
+// #define ListView_GetTopIndex(hwndLV) \
+// (int)SNDMSG((hwndLV), LVM_GETTOPINDEX, 0, 0)
+
+Function ListView_GetTopIndex( hwndLV : hwnd):cint;
+
+Begin
+ Result:=cint(SendMessage((hwndLV), LVM_GETTOPINDEX, 0, 0))
+end;
+
+
+// Macro 80
+// #define ListView_GetCountPerPage(hwndLV) \
+// (int)SNDMSG((hwndLV), LVM_GETCOUNTPERPAGE, 0, 0)
+
+Function ListView_GetCountPerPage( hwndLV : hwnd):cint;
+
+Begin
+ Result:=cint(SendMessage((hwndLV), LVM_GETCOUNTPERPAGE, 0, 0))
+end;
+
+
+// Macro 81
+//
+// #define ListView_GetOrigin(hwndLV, ppt) \
+// (BOOL)SNDMSG((hwndLV), LVM_GETORIGIN, (WPARAM)0, (LPARAM)(POINT *)(ppt))
+
+Function ListView_GetOrigin( hwndLV : hwnd;var ppt : POINT ):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwndLV), LVM_GETORIGIN, WPARAM(0), LPARAM(@ppt)))
+end;
+
+
+// Macro 82
+// #define ListView_Update(hwndLV, i) \
+// (BOOL)SNDMSG((hwndLV), LVM_UPDATE, (WPARAM)(i), DWord(0))
+
+Function ListView_Update( hwndLV : hwnd; i : WPARAM):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwndLV), LVM_UPDATE, (i), LPARAM(0)))
+end;
+
+
+// Macro 83
+// #define ListView_SetItemState(hwndLV, i, data, mask) \
+// { LV_ITEM _ms_lvi;\
+// _ms_lvi.stateMask = mask;\
+// _ms_lvi.state = data;\
+// SNDMSG((hwndLV), LVM_SETITEMSTATE, (WPARAM)(i), (LPARAM)(LV_ITEM *)&_ms_lvi);\
+// }
+
+Procedure ListView_SetItemState(hwndLV :hwnd; i :cint ;data,mask:UINT);
+
+Var _ms_lvi : LV_ITEM;
+
+Begin
+ _ms_lvi.stateMask:=mask;
+ _ms_lvi.state:=data;
+ SendMessage(hwndLV, LVM_SETITEMSTATE, i,LPARAM(@_ms_lvi));
+end;
+
+
+// Macro 84
+// #define ListView_SetCheckState(hwndLV, i, fCheck) \
+// ListView_SetItemState(hwndLV, i, INDEXTOSTATEIMAGEMASK((fCheck)?2:1), LVIS_STATEIMAGEMASK)
+
+Procedure ListView_SetCheckState( hwndLV : hwnd; i : cint ; fCheck : BOOL );
+
+var j:longint;
+Begin
+ IF not fCheck Then // (or inc(longint(fCheck)) if you like it dirty)
+ j:=1
+ Else
+ j:=2;
+ListView_SetItemState(hwndLV, i, INDEXTOSTATEIMAGEMASK(j), LVIS_STATEIMAGEMASK);
+end;
+
+
+// Macro 85
+// #define ListView_GetItemState(hwndLV, i, mask) \
+// (UINT)SNDMSG((hwndLV), LVM_GETITEMSTATE, (WPARAM)(i), (LPARAM)(mask))
+
+Function ListView_GetItemState( hwndLV : hwnd; i : WPARAM; mask : LPARAM):UINT;
+
+Begin
+ Result:=UINT(SendMessage((hwndLV), LVM_GETITEMSTATE, (i), mask))
+end;
+
+
+// Macro 86
+// #define ListView_GetCheckState(hwndLV, i) \
+// ((((UINT)(SNDMSG((hwndLV), LVM_GETITEMSTATE, (WPARAM)(i), LVIS_STATEIMAGEMASK))) >> 12) -1)
+
+Function ListView_GetCheckState( hwndLV : hwnd; i : WPARAM):UINT;
+
+Begin
+ Result:=(SendMessage((hwndLV), LVM_GETITEMSTATE, (i), LVIS_STATEIMAGEMASK) 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,LPARAM(@ptNewPos));
+end;
+
+
+// Macro 93
+// #define ListView_GetSelectedCount(hwndLV) \
+// (UINT)SNDMSG((hwndLV), LVM_GETSELECTEDCOUNT, 0, DWord(0))
+
+Function ListView_GetSelectedCount( hwndLV : hwnd):UINT;
+
+Begin
+ Result:=SendMessage(hwndLV, LVM_GETSELECTEDCOUNT, 0, LPARAM(0));
+end;
+
+// Macro 94
+// #define ListView_GetItemSpacing(hwndLV, fSmall) \
+// (DWORD)SNDMSG((hwndLV), LVM_GETITEMSPACING, fSmall, DWord(0))
+
+Function ListView_GetItemSpacing( hwndLV : hwnd; fSmall : cint ):DWORD;
+
+Begin
+ Result:=LPARAM(SendMessage((hwndLV), LVM_GETITEMSPACING, fSmall, LPARAM(0)));
+end;
+
+// Macro 95
+// #define ListView_GetISearchString(hwndLV, lpsz) \
+// (BOOL)SNDMSG((hwndLV), LVM_GETISEARCHSTRING, 0, (LPARAM)(LPTSTR)(lpsz))
+
+Function ListView_GetISearchString( hwndLV : hwnd; lpsz : LPTSTR):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwndLV), LVM_GETISEARCHSTRING, 0, LPARAM(lpsz)))
+end;
+
+// Macro 96
+// #define ListView_SetIconSpacing(hwndLV, cx, cy) \
+// (DWORD)SNDMSG((hwndLV), LVM_SETICONSPACING, 0, MAKELONG(cx,cy))
+
+Function ListView_SetIconSpacing( hwndLV : hwnd; cx,cy : cint ):DWORD;
+
+Begin
+ Result:=DWORD(SendMessage((hwndLV), LVM_SETICONSPACING, 0, MAKELONG(cx,cy)))
+end;
+
+
+// Macro 97
+// #define ListView_SetExtendedListViewStyle(hwndLV, dw)\
+// (DWORD)SNDMSG((hwndLV), LVM_SETEXTENDEDLISTVIEWSTYLE, 0, dw)
+
+Function ListView_SetExtendedListViewStyle( hwndLV : hwnd; dw :cint ):DWORD;
+
+Begin
+ Result:=DWORD(SendMessage((hwndLV), LVM_SETEXTENDEDLISTVIEWSTYLE, 0, dw))
+end;
+
+
+// Macro 98
+// #define ListView_SetExtendedListViewStyleEx(hwndLV, dwMask, dw)\
+// (DWORD)SNDMSG((hwndLV), LVM_SETEXTENDEDLISTVIEWSTYLE, dwMask, dw)
+
+Function ListView_SetExtendedListViewStyleEx( hwndLV : hwnd; dwMask, dw : cint ):DWORD;
+
+Begin
+ Result:=DWORD(SendMessage((hwndLV), LVM_SETEXTENDEDLISTVIEWSTYLE, dwMask, dw))
+end;
+
+
+// Macro 99
+// #define ListView_GetExtendedListViewStyle(hwndLV)\
+// (DWORD)SNDMSG((hwndLV), LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0)
+
+Function ListView_GetExtendedListViewStyle( hwndLV : hwnd):DWORD;
+
+Begin
+ Result:=DWORD(SendMessage((hwndLV), LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0))
+end;
+
+
+// Macro 100
+// #define ListView_GetSubItemRect(hwnd, iItem, iSubItem, code, prc) \
+// (BOOL)SNDMSG((hwnd), LVM_GETSUBITEMRECT, (WPARAM)(int)(iItem), \
+// ((prc) ? ((((LPRECT)(prc))->top = iSubItem), (((LPRECT)(prc))->left = code), (LPARAM)(prc)) : (LPARAM)(LPRECT)NULL))
+
+Function ListView_GetSubItemRect( hwnd : hwnd; iItem : cint;iSubItem, code :cint ;prc:LPRECT):BOOL;
+
+VAR LastParam : LPRECT;
+Begin
+ if prc<>nil then
+ begin
+ prc^.top:=iSubItem;
+ prc^.left:=code;
+ lastparam:=prc;
+ end
+ else
+ lastparam:=nil;
+ Result:=bool(SendMessage((hwnd), LVM_GETSUBITEMRECT, iItem, LPARAM(lastparam)));
+End;
+
+// Macro 101
+// #define ListView_SubItemHitTest(hwnd, plvhti) \
+// (int)SNDMSG((hwnd), LVM_SUBITEMHITTEST, 0, (LPARAM)(LPLVHITTESTINFO)(plvhti))
+
+Function ListView_SubItemHitTest( hwnd : hwnd; plvhti : LPLVHITTESTINFO):cint;
+Begin
+ Result:=cint(SendMessage((hwnd), LVM_SUBITEMHITTEST, 0, LParam(plvhti)))
+end;
+
+
+// Macro 102
+// #define ListView_SetColumnOrderArray(hwnd, iCount, pi) \
+// (BOOL)SNDMSG((hwnd), LVM_SETCOLUMNORDERARRAY, (WPARAM)(iCount), (LPARAM)(LPINT)(pi))
+
+Function ListView_SetColumnOrderArray( hwnd : hwnd; iCount : WPARAM; pi : LPINT):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), LVM_SETCOLUMNORDERARRAY, iCount, LPARAM(pi)));
+end;
+
+
+// Macro 103
+// #define ListView_GetColumnOrderArray(hwnd, iCount, pi) \
+// (BOOL)SNDMSG((hwnd), LVM_GETCOLUMNORDERARRAY, (WPARAM)(iCount), (LPARAM)(LPINT)(pi))
+
+Function ListView_GetColumnOrderArray( hwnd : hwnd; iCount : WPARAM; pi : LPINT):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), LVM_GETCOLUMNORDERARRAY, iCount, LPARAM(pi)))
+end;
+
+
+// Macro 104
+// #define ListView_SetHotItem(hwnd, i) \
+// (int)SNDMSG((hwnd), LVM_SETHOTITEM, (WPARAM)(i), 0)
+
+Function ListView_SetHotItem( hwnd : hwnd; i : WPARAM):cint;
+Begin
+ Result:=cint(SendMessage((hwnd), LVM_SETHOTITEM, (i), 0))
+end;
+
+// Macro 105
+// #define ListView_GetHotItem(hwnd) \
+// (int)SNDMSG((hwnd), LVM_GETHOTITEM, 0, 0)
+
+Function ListView_GetHotItem( hwnd : hwnd):cint;
+Begin
+ Result:=cint(SendMessage((hwnd), LVM_GETHOTITEM, 0, 0))
+end;
+
+// Macro 106
+// #define ListView_SetHotCursor(hwnd, hcur) \
+// (HCURSOR)SNDMSG((hwnd), LVM_SETHOTCURSOR, 0, (LPARAM)(hcur))
+
+Function ListView_SetHotCursor( hwnd : hwnd; hcur : LPARAM):HCURSOR;
+Begin
+ Result:=HCURSOR(SendMessage((hwnd), LVM_SETHOTCURSOR, 0, hcur))
+end;
+
+// Macro 107
+// #define ListView_GetHotCursor(hwnd) \
+// (HCURSOR)SNDMSG((hwnd), LVM_GETHOTCURSOR, 0, 0)
+
+Function ListView_GetHotCursor( hwnd : hwnd):HCURSOR;
+Begin
+ Result:=HCURSOR(SendMessage((hwnd), LVM_GETHOTCURSOR, 0, 0))
+end;
+
+
+// Macro 108
+// #define ListView_ApproximateViewRect(hwnd, iWidth, iHeight, iCount) \
+// (DWORD)SNDMSG((hwnd), LVM_APPROXIMATEVIEWRECT, iCount, MAKELPARAM(iWidth, iHeight))
+
+Function ListView_ApproximateViewRect( hwnd : hwnd; iWidth, iHeight, iCount : cint ):DWORD;
+Begin
+ Result:=DWORD(SendMessage((hwnd), LVM_APPROXIMATEVIEWRECT, iCount, MAKELPARAM(iWidth, iHeight)));
+end;
+
+
+// Macro 109
+// #define ListView_SetWorkAreas(hwnd, nWorkAreas, prc) \
+// (BOOL)SNDMSG((hwnd), LVM_SETWORKAREAS, (WPARAM)(int)(nWorkAreas), (LPARAM)(RECT *)(prc))
+
+Function ListView_SetWorkAreas( hwnd : hwnd; nWorkAreas : cint;var prc : RECT ):BOOL;inline;
+Begin
+ Result:=BOOL(SendMessage((hwnd), LVM_SETWORKAREAS, nWorkAreas, LPARAM(@prc)))
+end;
+
+
+Function ListView_SetWorkAreas( hwnd : hwnd; nWorkAreas : cint; prc : PRECT ):BOOL;inline;
+Begin
+ Result:=BOOL(SendMessage((hwnd), LVM_SETWORKAREAS, nWorkAreas, LPARAM(prc)))
+end;
+
+// Macro 110
+// #define ListView_GetWorkAreas(hwnd, nWorkAreas, prc) \
+// (BOOL)SNDMSG((hwnd), LVM_GETWORKAREAS, (WPARAM)(int)(nWorkAreas), (LPARAM)(RECT *)(prc))
+
+Function ListView_GetWorkAreas( hwnd : hwnd; nWorkAreas : cint;var prc : RECT ):BOOL;
+Begin
+ Result:=BOOL(SendMessage((hwnd), LVM_GETWORKAREAS, nWorkAreas, LPARAM(@prc)))
+end;
+
+
+// Macro 111
+// #define ListView_GetNumberOfWorkAreas(hwnd, pnWorkAreas) \
+// (BOOL)SNDMSG((hwnd), LVM_GETNUMBEROFWORKAREAS, 0, (LPARAM)(UINT *)(pnWorkAreas))
+
+Function ListView_GetNumberOfWorkAreas( hwnd : hwnd;var pnWorkAreas : UINT ):BOOL;
+Begin
+ Result:=BOOL(SendMessage((hwnd), LVM_GETNUMBEROFWORKAREAS, 0, LPARAM(@pnWorkAreas)))
+end;
+
+
+// Macro 112
+// #define ListView_GetSelectionMark(hwnd) \
+// (int)SNDMSG((hwnd), LVM_GETSELECTIONMARK, 0, 0)
+
+Function ListView_GetSelectionMark( hwnd : hwnd):cint;
+
+Begin
+ Result:=cint(SendMessage((hwnd), LVM_GETSELECTIONMARK, 0, 0))
+end;
+
+
+// Macro 113
+// #define ListView_SetSelectionMark(hwnd, i) \
+// (int)SNDMSG((hwnd), LVM_SETSELECTIONMARK, 0, (LPARAM)(i))
+
+Function ListView_SetSelectionMark( hwnd : hwnd; i : LPARAM):cint;
+
+Begin
+ Result:=cint(SendMessage((hwnd), LVM_SETSELECTIONMARK, 0, (i)))
+end;
+
+
+// Macro 114
+// #define ListView_SetHoverTime(hwndLV, dwHoverTimeMs)\
+// (DWORD)SNDMSG((hwndLV), LVM_SETHOVERTIME, 0, (LPARAM)(dwHoverTimeMs))
+
+Function ListView_SetHoverTime( hwndLV : hwnd; dwHoverTimeMs : LPARAM):DWORD;
+
+Begin
+ Result:=DWORD(SendMessage((hwndLV), LVM_SETHOVERTIME, 0, dwHoverTimeMs))
+end;
+
+
+// Macro 115
+// #define ListView_GetHoverTime(hwndLV)\
+// (DWORD)SNDMSG((hwndLV), LVM_GETHOVERTIME, 0, 0)
+
+Function ListView_GetHoverTime( hwndLV : hwnd):DWORD;
+
+Begin
+ Result:=DWORD(SendMessage((hwndLV), LVM_GETHOVERTIME, 0, 0))
+end;
+
+
+// Macro 116
+// #define ListView_SetToolTips(hwndLV, hwndNewHwnd)\
+// (HWND)SNDMSG((hwndLV), LVM_SETTOOLTIPS, (WPARAM)(hwndNewHwnd), 0)
+
+Function ListView_SetToolTips( hwndLV : hwnd; hwndNewHwnd : WPARAM):HWND;
+
+Begin
+ Result:=HWND(SendMessage((hwndLV), LVM_SETTOOLTIPS, hwndNewHwnd, 0))
+end;
+
+
+// Macro 117
+// #define ListView_GetToolTips(hwndLV)\
+// (HWND)SNDMSG((hwndLV), LVM_GETTOOLTIPS, 0, 0)
+
+Function ListView_GetToolTips( hwndLV : hwnd):HWND;
+
+Begin
+ Result:=HWND(SendMessage((hwndLV), LVM_GETTOOLTIPS, 0, 0))
+end;
+
+
+// Macro 118
+// #define ListView_SortItemsEx(hwndLV, _pfnCompare, _lPrm) \
+// (BOOL)SNDMSG((hwndLV), LVM_SORTITEMSEX, (WPARAM)(LPARAM)(_lPrm), (LPARAM)(PFNLVCOMPARE)(_pfnCompare))
+
+Function ListView_SortItemsEx( hwndLV : hwnd; _pfnCompare : PFNLVCOMPARE; _lPrm : LPARAM):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwndLV), LVM_SORTITEMSEX, _lPrm, LPAram(@_pfnCompare)))
+end;
+
+{$ifdef win32xp}
+// Macro 119
+// #define ListView_SetSelectedColumn(hwnd, iCol) \
+// SNDMSG((hwnd), LVM_SETSELECTEDCOLUMN, (WPARAM)iCol, 0)
+
+Procedure ListView_SetSelectedColumn( hwnd : hwnd; iCol : WPARAM);
+
+Begin
+ SendMessage((hwnd), LVM_SETSELECTEDCOLUMN, iCol, 0)
+end;
+
+// Macro 120
+// #define ListView_SetTileWidth(hwnd, cpWidth) \
+// SNDMSG((hwnd), LVM_SETTILEWIDTH, (WPARAM)cpWidth, 0)
+
+Procedure ListView_SetTileWidth( hwnd : hwnd; cpWidth : WPARAM);
+
+Begin
+ SendMessage((hwnd), LVM_SETTILEWIDTH, cpWidth, 0)
+end;
+
+
+// Macro 121
+// #define ListView_SetView(hwnd, iView) \
+// (DWORD)SNDMSG((hwnd), LVM_SETVIEW, (WPARAM)(DWORD)iView, 0)
+
+Function ListView_SetView( hwnd : hwnd; iView : DWORD):DWORD;
+
+Begin
+ Result:=DWORD(SendMessage((hwnd), LVM_SETVIEW, iView, 0))
+end;
+
+
+// Macro 122
+// #define ListView_GetView(hwnd) \
+// (DWORD)SNDMSG((hwnd), LVM_GETVIEW, 0, 0)
+
+Function ListView_GetView( hwnd : hwnd):DWORD;
+Begin
+ Result:=DWORD(SendMessage((hwnd), LVM_GETVIEW, 0, 0))
+end;
+
+
+// Macro 123
+// #define ListView_InsertGroup(hwnd, index, pgrp) \
+// SNDMSG((hwnd), LVM_INSERTGROUP, (WPARAM)index, (LPARAM)pgrp)
+
+Procedure ListView_InsertGroup( hwnd : hwnd; index : WPARAM; pgrp : LPARAM);
+Begin
+ SendMessage((hwnd), LVM_INSERTGROUP, index, pgrp)
+end;
+
+
+// Macro 124
+// #define ListView_SetGroupInfo(hwnd, iGroupId, pgrp) \
+// SNDMSG((hwnd), LVM_SETGROUPINFO, (WPARAM)iGroupId, (LPARAM)pgrp)
+
+Procedure ListView_SetGroupInfo( hwnd : hwnd; iGroupId : WPARAM; pgrp : LPARAM);
+Begin
+ SendMessage((hwnd), LVM_SETGROUPINFO, iGroupId, pgrp)
+end;
+
+
+// Macro 125
+// #define ListView_GetGroupInfo(hwnd, iGroupId, pgrp) \
+// SNDMSG((hwnd), LVM_GETGROUPINFO, (WPARAM)iGroupId, (LPARAM)pgrp)
+
+Procedure ListView_GetGroupInfo( hwnd : hwnd; iGroupId : WPARAM; pgrp : LPARAM);
+Begin
+ SendMessage((hwnd), LVM_GETGROUPINFO, iGroupId, pgrp)
+end;
+
+
+// Macro 126
+// #define ListView_RemoveGroup(hwnd, iGroupId) \
+// SNDMSG((hwnd), LVM_REMOVEGROUP, (WPARAM)iGroupId, 0)
+
+Procedure ListView_RemoveGroup( hwnd : hwnd; iGroupId : WPARAM);
+Begin
+ SendMessage((hwnd), LVM_REMOVEGROUP, iGroupId, 0)
+end;
+
+
+// Macro 127
+// #define ListView_MoveGroup(hwnd, iGroupId, toIndex) \
+// SNDMSG((hwnd), LVM_MOVEGROUP, (WPARAM)iGroupId, (LPARAM)toIndex)
+
+Procedure ListView_MoveGroup( hwnd : hwnd; iGroupId : WPARAM; toIndex : LPARAM);
+Begin
+ SendMessage((hwnd), LVM_MOVEGROUP, iGroupId, toIndex)
+end;
+
+
+// Macro 128
+// #define ListView_MoveItemToGroup(hwnd, idItemFrom, idGroupTo) \
+// SNDMSG((hwnd), LVM_MOVEITEMTOGROUP, (WPARAM)idItemFrom, (LPARAM)idGroupTo)
+
+Procedure ListView_MoveItemToGroup( hwnd : hwnd; idItemFrom : WPARAM; idGroupTo : LPARAM);
+
+Begin
+ SendMessage((hwnd), LVM_MOVEITEMTOGROUP, idItemFrom, idGroupTo)
+end;
+
+
+// Macro 129
+// #define ListView_SetGroupMetrics(hwnd, pGroupMetrics) \
+// SNDMSG((hwnd), LVM_SETGROUPMETRICS, 0, (LPARAM)pGroupMetrics)
+
+Procedure ListView_SetGroupMetrics( hwnd : hwnd; pGroupMetrics : LPARAM);
+
+Begin
+ SendMessage((hwnd), LVM_SETGROUPMETRICS, 0, pGroupMetrics)
+end;
+
+
+// Macro 130
+// #define ListView_GetGroupMetrics(hwnd, pGroupMetrics) \
+// SNDMSG((hwnd), LVM_GETGROUPMETRICS, 0, (LPARAM)pGroupMetrics)
+
+Procedure ListView_GetGroupMetrics( hwnd : hwnd; pGroupMetrics : LPARAM);
+
+Begin
+SendMessage((hwnd), LVM_GETGROUPMETRICS, 0, pGroupMetrics)
+end;
+
+
+// Macro 131
+// #define ListView_EnableGroupView(hwnd, fEnable) \
+// SNDMSG((hwnd), LVM_ENABLEGROUPVIEW, (WPARAM)fEnable, 0)
+
+Procedure ListView_EnableGroupView( hwnd : hwnd; fEnable : WPARAM);
+
+Begin
+ SendMessage((hwnd), LVM_ENABLEGROUPVIEW, fEnable, 0)
+end;
+
+
+// Macro 132
+// #define ListView_SortGroups(hwnd, _pfnGroupCompate, _plv) \
+// SNDMSG((hwnd), LVM_SORTGROUPS, (WPARAM)_pfnGroupCompate, (LPARAM)_plv)
+
+Procedure ListView_SortGroups( hwnd : hwnd; _pfnGroupCompate : WPARAM; _plv : LPARAM);
+
+Begin
+ SendMessage((hwnd), LVM_SORTGROUPS, _pfnGroupCompate, _plv)
+end;
+
+// Macro 133
+// #define ListView_InsertGroupSorted(hwnd, structInsert) \
+// SNDMSG((hwnd), LVM_INSERTGROUPSORTED, (WPARAM)structInsert, 0)
+
+Procedure ListView_InsertGroupSorted( hwnd : hwnd; structInsert : WPARAM);
+
+Begin
+ SendMessage((hwnd), LVM_INSERTGROUPSORTED, structInsert, 0)
+end;
+
+
+// Macro 134
+// #define ListView_RemoveAllGroups(hwnd) \
+// SNDMSG((hwnd), LVM_REMOVEALLGROUPS, 0, 0)
+
+Procedure ListView_RemoveAllGroups( hwnd : hwnd);
+
+Begin
+SendMessage((hwnd), LVM_REMOVEALLGROUPS, 0, 0)
+end;
+
+
+// Macro 135
+// #define ListView_HasGroup(hwnd, dwGroupId) \
+// SNDMSG((hwnd), LVM_HASGROUP, dwGroupId, 0)
+
+Procedure ListView_HasGroup( hwnd : hwnd; dwGroupId :DWORD );
+
+Begin
+ SendMessage((hwnd), LVM_HASGROUP, dwGroupId, 0)
+end;
+
+
+// Macro 136
+// #define ListView_SetTileViewInfo(hwnd, ptvi) \
+// SNDMSG((hwnd), LVM_SETTILEVIEWINFO, 0, (LPARAM)ptvi)
+
+Procedure ListView_SetTileViewInfo( hwnd : hwnd; ptvi : LPARAM);
+
+Begin
+ SendMessage((hwnd), LVM_SETTILEVIEWINFO, 0, ptvi)
+end;
+
+
+// Macro 137
+// #define ListView_GetTileViewInfo(hwnd, ptvi) \
+// SNDMSG((hwnd), LVM_GETTILEVIEWINFO, 0, (LPARAM)ptvi)
+
+Procedure ListView_GetTileViewInfo( hwnd : hwnd; ptvi : LPARAM);
+
+Begin
+ SendMessage((hwnd), LVM_GETTILEVIEWINFO, 0, ptvi)
+end;
+
+
+// Macro 138
+// #define ListView_SetTileInfo(hwnd, pti) \
+// SNDMSG((hwnd), LVM_SETTILEINFO, 0, (LPARAM)pti)
+
+Procedure ListView_SetTileInfo( hwnd : hwnd; pti : LPARAM);
+
+Begin
+ SendMessage((hwnd), LVM_SETTILEINFO, 0, pti)
+end;
+
+
+// Macro 139
+// #define ListView_GetTileInfo(hwnd, pti) \
+// SNDMSG((hwnd), LVM_GETTILEINFO, 0, (LPARAM)pti)
+
+Procedure ListView_GetTileInfo( hwnd : hwnd; pti : LPARAM);
+
+Begin
+ SendMessage((hwnd), LVM_GETTILEINFO, 0, pti)
+end;
+
+
+// Macro 140
+// #define ListView_SetInsertMark(hwnd, lvim) \
+// (BOOL)SNDMSG((hwnd), LVM_SETINSERTMARK, (WPARAM) 0, (LPARAM) (lvim))
+
+Function ListView_SetInsertMark( hwnd : hwnd; lvim : lparam ):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), LVM_SETINSERTMARK, 0, lvim));
+end;
+
+
+// Macro 141
+// #define ListView_GetInsertMark(hwnd, lvim) \
+// (BOOL)SNDMSG((hwnd), LVM_GETINSERTMARK, (WPARAM) 0, (LPARAM) (lvim))
+
+Function ListView_GetInsertMark( hwnd : hwnd; lvim : lparam ):BOOL;
+Begin
+ Result:=BOOL(SendMessage((hwnd), LVM_GETINSERTMARK, WPARAM (0), LPARAM (lvim)));
+end;
+
+
+// Macro 142
+// #define ListView_InsertMarkHitTest(hwnd, point, lvim) \
+// (int)SNDMSG((hwnd), LVM_INSERTMARKHITTEST, (WPARAM)(LPPOINT)(point), (LPARAM)(LPLVINSERTMARK)(lvim))
+
+Function ListView_InsertMarkHitTest( hwnd : hwnd; point : LPPOINT; lvim : LPLVINSERTMARK):cint;
+Begin
+ Result:=cint(SendMessage((hwnd), LVM_INSERTMARKHITTEST, wparam(point), lparam(lvim)));
+end;
+
+
+// Macro 143
+// #define ListView_GetInsertMarkRect(hwnd, rc) \
+// (int)SNDMSG((hwnd), LVM_GETINSERTMARKRECT, (WPARAM)0, (LPARAM)(LPRECT)(rc))
+
+Function ListView_GetInsertMarkRect( hwnd : hwnd; rc : LPRECT):cint;
+Begin
+ Result:=cint(SendMessage((hwnd), LVM_GETINSERTMARKRECT, WPARAM(0), LPARAM(rc)))
+end;
+
+
+// Macro 144
+// #define ListView_SetInsertMarkColor(hwnd, color) \
+// (COLORREF)SNDMSG((hwnd), LVM_SETINSERTMARKCOLOR, (WPARAM)0, (LPARAM)(COLORREF)(color))
+
+Function ListView_SetInsertMarkColor( hwnd : hwnd; color : COLORREF):COLORREF;
+
+Begin
+ Result:=COLORREF(SendMessage((hwnd), LVM_SETINSERTMARKCOLOR, WPARAM(0), color));
+end;
+
+// Macro 145
+// #define ListView_GetInsertMarkColor(hwnd) \
+// (COLORREF)SNDMSG((hwnd), LVM_GETINSERTMARKCOLOR, (WPARAM)0, (LPARAM)0)
+
+Function ListView_GetInsertMarkColor( hwnd : hwnd):COLORREF;
+
+Begin
+ Result:=COLORREF(SendMessage((hwnd), LVM_GETINSERTMARKCOLOR, WPARAM(0), LPARAM(0)));
+end;
+
+// Macro 146
+// #define ListView_SetInfoTip(hwndLV, plvInfoTip)\
+// (BOOL)SNDMSG((hwndLV), LVM_SETINFOTIP, (WPARAM)0, (LPARAM)plvInfoTip)
+
+Function ListView_SetInfoTip( hwndLV : hwnd; plvInfoTip : LPARAM):BOOL;
+Begin
+ Result:=BOOL(SendMessage((hwndLV), LVM_SETINFOTIP, WPARAM(0), plvInfoTip));
+end;
+
+// Macro 147
+// #define ListView_GetSelectedColumn(hwnd) \
+// (UINT)SNDMSG((hwnd), LVM_GETSELECTEDCOLUMN, 0, 0)
+
+Function ListView_GetSelectedColumn( hwnd : hwnd):UINT;
+Begin
+ Result:=UINT(SendMessage((hwnd), LVM_GETSELECTEDCOLUMN, 0, 0));
+end;
+
+// Macro 148
+// #define ListView_IsGroupViewEnabled(hwnd) \
+// (BOOL)SNDMSG((hwnd), LVM_ISGROUPVIEWENABLED, 0, 0)
+
+Function ListView_IsGroupViewEnabled( hwnd : hwnd):BOOL;
+Begin
+ Result:=BOOL(SendMessage((hwnd), LVM_ISGROUPVIEWENABLED, 0, 0));
+end;
+
+// Macro 149
+// #define ListView_GetOutlineColor(hwnd) \
+// (COLORREF)SNDMSG((hwnd), LVM_GETOUTLINECOLOR, 0, 0)
+
+Function ListView_GetOutlineColor( hwnd : hwnd):COLORREF;
+Begin
+ Result:=COLORREF(SendMessage((hwnd), LVM_GETOUTLINECOLOR, 0, 0));
+end;
+
+
+// Macro 150
+// #define ListView_SetOutlineColor(hwnd, color) \
+// (COLORREF)SNDMSG((hwnd), LVM_SETOUTLINECOLOR, (WPARAM)0, (LPARAM)(COLORREF)(color))
+
+Function ListView_SetOutlineColor( hwnd : hwnd; color : COLORREF):COLORREF;
+Begin
+ Result:=COLORREF(SendMessage((hwnd), LVM_SETOUTLINECOLOR, WPARAM(0), color));
+end;
+
+// Macro 151
+// #define ListView_CancelEditLabel(hwnd) \
+// (VOID)SNDMSG((hwnd), LVM_CANCELEDITLABEL, (WPARAM)0, (LPARAM)0)
+
+procedure ListView_CancelEditLabel( hwnd : hwnd);
+Begin
+ SendMessage((hwnd), LVM_CANCELEDITLABEL, WPARAM(0), LPARAM(0));
+end;
+
+// Macro 152
+// #define ListView_MapIndexToID(hwnd, index) \
+// (UINT)SNDMSG((hwnd), LVM_MAPINDEXTOID, (WPARAM)index, (LPARAM)0)
+
+Function ListView_MapIndexToID( hwnd : hwnd; index : WPARAM):UINT;
+
+Begin
+ Result:=UINT(SendMessage((hwnd), LVM_MAPINDEXTOID, index, LPARAM(0)));
+end;
+
+// Macro 153
+// #define ListView_MapIDToIndex(hwnd, id) \
+// (UINT)SNDMSG((hwnd), LVM_MAPIDTOINDEX, (WPARAM)id, (LPARAM)0)
+
+Function ListView_MapIDToIndex( hwnd : hwnd; id : WPARAM):UINT;
+Begin
+ Result:=UINT(SendMessage((hwnd), LVM_MAPIDTOINDEX, id, LPARAM(0)));
+end;
+{$ENDIF}
+
+// Macro 154
+// #define ListView_SetBkImage(hwnd, plvbki) \
+// (BOOL)SNDMSG((hwnd), LVM_SETBKIMAGE, 0, (LPARAM)(plvbki))
+
+Function ListView_SetBkImage( hwnd : hwnd; plvbki : LPARAM):BOOL;
+Begin
+ Result:=BOOL(SendMessage((hwnd), LVM_SETBKIMAGE, 0, plvbki));
+end;
+
+// Macro 155
+// #define ListView_GetBkImage(hwnd, plvbki) \
+// (BOOL)SNDMSG((hwnd), LVM_GETBKIMAGE, 0, (LPARAM)(plvbki))
+
+Function ListView_GetBkImage( hwnd : hwnd; plvbki : LPARAM):BOOL;
+Begin
+ Result:=BOOL(SendMessage((hwnd), LVM_GETBKIMAGE, 0, plvbki));
+end;
+
+// Macro 156
+// #define TreeView_InsertItem(hwnd, lpis) \
+// (HTREEITEM)SNDMSG((hwnd), TVM_INSERTITEM, 0, (LPARAM)(LPTV_INSERTSTRUCT)(lpis))
+
+Function TreeView_InsertItem( hwnd : hwnd; lpis : LPTV_INSERTSTRUCT):HTREEITEM;inline;
+Begin
+ Result:=HTREEITEM(SendMessage((hwnd), TVM_INSERTITEM, 0, LPARAM(lpis)));
+end;
+
+
+Function TreeView_InsertItem( hwnd : hwnd; const lpis : TV_INSERTSTRUCT):HTREEITEM;inline;
+Begin
+ Result:=HTREEITEM(SendMessage((hwnd), TVM_INSERTITEM, 0, LPARAM(@lpis)));
+end;
+
+// Macro 157
+// #define TreeView_DeleteItem(hwnd, hitem) \
+// (BOOL)SNDMSG((hwnd), TVM_DELETEITEM, 0, (LPARAM)(HTREEITEM)(hitem))
+
+Function TreeView_DeleteItem( hwnd : hwnd; hitem : HTREEITEM):BOOL;
+Begin
+ Result:=BOOL(SendMessage((hwnd), TVM_DELETEITEM, 0, LPARAM(hitem)));
+end;
+
+
+// Macro 158
+// #define TreeView_DeleteAllItems(hwnd) \
+// (BOOL)SNDMSG((hwnd), TVM_DELETEITEM, 0, (LPARAM)TVI_ROOT)
+
+Function TreeView_DeleteAllItems( hwnd : hwnd):BOOL;
+Begin
+ Result:=BOOL(SendMessage((hwnd), TVM_DELETEITEM, 0, LPARAM(HTREEITEM(TVI_ROOT))));
+end;
+
+
+// Macro 159
+// #define TreeView_Expand(hwnd, hitem, code) \
+// (BOOL)SNDMSG((hwnd), TVM_EXPAND, (WPARAM)(code), (LPARAM)(HTREEITEM)(hitem))
+
+Function TreeView_Expand( hwnd : hwnd; hitem : HTREEITEM; code : WPARAM):BOOL;
+Begin
+ Result:=BOOL(SendMessage((hwnd), TVM_EXPAND, code, lparam(hitem)))
+end;
+
+
+// Macro 160
+// #define TreeView_GetItemRect(hwnd, hitem, prc, code) \
+// (*(HTREEITEM *)prc = (hitem), (BOOL)SNDMSG((hwnd), TVM_GETITEMRECT, (WPARAM)(code), (LPARAM)(RECT *)(prc)))
+
+Function TreeView_GetItemRect( hwnd : hwnd; hitem: HTREEITEM; code : WPARAM; prc : pRECT):BOOL;inline;
+Begin
+ HTREEITEM(prc):=HITEM;
+ Result:=Bool(SendMessage((hwnd), TVM_GETITEMRECT, code, LPARAM(prc)));
+end;
+
+Function TreeView_GetItemRect( hwnd : hwnd; hitem: HTREEITEM; var prc : TRECT;code : Bool):BOOL;inline;
+Begin
+ HTREEITEM(Pointer(@prc)^):=HITEM;
+ Result:=Bool(SendMessage((hwnd), TVM_GETITEMRECT, WPARAM(code), LPARAM(@prc)));
+end;
+
+// Macro 161
+// #define TreeView_GetCount(hwnd) \
+// (UINT)SNDMSG((hwnd), TVM_GETCOUNT, 0, 0)
+
+Function TreeView_GetCount( hwnd : hwnd):UINT;
+Begin
+ Result:=UINT(SendMessage((hwnd), TVM_GETCOUNT, 0, 0))
+end;
+
+// Macro 162
+// #define TreeView_GetIndent(hwnd) \
+// (UINT)SNDMSG((hwnd), TVM_GETINDENT, 0, 0)
+
+Function TreeView_GetIndent( hwnd : hwnd):UINT;
+Begin
+ Result:=UINT(SendMessage((hwnd), TVM_GETINDENT, 0, 0))
+end;
+
+
+// Macro 163
+// #define TreeView_SetIndent(hwnd, indent) \
+// (BOOL)SNDMSG((hwnd), TVM_SETINDENT, (WPARAM)(indent), 0)
+
+Function TreeView_SetIndent( hwnd : hwnd; indent : WPARAM):BOOL;
+Begin
+ Result:=BOOL(SendMessage((hwnd), TVM_SETINDENT, indent, 0))
+end;
+
+
+// Macro 164
+// #define TreeView_GetImageList(hwnd, iImage) \
+// (HIMAGELIST)SNDMSG((hwnd), TVM_GETIMAGELIST, iImage, 0)
+
+Function TreeView_GetImageList( hwnd : hwnd; iImage : cint ):HIMAGELIST;
+Begin
+ Result:=HIMAGELIST(SendMessage((hwnd), TVM_GETIMAGELIST, iImage, 0))
+end;
+
+
+// Macro 165
+// #define TreeView_SetImageList(hwnd, himl, iImage) \
+// (HIMAGELIST)SNDMSG((hwnd), TVM_SETIMAGELIST, iImage, (LPARAM)(HIMAGELIST)(himl))
+
+Function TreeView_SetImageList( hwnd : hwnd; himl : HIMAGELIST; iImage : cint ):HIMAGELIST;
+Begin
+ Result:=HIMAGELIST(SendMessage((hwnd), TVM_SETIMAGELIST, iImage, himl))
+end;
+
+// Macro 166
+// #define TreeView_GetNextItem(hwnd, hitem, code) \
+// (HTREEITEM)SNDMSG((hwnd), TVM_GETNEXTITEM, (WPARAM)(code), (LPARAM)(HTREEITEM)(hitem))
+
+Function TreeView_GetNextItem( hwnd : hwnd; hitem : HTREEITEM; code : WPARAM):HTREEITEM;
+
+Begin
+ Result:=HTREEITEM(SendMessage((hwnd), TVM_GETNEXTITEM, code, lparam(hitem)))
+end;
+
+
+// Macro 167
+
+function TreeView_GetChild(hwnd:hwnd; hitem:HTREEITEM) : HTREEITEM;
+
+Begin
+ Result:=TreeView_GetNextItem(hwnd, hitem, TVGN_CHILD)
+End;
+// Macro 168
+
+// #define TreeView_GetNextSibling(hwnd:hwnd; hitem:HTREEITEM);
+// (hwnd, hitem)
+// TreeView_GetNextItem(hwnd, hitem, TVGN_NEXT)
+
+
+
+function TreeView_GetNextSibling(hwnd:hwnd; hitem:HTREEITEM) : HTREEITEM;
+// (hwnd, hitem)
+// TreeView_GetNextItem(hwnd, hitem, TVGN_NEXT)
+
+Begin
+ Result:=TreeView_getNextItem(hwnd,hitem,TVGN_NEXT);
+end;
+
+// Macro 169
+function TreeView_GetPrevSibling(hwnd:hwnd; hitem:HTREEITEM) : HTREEITEM;
+begin
+ Result:=TreeView_GetNextItem(hwnd, hitem, TVGN_PREVIOUS);
+end;
+
+// Macro 170
+
+function TreeView_GetParent(hwnd:hwnd; hitem:HTREEITEM) : HTREEITEM;
+begin
+ Result:=TreeView_GetNextItem(hwnd, hitem, TVGN_PARENT)
+end;
+
+// Macro 171
+// #define TreeView_GetFirstVisible(hwnd:hwnd);
+// TreeView_GetNextItem(hwnd, NULL, TVGN_FIRSTVISIBLE)
+
+function TreeView_GetFirstVisible(hwnd:hwnd) : HTREEITEM;inline;
+begin
+ Result:=TreeView_GetNextItem(hwnd, NIL, TVGN_FIRSTVISIBLE)
+end;
+
+// Macro 172
+
+//#define TreeView_GetNextVisible(hwnd:hwnd; hitem:HTREEITEM);
+//(hwnd, hitem) TreeView_GetNextItem(hwnd, hitem, TVGN_NEXTVISIBLE)
+function TreeView_GetNextVisible(hwnd:hwnd; hitem:HTREEITEM) : HTREEITEM;inline;
+begin
+ Result:=TreeView_GetNextItem(hwnd, hitem, TVGN_NEXTVISIBLE)
+end;
+
+// Macro 173
+//#define TreeView_GetPrevVisible(hwnd:hwnd; hitem:HTREEITEM);
+// (hwnd, hitem) TreeView_GetNextItem(hwnd, hitem, TVGN_PREVIOUSVISIBLE)
+
+
+function TreeView_GetPrevVisible(hwnd:hwnd; hitem:HTREEITEM) : HTREEITEM;inline;
+Begin
+ Result:=TreeView_GetNextItem(hwnd, hitem, TVGN_PREVIOUSVISIBLE);
+end;
+
+// Macro 174
+
+function TreeView_GetSelection(hwnd:hwnd) : HTREEITEM;inline;
+begin
+ Result:=TreeView_GetNextItem(hwnd, NIL, TVGN_CARET);
+end;
+
+// Macro 175
+
+//#define TreeView_GetDropHilight(hwnd:hwnd);
+//TreeView_GetNextItem(hwnd, NULL, TVGN_DROPHILITE)
+
+function TreeView_GetDropHilight(hwnd:hwnd) : HTREEITEM;inline;
+
+begin
+ Result:=TreeView_GetNextItem(hwnd, NIL, TVGN_DROPHILITE);
+end;
+
+function TreeView_GetDropHilite(hwnd:hwnd) : HTREEITEM;inline;
+
+begin
+ Result:=TreeView_GetNextItem(hwnd, NIL, TVGN_DROPHILITE);
+end;
+
+
+// Macro 176
+
+function TreeView_GetRoot(hwnd:hwnd) : HTREEITEM;inline;
+
+begin
+ TreeView_GetNextItem(hwnd, NIL, TVGN_ROOT);
+end;
+
+// Macro 177
+//#define TreeView_GetLastVisible(hwnd:hwnd);
+//TreeView_GetNextItem(hwnd, NULL, TVGN_LASTVISIBLE)
+
+function TreeView_GetLastVisible(hwnd:hwnd) : HTREEITEM;inline;
+begin
+ TreeView_GetNextItem(hwnd, NIL, TVGN_LASTVISIBLE)
+end;
+
+// Macro 178
+
+
+Function TreeView_Select( hwnd : hwnd; hitem : HTREEITEM; code : WPARAM):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), TVM_SELECTITEM, code, LPARAM(hitem)))
+end;
+
+// Macro 179
+// #define TreeView_SelectItem(hwnd, hitem) TreeView_Select(hwnd, hitem, TVGN_CARET)
+// Macro 180
+// #define TreeView_SelectDropTarget(hwnd, hitem) TreeView_Select(hwnd, hitem, TVGN_DROPHILITE)
+// Macro 181
+// #define TreeView_SelectSetFirstVisible(hwnd, hitem) TreeView_Select(hwnd, hitem, TVGN_FIRSTVISIBLE)
+
+// Macro 179
+Procedure TreeView_SelectItem(hwnd:hwnd; hitem:HTREEITEM);
+Begin
+ TreeView_Select(hwnd, hitem, TVGN_CARET)
+End;
+
+// Macro 180
+Procedure TreeView_SelectDropTarget(hwnd:hwnd; hitem:HTREEITEM);
+Begin
+ TreeView_Select(hwnd, hitem, TVGN_DROPHILITE)
+End;
+
+// Macro 181
+Procedure TreeView_SelectSetFirstVisible(hwnd:hwnd; hitem:HTREEITEM);
+Begin
+ TreeView_Select(hwnd, hitem, TVGN_FIRSTVISIBLE)
+End;
+
+// Macro 182
+// #define TreeView_GetItem(hwnd, pitem) \
+// (BOOL)SNDMSG((hwnd), TVM_GETITEM, 0, (LPARAM)(TV_ITEM *)(pitem))
+
+Function TreeView_GetItem( hwnd : hwnd;var pitem : TV_ITEM ):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), TVM_GETITEM, 0, LPARAM(@pitem)))
+end;
+
+
+// Macro 183
+
+//#define TreeView_SetItem(hwnd, pitem) \
+// (BOOL)SNDMSG((hwnd), TVM_SETITEM, 0, (LPARAM)(const TV_ITEM *)(pitem))
+
+Function TreeView_SetItem( hwnd : hwnd;const pitem : TV_ITEM ):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), TVM_SETITEM, 0, LParam(@pitem)))
+end;
+
+
+// Macro 184
+
+//#define TreeView_EditLabel(hwnd, hitem) \
+// (HWND)SNDMSG((hwnd), TVM_EDITLABEL, 0, (LPARAM)(HTREEITEM)(hitem))
+
+Function TreeView_EditLabel( hwnd : hwnd; hitem : HTREEITEM):HWND;
+
+Begin
+ Result:=Windows.HWND(SendMessage((hwnd), TVM_EDITLABEL, 0, LParam(hitem)))
+end;
+
+
+// Macro 185
+
+//#define TreeView_GetEditControl(hwnd) \
+// (HWND)SNDMSG((hwnd), TVM_GETEDITCONTROL, 0, 0)
+
+Function TreeView_GetEditControl( hwnd : hwnd):HWND;
+
+Begin
+ Result:=Windows.HWND(SendMessage((hwnd), TVM_GETEDITCONTROL, 0, 0))
+end;
+
+
+// Macro 186
+
+//#define TreeView_GetVisibleCount(hwnd) \
+// (UINT)SNDMSG((hwnd), TVM_GETVISIBLECOUNT, 0, 0)
+
+Function TreeView_GetVisibleCount( hwnd : hwnd):UINT;
+
+Begin
+ Result:=UINT(SendMessage((hwnd), TVM_GETVISIBLECOUNT, 0, 0))
+end;
+
+
+// Macro 187
+
+//#define TreeView_HitTest(hwnd, lpht) \
+// (HTREEITEM)SNDMSG((hwnd), TVM_HITTEST, 0, (LPARAM)(LPTV_HITTESTINFO)(lpht))
+
+Function TreeView_HitTest( hwnd : hwnd; lpht : LPTV_HITTESTINFO):HTREEITEM;inline;
+
+Begin
+ Result:=HTREEITEM(SendMessage((hwnd), TVM_HITTEST, 0, lparam(lpht)))
+end;
+
+
+Function TreeView_HitTest( hwnd : hwnd; var lpht : TV_HITTESTINFO):HTREEITEM;inline;
+
+Begin
+ Result:=HTREEITEM(SendMessage((hwnd), TVM_HITTEST, 0, lparam(@lpht)))
+end;
+// Macro 188
+
+//#define TreeView_CreateDragImage(hwnd, hitem) \
+// (HIMAGELIST)SNDMSG((hwnd), TVM_CREATEDRAGIMAGE, 0, (LPARAM)(HTREEITEM)(hitem))
+
+Function TreeView_CreateDragImage( hwnd : hwnd; hitem : HTREEITEM):HIMAGELIST;
+
+Begin
+ Result:=HIMAGELIST(SendMessage((hwnd), TVM_CREATEDRAGIMAGE, 0, Lparam(hitem)))
+end;
+
+
+// Macro 189
+
+//#define TreeView_SortChildren(hwnd, hitem, recurse) \
+// (BOOL)SNDMSG((hwnd), TVM_SORTCHILDREN, (WPARAM)(recurse), (LPARAM)(HTREEITEM)(hitem))
+
+Function TreeView_SortChildren( hwnd : hwnd; hitem : HTREEITEM; recurse : WPARAM):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), TVM_SORTCHILDREN, recurse, LParam(hitem)))
+end;
+
+
+// Macro 190
+
+//#define TreeView_EnsureVisible(hwnd, hitem) \
+// (BOOL)SNDMSG((hwnd), TVM_ENSUREVISIBLE, 0, (LPARAM)(HTREEITEM)(hitem))
+
+Function TreeView_EnsureVisible( hwnd : hwnd; hitem : HTREEITEM):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), TVM_ENSUREVISIBLE, 0, LParam(hitem)))
+end;
+
+
+// Macro 191
+
+//#define TreeView_SortChildrenCB(hwnd, psort, recurse) \
+// (BOOL)SNDMSG((hwnd), TVM_SORTCHILDRENCB, (WPARAM)(recurse), \
+// (LPARAM)(LPTV_SORTCB)(psort))
+
+Function TreeView_SortChildrenCB( hwnd : hwnd;psort :lpTV_sortcb; recurse : WPARAM):BOOL;inline;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), TVM_SORTCHILDRENCB, recurse, LPARAM(psort)))
+end;
+
+
+Function TreeView_SortChildrenCB( hwnd : hwnd;const psort :tagTVsortcb; recurse : WPARAM):BOOL;inline;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), TVM_SORTCHILDRENCB, recurse, LPARAM(@psort)))
+end;
+
+
+// Macro 192
+
+//#define TreeView_EndEditLabelNow(hwnd, fCancel) \
+// (BOOL)SNDMSG((hwnd), TVM_ENDEDITLABELNOW, (WPARAM)(fCancel), 0)
+
+Function TreeView_EndEditLabelNow( hwnd : hwnd; fCancel : WPARAM):BOOL;inline;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), TVM_ENDEDITLABELNOW, fCancel, 0))
+end;
+
+
+Function TreeView_EndEditLabelNow( hwnd : hwnd; fCancel : Bool):BOOL;inline;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), TVM_ENDEDITLABELNOW, WPARAM(fCancel), 0))
+end;
+
+
+// Macro 193
+
+//#define TreeView_SetToolTips(hwnd, hwndTT) \
+// (HWND)SNDMSG((hwnd), TVM_SETTOOLTIPS, (WPARAM)(hwndTT), 0)
+
+Function TreeView_SetToolTips( hwnd : hwnd; hwndTT : WPARAM):HWND;
+
+Begin
+ Result:=Windows.HWND(SendMessage((hwnd), TVM_SETTOOLTIPS, hwndTT, 0))
+end;
+
+
+// Macro 194
+
+//#define TreeView_GetToolTips(hwnd) \
+// (HWND)SNDMSG((hwnd), TVM_GETTOOLTIPS, 0, 0)
+
+Function TreeView_GetToolTips( hwnd : hwnd):HWND;
+
+Begin
+ Result:=Windows.HWND(SendMessage((hwnd), TVM_GETTOOLTIPS, 0, 0))
+end;
+
+
+// Macro 195
+
+//#define TreeView_GetISearchString(hwndTV, lpsz) \
+// (BOOL)SNDMSG((hwndTV), TVM_GETISEARCHSTRING, 0, (LPARAM)(LPTSTR)(lpsz))
+
+Function TreeView_GetISearchString( hwndTV : hwnd; lpsz : LPTSTR):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwndTV), TVM_GETISEARCHSTRING, 0, LPARAM(lpsz)))
+end;
+
+
+// Macro 196
+
+//#define TreeView_SetInsertMark(hwnd, hItem, fAfter) \
+// (BOOL)SNDMSG((hwnd), TVM_SETINSERTMARK, (WPARAM) (fAfter), (LPARAM) (hItem))
+
+Function TreeView_SetInsertMark( hwnd : hwnd; hItem : LParam ; fAfter : WParam ):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), TVM_SETINSERTMARK, (fAfter), (hItem)))
+end;
+
+
+// Macro 197
+
+//#define TreeView_SetUnicodeFormat(hwnd, fUnicode) \
+// (BOOL)SNDMSG((hwnd), TVM_SETUNICODEFORMAT, (WPARAM)(fUnicode), 0)
+
+Function TreeView_SetUnicodeFormat( hwnd : hwnd; fUnicode : WPARAM):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), TVM_SETUNICODEFORMAT, fUnicode, 0))
+end;
+
+
+// Macro 198
+
+//#define TreeView_GetUnicodeFormat(hwnd) \
+// (BOOL)SNDMSG((hwnd), TVM_GETUNICODEFORMAT, 0, 0)
+
+Function TreeView_GetUnicodeFormat( hwnd : hwnd):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), TVM_GETUNICODEFORMAT, 0, 0))
+end;
+
+
+// Macro 199
+
+//#define TreeView_SetItemHeight(hwnd, iHeight) \
+// (int)SNDMSG((hwnd), TVM_SETITEMHEIGHT, (WPARAM)(iHeight), 0)
+
+Function TreeView_SetItemHeight( hwnd : hwnd; iHeight : WPARAM):cint;
+
+Begin
+ Result:=cint(SendMessage((hwnd), TVM_SETITEMHEIGHT, iHeight, 0))
+end;
+
+
+// Macro 200
+
+//#define TreeView_GetItemHeight(hwnd) \
+// (int)SNDMSG((hwnd), TVM_GETITEMHEIGHT, 0, 0)
+
+Function TreeView_GetItemHeight( hwnd : hwnd):cint;
+
+Begin
+ Result:=cint(SendMessage((hwnd), TVM_GETITEMHEIGHT, 0, 0))
+end;
+
+
+// Macro 201
+
+//#define TreeView_SetBkColor(hwnd, clr) \
+// (COLORREF)SNDMSG((hwnd), TVM_SETBKCOLOR, 0, (LPARAM)(clr))
+
+Function TreeView_SetBkColor( hwnd : hwnd; clr : LPARAM):COLORREF;
+
+Begin
+ Result:=COLORREF(SendMessage((hwnd), TVM_SETBKCOLOR, 0, clr))
+end;
+
+
+// Macro 202
+
+//#define TreeView_SetTextColor(hwnd, clr) \
+// (COLORREF)SNDMSG((hwnd), TVM_SETTEXTCOLOR, 0, (LPARAM)(clr))
+
+Function TreeView_SetTextColor( hwnd : hwnd; clr : LPARAM):COLORREF;
+
+Begin
+ Result:=COLORREF(SendMessage((hwnd), TVM_SETTEXTCOLOR, 0, clr))
+end;
+
+
+// Macro 203
+
+//#define TreeView_GetBkColor(hwnd) \
+// (COLORREF)SNDMSG((hwnd), TVM_GETBKCOLOR, 0, 0)
+
+Function TreeView_GetBkColor( hwnd : hwnd):COLORREF;
+
+Begin
+ Result:=COLORREF(SendMessage((hwnd), TVM_GETBKCOLOR, 0, 0))
+end;
+
+
+// Macro 204
+
+//#define TreeView_GetTextColor(hwnd) \
+// (COLORREF)SNDMSG((hwnd), TVM_GETTEXTCOLOR, 0, 0)
+
+Function TreeView_GetTextColor( hwnd : hwnd):COLORREF;
+
+Begin
+ Result:=COLORREF(SendMessage((hwnd), TVM_GETTEXTCOLOR, 0, 0))
+end;
+
+
+// Macro 205
+
+//#define TreeView_SetScrollTime(hwnd, uTime) \
+// (UINT)SNDMSG((hwnd), TVM_SETSCROLLTIME, uTime, 0)
+
+Function TreeView_SetScrollTime( hwnd : hwnd; uTime : wparam ):UINT;
+
+Begin
+ Result:=UINT(SendMessage((hwnd), TVM_SETSCROLLTIME, uTime, 0))
+end;
+
+
+// Macro 206
+
+//#define TreeView_GetScrollTime(hwnd) \
+// (UINT)SNDMSG((hwnd), TVM_GETSCROLLTIME, 0, 0)
+
+Function TreeView_GetScrollTime( hwnd : hwnd):UINT;
+
+Begin
+ Result:=UINT(SendMessage((hwnd), TVM_GETSCROLLTIME, 0, 0))
+end;
+
+
+// Macro 207
+
+//#define TreeView_SetInsertMarkColor(hwnd, clr) \
+// (COLORREF)SNDMSG((hwnd), TVM_SETINSERTMARKCOLOR, 0, (LPARAM)(clr))
+
+Function TreeView_SetInsertMarkColor( hwnd : hwnd; clr : LPARAM):COLORREF;
+
+Begin
+ Result:=COLORREF(SendMessage((hwnd), TVM_SETINSERTMARKCOLOR, 0, clr))
+end;
+
+
+// Macro 208
+
+//#define TreeView_GetInsertMarkColor(hwnd) \
+// (COLORREF)SNDMSG((hwnd), TVM_GETINSERTMARKCOLOR, 0, 0)
+
+Function TreeView_GetInsertMarkColor( hwnd : hwnd):COLORREF;
+
+Begin
+ Result:=COLORREF(SendMessage((hwnd), TVM_GETINSERTMARKCOLOR, 0, 0))
+end;
+
+
+// Macro 209
+
+//#define TreeView_SetItemState(hwndTV, hti, data, _mask) \
+// { TVITEM _ms_TVi;\
+// _ms_TVi.mask = TVIF_STATE; \
+// _ms_TVi.hItem = hti; \
+// _ms_TVi.stateMask = _mask;\
+// _ms_TVi.state = data;\
+// SNDMSG((hwndTV), TVM_SETITEM, 0, (LPARAM)(TV_ITEM *)&_ms_TVi);\
+// }
+
+Procedure TreeView_SetItemState(hwndTV:HWND;hti:HTreeItem;data:UINT;_mask:UINT);
+
+var _ms_TVi : TVITEM;
+
+Begin
+ _ms_TVi.mask:=TVIF_STATE;
+ _ms_TVi.hItem := hti;
+ _ms_TVi.stateMask := _mask;
+ _ms_TVi.state := data;
+ SendMessage(hwndTV,TVM_SETITEM, 0, LPARAM(@_ms_TVi));
+end;
+
+
+// Macro 210
+
+//#define TreeView_SetCheckState(hwndTV, hti, fCheck) \
+// TreeView_SetItemState(hwndTV, hti, INDEXTOSTATEIMAGEMASK((fCheck)?2:1), TVIS_STATEIMAGEMASK)
+
+Procedure TreeView_SetCheckState( hwndTV : hwnd; hti : HTreeItem ; fCheck : bool );
+
+var j : cint;
+
+Begin
+ IF not fCheck Then // (or inc(longint(fCheck)) if you like it dirty)
+ j:=1
+ Else
+ j:=2;
+
+ TreeView_SetItemState(hwndTV, hti, INDEXTOSTATEIMAGEMASK(j), TVIS_STATEIMAGEMASK)
+end;
+
+
+{$ifdef IE5plus}
+// Macro 211
+
+//#define TreeView_GetItemState(hwndTV, hti, mask) \
+// (UINT)SNDMSG((hwndTV), TVM_GETITEMSTATE, (WPARAM)(hti), (LPARAM)(mask))
+
+Function TreeView_GetItemState( hwndTV : hwnd; hti : 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, LPARAM(0)))
+end;
+
+
+// Macro 218
+
+//#define TabCtrl_SetImageList(hwnd, himl) \
+// (HIMAGELIST)SNDMSG((hwnd), TCM_SETIMAGELIST, 0, (LPARAM)(HIMAGELIST)(himl))
+
+Function TabCtrl_SetImageList( hwnd : hwnd; himl : HIMAGELIST):HIMAGELIST;
+
+Begin
+ Result:=HIMAGELIST(SendMessage((hwnd), TCM_SETIMAGELIST, 0, himl))
+end;
+
+
+// Macro 219
+
+//#define TabCtrl_GetItemCount(hwnd) \
+// (int)SNDMSG((hwnd), TCM_GETITEMCOUNT, 0, DWord(0))
+
+Function TabCtrl_GetItemCount( hwnd : hwnd):cint;
+
+Begin
+ Result:=cint(SendMessage((hwnd), TCM_GETITEMCOUNT, 0, LPARAM(0)))
+end;
+
+
+// Macro 220
+
+//#define TabCtrl_GetItem(hwnd, iItem, pitem) \
+// (BOOL)SNDMSG((hwnd), TCM_GETITEM, (WPARAM)(int)(iItem), (LPARAM)(TC_ITEM *)(pitem))
+
+Function TabCtrl_GetItem( hwnd : hwnd; iItem : cint;var pitem : TC_ITEM ):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), TCM_GETITEM, iItem, LPARAM(@pitem)))
+end;
+
+
+// Macro 221
+
+//#define TabCtrl_SetItem(hwnd, iItem, pitem) \
+// (BOOL)SNDMSG((hwnd), TCM_SETITEM, (WPARAM)(int)(iItem), (LPARAM)(TC_ITEM *)(pitem))
+
+Function TabCtrl_SetItem( hwnd : hwnd; iItem : cint;var pitem : TC_ITEM ):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), TCM_SETITEM, iItem, LPARAM(@pitem)))
+end;
+
+
+// Macro 222
+
+//#define TabCtrl_InsertItem(hwnd, iItem, pitem) \
+// (int)SNDMSG((hwnd), TCM_INSERTITEM, (WPARAM)(int)(iItem), (LPARAM)(const TC_ITEM *)(pitem))
+
+Function TabCtrl_InsertItem( hwnd : hwnd; iItem : cint;const pitem : TC_ITEM ):cint;
+
+Begin
+ Result:=cint(SendMessage((hwnd), TCM_INSERTITEM, iItem, LPARAM(@pitem)))
+end;
+
+
+// Macro 223
+
+//#define TabCtrl_DeleteItem(hwnd, i) \
+// (BOOL)SNDMSG((hwnd), TCM_DELETEITEM, (WPARAM)(int)(i), DWord(0))
+
+Function TabCtrl_DeleteItem( hwnd : hwnd; i : cint):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), TCM_DELETEITEM, (i), LPARAM(0)))
+end;
+
+
+// Macro 224
+
+//#define TabCtrl_DeleteAllItems(hwnd) \
+// (BOOL)SNDMSG((hwnd), TCM_DELETEALLITEMS, 0, DWord(0))
+
+Function TabCtrl_DeleteAllItems( hwnd : hwnd):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), TCM_DELETEALLITEMS, 0, LPARAM(0)))
+end;
+
+
+// Macro 225
+
+//#define TabCtrl_GetItemRect(hwnd, i, prc) \
+// (BOOL)SNDMSG((hwnd), TCM_GETITEMRECT, (WPARAM)(int)(i), (LPARAM)(RECT *)(prc))
+
+Function TabCtrl_GetItemRect( hwnd : hwnd; i : cint;var prc : RECT ):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), TCM_GETITEMRECT, (i), LPARAM(@prc)))
+end;
+
+
+// Macro 226
+
+//#define TabCtrl_GetCurSel(hwnd) \
+// (int)SNDMSG((hwnd), TCM_GETCURSEL, 0, 0)
+
+Function TabCtrl_GetCurSel( hwnd : hwnd):cint;
+
+Begin
+ Result:=cint(SendMessage((hwnd), TCM_GETCURSEL, 0, 0))
+end;
+
+
+// Macro 227
+
+//#define TabCtrl_SetCurSel(hwnd, i) \
+// (int)SNDMSG((hwnd), TCM_SETCURSEL, (WPARAM)(i), 0)
+
+Function TabCtrl_SetCurSel( hwnd : hwnd; i : WPARAM):cint;
+
+Begin
+ Result:=cint(SendMessage((hwnd), TCM_SETCURSEL, (i), 0))
+end;
+
+
+// Macro 228
+
+//#define TabCtrl_HitTest(hwndTC, pinfo) \
+// (int)SNDMSG((hwndTC), TCM_HITTEST, 0, (LPARAM)(TC_HITTESTINFO *)(pinfo))
+
+Function TabCtrl_HitTest( hwndTC : hwnd;var pinfo : TC_HITTESTINFO ):cint;inline;
+
+Begin
+ Result:=cint(SendMessage((hwndTC), TCM_HITTEST, 0, LPARAM(@pinfo)))
+end;
+
+
+Function TabCtrl_HitTest( hwndTC : hwnd;pinfo : LPTCHITTESTINFO ):cint;inline;
+
+Begin
+ Result:=cint(SendMessage((hwndTC), TCM_HITTEST, 0, LPARAM(@pinfo)))
+end;
+
+
+// Macro 229
+
+//#define TabCtrl_SetItemExtra(hwndTC, cb) \
+// (BOOL)SNDMSG((hwndTC), TCM_SETITEMEXTRA, (WPARAM)(cb), DWord(0))
+
+Function TabCtrl_SetItemExtra( hwndTC : hwnd; cb : WPARAM):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwndTC), TCM_SETITEMEXTRA, cb, LPARAM(0)))
+end;
+
+
+// Macro 230
+
+//#define TabCtrl_AdjustRect(hwnd, bLarger, prc) \
+// (int)SNDMSG(hwnd, TCM_ADJUSTRECT, (WPARAM)(BOOL)(bLarger), (LPARAM)(RECT *)prc)
+
+Function TabCtrl_AdjustRect( hwnd : hwnd; bLarger : BOOL;var prc : RECT ):cint;
+
+Begin
+ Result:=cint(SendMessage(hwnd, TCM_ADJUSTRECT, Wparam(bLarger), Lparam(@prc)));
+end;
+
+
+// Macro 231
+
+//#define TabCtrl_SetItemSize(hwnd, x, y) \
+// (DWORD)SNDMSG((hwnd), TCM_SETITEMSIZE, 0, MAKELPARAM(x,y))
+
+Function TabCtrl_SetItemSize( hwnd : hwnd; x : wparam ; y : lparam ):DWORD;
+
+Begin
+ Result:=DWORD(SendMessage((hwnd), TCM_SETITEMSIZE, 0, MAKELPARAM(x,y)))
+end;
+
+
+// Macro 232
+
+//#define TabCtrl_RemoveImage(hwnd, i) \
+// (void)SNDMSG((hwnd), TCM_REMOVEIMAGE, i, DWord(0))
+
+Procedure TabCtrl_RemoveImage( hwnd : hwnd; i : WPARAM);
+
+Begin
+SendMessage((hwnd), TCM_REMOVEIMAGE, i, LPARAM(0))
+end;
+
+
+// Macro 233
+
+//#define TabCtrl_SetPadding(hwnd, cx, cy) \
+// (void)SNDMSG((hwnd), TCM_SETPADDING, 0, MAKELPARAM(cx, cy))
+
+Procedure TabCtrl_SetPadding( hwnd : hwnd; cx : WPARAM ; cy : LPARAM );
+
+Begin
+SendMessage((hwnd), TCM_SETPADDING, 0, MAKELPARAM(cx, cy))
+end;
+
+
+// Macro 234
+
+//#define TabCtrl_GetRowCount(hwnd) \
+// (int)SNDMSG((hwnd), TCM_GETROWCOUNT, 0, DWord(0))
+
+Function TabCtrl_GetRowCount( hwnd : hwnd):cint;
+
+Begin
+ Result:=cint(SendMessage((hwnd), TCM_GETROWCOUNT, 0, LPARAM(0)))
+end;
+
+
+// Macro 235
+
+//#define TabCtrl_GetToolTips(hwnd) \
+// (HWND)SNDMSG((hwnd), TCM_GETTOOLTIPS, 0, DWord(0))
+
+Function TabCtrl_GetToolTips( hwnd : hwnd):HWND;
+
+Begin
+ Result:=Windows.HWND(SendMessage((hwnd), TCM_GETTOOLTIPS, 0, LPARAM(0)))
+end;
+
+
+// Macro 236
+
+//#define TabCtrl_SetToolTips(hwnd, hwndTT) \
+// (void)SNDMSG((hwnd), TCM_SETTOOLTIPS, (WPARAM)(hwndTT), DWord(0))
+
+Procedure TabCtrl_SetToolTips( hwnd : hwnd; hwndTT : WPARAM);
+
+Begin
+SendMessage((hwnd), TCM_SETTOOLTIPS, hwndTT, LPARAM(0))
+end;
+
+
+// Macro 237
+
+//#define TabCtrl_GetCurFocus(hwnd) \
+// (int)SNDMSG((hwnd), TCM_GETCURFOCUS, 0, 0)
+
+Function TabCtrl_GetCurFocus( hwnd : hwnd):cint;
+
+Begin
+ Result:=cint(SendMessage((hwnd), TCM_GETCURFOCUS, 0, 0))
+end;
+
+
+// Macro 238
+
+//#define TabCtrl_SetCurFocus(hwnd, i) \
+// SNDMSG((hwnd),TCM_SETCURFOCUS, i, 0)
+
+Procedure TabCtrl_SetCurFocus( hwnd : hwnd; i : LPARAM );
+
+Begin
+SendMessage((hwnd),TCM_SETCURFOCUS, i, 0)
+end;
+
+
+// Macro 239
+
+//#define TabCtrl_SetMinTabWidth(hwnd, x) \
+// (int)SNDMSG((hwnd), TCM_SETMINTABWIDTH, 0, x)
+
+Function TabCtrl_SetMinTabWidth( hwnd : hwnd; x : WPARAM ):cint;
+
+Begin
+ Result:=cint(SendMessage((hwnd), TCM_SETMINTABWIDTH, 0, x))
+end;
+
+
+// Macro 240
+
+//#define TabCtrl_DeselectAll(hwnd, fExcludeFocus)\
+// (void)SNDMSG((hwnd), TCM_DESELECTALL, fExcludeFocus, 0)
+
+Procedure TabCtrl_DeselectAll( hwnd : hwnd; fExcludeFocus : WPARAM );
+
+Begin
+SendMessage((hwnd), TCM_DESELECTALL, fExcludeFocus, 0)
+end;
+
+
+// Macro 241
+
+//#define TabCtrl_HighlightItem(hwnd, i, fHighlight) \
+// (BOOL)SNDMSG((hwnd), TCM_HIGHLIGHTITEM, (WPARAM)(i), (LPARAM)MAKELONG (fHighlight, 0))
+
+Function TabCtrl_HighlightItem( hwnd : hwnd; i : WPARAM; fHighlight :bool ):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), TCM_HIGHLIGHTITEM, (i), LPARAM(MAKELONG (cint(fHighlight), 0))))
+end;
+
+
+// Macro 242
+
+//#define TabCtrl_SetExtendedStyle(hwnd, dw)\
+// (DWORD)SNDMSG((hwnd), TCM_SETEXTENDEDSTYLE, 0, dw)
+
+Function TabCtrl_SetExtendedStyle( hwnd : hwnd; dw : LPARAM):DWORD;
+
+Begin
+ Result:=DWORD(SendMessage((hwnd), TCM_SETEXTENDEDSTYLE, 0,lparam(dw)))
+end;
+
+
+// Macro 243
+
+//#define TabCtrl_GetExtendedStyle(hwnd)\
+// (DWORD)SNDMSG((hwnd), TCM_GETEXTENDEDSTYLE, 0, 0)
+
+Function TabCtrl_GetExtendedStyle( hwnd : hwnd):DWORD;
+
+Begin
+ Result:=DWORD(SendMessage((hwnd), TCM_GETEXTENDEDSTYLE, 0, 0))
+end;
+
+
+// Macro 244
+
+//#define TabCtrl_SetUnicodeFormat(hwnd, fUnicode) \
+// (BOOL)SNDMSG((hwnd), TCM_SETUNICODEFORMAT, (WPARAM)(fUnicode), 0)
+
+Function TabCtrl_SetUnicodeFormat( hwnd : hwnd; fUnicode : WPARAM):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), TCM_SETUNICODEFORMAT, fUnicode, 0))
+end;
+
+
+// Macro 245
+
+//#define TabCtrl_GetUnicodeFormat(hwnd) \
+// (BOOL)SNDMSG((hwnd), TCM_GETUNICODEFORMAT, 0, 0)
+
+Function TabCtrl_GetUnicodeFormat( hwnd : hwnd):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), TCM_GETUNICODEFORMAT, 0, 0));
+end;
+
+
+// Macro 246
+
+//#define Animate_Create(hwndP, id, dwStyle, hInstance) \
+// CreateWindow(ANIMATE_CLASS, NULL, \
+// dwStyle, 0, 0, 0, 0, hwndP, (HMENU)(id), hInstance, NULL)
+
+Function Animate_Create(hwndP :HWND;id:HMENU;dwStyle:dword;hInstance:HINST):HWND;
+
+Begin
+ result:=CreateWindow(ANIMATE_CLASS, NIL,
+ dwStyle, 0, 0, 0, 0, hwndP, id, hInstance, NIL);
+end;
+
+
+// Macro 247
+//#define Animate_Open(hwnd, szName) (BOOL)SNDMSG(hwnd, ACM_OPEN, 0, (LPARAM)(LPTSTR)(szName))
+
+Function Animate_Open(hwndP :HWND;szName:LPTSTR):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage(hwndp, ACM_OPEN, 0, LPARAM(szName)));
+end;
+
+
+// Macro 248
+//#define Animate_OpenEx(hwnd, hInst, szName) (BOOL)SNDMSG(hwnd, ACM_OPEN, (WPARAM)(hInst), (LPARAM)(LPTSTR)(szName))
+
+Function Animate_OpenEx(hwndP :HWND;HInst:HInst; szName:LPTSTR):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage(hwndp, ACM_OPEN, hinst, LPARAM(szName)));
+end;
+
+
+// Macro 249
+//#define Animate_Play(hwnd, from, to, rep) (BOOL)SNDMSG(hwnd, ACM_PLAY, (WPARAM)(rep), (LPARAM)MAKELONG(from, to))
+
+Function Animate_Play(hwndP :HWND;from,_to,rep:uint):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage(hwndP, ACM_PLAY, wparam(rep), LPARAM(MAKELONG(From,_to))));
+end;
+
+
+// Macro 250
+//#define Animate_Stop(hwnd) (BOOL)SNDMSG(hwnd, ACM_STOP, 0, 0)
+
+Function Animate_stop(hwndP :HWND):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage(hwndP, ACM_STOP, 0, 0));
+end;
+
+
+// Macro 251
+//#define Animate_Close(hwnd) Animate_Open(hwnd, NULL)
+
+Function Animate_close(hwndP :HWND):BOOL;
+
+Begin
+ Result:=BOOL(Animate_Open(hwndP,NIL));
+end;
+
+
+// Macro 252
+//#define Animate_Seek(hwnd, frame) Animate_Play(hwnd, frame, frame, 1)
+
+Function Animate_Seek(hwndP :HWND;frame:uint):BOOL;
+
+Begin
+ Result:=BOOL(Animate_Play(hwndP,frame,frame,1));
+end;
+
+// Macro 253
+//#define MonthCal_GetCurSel(hmc, pst) (BOOL)SNDMSG(hmc, MCM_GETCURSEL, 0, (LPARAM)(pst))
+
+function MonthCal_GetCurSel(hwndMC:HWND; lpSysTime :LPSYSTEMTIME):Bool;
+
+begin
+ Result:=BOOL(SendMessage(hwndmc, MCM_GETCURSEL , 0, LPARAM(lpsystime)));
+end;
+
+// Macro 254
+//#define MonthCal_SetCurSel(hmc, pst) (BOOL)SNDMSG(hmc, MCM_SETCURSEL, 0, (LPARAM)(pst))
+
+function MonthCal_SetCurSel(hwndMC:HWND; lpSysTime :LPSYSTEMTIME):Bool; inline;
+
+begin
+ Result:=BOOL(SendMessage(hwndmc, MCM_SETCURSEL, 0, LPARAM(lpsystime)));
+end;
+
+function MonthCal_SetCurSel(hwndMC:HWND; var lpSysTime :SYSTEMTIME):Bool; inline;
+
+begin
+ Result:=BOOL(SendMessage(hwndmc, MCM_SETCURSEL, 0, LPARAM(@lpsystime)));
+end;
+
+// Macro 255
+//#define MonthCal_GetMaxSelCount(hmc) (DWORD)SNDMSG(hmc, MCM_GETMAXSELCOUNT, 0, DWord(0))
+
+function MonthCal_GetMaxSelCount(hwndMC:HWND):Bool;
+
+begin
+ Result:=BOOL(SendMessage(hwndmc, MCM_GETMAXSELCOUNT, 0, LPARAM(0)));
+end;
+
+// Macro 256
+//#define MonthCal_SetMaxSelCount(hmc, n) (BOOL)SNDMSG(hmc, MCM_SETMAXSELCOUNT, (WPARAM)(n), DWord(0))
+
+function MonthCal_SetMaxSelCount(hwndMC:HWND;n:uint):Bool;
+
+begin
+ Result:=BOOL(SendMessage(hwndmc, MCM_SETMAXSELCOUNT,WPARAM(N), LPARAM(0)));
+end;
+
+// Macro 257
+//#define MonthCal_GetSelRange(hmc, rgst) SNDMSG(hmc, MCM_GETSELRANGE, 0, (LPARAM)(rgst))
+
+function MonthCal_GetSelRange(hwndMC:HWND; lpSysTime :LPSYSTEMTIME):Bool;
+
+begin
+ Result:=BOOL(SendMessage(hwndmc, MCM_GETSELRANGE,WPARAM(0), LPARAM(lpsystime)));
+end;
+
+// Macro 258
+//#define MonthCal_SetSelRange(hmc, rgst) SNDMSG(hmc, MCM_SETSELRANGE, 0, (LPARAM)(rgst))
+
+function MonthCal_SetSelRange(hwndMC:HWND; lpSysTime :LPSYSTEMTIME):Bool;
+
+begin
+ Result:=BOOL(SendMessage(hwndmc, MCM_SETSELRANGE,WPARAM(0), LPARAM(lpsystime)));
+end;
+
+
+// Macro 259
+//#define MonthCal_GetMonthRange(hmc, gmr, rgst) (DWORD)SNDMSG(hmc, MCM_GETMONTHRANGE, (WPARAM)(gmr), (LPARAM)(rgst))
+
+function MonthCal_GetMonthRange(hwndMC:HWND; gmr: DWORD;lpSysTime :LPSYSTEMTIME):Bool;
+
+begin
+ Result:=BOOL(SendMessage(hwndmc, MCM_GETMONTHRANGE,WPARAM(gmr), LPARAM(lpsystime)));
+end;
+
+// Macro 260
+//#define MonthCal_SetDayState(hmc, cbds, rgds) SNDMSG(hmc, MCM_SETDAYSTATE, (WPARAM)(cbds), (LPARAM)(rgds))
+
+function MonthCal_SetDayState(hwndMC:HWND; gmr: Longint;lpDay :LPMONTHDAYSTATE):Bool;
+
+begin
+ Result:=BOOL(SendMessage(hwndmc, MCM_SETDAYSTATE,WPARAM(gmr), LPARAM(lpDay)));
+end;
+
+// Macro 261
+// #define MonthCal_GetMinReqRect(hmc, prc) SNDMSG(hmc, MCM_GETMINREQRECT, 0, (LPARAM)(prc))
+
+function MonthCal_GetMinReqRect(hwndMC:HWND; lpr :LPRect):Bool;inline;
+
+begin
+ Result:=BOOL(SendMessage(hwndmc, MCM_GETMINREQRECT,0, LPARAM(lpr)));
+end;
+
+function MonthCal_GetMinReqRect(hwndMC:HWND;var lpr :TRect):Bool;inline;
+
+begin
+ Result:=BOOL(SendMessage(hwndmc, MCM_GETMINREQRECT,0, LPARAM(@lpr)));
+end;
+
+// Macro 262
+// #define MonthCal_SetColor(hmc, iColor, clr) SNDMSG(hmc, MCM_SETCOLOR, iColor, clr)
+
+function MonthCal_SetColor(hwndMC:HWND; ic:longint;clr:COLORREF):DWORD;inline;
+
+begin
+ Result:=DWORD(SendMessage(hwndmc, MCM_SETCOLOR,ic, LPARAM(clr)));
+end;
+
+// Macro 263
+// #define MonthCal_GetColor(hmc, iColor) SNDMSG(hmc, MCM_GETCOLOR, iColor, 0)
+
+function MonthCal_GetColor(hwndMC:HWND; ic:longint):Bool;
+
+begin
+ Result:=BOOL(SendMessage(hwndmc, MCM_GETCOLOR,ic, 0));
+end;
+
+// Macro 264
+// #define MonthCal_SetToday(hmc, pst) SNDMSG(hmc, MCM_SETTODAY, 0, (LPARAM)(pst))
+
+function MonthCal_SetToday(hwndMC:HWND; lps:LPSYSTEMTIME):Bool;
+
+begin
+ Result:=BOOL(SendMessage(hwndmc, MCM_SETTODAY,0, LPARAM(lps)));
+end;
+
+// Macro 265
+// #define MonthCal_GetToday(hmc, pst) (BOOL)SNDMSG(hmc, MCM_GETTODAY, 0, (LPARAM)(pst))
+
+function MonthCal_GetToday(hwndMC:HWND; lps:LPSYSTEMTIME):Bool;
+
+begin
+ Result:=BOOL(SendMessage(hwndmc, MCM_GETTODAY,0, LPARAM(lps)));
+end;
+
+
+// Macro 266
+// #define MonthCal_HitTest(hmc, pinfo) \
+// SNDMSG(hmc, MCM_HITTEST, 0, (LPARAM)(PMCHITTESTINFO)(pinfo))
+
+FUNCTION MonthCal_HitTest( hmc :HWND ; pinfo : PMCHITTESTINFO):DWORD;
+
+Begin
+ Result:=DWORD(SendMessage(hmc, MCM_HITTEST, 0, LPARAM(pinfo)));
+end;
+
+
+// Macro 267
+// #define MonthCal_SetFirstDayOfWeek(hmc, iDay) \
+// SNDMSG(hmc, MCM_SETFIRSTDAYOFWEEK, 0, iDay)
+
+function MonthCal_SetFirstDayOfWeek( hmc : HWND ; iDay :LONGINT ):DWORD;
+
+Begin
+ Result:=SendMessage(hmc, MCM_SETFIRSTDAYOFWEEK, 0, iDay);
+end;
+
+
+// Macro 268
+// #define MonthCal_GetFirstDayOfWeek(hmc) \
+// (DWORD)SNDMSG(hmc, MCM_GETFIRSTDAYOFWEEK, 0, 0)
+
+Function MonthCal_GetFirstDayOfWeek( hmc : HWND ):DWORD;
+
+Begin
+ Result:=DWORD(SendMessage(hmc, MCM_GETFIRSTDAYOFWEEK, 0, 0))
+end;
+
+
+// Macro 269
+// #define MonthCal_GetRange(hmc, rgst) \
+// (DWORD)SNDMSG(hmc, MCM_GETRANGE, 0, (LPARAM)(rgst))
+
+Function MonthCal_GetRange( hmc : HWND ; rgst : LPSYSTEMTIME):DWORD;
+
+Begin
+ Result:=DWORD(SendMessage(hmc, MCM_GETRANGE, 0, lparam(rgst)));
+end;
+
+
+// Macro 270
+// #define MonthCal_SetRange(hmc, gd, rgst) \
+// (BOOL)SNDMSG(hmc, MCM_SETRANGE, (WPARAM)(gd), (LPARAM)(rgst))
+
+Function MonthCal_SetRange( hmc : HWND ; gd : DWORD; rgst : LPSYSTEMTIME):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage(hmc, MCM_SETRANGE, gd,LPARAM(rgst)))
+end;
+
+
+// Macro 271
+// #define MonthCal_GetMonthDelta(hmc) \
+// (int)SNDMSG(hmc, MCM_GETMONTHDELTA, 0, 0)
+
+Function MonthCal_GetMonthDelta( hmc :hwnd ):cint;
+
+Begin
+ Result:=cint(SendMessage(hmc, MCM_GETMONTHDELTA, 0, 0))
+end;
+
+
+// Macro 272
+// #define MonthCal_SetMonthDelta(hmc, n) \
+// (int)SNDMSG(hmc, MCM_SETMONTHDELTA, n, 0)
+
+Function MonthCal_SetMonthDelta( hmc :hwnd ; n :cint ):cint;
+
+Begin
+ Result:=cint(SendMessage(hmc, MCM_SETMONTHDELTA, n, 0))
+end;
+
+
+// Macro 273
+
+// #define MonthCal_GetMaxTodayWidth(hmc) \
+// (DWORD)SNDMSG(hmc, MCM_GETMAXTODAYWIDTH, 0, 0)
+
+Function MonthCal_GetMaxTodayWidth( hmc :hwnd ):DWORD;
+
+Begin
+ Result:=DWORD(SendMessage(hmc, MCM_GETMAXTODAYWIDTH, 0, 0))
+end;
+
+
+// Macro 274
+// #define MonthCal_SetUnicodeFormat(hwnd, fUnicode) \
+// (BOOL)SNDMSG((hwnd), MCM_SETUNICODEFORMAT, (WPARAM)(fUnicode), 0)
+
+Function MonthCal_SetUnicodeFormat( hwnd : hwnd; fUnicode : bool):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), MCM_SETUNICODEFORMAT, wparam(fUnicode), 0))
+end;
+
+
+// Macro 275
+
+// #define MonthCal_GetUnicodeFormat(hwnd) \
+// (BOOL)SNDMSG((hwnd), MCM_GETUNICODEFORMAT, 0, 0)
+
+Function MonthCal_GetUnicodeFormat( hwnd : hwnd):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), MCM_GETUNICODEFORMAT, 0, 0))
+end;
+
+
+// Macro 276
+// #define DateTime_GetSystemtime(hdp, pst) (DWORD)SNDMSG(hdp, DTM_GETSYSTEMTIME, 0, (LPARAM)(pst))
+
+// Macro 277
+
+//#define DateTime_SetSystemtime(hdp, gd, pst) (BOOL)SNDMSG(hdp, DTM_SETSYSTEMTIME, (WPARAM)(gd), (LPARAM)(pst))
+function DateTime_SetSystemTime(hdp: HWND; gd: DWORD; const pst: TSystemTime): BOOL;inline;
+begin
+ result:=BOOL(SendMessage(hdp, DTM_SETSYSTEMTIME, WPARAM(gd), LPARAM(@pst)));
+end;
+
+// Macro 278
+
+//#define DateTime_GetRange(hdp, rgst) (DWORD)SNDMSG(hdp, DTM_GETRANGE, 0, (LPARAM)(rgst))
+
+// Macro 279
+
+//#define DateTime_SetRange(hdp, gd, rgst) (BOOL)SNDMSG(hdp, DTM_SETRANGE, (WPARAM)(gd), (LPARAM)(rgst))
+function DateTime_SetRange(hdp: HWND; gdtr: DWORD; rgst: PSystemTime): BOOL;inline;
+begin
+ result:=BOOL(SendMessage(hdp, DTM_SETRANGE, WPARAM(gdtr), LPARAM(rgst)));
+end;
+
+// Macro 280
+
+//#define DateTime_SetFormat(hdp, sz) (BOOL)SNDMSG(hdp, DTM_SETFORMAT, 0, (LPARAM)(sz))
+
+// Macro 281
+
+//#define DateTime_SetMonthCalColor(hdp, iColor, clr) SNDMSG(hdp, DTM_SETMCCOLOR, iColor, clr)
+function DateTime_SetMonthCalColor(hdp: HWND; iColor: DWORD; clr: TColorRef): TColorRef;inline;
+begin
+ result:=TColorRef(SendMessage(hdp, DTM_SETMCCOLOR, iColor, clr));
+end;
+
+// Macro 282
+
+//#define DateTime_GetMonthCalColor(hdp, iColor) SNDMSG(hdp, DTM_GETMCCOLOR, iColor, 0)
+
+// Macro 283
+
+//#define DateTime_GetMonthCal(hdp) (HWND)SNDMSG(hdp, DTM_GETMONTHCAL, 0, 0)
+function DateTime_GetMonthCal(hdp: HWND): HWND;inline;
+begin
+ result:=HWND(SendMessage(hdp, DTM_GETMONTHCAL, 0, 0));
+end;
+
+// Macro 284
+
+//#define DateTime_SetMonthCalFont(hdp, hfont, fRedraw) SNDMSG(hdp, DTM_SETMCFONT, (WPARAM)(hfont), (LPARAM)(fRedraw))
+
+// Macro 285
+
+//#define DateTime_GetMonthCalFont(hdp) SNDMSG(hdp, DTM_GETMCFONT, 0, 0)
+
+// Macro 286
+
+//#define MAKEIPRANGE(low, high) ((LPARAM)(WORD)(((BYTE)(high) << 8) + (BYTE)(low)))
+
+// Macro 287
+
+//#define MAKEIPADDRESS(b1,b2,b3,b4) ((LPARAM)(((DWORD)(b1)<<24)+((DWORD)(b2)<<16)+((DWORD)(b3)<<8)+((DWORD)(b4))))
+
+// Macro 288
+
+//#define FIRST_IPADDRESS(x) ((x>>24) & 0xff)
+
+// Macro 289
+
+//#define SECOND_IPADDRESS(x) ((x>>16) & 0xff)
+
+// Macro 290
+
+//#define THIRD_IPADDRESS(x) ((x>>8) & 0xff)
+
+// Macro 291
+
+//#define FOURTH_IPADDRESS(x) (x & 0xff)
+
+// Macro 292
+
+//#define Pager_SetChild(hwnd, hwndChild) \
+// (void)SNDMSG((hwnd), PGM_SETCHILD, 0, (LPARAM)(hwndChild))
+
+Procedure Pager_SetChild( hwnd : hwnd; hwndChild : LPARAM);
+
+Begin
+SendMessage((hwnd), PGM_SETCHILD, 0, hwndChild)
+end;
+
+
+// Macro 293
+
+//#define Pager_RecalcSize(hwnd) \
+// (void)SNDMSG((hwnd), PGM_RECALCSIZE, 0, 0)
+
+Procedure Pager_RecalcSize( hwnd : hwnd);
+
+Begin
+SendMessage((hwnd), PGM_RECALCSIZE, 0, 0)
+end;
+
+
+// Macro 294
+
+//#define Pager_ForwardMouse(hwnd, bForward) \
+// (void)SNDMSG((hwnd), PGM_FORWARDMOUSE, (WPARAM)(bForward), 0)
+
+Procedure Pager_ForwardMouse( hwnd : hwnd; bForward : WPARAM);
+
+Begin
+SendMessage((hwnd), PGM_FORWARDMOUSE, bForward, 0)
+end;
+
+
+// Macro 295
+
+//#define Pager_SetBkColor(hwnd, clr) \
+// (COLORREF)SNDMSG((hwnd), PGM_SETBKCOLOR, 0, (LPARAM)(clr))
+
+Function Pager_SetBkColor( hwnd : hwnd; clr : LPARAM):COLORREF;
+
+Begin
+ Result:=COLORREF(SendMessage((hwnd), PGM_SETBKCOLOR, 0, clr))
+end;
+
+
+// Macro 296
+
+//#define Pager_GetBkColor(hwnd) \
+// (COLORREF)SNDMSG((hwnd), PGM_GETBKCOLOR, 0, 0)
+
+Function Pager_GetBkColor( hwnd : hwnd):COLORREF;
+
+Begin
+ Result:=COLORREF(SendMessage((hwnd), PGM_GETBKCOLOR, 0, 0))
+end;
+
+
+// Macro 297
+
+//#define Pager_SetBorder(hwnd, iBorder) \
+// (int)SNDMSG((hwnd), PGM_SETBORDER, 0, (LPARAM)(iBorder))
+
+Function Pager_SetBorder( hwnd : hwnd; iBorder : LPARAM):cint;
+
+Begin
+ Result:=cint(SendMessage((hwnd), PGM_SETBORDER, 0, iBorder))
+end;
+
+
+// Macro 298
+// #define Pager_GetBorder(hwnd) \
+// (int)SNDMSG((hwnd), PGM_GETBORDER, 0, 0)
+
+Function Pager_GetBorder( hwnd : hwnd):cint;
+
+Begin
+ Result:=cint(SendMessage((hwnd), PGM_GETBORDER, 0, 0))
+end;
+
+
+// Macro 299
+
+//#define Pager_SetPos(hwnd, iPos) \
+// (int)SNDMSG((hwnd), PGM_SETPOS, 0, (LPARAM)(iPos))
+
+Function Pager_SetPos( hwnd : hwnd; iPos : LPARAM):cint;
+
+Begin
+ Result:=cint(SendMessage((hwnd), PGM_SETPOS, 0, iPos))
+end;
+
+
+// Macro 300
+
+//#define Pager_GetPos(hwnd) \
+// (int)SNDMSG((hwnd), PGM_GETPOS, 0, 0)
+
+Function Pager_GetPos( hwnd : hwnd):cint;
+
+Begin
+ Result:=cint(SendMessage((hwnd), PGM_GETPOS, 0, 0))
+end;
+
+
+// Macro 301
+
+//#define Pager_SetButtonSize(hwnd, iSize) \
+// (int)SNDMSG((hwnd), PGM_SETBUTTONSIZE, 0, (LPARAM)(iSize))
+
+Function Pager_SetButtonSize( hwnd : hwnd; iSize : LPARAM):cint;
+
+Begin
+ Result:=cint(SendMessage((hwnd), PGM_SETBUTTONSIZE, 0, iSize))
+end;
+
+
+// Macro 302
+
+//#define Pager_GetButtonSize(hwnd) \
+// (int)SNDMSG((hwnd), PGM_GETBUTTONSIZE, 0,0)
+
+Function Pager_GetButtonSize( hwnd : hwnd):cint;
+
+Begin
+ Result:=cint(SendMessage((hwnd), PGM_GETBUTTONSIZE, 0,0))
+end;
+
+
+// Macro 303
+
+//#define Pager_GetButtonState(hwnd, iButton) \
+// (DWORD)SNDMSG((hwnd), PGM_GETBUTTONSTATE, 0, (LPARAM)(iButton))
+
+Function Pager_GetButtonState( hwnd : hwnd; iButton : LPARAM):DWORD;
+
+Begin
+ Result:=DWORD(SendMessage((hwnd), PGM_GETBUTTONSTATE, 0, iButton))
+end;
+
+
+// Macro 304
+// #define Pager_GetDropTarget(hwnd, ppdt) \
+// (void)SNDMSG((hwnd), PGM_GETDROPTARGET, 0, (LPARAM)(ppdt))
+
+Procedure Pager_GetDropTarget( hwnd : hwnd; ppdt : LPARAM);
+
+Begin
+SendMessage((hwnd), PGM_GETDROPTARGET, 0, ppdt)
+end;
+
+
+// Macro 305
+// #define Button_GetIdealSize(hwnd, psize)\
+// (BOOL)SNDMSG((hwnd), BCM_GETIDEALSIZE, 0, (LPARAM)(psize))
+
+Function Button_GetIdealSize( hwnd : hwnd; psize : LPARAM):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), BCM_GETIDEALSIZE, 0, psize))
+end;
+
+
+// Macro 306
+// #define Button_SetImageList(hwnd, pbuttonImagelist)\
+// (BOOL)SNDMSG((hwnd), BCM_SETIMAGELIST, 0, (LPARAM)(pbuttonImagelist))
+
+Function Button_SetImageList( hwnd : hwnd; pbuttonImagelist : LPARAM):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), BCM_SETIMAGELIST, 0, pbuttonImagelist))
+end;
+
+// Macro 307
+// #define Button_GetImageList(hwnd, pbuttonImagelist)\
+// (BOOL)SNDMSG((hwnd), BCM_GETIMAGELIST, 0, (LPARAM)(pbuttonImagelist))
+
+Function Button_GetImageList( hwnd : hwnd; pbuttonImagelist : LPARAM):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), BCM_GETIMAGELIST, 0, pbuttonImagelist))
+end;
+
+
+// Macro 308
+// #define Button_SetTextMargin(hwnd, pmargin)\
+// (BOOL)SNDMSG((hwnd), BCM_SETTEXTMARGIN, 0, (LPARAM)(pmargin))
+
+Function Button_SetTextMargin( hwnd : hwnd; pmargin : LPARAM):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), BCM_SETTEXTMARGIN, 0, pmargin))
+end;
+
+
+// Macro 309
+// #define Button_GetTextMargin(hwnd, pmargin)\
+// (BOOL)SNDMSG((hwnd), BCM_GETTEXTMARGIN, 0, (LPARAM)(pmargin))
+
+Function Button_GetTextMargin( hwnd : hwnd; pmargin : LPARAM):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), BCM_GETTEXTMARGIN, 0, pmargin))
+end;
+
+
+// Macro 310
+// #define Edit_SetCueBannerText(hwnd, lpcwText) \
+// (BOOL)SNDMSG((hwnd), EM_SETCUEBANNER, 0, (LPARAM)(lpcwText))
+
+Function Edit_SetCueBannerText( hwnd : hwnd; lpcwText : LPARAM):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), EM_SETCUEBANNER, 0, lpcwText))
+end;
+
+
+// Macro 311
+//#define Edit_GetCueBannerText(hwnd, lpwText, cchText) \
+// (BOOL)SNDMSG((hwnd), EM_GETCUEBANNER, (WPARAM)(lpwText), (LPARAM)(cchText))
+
+Function Edit_GetCueBannerText( hwnd : hwnd; lpwText : WPARAM; cchText : LPARAM):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), EM_GETCUEBANNER, lpwText, cchText))
+end;
+
+
+// Macro 312
+// #define Edit_ShowBalloonTip(hwnd, peditballoontip) \
+// (BOOL)SNDMSG((hwnd), EM_SHOWBALLOONTIP, 0, (LPARAM)(peditballoontip))
+
+Function Edit_ShowBalloonTip( hwnd : hwnd; peditballoontip : LPARAM):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), EM_SHOWBALLOONTIP, 0, peditballoontip))
+end;
+
+
+// Macro 313
+// #define Edit_HideBalloonTip(hwnd) \
+// (BOOL)SNDMSG((hwnd), EM_HIDEBALLOONTIP, 0, 0)
+
+Function Edit_HideBalloonTip( hwnd : hwnd):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), EM_HIDEBALLOONTIP, 0, 0))
+end;
+
+
+// Macro 314
+//#define ComboBox_SetMinVisible(hwnd, iMinVisible) \
+// (BOOL)SNDMSG((hwnd), CB_SETMINVISIBLE, (WPARAM)iMinVisible, 0)
+
+Function ComboBox_SetMinVisible( hwnd : hwnd; iMinVisible : WPARAM):BOOL;
+
+Begin
+ Result:=BOOL(SendMessage((hwnd), CB_SETMINVISIBLE, iMinVisible, 0))
+end;
+
+
+// Macro 315
+// #define ComboBox_GetMinVisible(hwnd) \
+// (int)SNDMSG((hwnd), CB_GETMINVISIBLE, 0, 0)
+
+Function ComboBox_GetMinVisible( hwnd : hwnd):cint;
+
+Begin
+ Result:=cint(SendMessage((hwnd), CB_GETMINVISIBLE, 0, 0))
+end;
+
+
+End.
diff --git a/packages/winunits-base/src/comobj.pp b/packages/winunits-base/src/comobj.pp
new file mode 100644
index 0000000000..bfc9e97de7
--- /dev/null
+++ b/packages/winunits-base/src/comobj.pp
@@ -0,0 +1,1060 @@
+{
+ This file is part of the Free Pascal run time library.
+ Copyright (c) 2006 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+}
+{$inline on}
+unit comobj;
+
+ interface
+
+ uses
+ Windows,Types,Variants,Sysutils,ActiveX;
+
+ type
+ EOleError = class(Exception);
+
+ EOleSysError = class(EOleError)
+ private
+ FErrorCode: HRESULT;
+ public
+ constructor Create(const Msg: string; aErrorCode: HRESULT;aHelpContext: Integer);
+ property ErrorCode: HRESULT read FErrorCode write FErrorCode;
+ end;
+
+ EOleException = class(EOleSysError)
+ private
+ FHelpFile: string;
+ FSource: string;
+ public
+ constructor Create(const Msg: string; aErrorCode: HRESULT;const aSource,aHelpFile: string;aHelpContext: Integer);
+ property HelpFile: string read FHelpFile write FHelpFile;
+ property Source: string read FSource write FSource;
+ end;
+
+ EOleRegistrationError = class(EOleError);
+
+ TComServerObject = class(TObject)
+ protected
+ function CountObject(Created: Boolean): Integer; virtual; abstract;
+ function CountFactory(Created: Boolean): Integer; virtual; abstract;
+ function GetHelpFileName: string; virtual; abstract;
+ function GetServerFileName: string; virtual; abstract;
+ function GetServerKey: string; virtual; abstract;
+ function GetServerName: string; virtual; abstract;
+ function GetStartSuspended: Boolean; virtual; abstract;
+ function GetTypeLib: ITypeLib; virtual; abstract;
+ procedure SetHelpFileName(const Value: string); virtual; abstract;
+ public
+ property HelpFileName: string read GetHelpFileName write SetHelpFileName;
+ property ServerFileName: string read GetServerFileName;
+ property ServerKey: string read GetServerKey;
+ property ServerName: string read GetServerName;
+ property TypeLib: ITypeLib read GetTypeLib;
+ property StartSuspended: Boolean read GetStartSuspended;
+ end;
+
+ TComObjectFactory = class;
+
+ TFactoryProc = procedure(Factory: TComObjectFactory) of object;
+
+ TComClassManager = class(TObject)
+ constructor Create;
+ destructor Destroy; override;
+ procedure ForEachFactory(ComServer: TComServerObject; FactoryProc: TFactoryProc);
+ function GetFactoryFromClass(ComClass: TClass): TComObjectFactory;
+ function GetFactoryFromClassID(const ClassID: TGUID): TComObjectFactory;
+ end;
+
+ IServerExceptionHandler = interface
+ ['{6A8D432B-EB81-11D1-AAB1-00C04FB16FBC}']
+ procedure OnException(const ServerClass, ExceptionClass, ErrorMessage: WideString;
+ ExceptAddr: PtrInt; const ErrorIID, ProgID: WideString; var Handled: Integer; var Result: HResult); dispid 2;
+ end;
+
+ TComObject = class(TObject, IUnknown, ISupportErrorInfo)
+ private
+ FController : Pointer;
+ FFactory : TComObjectFactory;
+ FRefCount : Integer;
+ FServerExceptionHandler : IServerExceptionHandler;
+ FCounted : Boolean;
+ function GetController : IUnknown;
+ protected
+ { IUnknown }
+ function IUnknown.QueryInterface = ObjQueryInterface;
+ function IUnknown._AddRef = ObjAddRef;
+ function IUnknown._Release = ObjRelease;
+
+ { IUnknown methods for other interfaces }
+ function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
+ function _AddRef: Integer; stdcall;
+ function _Release: Integer; stdcall;
+
+ { ISupportErrorInfo }
+ function InterfaceSupportsErrorInfo(const iid: TIID): HResult; stdcall;
+ public
+ constructor Create;
+ constructor CreateAggregated(const Controller: IUnknown);
+ constructor CreateFromFactory(Factory: TComObjectFactory; const Controller: IUnknown);
+ destructor Destroy; override;
+ procedure Initialize; virtual;
+ function ObjAddRef: Integer; virtual; stdcall;
+ function ObjQueryInterface(const IID: TGUID; out Obj): HResult; virtual; stdcall;
+ function ObjRelease: Integer; virtual; stdcall;
+ function SafeCallException(ExceptObject: TObject; ExceptAddr: Pointer): HResult; override;
+ property Controller: IUnknown read GetController;
+ property Factory: TComObjectFactory read FFactory;
+ property RefCount: Integer read FRefCount;
+ property ServerExceptionHandler: IServerExceptionHandler read FServerExceptionHandler write FServerExceptionHandler;
+ end;
+ TComClass = class of TComObject;
+
+ TClassInstancing = (ciInternal, ciSingleInstance, ciMultiInstance);
+ TThreadingModel = (tmSingle, tmApartment, tmFree, tmBoth, tmNeutral);
+
+ TComObjectFactory = class(TObject, IUnknown, IClassFactory, IClassFactory2)
+ private
+ Next: TComObjectFactory;
+ FComServer: TComServerObject;
+ FComClass: TClass;
+ FClassID: TGUID;
+ FClassName: string;
+ FDescription: string;
+ FErrorIID: TGUID;
+ FInstancing: TClassInstancing;
+ FLicString: WideString;
+ FRegister: Longint;
+ FShowErrors: Boolean;
+ FSupportsLicensing: Boolean;
+ FThreadingModel: TThreadingModel;
+ function GetProgID: string;
+ protected
+ { IUnknown }
+ function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
+ function _AddRef: Integer; stdcall;
+ function _Release: Integer; stdcall;
+ { IClassFactory }
+ function CreateInstance(const UnkOuter: IUnknown; const IID: TGUID;
+ out Obj): HResult; stdcall;
+ function LockServer(fLock: BOOL): HResult; stdcall;
+ { IClassFactory2 }
+ function GetLicInfo(var licInfo: TLicInfo): HResult; stdcall;
+ function RequestLicKey(dwResrved: DWORD; out bstrKey: WideString): HResult; stdcall;
+ function CreateInstanceLic(const unkOuter: IUnknown; const unkReserved: IUnknown;
+ const iid: TIID; const bstrKey: WideString; out vObject): HResult; stdcall;
+ public
+ constructor Create(ComServer: TComServerObject; ComClass: TComClass;
+ const ClassID: TGUID; const Name, Description: string;
+ Instancing: TClassInstancing; ThreadingModel: TThreadingModel = tmSingle);
+ destructor Destroy; override;
+ function CreateComObject(const Controller: IUnknown): TComObject; virtual;
+ procedure RegisterClassObject;
+ procedure UpdateRegistry(Register: Boolean); virtual;
+ property ClassID: TGUID read FClassID;
+ property ClassName: string read FClassName;
+ property ComClass: TClass read FComClass;
+ property ComServer: TComServerObject read FComServer;
+ property Description: string read FDescription;
+ property ErrorIID: TGUID read FErrorIID write FErrorIID;
+ property LicString: WideString read FLicString write FLicString;
+ property ProgID: string read GetProgID;
+ property Instancing: TClassInstancing read FInstancing;
+ property ShowErrors: Boolean read FShowErrors write FShowErrors;
+ property SupportsLicensing: Boolean read FSupportsLicensing write FSupportsLicensing;
+ property ThreadingModel: TThreadingModel read FThreadingModel;
+ end;
+
+ 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;
+
+ procedure OleCheck(Value : HResult);inline;
+ procedure OleError(Code: HResult);
+
+ function ProgIDToClassID(const id : string) : TGUID;
+
+ procedure DispatchInvoke(const Dispatch: IDispatch; CallDesc: PCallDesc;
+ DispIDs: PDispIDList; Params: Pointer; Result: PVariant);
+ procedure DispatchInvokeError(Status: HRESULT; const ExceptInfo: TExcepInfo);
+
+ function HandleSafeCallException(ExceptObject: TObject; ExceptAddr: Pointer; const ErrorIID: TGUID; const ProgID,
+ HelpFileName: WideString): HResult;
+
+ function ComClassManager : TComClassManager;
+
+ type
+ TCoCreateInstanceExProc = function(const clsid: TCLSID; unkOuter: IUnknown; dwClsCtx: DWORD; ServerInfo: PCoServerInfo;
+ dwCount: ULONG; rgmqResults: PMultiQIArray): HResult stdcall;
+ TCoInitializeExProc = function (pvReserved: Pointer;
+ coInit: DWORD): HResult; stdcall;
+ TCoAddRefServerProcessProc = function : ULONG; stdcall;
+ TCoReleaseServerProcessProc = function : ULONG; stdcall;
+ TCoResumeClassObjectsProc = function : HResult; stdcall;
+ TCoSuspendClassObjectsProc = function : HResult; stdcall;
+
+ const
+ CoCreateInstanceEx : TCoCreateInstanceExProc = nil;
+ CoInitializeEx : TCoInitializeExProc = nil;
+ CoAddRefServerProcess : TCoAddRefServerProcessProc = nil;
+ CoReleaseServerProcess : TCoReleaseServerProcessProc = nil;
+ CoResumeClassObjects : TCoResumeClassObjectsProc = nil;
+ CoSuspendClassObjects : TCoSuspendClassObjectsProc = nil;
+
+implementation
+
+ uses
+ ComConst,Ole2;
+
+ var
+ Uninitializing : boolean;
+
+ function HandleSafeCallException(ExceptObject: TObject; ExceptAddr: Pointer; const ErrorIID: TGUID; const ProgID,
+ HelpFileName: WideString): HResult;
+ var
+ _CreateErrorInfo : ICreateErrorInfo;
+ ErrorInfo : IErrorInfo;
+ begin
+ Result:=E_UNEXPECTED;
+ if Succeeded(CreateErrorInfo(_CreateErrorInfo)) then
+ begin
+ _CreateErrorInfo.SetGUID(ErrorIID);
+ if ProgID<>'' then
+ _CreateErrorInfo.SetSource(PWidechar(ProgID));
+ if HelpFileName<>'' then
+ _CreateErrorInfo.SetHelpFile(PWidechar(HelpFileName));
+ if ExceptObject is Exception then
+ begin
+ _CreateErrorInfo.SetDescription(PWidechar(Widestring(Exception(ExceptObject).Message)));
+ _CreateErrorInfo.SetHelpContext(Exception(ExceptObject).HelpContext);
+ if (ExceptObject is EOleSyserror) and (EOleSysError(ExceptObject).ErrorCode<0) then
+ Result:=EOleSysError(ExceptObject).ErrorCode
+ end;
+ if _CreateErrorInfo.QueryInterface(IErrorInfo,ErrorInfo)=S_OK then
+ SetErrorInfo(0,ErrorInfo);
+ end;
+ end;
+
+
+ constructor EOleSysError.Create(const Msg: string; aErrorCode: HRESULT; aHelpContext: Integer);
+ var
+ m : string;
+ begin
+ if Msg='' then
+ m:=SysErrorMessage(aErrorCode)
+ else
+ m:=Msg;
+ inherited CreateHelp(m,HelpContext);
+ FErrorCode:=aErrorCode;
+ end;
+
+
+ constructor EOleException.Create(const Msg: string; aErrorCode: HRESULT;const aSource,aHelpFile: string; aHelpContext: Integer);
+ begin
+ inherited Create(Msg,aErrorCode,aHelpContext);
+ FHelpFile:=aHelpFile;
+ FSource:=aSource;
+ end;
+
+ {$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
+ OleCheck(CoCreateInstance(ClassID,nil,CLSCTX_INPROC_SERVER or CLSCTX_LOCAL_SERVER,IUnknown,result));
+ end;
+
+
+ function CreateRemoteComObject(const MachineName : WideString;const ClassID : TGUID) : IUnknown;
+ var
+ flags : DWORD;
+ localhost : array[0..MAX_COMPUTERNAME_LENGTH] of WideChar;
+ server : TCoServerInfo;
+ mqi : TMultiQI;
+ size : DWORD;
+ begin
+ if not(assigned(CoCreateInstanceEx)) then
+ raise Exception.CreateRes(@SDCOMNotInstalled);
+
+ FillChar(server,sizeof(server),0);
+ server.pwszName:=PWideChar(MachineName);
+
+ FillChar(mqi,sizeof(mqi),0);
+ mqi.iid:=@IID_IUnknown;
+
+ flags:=CLSCTX_LOCAL_SERVER or CLSCTX_REMOTE_SERVER or CLSCTX_INPROC_SERVER;
+
+ { actually a remote call? }
+{$ifndef wince}
+ //roozbeh although there is a way to retrive computer name...HKLM\Ident\Name..but are they same?
+ size:=sizeof(localhost);
+ if (MachineName<>'') and
+ (not(GetComputerNameW(localhost,size)) or
+ (WideCompareText(localhost,MachineName)<>0)) then
+ flags:=CLSCTX_REMOTE_SERVER;
+{$endif}
+
+ OleCheck(CoCreateInstanceEx(ClassID,nil,flags,@server,1,@mqi));
+ OleCheck(mqi.hr);
+ Result:=mqi.itf;
+ end;
+
+
+ function CreateOleObject(const ClassName : string) : IDispatch;
+ var
+ id : TCLSID;
+ begin
+ id:=ProgIDToClassID(ClassName);
+ OleCheck(CoCreateInstance(id,nil,CLSCTX_INPROC_SERVER or CLSCTX_LOCAL_SERVER,IDispatch,result));
+ end;
+
+
+ function GetActiveOleObject(const ClassName : string) : IDispatch;
+ var
+ intf : IUnknown;
+ id : TCLSID;
+ begin
+ id:=ProgIDToClassID(ClassName);
+ OleCheck(GetActiveObject(id,nil,intf));
+ OleCheck(intf.QueryInterface(IDispatch,Result));
+ end;
+
+
+ procedure OleError(Code: HResult);
+ begin
+ raise EOleSysError.Create('',Code,0);
+ end;
+
+
+ procedure OleCheck(Value : HResult);inline;
+ begin
+ if not(Succeeded(Value)) then
+ OleError(Value);
+ end;
+
+
+ function ProgIDToClassID(const id : string) : TGUID;
+ begin
+ OleCheck(CLSIDFromProgID(PWideChar(WideString(id)),result));
+ end;
+
+
+ procedure SafeCallErrorHandler(err : HResult;addr : pointer);
+ var
+ info : IErrorInfo;
+ descr,src,helpfile : widestring;
+ helpctx : DWORD;
+ begin
+ if GetErrorInfo(0,info)=S_OK then
+ begin
+ info.GetDescription(descr);
+ info.GetSource(src);
+ info.GetHelpFile(helpfile);
+ info.GetHelpContext(helpctx);
+ raise EOleException.Create(descr,err,src,helpfile,helpctx) at addr;
+ end
+ else
+ raise EOleException.Create('',err,'','',0) at addr;
+ end;
+
+
+ procedure DispatchInvokeError(Status: HRESULT; const ExceptInfo: TExcepInfo);
+ begin
+ if Status=DISP_E_EXCEPTION then
+ raise EOleException.Create(ExceptInfo.Description,ExceptInfo.scode,ExceptInfo.Source,
+ ExceptInfo.HelpFile,ExceptInfo.dwHelpContext)
+ else
+ raise EOleSysError.Create('',Status,0);
+ end;
+
+ var
+ _ComClassManager : TComClassManager;
+
+ function ComClassManager: TComClassManager;
+ begin
+ if not(assigned(_ComClassManager)) then
+ _ComClassManager:=TComClassManager.Create;
+ Result:=_ComClassManager;
+ end;
+
+
+ constructor TComClassManager.Create;
+ begin
+ RunError(217);
+ end;
+
+
+ destructor TComClassManager.Destroy;
+ begin
+ RunError(217);
+ end;
+
+
+ procedure TComClassManager.ForEachFactory(ComServer: TComServerObject;
+ FactoryProc: TFactoryProc);
+ begin
+ RunError(217);
+ end;
+
+
+ function TComClassManager.GetFactoryFromClass(ComClass: TClass
+ ): TComObjectFactory;
+ begin
+ RunError(217);
+ end;
+
+
+ function TComClassManager.GetFactoryFromClassID(const ClassID: TGUID
+ ): TComObjectFactory;
+ begin
+ RunError(217);
+ end;
+
+
+ function TComObject.GetController: IUnknown;
+ begin
+ Result:=IUnknown(Controller);
+ end;
+
+
+ function TComObject.QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
+ begin
+ if assigned(FController) then
+ Result:=IUnknown(FController).QueryInterface(IID,Obj)
+ else
+ Result:=ObjQueryInterface(IID,Obj);
+ end;
+
+
+ function TComObject._AddRef: Integer; stdcall;
+ begin
+ if assigned(FController) then
+ Result:=IUnknown(FController)._AddRef
+ else
+ Result:=ObjAddRef;
+ end;
+
+
+ function TComObject._Release: Integer; stdcall;
+ begin
+ if assigned(FController) then
+ Result:=IUnknown(FController)._Release
+ else
+ Result:=ObjRelease;
+ end;
+
+
+ function TComObject.InterfaceSupportsErrorInfo(const iid: TIID): HResult; stdcall;
+ begin
+ if assigned(GetInterfaceEntry(iid)) then
+ Result:=S_OK
+ else
+ Result:=S_FALSE;
+ end;
+
+
+ constructor TComObject.Create;
+ begin
+ CreateFromFactory(ComClassManager.GetFactoryFromClass(ClassType),nil);
+ end;
+
+
+ constructor TComObject.CreateAggregated(const Controller: IUnknown);
+ begin
+ CreateFromFactory(ComClassManager.GetFactoryFromClass(ClassType),Controller);
+ end;
+
+
+ constructor TComObject.CreateFromFactory(Factory: TComObjectFactory;
+ const Controller: IUnknown);
+ begin
+ FFactory:=Factory;
+ FRefCount:=1;
+ FController:=Pointer(Controller);
+ FFactory.Comserver.CountObject(True);
+ FCounted:=true;
+ Initialize;
+ Dec(FRefCount);
+ end;
+
+
+ destructor TComObject.Destroy;
+ begin
+ if not(Uninitializing) then
+ begin
+ if assigned(FFactory) and FCounted then
+ FFactory.Comserver.CountObject(false);
+ if FRefCount>0 then
+ CoDisconnectObject(Self,0);
+ end;
+ end;
+
+
+ procedure TComObject.Initialize;
+ begin
+ end;
+
+
+ function TComObject.ObjAddRef: Integer; stdcall;
+ begin
+ Result:=InterlockedIncrement(FRefCount);
+ end;
+
+
+ function TComObject.ObjQueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
+ begin
+ if GetInterface(IID,Obj) then
+ Result:=S_OK
+ else
+ Result:=E_NOINTERFACE;
+ end;
+
+
+ function TComObject.ObjRelease: Integer; stdcall;
+ begin
+ Result:=InterlockedDecrement(FRefCount);
+ if Result=0 then
+ Self.Destroy;
+ end;
+
+
+ function TComObject.SafeCallException(ExceptObject: TObject; ExceptAddr: Pointer): HResult;
+ var
+ Message: string;
+ Handled: Integer;
+ begin
+ Handled:=0;
+ Result:=0;
+ if assigned(ServerExceptionHandler) then
+ begin
+ if ExceptObject is Exception then
+ Message:=Exception(ExceptObject).Message;
+
+ ServerExceptionHandler.OnException(ClassName,ExceptObject.ClassName,
+ Message,PtrInt(ExceptAddr),WideString(GUIDToString(FFactory.ErrorIID)),
+ FFactory.ProgID,Handled,Result);
+ end;
+ if Handled=0 then
+ Result:=HandleSafeCallException(ExceptObject,ExceptAddr,FFactory.ErrorIID,
+ FFactory.ProgID,FFactory.ComServer.HelpFileName);
+ end;
+
+
+ function TComObjectFactory.GetProgID: string;
+ begin
+ RunError(217);
+ end;
+
+
+ function TComObjectFactory.QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
+ begin
+ RunError(217);
+ end;
+
+
+ function TComObjectFactory._AddRef: Integer; stdcall;
+ begin
+ RunError(217);
+ end;
+
+
+ function TComObjectFactory._Release: Integer; stdcall;
+ begin
+ RunError(217);
+ end;
+
+
+ function TComObjectFactory.CreateInstance(const UnkOuter: IUnknown;
+ const IID: TGUID; out Obj): HResult; stdcall;
+ begin
+ RunError(217);
+ end;
+
+
+ function TComObjectFactory.LockServer(fLock: BOOL): HResult; stdcall;
+ begin
+ RunError(217);
+ end;
+
+
+ function TComObjectFactory.GetLicInfo(var licInfo: TLicInfo): HResult; stdcall;
+ begin
+ RunError(217);
+ end;
+
+
+ function TComObjectFactory.RequestLicKey(dwResrved: DWORD; out bstrKey: WideString): HResult; stdcall;
+ begin
+ RunError(217);
+ end;
+
+
+ function TComObjectFactory.CreateInstanceLic(const unkOuter: IUnknown;
+ const unkReserved: IUnknown; const iid: TIID; const bstrKey: WideString; out
+ vObject): HResult; stdcall;
+ begin
+ RunError(217);
+ end;
+
+
+ constructor TComObjectFactory.Create(ComServer: TComServerObject;
+ ComClass: TComClass; const ClassID: TGUID; const Name,
+ Description: string; Instancing: TClassInstancing;
+ ThreadingModel: TThreadingModel);
+ begin
+ RunError(217);
+ end;
+
+
+ destructor TComObjectFactory.Destroy;
+ begin
+ RunError(217);
+ end;
+
+
+ function TComObjectFactory.CreateComObject(const Controller: IUnknown
+ ): TComObject;
+ begin
+ RunError(217);
+ end;
+
+
+ procedure TComObjectFactory.RegisterClassObject;
+ begin
+ RunError(217);
+ end;
+
+
+ procedure TComObjectFactory.UpdateRegistry(Register: Boolean);
+ begin
+ RunError(217);
+ end;
+
+
+{ $define DEBUG_COMDISPATCH}
+ procedure DispatchInvoke(const Dispatch: IDispatch; CallDesc: PCallDesc;
+ DispIDs: PDispIDList; Params: Pointer; Result: PVariant);
+
+ var
+ { we can't pass pascal ansistrings to COM routines so we've to convert them
+ to/from widestring. This array contains the mapping to do so
+ }
+ StringMap : array[0..255] of record passtr : pansistring; comstr : pwidechar; end;
+ invokekind,
+ i : longint;
+ invokeresult : HResult;
+ exceptioninfo : TExcepInfo;
+ dispparams : TDispParams;
+ NextString : SizeInt;
+ Arguments : array[0..255] of TVarData;
+ CurrType : byte;
+ MethodID : TDispID;
+ begin
+ NextString:=0;
+ fillchar(dispparams,sizeof(dispparams),0);
+ try
+{$ifdef DEBUG_COMDISPATCH}
+ writeln('DispatchInvoke: Got ',CallDesc^.ArgCount,' arguments NamedArgs = ',CallDesc^.NamedArgCount);
+{$endif DEBUG_COMDISPATCH}
+ { copy and prepare arguments }
+ for i:=0 to CallDesc^.ArgCount-1 do
+ begin
+{$ifdef DEBUG_COMDISPATCH}
+ writeln('DispatchInvoke: Params = ',hexstr(PtrInt(Params),SizeOf(Pointer)*2));
+{$endif DEBUG_COMDISPATCH}
+ { get plain type }
+ CurrType:=CallDesc^.ArgTypes[i] and $3f;
+ { by reference? }
+ if (CallDesc^.ArgTypes[i] and $80)<>0 then
+ begin
+ case CurrType of
+ varStrArg:
+ begin
+{$ifdef DEBUG_COMDISPATCH}
+ writeln('Translating var ansistring argument ',PString(Params^)^);
+{$endif DEBUG_COMDISPATCH}
+ StringMap[NextString].ComStr:=StringToOleStr(PString(Params^)^);
+ StringMap[NextString].PasStr:=PString(Params^);
+ Arguments[i].VType:=varOleStr or varByRef;
+ Arguments[i].VPointer:=StringMap[NextString].ComStr;
+ inc(NextString);
+ inc(PPointer(Params));
+ end;
+ varVariant:
+ begin
+{$ifdef DEBUG_COMDISPATCH}
+ writeln('Got ref. variant containing type: ',PVarData(PPointer(Params)^)^.VType);
+{$endif DEBUG_COMDISPATCH}
+ if PVarData(PPointer(Params)^)^.VType=varString then
+ begin
+{$ifdef DEBUG_COMDISPATCH}
+ writeln(' Casting nested varString: ',Ansistring(PVarData(Params^)^.vString));
+{$endif DEBUG_COMDISPATCH}
+ VarCast(PVariant(Params^)^,PVariant(Params^)^,varOleStr);
+ end;
+
+ Arguments[i].VType:=varVariant or varByRef;
+ Arguments[i].VPointer:=PPointer(Params)^;
+ inc(PPointer(Params));
+ end
+ else
+ begin
+{$ifdef DEBUG_COMDISPATCH}
+ write('DispatchInvoke: Got ref argument with type = ',CurrType);
+ case CurrType of
+ varOleStr:
+ write(' Value = ',pwidestring(PPointer(Params)^)^);
+ end;
+ writeln;
+{$endif DEBUG_COMDISPATCH}
+ Arguments[i].VType:=CurrType or VarByRef;
+ Arguments[i].VPointer:=PPointer(Params)^;
+ inc(PPointer(Params));
+ end;
+ end
+ end
+ else
+ case CurrType of
+ varStrArg:
+ begin
+{$ifdef DEBUG_COMDISPATCH}
+ writeln('Translating ansistring argument ',PString(Params)^);
+{$endif DEBUG_COMDISPATCH}
+ StringMap[NextString].ComStr:=StringToOleStr(PString(Params)^);
+ StringMap[NextString].PasStr:=nil;
+ Arguments[i].VType:=varOleStr;
+ Arguments[i].VPointer:=StringMap[NextString].ComStr;
+ inc(NextString);
+ inc(PPointer(Params));
+ end;
+
+ varVariant:
+ begin
+{$ifdef DEBUG_COMDISPATCH}
+ writeln('Unimplemented variant dispatch');
+{$endif DEBUG_COMDISPATCH}
+ end;
+ varCurrency,
+ varDouble,
+ VarDate:
+ begin
+{$ifdef DEBUG_COMDISPATCH}
+ writeln('Got 8 byte float argument');
+{$endif DEBUG_COMDISPATCH}
+ Arguments[i].VType:=CurrType;
+ move(PPointer(Params)^,Arguments[i].VDouble,sizeof(Double));
+ inc(PDouble(Params));
+ end;
+ else
+ begin
+{$ifdef DEBUG_COMDISPATCH}
+ write('DispatchInvoke: Got argument with type ',CurrType);
+ case CurrType of
+ varOleStr:
+ write(' Value = ',pwidestring(Params)^);
+ else
+ write(' Value = ',hexstr(PtrInt(PPointer(Params)^),SizeOf(Pointer)*2));
+ end;
+ writeln;
+{$endif DEBUG_COMDISPATCH}
+ Arguments[i].VType:=CurrType;
+ Arguments[i].VPointer:=PPointer(Params)^;
+ inc(PPointer(Params));
+ end;
+ end;
+ end;
+
+ { finally prepare the call }
+ with DispParams do
+ begin
+ rgvarg:=@Arguments;
+ cNamedArgs:=CallDesc^.NamedArgCount;
+ if cNamedArgs=0 then
+ rgdispidNamedArgs:=nil
+ else
+ rgdispidNamedArgs:=@DispIDs^[1];
+ cArgs:=CallDesc^.ArgCount;
+ end;
+ InvokeKind:=CallDesc^.CallType;
+ MethodID:=DispIDs^[0];
+ case InvokeKind of
+ DISPATCH_PROPERTYPUT:
+ begin
+ if (Arguments[0].VType and varDispatch)<>0 then
+ InvokeKind:=DISPATCH_PROPERTYPUTREF;
+ { first name is actually the name of the property to set }
+ DispIDs^[0]:=DISPATCH_PROPERTYPUT;
+ DispParams.rgdispidNamedArgs:=@DispIDs^[0];
+ inc(DispParams.cNamedArgs);
+ end;
+ DISPATCH_METHOD:
+ if assigned(Result) and (CallDesc^.ArgCount=0) then
+ InvokeKind:=DISPATCH_METHOD or DISPATCH_PROPERTYGET;
+ end;
+{$ifdef DEBUG_COMDISPATCH}
+ writeln('DispatchInvoke: MethodID: ',MethodID,' InvokeKind: ',InvokeKind);
+{$endif DEBUG_COMDISPATCH}
+ { do the call and check the result }
+ invokeresult:=Dispatch.Invoke(MethodID,GUID_NULL,0,InvokeKind,DispParams,result,@exceptioninfo,nil);
+ if invokeresult<>0 then
+ DispatchInvokeError(invokeresult,exceptioninfo);
+
+ { translate strings back }
+ for i:=0 to NextString-1 do
+ if assigned(StringMap[i].passtr) then
+ OleStrToStrVar(StringMap[i].comstr,StringMap[i].passtr^);
+ finally
+ for i:=0 to NextString-1 do
+ SysFreeString(StringMap[i].ComStr);
+ end;
+ end;
+
+
+ procedure SearchIDs(const DispatchInterface : IDispatch; Names: PChar;
+ Count: Integer; IDs: PDispIDList);
+ var
+ res : HRESULT;
+ NamesArray : ^PWideChar;
+ NamesData : PWideChar;
+ OrigNames : PChar;
+ NameCount,
+ NameLen,
+ NewNameLen,
+ CurrentNameDataUsed,
+ CurrentNameDataSize : SizeInt;
+ i : longint;
+ begin
+ getmem(NamesArray,Count*sizeof(PWideChar));
+ CurrentNameDataSize:=256;
+ CurrentNameDataUsed:=0;
+ getmem(NamesData,CurrentNameDataSize);
+ NameCount:=0;
+ OrigNames:=Names;
+{$ifdef DEBUG_COMDISPATCH}
+ writeln('SearchIDs: Searching ',Count,' IDs');
+{$endif DEBUG_COMDISPATCH}
+ for i:=1 to Count do
+ begin
+ NameLen:=strlen(Names);
+{$ifdef DEBUG_COMDISPATCH}
+ writeln('SearchIDs: Original name: ',Names,' Len: ',NameLen);
+{$endif DEBUG_COMDISPATCH}
+ NewNameLen:=MultiByteToWideChar(0,0,Names,NameLen,nil,0)+1;
+ if (CurrentNameDataUsed+NewNameLen)*2>CurrentNameDataSize then
+ begin
+ inc(CurrentNameDataSize,256);
+ reallocmem(NamesData,CurrentNameDataSize);
+ end;
+ NamesArray[i-1]:=@NamesData[CurrentNameDataUsed];
+ MultiByteToWideChar(0,0,Names,NameLen,@NamesData[CurrentNameDataUsed],NewNameLen);
+ NamesData[CurrentNameDataUsed+NewNameLen-1]:=#0;
+{$ifdef DEBUG_COMDISPATCH}
+ writeln('SearchIDs: Translated name: ',WideString(PWideChar(@NamesData[CurrentNameDataUsed])));
+{$endif DEBUG_COMDISPATCH}
+ inc(CurrentNameDataUsed,NewNameLen);
+ inc(Names,NameLen+1);
+ inc(NameCount);
+ end;
+ res:=DispatchInterface.GetIDsOfNames(GUID_NULL,NamesArray,NameCount,
+{$ifdef wince}
+ LOCALE_SYSTEM_DEFAULT
+{$else wince}
+ GetThreadLocale
+{$endif wince}
+ ,IDs);
+{$ifdef DEBUG_COMDISPATCH}
+ writeln('SearchIDs: GetIDsOfNames result = ',hexstr(res,SizeOf(HRESULT)*2));
+ for i:=0 to Count-1 do
+ writeln('SearchIDs: ID[',i,'] = ',ids^[i]);
+{$endif DEBUG_COMDISPATCH}
+ if res=DISP_E_UNKNOWNNAME then
+ raise EOleError.createresfmt(@snomethod,[OrigNames])
+ else
+ OleCheck(res);
+ freemem(NamesArray);
+ freemem(NamesData);
+ end;
+
+
+ procedure ComObjDispatchInvoke(dest : PVariant;const source : Variant;
+ calldesc : pcalldesc;params : pointer);cdecl;
+ var
+ dispatchinterface : pointer;
+ ids : array[0..255] of TDispID;
+ begin
+ fillchar(ids,sizeof(ids),0);
+{$ifdef DEBUG_COMDISPATCH}
+ writeln('ComObjDispatchInvoke called');
+ writeln('ComObjDispatchInvoke: @CallDesc = $',hexstr(PtrInt(CallDesc),SizeOf(Pointer)*2),' CallDesc^.ArgCount = ',CallDesc^.ArgCount);
+{$endif DEBUG_COMDISPATCH}
+ if tvardata(source).vtype=VarDispatch then
+ dispatchinterface:=tvardata(source).vdispatch
+ else if tvardata(source).vtype=(VarDispatch or VarByRef) then
+ dispatchinterface:=pvardata(tvardata(source).vpointer)^.vdispatch
+ else
+ raise eoleerror.createres(@SVarNotObject);
+ SearchIDs(IDispatch(dispatchinterface),@CallDesc^.ArgTypes[CallDesc^.ArgCount],
+ CallDesc^.NamedArgCount+1,@ids);
+ if assigned(dest) then
+ VarClear(dest^);
+ DispatchInvoke(IDispatch(dispatchinterface),calldesc,@ids,params,dest);
+ end;
+
+
+{ $define DEBUG_DISPATCH}
+ procedure DoDispCallByID(res : Pointer; const disp : IDispatch;desc : PDispDesc; params : Pointer);
+ var
+ exceptioninfo : TExcepInfo;
+ dispparams : TDispParams;
+ flags : WORD;
+ invokeresult : HRESULT;
+ preallocateddata : array[0..15] of TVarData;
+ Arguments : ^TVarData;
+ NamedArguments : PPointer;
+ CurrType : byte;
+ namedcount,i : byte;
+ begin
+ { use preallocated space, i.e. can we avoid a getmem call? }
+ if desc^.calldesc.argcount<=Length(preallocateddata) then
+ Arguments:=@preallocateddata
+ else
+ GetMem(Arguments,desc^.calldesc.argcount*sizeof(TVarData));
+
+ { prepare parameters }
+ for i:=0 to desc^.CallDesc.ArgCount-1 do
+ begin
+{$ifdef DEBUG_DISPATCH}
+ writeln('DoDispCallByID: Params = ',hexstr(PtrInt(Params),SizeOf(Pointer)*2));
+{$endif DEBUG_DISPATCH}
+ { get plain type }
+ CurrType:=desc^.CallDesc.ArgTypes[i] and $3f;
+ { by reference? }
+ if (desc^.CallDesc.ArgTypes[i] and $80)<>0 then
+ begin
+{$ifdef DEBUG_DISPATCH}
+ write('DispatchInvoke: Got ref argument with type = ',CurrType);
+ writeln;
+{$endif DEBUG_DISPATCH}
+ Arguments[i].VType:=CurrType or VarByRef;
+ Arguments[i].VPointer:=PPointer(Params)^;
+ inc(PPointer(Params));
+ end
+ else
+ begin
+{$ifdef DEBUG_DISPATCH}
+ writeln('DispatchInvoke: Got ref argument with type = ',CurrType);
+{$endif DEBUG_DISPATCH}
+ case CurrType of
+ varVariant:
+ begin
+ Arguments[i].VType:=CurrType;
+ move(PVarData(Params)^,Arguments[i],sizeof(TVarData));
+ inc(PVarData(Params));
+ end;
+ varCurrency,
+ varDouble,
+ VarDate:
+ begin
+{$ifdef DEBUG_DISPATCH}
+ writeln('DispatchInvoke: Got 8 byte float argument');
+{$endif DEBUG_DISPATCH}
+ Arguments[i].VType:=CurrType;
+ move(PPointer(Params)^,Arguments[i].VDouble,sizeof(Double));
+ inc(PDouble(Params));
+ end;
+ else
+ begin
+{$ifdef DEBUG_DISPATCH}
+ writeln('DispatchInvoke: Got argument with type ',CurrType);
+{$endif DEBUG_DISPATCH}
+ Arguments[i].VType:=CurrType;
+ Arguments[i].VPointer:=PPointer(Params)^;
+ inc(PPointer(Params));
+ end;
+ end;
+ end;
+ end;
+ dispparams.cArgs:=desc^.calldesc.argcount;
+ dispparams.rgvarg:=pointer(Arguments);
+
+ { handle properties properly here ! }
+ namedcount:=desc^.calldesc.namedargcount;
+ if desc^.calldesc.calltype=DISPATCH_PROPERTYPUT then
+ inc(namedcount)
+ else
+ NamedArguments:=@desc^.CallDesc.ArgTypes[desc^.CallDesc.ArgCount];
+ dispparams.cNamedArgs:=namedcount;
+ dispparams.rgdispidNamedArgs:=pointer(NamedArguments);
+ flags:=0;
+ invokeresult:=disp.Invoke(
+ desc^.DispId, { DispID: LongInt; }
+ GUID_NULL, { const iid : TGUID; }
+ 0, { LocaleID : longint; }
+ flags, { Flags: Word; }
+ dispparams, { var params; }
+ res,@exceptioninfo,nil { VarResult,ExcepInfo,ArgErr : pointer) }
+ );
+ if invokeresult<>0 then
+ DispatchInvokeError(invokeresult,exceptioninfo);
+ if desc^.calldesc.argcount>Length(preallocateddata) then
+ FreeMem(Arguments);
+ end;
+
+
+const
+ Initialized : boolean = false;
+var
+ Ole32Dll : HModule;
+
+initialization
+ Uninitializing:=false;
+ _ComClassManager:=nil;
+ Ole32Dll:=GetModuleHandle('ole32.dll');
+ if Ole32Dll<>0 then
+ begin
+ Pointer(CoCreateInstanceEx):=GetProcAddress(Ole32Dll,'CoCreateInstanceExProc');
+ Pointer(CoInitializeEx):=GetProcAddress(Ole32Dll,'CoInitializeExProc');
+ Pointer(CoAddRefServerProcess):=GetProcAddress(Ole32Dll,'CoAddRefServerProcessProc');
+ Pointer(CoReleaseServerProcess):=GetProcAddress(Ole32Dll,'CoReleaseServerProcessProc');
+ Pointer(CoResumeClassObjects):=GetProcAddress(Ole32Dll,'CoResumeClassObjectsProc');
+ Pointer(CoSuspendClassObjects):=GetProcAddress(Ole32Dll,'CoSuspendClassObjectsProc');
+ end;
+
+ if not(IsLibrary) then
+ Initialized:=Succeeded(CoInitialize(nil));
+ SafeCallErrorProc:=@SafeCallErrorHandler;
+ VarDispProc:=@ComObjDispatchInvoke;
+ DispCallByIDProc:=@DoDispCallByID;
+finalization
+ Uninitializing:=true;
+ _ComClassManager.Free;
+ VarDispProc:=nil;
+ SafeCallErrorProc:=nil;
+ if Initialized then
+ CoUninitialize;
+end.
+
+
diff --git a/packages/winunits-base/src/flatsb.pp b/packages/winunits-base/src/flatsb.pp
new file mode 100644
index 0000000000..56212b4df8
--- /dev/null
+++ b/packages/winunits-base/src/flatsb.pp
@@ -0,0 +1,115 @@
+{
+ This file is part of the Free Pascal run time library.
+ Copyright (c) 2007 by the Free Pascal development team
+ 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+}
+{$inline on}
+unit FlatSB;
+
+ interface
+
+ uses
+ ctypes,Windows;
+
+ function InitializeFlatSB(hWnd: HWND): Bool; stdcall;
+ procedure UninitializeFlatSB(hWnd: HWND); stdcall;
+ function FlatSB_GetScrollProp(hwnd:HWND;propIndex : cint;p3 : LPINT):BOOL; stdcall;
+ function FlatSB_SetScrollProp(p1: HWND; index : UINT; newValue: INT_PTR; p4: BOOL):BOOL; stdcall;
+
+ var
+ FlatSB_EnableScrollBar: function(hwnd:HWND;code : cint;p3 : UINT):BOOL; stdcall;
+ FlatSB_ShowScrollBar: function(hwnd:HWND;code : cint;p3 : BOOL):BOOL; stdcall;
+ FlatSB_GetScrollRange: function(hwnd:HWND;code : cint;var p3,p4 : cint):BOOL; stdcall;
+ FlatSB_GetScrollInfo: function(hwnd:HWND;code : cint;var ScrollInfo : TSCROLLINFO):BOOL; stdcall;
+ FlatSB_GetScrollPos: function(hwnd:HWND;code : cint):cint; stdcall;
+ FlatSB_SetScrollPos: function(hWnd:HWND;nBar,nPos:cint;bRedraw:BOOL):cint; stdcall;
+ FlatSB_SetScrollInfo: function(hWnd:HWND;BarFlag:cint;const ScrollInfo:TScrollInfo;Redraw:BOOL):cint; stdcall;
+ FlatSB_SetScrollRange: function(hWnd: HWND; nBar,nMinPos,nMaxPos: cint; bRedraw: BOOL):cint; stdcall;
+
+ implementation
+
+ var
+ Internal_FlatSB_GetScrollProp: function(hwnd:HWND;propIndex : cint;p3 : LPINT):BOOL; stdcall;
+ Internal_FlatSB_SetScrollProp: function(p1: HWND; index : UINT; newValue: INT_PTR; p4: BOOL):BOOL; stdcall;
+ Internal_InitializeFlatSB: function(hWnd: HWND): Bool; stdcall;
+ Internal_UninitializeFlatSB: procedure(hWnd: HWND); stdcall;
+
+
+ function FlatSB_GetScrollProp(hwnd:HWND;propIndex : cint;p3 : LPINT):BOOL; stdcall;
+ begin
+ Result:=Assigned(Internal_FlatSB_GetScrollProp) and Internal_FlatSB_GetScrollProp(hwnd,propIndex, p3);
+ end;
+
+
+ function FlatSB_SetScrollProp(p1: HWND; index : UINT; newValue: INT_PTR; p4: BOOL):BOOL; stdcall;
+ begin
+ Result:=Assigned(Internal_FlatSB_SetScrollProp) and Internal_FlatSB_SetScrollProp(p1,index,newValue,p4);
+ end;
+
+
+ function InitializeFlatSB(hWnd: HWND): Bool; stdcall;
+ begin
+ Result:=Assigned(Internal_InitializeFlatSB) and Internal_InitializeFlatSB(hWnd);
+ end;
+
+
+ procedure UninitializeFlatSB(hWnd: HWND); stdcall;
+ begin
+ if Assigned(Internal_UninitializeFlatSB) then
+ Internal_UninitializeFlatSB(hWnd);
+ end;
+
+ var
+ handle : THandle;
+ begin
+ handle:=GetModuleHandle('comctrl32.dll');
+ if handle<>0 then
+ begin
+ pointer(Internal_InitializeFlatSB):=GetProcAddress(handle,'InitializeFlatSB');
+ pointer(Internal_UninitializeFlatSB):=GetProcAddress(handle,'UninitializeFlatSB');
+ pointer(Internal_FlatSB_GetScrollProp):=GetProcAddress(handle,'FlatSB_GetScrollProp');
+ pointer(Internal_FlatSB_SetScrollProp):=GetProcAddress(handle,'FlatSB_SetScrollProp');
+
+ pointer(FlatSB_EnableScrollBar):=GetProcAddress(handle,'FlatSB_EnableScrollBar');
+ if not(assigned(FlatSB_EnableScrollBar)) then
+ pointer(FlatSB_EnableScrollBar):=pointer(@EnableScrollBar);
+
+ pointer(FlatSB_ShowScrollBar):=GetProcAddress(handle,'FlatSB_ShowScrollBar');
+ if not(assigned(FlatSB_ShowScrollBar)) then
+ pointer(FlatSB_ShowScrollBar):=pointer(@ShowScrollBar);
+
+ pointer(FlatSB_GetScrollRange):=GetProcAddress(handle,'FlatSB_GetScrollRange');
+ if not(assigned(FlatSB_GetScrollRange)) then
+ pointer(FlatSB_GetScrollRange):=pointer(@GetScrollRange);
+
+ pointer(FlatSB_GetScrollInfo):=GetProcAddress(handle,'FlatSB_GetScrollInfo');
+ if not(assigned(FlatSB_GetScrollInfo)) then
+ pointer(FlatSB_GetScrollInfo):=pointer(@GetScrollInfo);
+
+ pointer(FlatSB_GetScrollPos):=GetProcAddress(handle,'FlatSB_GetScrollPos');
+ if not(assigned(FlatSB_GetScrollPos)) then
+ pointer(FlatSB_GetScrollPos):=pointer(@GetScrollPos);
+
+ pointer(FlatSB_SetScrollPos):=GetProcAddress(handle,'FlatSB_SetScrollPos');
+ if not(assigned(FlatSB_SetScrollPos)) then
+ pointer(FlatSB_SetScrollPos):=pointer(@SetScrollPos);
+
+ pointer(FlatSB_SetScrollInfo):=GetProcAddress(handle,'FlatSB_SetScrollInfo');
+ if not(assigned(FlatSB_SetScrollInfo)) then
+ pointer(FlatSB_SetScrollInfo):=pointer(@SetScrollInfo);
+
+ pointer(FlatSB_SetScrollRange):=GetProcAddress(handle,'FlatSB_SetScrollRange');
+ if not(assigned(FlatSB_SetScrollRange)) then
+ pointer(FlatSB_SetScrollRange):=pointer(@SetScrollRange);
+ end;
+ end.
diff --git a/packages/winunits-base/src/mmsystem.pp b/packages/winunits-base/src/mmsystem.pp
new file mode 100644
index 0000000000..c36193de0f
--- /dev/null
+++ b/packages/winunits-base/src/mmsystem.pp
@@ -0,0 +1,2702 @@
+{*********************************} (*********************************)
+{ Generated by c2pas32 v0.9b } (* Fixed by P.V.Ozerski *)
+{ (c) 2001 Oleg Bulychov } (* Original C header file *)
+{ Gladiators Software } (* (created at Dec-03-1998) *)
+{ http://www.astonshell.com/ } (* from LCC-win32 is used *)
+{*********************************} (* LCC-win32 (c) Jacob Navia *)
+ (*********************************)
+
+Unit mmsystem;
+{$ifndef NO_SMART_LINK}
+ {$smartlink on}
+{$endif}
+{$MODE DELPHI}
+interface
+uses
+ windows;
+
+Type
+ MMRESULT = UINT;
+ MMVERSION = UINT;
+ HWAVEOUT = THandle;
+ LPHWAVEOUT = ^HWAVEOUT;
+ HWAVEIN = THandle;
+ LPHWAVEIN = ^HWAVEOUT;
+ HWAVE = THandle;
+ LPHWAVE = ^THandle;
+ LPUINT = ^UINT;
+
+Const
+ MAXPNAMELEN = 32;
+ MAXERRORLENGTH = 256;
+ MAX_JOYSTICKOEMVXDNAME = 260;
+ MM_MIDI_MAPPER = 1;
+ MM_WAVE_MAPPER = 2;
+ MM_SNDBLST_MIDIOUT = 3;
+ MM_SNDBLST_MIDIIN = 4;
+ MM_SNDBLST_SYNTH = 5;
+ MM_SNDBLST_WAVEOUT = 6;
+ MM_SNDBLST_WAVEIN = 7;
+ MM_ADLIB = 9;
+ MM_MPU401_MIDIOUT = 10;
+ MM_MPU401_MIDIIN = 11;
+ MM_PC_JOYSTICK = 12;
+ TIME_MS = 1;
+ TIME_SAMPLES = 2;
+ TIME_BYTES = 4;
+ TIME_SMPTE = 8;
+ TIME_MIDI = 16;
+ TIME_TICKS = 32;
+
+ MM_MCINOTIFY = $3B9;
+ MM_WOM_OPEN = $3BB;
+ MM_WOM_CLOSE = $3BC;
+ MM_WOM_DONE = $3BD;
+ MM_WIM_OPEN = $3BE;
+ MM_WIM_CLOSE = $3BF;
+ MM_WIM_DATA = $3C0;
+ MM_MIM_OPEN = $3C1;
+ MM_MIM_CLOSE = $3C2;
+ MM_MIM_DATA = $3C3;
+ MM_MIM_LONGDATA = $3C4;
+ MM_MIM_ERROR = $3C5;
+ MM_MIM_LONGERROR = $3C6;
+ MM_MOM_OPEN = $3C7;
+ MM_MOM_CLOSE = $3C8;
+ MM_MOM_DONE = $3C9;
+ MM_DRVM_OPEN = $3D0;
+ MM_DRVM_CLOSE = $3D1;
+ MM_DRVM_DATA = $3D2;
+ MM_DRVM_ERROR = $3D3;
+ MM_STREAM_OPEN = $3D4;
+ MM_STREAM_CLOSE = $3D5;
+ MM_STREAM_DONE = $3D6;
+ MM_STREAM_ERROR = $3D7;
+ MM_MOM_POSITIONCB = $3CA;
+ MM_MCISIGNAL = $3CB;
+ WAVE_INVALIDFORMAT = 0;
+ WAVE_FORMAT_1M08 = 1;
+ WAVE_FORMAT_1S08 = 2;
+ WAVE_FORMAT_1M16 = 4;
+ WAVE_FORMAT_1S16 = 8;
+ WAVE_FORMAT_2M08 = 16;
+ WAVE_FORMAT_2S08 = 32;
+ WAVE_FORMAT_2M16 = 64;
+ WAVE_FORMAT_2S16 = 128;
+ WAVE_FORMAT_4M08 = 256;
+ WAVE_FORMAT_4S08 = 512;
+ WAVE_FORMAT_4M16 = $400;
+ WAVE_FORMAT_4S16 = $800;
+ MM_MIM_MOREDATA = $3CC;
+ MM_MIXM_LINE_CHANGE = $3D0;
+ MM_MIXM_CONTROL_CHANGE = $3D1;
+ MMSYSERR_BASE = 0;
+ WAVERR_BASE = 32;
+ MIDIERR_BASE = 64;
+ TIMERR_BASE = 96;
+ JOYERR_BASE = 160;
+ MCIERR_BASE = 256;
+ MIXERR_BASE = 1024;
+ MCI_STRING_OFFSET = 512;
+ MCI_VD_OFFSET = 1024;
+ MCI_CD_OFFSET = 1088;
+ MCI_WAVE_OFFSET = 1152;
+ MCI_SEQ_OFFSET = 1216;
+ MMSYSERR_NOERROR = 0;
+ MMSYSERR_ERROR = (MMSYSERR_BASE+1);
+ MMSYSERR_BADDEVICEID = (MMSYSERR_BASE+2);
+ MMSYSERR_NOTENABLED = (MMSYSERR_BASE+3);
+ MMSYSERR_ALLOCATED = (MMSYSERR_BASE+4);
+ MMSYSERR_INVALHANDLE = (MMSYSERR_BASE+5);
+ MMSYSERR_NODRIVER = (MMSYSERR_BASE+6);
+ MMSYSERR_NOMEM = (MMSYSERR_BASE+7);
+ MMSYSERR_NOTSUPPORTED = (MMSYSERR_BASE+8);
+ MMSYSERR_BADERRNUM = (MMSYSERR_BASE+9);
+ MMSYSERR_INVALFLAG = (MMSYSERR_BASE+10);
+ MMSYSERR_INVALPARAM = (MMSYSERR_BASE+11);
+ MMSYSERR_HANDLEBUSY = (MMSYSERR_BASE+12);
+ MMSYSERR_INVALIDALIAS = (MMSYSERR_BASE+13);
+ MMSYSERR_BADDB = (MMSYSERR_BASE+14);
+ MMSYSERR_KEYNOTFOUND = (MMSYSERR_BASE+15);
+ MMSYSERR_READERROR = (MMSYSERR_BASE+16);
+ MMSYSERR_WRITEERROR = (MMSYSERR_BASE+17);
+ MMSYSERR_DELETEERROR = (MMSYSERR_BASE+18);
+ MMSYSERR_VALNOTFOUND = (MMSYSERR_BASE+19);
+ MMSYSERR_NODRIVERCB = (MMSYSERR_BASE+20);
+ MMSYSERR_LASTERROR = (MMSYSERR_BASE+20);
+ MM_JOY1MOVE = $3A0;
+ MM_JOY2MOVE = $3A1;
+ MM_JOY1ZMOVE = $3A2;
+ MM_JOY2ZMOVE = $3A3;
+ MM_JOY1BUTTONDOWN = $3B5;
+ MM_JOY2BUTTONDOWN = $3B6;
+ MM_JOY1BUTTONUP = $3B7;
+ MM_JOY2BUTTONUP = $3B8;
+ CALLBACK_TYPEMASK = $70000;
+ CALLBACK_NULL = 0;
+ CALLBACK_EVENT = $50000;
+ CALLBACK_WINDOW = $10000;
+ CALLBACK_TASK = $20000;
+ CALLBACK_THREAD = CALLBACK_TASK;
+ CALLBACK_FUNCTION = $30000;
+
+Type
+ HDRVR = THandle;
+
+Const
+ DRV_LOAD = 1;
+ DRV_ENABLE = 2;
+ DRV_OPEN = $3;
+ DRV_CLOSE = 4;
+ DRV_DISABLE = $5;
+ DRV_FREE = $6;
+ DRV_CONFIGURE = $7;
+ DRV_QUERYCONFIGURE = 8;
+ DRV_INSTALL = $9;
+ DRV_REMOVE = $A;
+ DRV_EXITSESSION = $B;
+ DRV_POWER = $F;
+ DRV_RESERVED = $800;
+ DRV_USER = $4000;
+ DRVCNF_CANCEL = 0;
+ DRVCNF_OK = 1;
+ DRVCNF_RESTART = 2;
+ DRV_CANCEL = DRVCNF_CANCEL;
+ DRV_OK = DRVCNF_OK;
+ DRV_RESTART = DRVCNF_RESTART;
+ DRV_MCI_FIRST = DRV_RESERVED;
+ DRV_MCI_LAST = (DRV_RESERVED+$FFF);
+
+Type
+ PDRVCALLBACK = Procedure (hdrvr: tHandle; uMsg: UINT; dwUser, dw1, dw2: DWORD); stdcall;
+
+Function sndPlaySoundA(Name: LPCSTR; flags: UINT): BOOL; stdcall; external 'winmm.dll' name 'sndPlaySoundA';
+
+Function sndPlaySoundW(Name: LPCWSTR; flags: UINT): BOOL;stdcall; external 'winmm.dll' name 'sndPlaySoundW';
+
+Function sndPlaySound(Name: PChar; flags: UINT): BOOL;stdcall; external 'winmm.dll' name
+ {$ifdef UNICODE}'sndPlaySoundW' {$else}'sndPlaySoundA'{$endif};
+
+Const
+ SND_NODEFAULT = 2;
+ SND_MEMORY = 4;
+ SND_LOOP = 8;
+ SND_NOSTOP = 16;
+ SND_SYNC = 0;
+ SND_ASYNC = 1;
+ SND_PURGE = 64;
+ SND_APPLICATION = 128;
+ SND_ALIAS_START = 0;
+ SND_ALIAS_SYSTEMHAND = 18515;
+ SND_ALIAS_SYSTEMEXCLAMATION = 8531;
+ SND_ALIAS_SYSTEMASTERISK = 10835;
+ SND_ALIAS_SYSTEMQUESTION = 16211;
+ SND_ALIAS_SYSTEMDEFAULT = 17491;
+ SND_ALIAS_SYSTEMEXIT = 17747;
+ SND_ALIAS_SYSTEMSTART = 21331;
+ SND_ALIAS_SYSTEMWELCOME = 22355;
+ SND_NOWAIT = $2000;
+ SND_ALIAS = $10000;
+ SND_ALIAS_ID = $110000;
+ SND_FILENAME = $20000;
+ SND_RESOURCE = $40004;
+ WAVERR_BADFORMAT = (WAVERR_BASE+0);
+ WAVERR_STILLPLAYING = (WAVERR_BASE+1);
+ WAVERR_UNPREPARED = (WAVERR_BASE+2);
+ WAVERR_SYNC = (WAVERR_BASE+3);
+ WAVERR_LASTERROR = (WAVERR_BASE+3);
+ WOM_OPEN = MM_WOM_OPEN;
+ WOM_CLOSE = MM_WOM_CLOSE;
+ WOM_DONE = MM_WOM_DONE;
+ WIM_OPEN = MM_WIM_OPEN;
+ WIM_CLOSE = MM_WIM_CLOSE;
+ WIM_DATA = MM_WIM_DATA;
+ WAVE_MAPPER = UINT(-1);
+ WAVE_FORMAT_QUERY = 1;
+ WAVE_ALLOWSYNC = 2;
+ WAVE_MAPPED = 4;
+ WAVE_FORMAT_DIRECT = 8;
+ WAVE_FORMAT_DIRECT_QUERY = (WAVE_FORMAT_QUERY Or WAVE_FORMAT_DIRECT);
+ MIM_OPEN = MM_MIM_OPEN;
+ MIM_CLOSE = MM_MIM_CLOSE;
+ MIM_DATA = MM_MIM_DATA;
+ MIM_LONGDATA = MM_MIM_LONGDATA;
+ MIM_ERROR = MM_MIM_ERROR;
+ MIM_LONGERROR = MM_MIM_LONGERROR;
+ MOM_OPEN = MM_MOM_OPEN;
+ MOM_CLOSE = MM_MOM_CLOSE;
+ MOM_DONE = MM_MOM_DONE;
+ MIM_MOREDATA = MM_MIM_MOREDATA;
+ MOM_POSITIONCB = MM_MOM_POSITIONCB;
+ MIDIMAPPER = UINT(-1);
+ MIDI_MAPPER = UINT(-1);
+ MIDI_IO_STATUS = 32;
+ MIDI_CACHE_ALL = 1;
+ MIDI_CACHE_BESTFIT = 2;
+ MIDI_CACHE_QUERY = 3;
+ MIDI_UNCACHE = 4;
+ WHDR_DONE = 1;
+ WHDR_PREPARED = 2;
+ WHDR_BEGINLOOP = $4;
+ WHDR_ENDLOOP = $8;
+ WHDR_INQUEUE = $10;
+ MOD_MIDIPORT = 1;
+ MOD_SYNTH = 2;
+ MOD_SQSYNTH = 3;
+ MOD_FMSYNTH = 4;
+ MOD_MAPPER = 5;
+ MIDICAPS_VOLUME = 1;
+ MIDICAPS_LRVOLUME = 2;
+ MIDICAPS_CACHE = 4;
+ MIDICAPS_STREAM = 8;
+ MHDR_DONE = 1;
+ MHDR_PREPARED = 2;
+ MHDR_INQUEUE = $4;
+ MHDR_ISSTRM = $8;
+ MEVT_F_SHORT = 0;
+ MEVT_F_LONG = $80000000;
+ MEVT_F_CALLBACK = $40000000;
+
+Function MEVT_EVENTTYPE(x: byte): byte;inline;
+Function MEVT_EVENTPARM(x: DWORD): DWORD;inline;
+
+Const
+ MEVT_SHORTMSG = 0;
+ MEVT_TEMPO = $1;
+ MEVT_NOP = $2;
+ MEVT_LONGMSG = $80;
+ MEVT_COMMENT = $82;
+ MEVT_VERSION = $84;
+ MIDISTRM_ERROR = -2;
+ MIDIPROP_SET = $80000000;
+ MIDIPROP_GET = $40000000;
+ MIDIPROP_TIMEDIV = 1;
+ MIDIPROP_TEMPO = 2;
+ MIXERLINE_LINEF_ACTIVE = 1;
+ MIXERLINE_LINEF_DISCONNECTED = $8000;
+ MIXERLINE_LINEF_SOURCE = $80000000;
+ MIXERLINE_COMPONENTTYPE_DST_FIRST = 0;
+ MIXERLINE_COMPONENTTYPE_DST_UNDEFINED = (MIXERLINE_COMPONENTTYPE_DST_FIRST);
+ MIXERLINE_COMPONENTTYPE_DST_DIGITAL = (MIXERLINE_COMPONENTTYPE_DST_FIRST+1);
+ MIXERLINE_COMPONENTTYPE_DST_LINE = (MIXERLINE_COMPONENTTYPE_DST_FIRST+2);
+ MIXERLINE_COMPONENTTYPE_DST_MONITOR = (MIXERLINE_COMPONENTTYPE_DST_FIRST+3);
+ MIXERLINE_COMPONENTTYPE_DST_SPEAKERS = (MIXERLINE_COMPONENTTYPE_DST_FIRST+4);
+ MIXERLINE_COMPONENTTYPE_DST_HEADPHONES = (MIXERLINE_COMPONENTTYPE_DST_FIRST+5);
+ MIXERLINE_COMPONENTTYPE_DST_TELEPHONE = (MIXERLINE_COMPONENTTYPE_DST_FIRST+6);
+ MIXERLINE_COMPONENTTYPE_DST_WAVEIN = (MIXERLINE_COMPONENTTYPE_DST_FIRST+7);
+ MIXERLINE_COMPONENTTYPE_DST_VOICEIN = (MIXERLINE_COMPONENTTYPE_DST_FIRST+8);
+ MIXERLINE_COMPONENTTYPE_DST_LAST = (MIXERLINE_COMPONENTTYPE_DST_FIRST+8);
+ MIXERLINE_COMPONENTTYPE_SRC_FIRST = $1000;
+ MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED = (MIXERLINE_COMPONENTTYPE_SRC_FIRST+0);
+ MIXERLINE_COMPONENTTYPE_SRC_DIGITAL = (MIXERLINE_COMPONENTTYPE_SRC_FIRST+1);
+ MIXERLINE_COMPONENTTYPE_SRC_LINE = (MIXERLINE_COMPONENTTYPE_SRC_FIRST+2);
+ MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE = (MIXERLINE_COMPONENTTYPE_SRC_FIRST+3);
+ MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER = (MIXERLINE_COMPONENTTYPE_SRC_FIRST+4);
+ MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC = (MIXERLINE_COMPONENTTYPE_SRC_FIRST+5);
+ MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE = (MIXERLINE_COMPONENTTYPE_SRC_FIRST+6);
+ MIXERLINE_COMPONENTTYPE_SRC_PCSPEAKER = (MIXERLINE_COMPONENTTYPE_SRC_FIRST+7);
+ MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT = (MIXERLINE_COMPONENTTYPE_SRC_FIRST+8);
+ MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY = (MIXERLINE_COMPONENTTYPE_SRC_FIRST+9);
+ MIXERLINE_COMPONENTTYPE_SRC_ANALOG = (MIXERLINE_COMPONENTTYPE_SRC_FIRST+10);
+ MIXERLINE_COMPONENTTYPE_SRC_LAST = (MIXERLINE_COMPONENTTYPE_SRC_FIRST+10);
+ MIXERLINE_TARGETTYPE_UNDEFINED = 0;
+ MIXERLINE_TARGETTYPE_WAVEOUT = 1;
+ MIXERLINE_TARGETTYPE_WAVEIN = 2;
+ MIXERLINE_TARGETTYPE_MIDIOUT = 3;
+ MIXERLINE_TARGETTYPE_MIDIIN = 4;
+ MIXERLINE_TARGETTYPE_AUX = 5;
+ MIDIERR_UNPREPARED = (MIDIERR_BASE+0);
+ MIDIERR_STILLPLAYING = (MIDIERR_BASE+1);
+ MIDIERR_NOMAP = (MIDIERR_BASE+2);
+ MIDIERR_NOTREADY = (MIDIERR_BASE+3);
+ MIDIERR_NODEVICE = (MIDIERR_BASE+4);
+ MIDIERR_INVALIDSETUP = (MIDIERR_BASE+5);
+ MIDIERR_BADOPENMODE = (MIDIERR_BASE+6);
+ MIDIERR_DONT_CONTINUE = (MIDIERR_BASE+7);
+ MIDIERR_LASTERROR = (MIDIERR_BASE+7);
+ MIXERCONTROL_CONTROLF_UNIFORM = 1;
+ MIXERCONTROL_CONTROLF_MULTIPLE = 2;
+ MIXERCONTROL_CONTROLF_DISABLED = $80000000;
+ MIXERCONTROL_CT_CLASS_MASK = $F0000000;
+ MIXERCONTROL_CT_CLASS_CUSTOM = 0;
+ MIXERCONTROL_CT_CLASS_METER = $10000000;
+ MIXERCONTROL_CT_CLASS_SWITCH = $20000000;
+ MIXERCONTROL_CT_CLASS_NUMBER = $30000000;
+ MIXERCONTROL_CT_CLASS_SLIDER = $40000000;
+ MIXERCONTROL_CT_CLASS_FADER = $50000000;
+ MIXERCONTROL_CT_CLASS_TIME = $60000000;
+ MIXERCONTROL_CT_CLASS_LIST = $70000000;
+ MIXERCONTROL_CT_SUBCLASS_MASK = $0F000000;
+ MIXERCONTROL_CT_SC_SWITCH_BOOLEAN = 0;
+ MIXERCONTROL_CT_SC_SWITCH_BUTTON = $1000000;
+ MIXERCONTROL_CT_SC_METER_POLLED = 0;
+ MIXERCONTROL_CT_SC_TIME_MICROSECS = 0;
+ MIXERCONTROL_CT_SC_TIME_MILLISECS = $1000000;
+ MIXERCONTROL_CT_SC_LIST_SINGLE = 0;
+ MIXERCONTROL_CT_SC_LIST_MULTIPLE = $1000000;
+ MIXERCONTROL_CT_UNITS_MASK = $0FF0000;
+ MIXERCONTROL_CT_UNITS_CUSTOM = 0;
+ MIXERCONTROL_CT_UNITS_BOOLEAN = $10000;
+ MIXERCONTROL_CT_UNITS_SIGNED = $20000;
+ MIXERCONTROL_CT_UNITS_UNSIGNED = $30000;
+ MIXERCONTROL_CT_UNITS_DECIBELS = $40000;
+ MIXERCONTROL_CT_UNITS_PERCENT = $50000;
+ MIXERCONTROL_CONTROLTYPE_CUSTOM = (MIXERCONTROL_CT_CLASS_CUSTOM Or
+ MIXERCONTROL_CT_UNITS_CUSTOM);
+ MIXERCONTROL_CONTROLTYPE_BOOLEANMETER = (MIXERCONTROL_CT_CLASS_METER Or
+ MIXERCONTROL_CT_SC_METER_POLLED Or
+ MIXERCONTROL_CT_UNITS_BOOLEAN);
+ MIXERCONTROL_CONTROLTYPE_SIGNEDMETER = (MIXERCONTROL_CT_CLASS_METER Or
+ MIXERCONTROL_CT_SC_METER_POLLED Or
+ MIXERCONTROL_CT_UNITS_SIGNED);
+ MIXERCONTROL_CONTROLTYPE_PEAKMETER = (MIXERCONTROL_CONTROLTYPE_SIGNEDMETER+1);
+ MIXERCONTROL_CONTROLTYPE_UNSIGNEDMETER = (MIXERCONTROL_CT_CLASS_METER Or
+ MIXERCONTROL_CT_SC_METER_POLLED Or
+ MIXERCONTROL_CT_UNITS_UNSIGNED);
+ MIXERCONTROL_CONTROLTYPE_BOOLEAN = (MIXERCONTROL_CT_CLASS_SWITCH Or
+ MIXERCONTROL_CT_SC_SWITCH_BOOLEAN Or
+ MIXERCONTROL_CT_UNITS_BOOLEAN);
+ MIXERCONTROL_CONTROLTYPE_ONOFF = (MIXERCONTROL_CONTROLTYPE_BOOLEAN+1);
+ MIXERCONTROL_CONTROLTYPE_MUTE = (MIXERCONTROL_CONTROLTYPE_BOOLEAN+2);
+ MIXERCONTROL_CONTROLTYPE_MONO = (MIXERCONTROL_CONTROLTYPE_BOOLEAN+3);
+ MIXERCONTROL_CONTROLTYPE_LOUDNESS = (MIXERCONTROL_CONTROLTYPE_BOOLEAN+4);
+ MIXERCONTROL_CONTROLTYPE_STEREOENH = (MIXERCONTROL_CONTROLTYPE_BOOLEAN+5);
+ MIXERCONTROL_CONTROLTYPE_BUTTON = (MIXERCONTROL_CT_CLASS_SWITCH Or
+ MIXERCONTROL_CT_SC_SWITCH_BUTTON Or
+ MIXERCONTROL_CT_UNITS_BOOLEAN);
+ MIXERCONTROL_CONTROLTYPE_DECIBELS = (MIXERCONTROL_CT_CLASS_NUMBER Or
+ MIXERCONTROL_CT_UNITS_DECIBELS);
+ MIXERCONTROL_CONTROLTYPE_SIGNED = (MIXERCONTROL_CT_CLASS_NUMBER Or
+ MIXERCONTROL_CT_UNITS_SIGNED);
+ MIXERCONTROL_CONTROLTYPE_UNSIGNED = (MIXERCONTROL_CT_CLASS_NUMBER Or
+ MIXERCONTROL_CT_UNITS_UNSIGNED);
+ MIXERCONTROL_CONTROLTYPE_PERCENT = (MIXERCONTROL_CT_CLASS_NUMBER Or
+ MIXERCONTROL_CT_UNITS_PERCENT);
+ MIXERCONTROL_CONTROLTYPE_SLIDER = (MIXERCONTROL_CT_CLASS_SLIDER Or
+ MIXERCONTROL_CT_UNITS_SIGNED);
+ MIXERCONTROL_CONTROLTYPE_PAN = (MIXERCONTROL_CONTROLTYPE_SLIDER+1);
+ MIXERCONTROL_CONTROLTYPE_QSOUNDPAN = (MIXERCONTROL_CONTROLTYPE_SLIDER+2);
+ MIXERCONTROL_CONTROLTYPE_FADER = (MIXERCONTROL_CT_CLASS_FADER Or
+ MIXERCONTROL_CT_UNITS_UNSIGNED);
+ MIXERCONTROL_CONTROLTYPE_VOLUME = (MIXERCONTROL_CONTROLTYPE_FADER+1);
+ MIXERCONTROL_CONTROLTYPE_BASS = (MIXERCONTROL_CONTROLTYPE_FADER+2);
+ MIXERCONTROL_CONTROLTYPE_TREBLE = (MIXERCONTROL_CONTROLTYPE_FADER+3);
+ MIXERCONTROL_CONTROLTYPE_EQUALIZER = (MIXERCONTROL_CONTROLTYPE_FADER+4);
+ MIXERCONTROL_CONTROLTYPE_SINGLESELECT = (MIXERCONTROL_CT_CLASS_LIST Or
+ MIXERCONTROL_CT_SC_LIST_SINGLE Or
+ MIXERCONTROL_CT_UNITS_BOOLEAN);
+ MIXERCONTROL_CONTROLTYPE_MUX = (MIXERCONTROL_CONTROLTYPE_SINGLESELECT+1);
+ MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT = (MIXERCONTROL_CT_CLASS_LIST Or
+ MIXERCONTROL_CT_SC_LIST_MULTIPLE Or
+ MIXERCONTROL_CT_UNITS_BOOLEAN);
+ MIXERCONTROL_CONTROLTYPE_MIXER = (MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT+1);
+ MIXERCONTROL_CONTROLTYPE_MICROTIME = (MIXERCONTROL_CT_CLASS_TIME Or
+ MIXERCONTROL_CT_SC_TIME_MICROSECS Or
+ MIXERCONTROL_CT_UNITS_UNSIGNED);
+ MIXERCONTROL_CONTROLTYPE_MILLITIME = (MIXERCONTROL_CT_CLASS_TIME Or
+ MIXERCONTROL_CT_SC_TIME_MILLISECS Or
+ MIXERCONTROL_CT_UNITS_UNSIGNED);
+ MIXER_SHORT_NAME_CHARS = 16;
+ MIXER_LONG_NAME_CHARS = 64;
+ MIXERR_INVALLINE = (MIXERR_BASE+0);
+ MIXERR_INVALCONTROL = (MIXERR_BASE+1);
+ MIXERR_INVALVALUE = (MIXERR_BASE+2);
+ MIXERR_LASTERROR = (MIXERR_BASE+2);
+ MIXER_OBJECTF_HANDLE = $80000000;
+ MIXER_OBJECTF_MIXER = 0;
+ MIXER_OBJECTF_HMIXER = (MIXER_OBJECTF_HANDLE Or MIXER_OBJECTF_MIXER);
+ MIXER_OBJECTF_WAVEOUT = $10000000;
+ MIXER_OBJECTF_HWAVEOUT = (MIXER_OBJECTF_HANDLE Or MIXER_OBJECTF_WAVEOUT);
+ MIXER_OBJECTF_WAVEIN = $20000000;
+ MIXER_OBJECTF_HWAVEIN = (MIXER_OBJECTF_HANDLE Or MIXER_OBJECTF_WAVEIN);
+ MIXER_OBJECTF_MIDIOUT = $30000000;
+ MIXER_OBJECTF_HMIDIOUT = (MIXER_OBJECTF_HANDLE Or MIXER_OBJECTF_MIDIOUT);
+ MIXER_OBJECTF_MIDIIN = $40000000;
+ MIXER_OBJECTF_HMIDIIN = (MIXER_OBJECTF_HANDLE Or MIXER_OBJECTF_MIDIIN);
+ MIXER_OBJECTF_AUX = $50000000;
+ MIXER_GETCONTROLDETAILSF_VALUE = 0;
+ MIXER_GETCONTROLDETAILSF_LISTTEXT = 1;
+ MIXER_GETCONTROLDETAILSF_QUERYMASK = $F;
+ MIXER_SETCONTROLDETAILSF_VALUE = 0;
+ MIXER_SETCONTROLDETAILSF_CUSTOM = 1;
+ MIXER_SETCONTROLDETAILSF_QUERYMASK = $F;
+ JOYERR_NOERROR = (0);
+ JOYERR_PARMS = (JOYERR_BASE+5);
+ JOYERR_NOCANDO = (JOYERR_BASE+6);
+ JOYERR_UNPLUGGED = (JOYERR_BASE+7);
+ JOY_BUTTON1 = 1;
+ JOY_BUTTON2 = 2;
+ JOY_BUTTON3 = 4;
+ JOY_BUTTON4 = 8;
+ JOY_BUTTON1CHG = 256;
+ JOY_BUTTON2CHG = 512;
+ JOY_BUTTON3CHG = $400;
+ JOY_BUTTON4CHG = $800;
+ JOY_BUTTON5 = 16;
+ JOY_BUTTON6 = 32;
+ JOY_BUTTON7 = 64;
+ JOY_BUTTON8 = 128;
+ JOY_BUTTON9 = 256;
+ JOY_BUTTON10 = 512;
+ JOY_BUTTON11 = $400;
+ JOY_BUTTON12 = $800;
+ JOY_BUTTON13 = $1000;
+ JOY_BUTTON14 = $2000;
+ JOY_BUTTON15 = $4000;
+ JOY_BUTTON16 = $8000;
+ JOY_BUTTON17 = $10000;
+ JOY_BUTTON18 = $20000;
+ JOY_BUTTON19 = $40000;
+ JOY_BUTTON20 = $80000;
+ JOY_BUTTON21 = $100000;
+ JOY_BUTTON22 = $200000;
+ JOY_BUTTON23 = $400000;
+ JOY_BUTTON24 = $800000;
+ JOY_BUTTON25 = $1000000;
+ JOY_BUTTON26 = $2000000;
+ JOY_BUTTON27 = $4000000;
+ JOY_BUTTON28 = $8000000;
+ JOY_BUTTON29 = $10000000;
+ JOY_BUTTON30 = $20000000;
+ JOY_BUTTON31 = $40000000;
+ JOY_BUTTON32 = $80000000;
+ JOY_POVCENTERED = -1;
+ JOY_POVFORWARD = 0;
+ JOY_POVRIGHT = 9000;
+ JOY_POVBACKWARD = 18000;
+ JOY_POVLEFT = 27000;
+ JOY_RETURNX = 1;
+ JOY_RETURNY = 2;
+ JOY_RETURNZ = 4;
+ JOY_RETURNR = 8;
+ JOY_RETURNU = 16;
+ JOY_RETURNV = 32;
+ JOY_RETURNPOV = 64;
+ JOY_RETURNBUTTONS = 128;
+ JOY_RETURNRAWDATA = 256;
+ JOY_RETURNPOVCTS = 512;
+ JOY_RETURNCENTERED = $400;
+ JOY_USEDEADZONE = $800;
+ JOY_RETURNALL = (JOY_RETURNX Or JOY_RETURNY Or JOY_RETURNZ Or JOY_RETURNR Or
+ JOY_RETURNU Or JOY_RETURNV Or JOY_RETURNPOV Or JOY_RETURNBUTTONS);
+ JOY_CAL_READALWAYS = $10000;
+ JOY_CAL_READXYONLY = $20000;
+ JOY_CAL_READ3 = $40000;
+ JOY_CAL_READ4 = $80000;
+ JOY_CAL_READXONLY = $100000;
+ JOY_CAL_READYONLY = $200000;
+ JOY_CAL_READ5 = $400000;
+ JOY_CAL_READ6 = $800000;
+ JOY_CAL_READZONLY = $1000000;
+ JOY_CAL_READRONLY = $2000000;
+ JOY_CAL_READUONLY = $4000000;
+ JOY_CAL_READVONLY = $8000000;
+ JOYSTICKID1 = 0;
+ JOYSTICKID2 = 1;
+ JOYCAPS_HASZ = 1;
+ JOYCAPS_HASR = 2;
+ JOYCAPS_HASU = 4;
+ JOYCAPS_HASV = 8;
+ JOYCAPS_HASPOV = 16;
+ JOYCAPS_POV4DIR = 32;
+ JOYCAPS_POVCTS = 64;
+ MMIOERR_BASE = 256;
+ MMIOERR_FILENOTFOUND = (MMIOERR_BASE+1);
+ MMIOERR_OUTOFMEMORY = (MMIOERR_BASE+2);
+ MMIOERR_CANNOTOPEN = (MMIOERR_BASE+3);
+ MMIOERR_CANNOTCLOSE = (MMIOERR_BASE+4);
+ MMIOERR_CANNOTREAD = (MMIOERR_BASE+5);
+ MMIOERR_CANNOTWRITE = (MMIOERR_BASE+6);
+ MMIOERR_CANNOTSEEK = (MMIOERR_BASE+7);
+ MMIOERR_CANNOTEXPAND = (MMIOERR_BASE+8);
+ MMIOERR_CHUNKNOTFOUND = (MMIOERR_BASE+9);
+ MMIOERR_UNBUFFERED = (MMIOERR_BASE+10);
+ MMIOERR_PATHNOTFOUND = (MMIOERR_BASE+11);
+ MMIOERR_ACCESSDENIED = (MMIOERR_BASE+12);
+ MMIOERR_SHARINGVIOLATION = (MMIOERR_BASE+13);
+ MMIOERR_NETWORKERROR = (MMIOERR_BASE+14);
+ MMIOERR_TOOMANYOPENFILES = (MMIOERR_BASE+15);
+ MMIOERR_INVALIDFILE = (MMIOERR_BASE+16);
+ CFSEPCHAR = '+';
+ WAVECAPS_PITCH = 1;
+ WAVECAPS_PLAYBACKRATE = 2;
+ WAVECAPS_VOLUME = 4;
+ WAVECAPS_LRVOLUME = 8;
+ WAVECAPS_SYNC = 16;
+ WAVECAPS_SAMPLEACCURATE = 32;
+ WAVECAPS_DIRECTSOUND = 64;
+ MIXER_GETLINEINFOF_DESTINATION = 0;
+ MIXER_GETLINEINFOF_SOURCE = 1;
+ MIXER_GETLINEINFOF_LINEID = 2;
+ MIXER_GETLINEINFOF_COMPONENTTYPE = 3;
+ MIXER_GETLINEINFOF_TARGETTYPE = 4;
+ MIXER_GETLINEINFOF_QUERYMASK = $F;
+ MMIO_RWMODE = 3;
+ MMIO_SHAREMODE = $70;
+ MMIO_CREATE = $1000;
+ MMIO_PARSE = 256;
+ MMIO_DELETE = 512;
+ MMIO_EXIST = $4000;
+ MMIO_ALLOCBUF = $10000;
+ MMIO_GETTEMP = $20000;
+ MMIO_DIRTY = $10000000;
+ MMIO_READ = 0;
+ MMIO_WRITE = 1;
+ MMIO_READWRITE = 2;
+ MMIO_COMPAT = 0;
+ MMIO_EXCLUSIVE = 16;
+ MMIO_DENYWRITE = 32;
+ MMIO_DENYREAD = $30;
+ MMIO_DENYNONE = 64;
+ MMIO_FHOPEN = 16;
+ MMIO_EMPTYBUF = 16;
+ MMIO_TOUPPER = 16;
+ MMIO_INSTALLPROC = $10000;
+ MMIO_GLOBALPROC = $10000000;
+ MMIO_REMOVEPROC = $20000;
+ MMIO_UNICODEPROC = $1000000;
+ MMIO_FINDPROC = $40000;
+ MMIO_FINDCHUNK = 16;
+ MMIO_FINDRIFF = 32;
+ MMIO_FINDLIST = 64;
+ MMIO_CREATERIFF = 32;
+ MMIO_CREATELIST = 64;
+ MMIOM_READ = MMIO_READ;
+ MMIOM_WRITE = MMIO_WRITE;
+ MMIOM_SEEK = 2;
+ MMIOM_OPEN = 3;
+ MMIOM_CLOSE = 4;
+ MMIOM_WRITEFLUSH = 5;
+ MMIOM_RENAME = 6;
+ MMIOM_USER = $8000;
+ FOURCC_RIFF = $46464952; {'R','I','F','F'}
+ FOURCC_LIST = $5453494C; {'L','I','S','T'}
+ FOURCC_DOS = $20532F44; {'D','O','S',' '}
+ FOURCC_MEM = $204D454D; {'M','E','M',' '}
+ SEEK_SET = 0;
+ SEEK_CUR = 1;
+ SEEK_END = 2;
+ MMIO_DEFAULTBUFFER = 8192;
+ MCIERR_INVALID_DEVICE_ID = (MCIERR_BASE+1);
+ MCIERR_UNRECOGNIZED_KEYWORD = (MCIERR_BASE+3);
+ MCIERR_UNRECOGNIZED_COMMAND = (MCIERR_BASE+5);
+ MCIERR_HARDWARE = (MCIERR_BASE+6);
+ MCIERR_INVALID_DEVICE_NAME = (MCIERR_BASE+7);
+ MCIERR_OUT_OF_MEMORY = (MCIERR_BASE+8);
+ MCIERR_DEVICE_OPEN = (MCIERR_BASE+9);
+ MCIERR_CANNOT_LOAD_DRIVER = (MCIERR_BASE+10);
+ MCIERR_MISSING_COMMAND_STRING = (MCIERR_BASE+11);
+ MCIERR_PARAM_OVERFLOW = (MCIERR_BASE+12);
+ MCIERR_MISSING_STRING_ARGUMENT = (MCIERR_BASE+13);
+ MCIERR_BAD_INTEGER = (MCIERR_BASE+14);
+ MCIERR_PARSER_INTERNAL = (MCIERR_BASE+15);
+ MCIERR_DRIVER_INTERNAL = (MCIERR_BASE+16);
+ MCIERR_MISSING_PARAMETER = (MCIERR_BASE+17);
+ MCIERR_UNSUPPORTED_FUNCTION = (MCIERR_BASE+18);
+ MCIERR_FILE_NOT_FOUND = (MCIERR_BASE+19);
+ MCIERR_DEVICE_NOT_READY = (MCIERR_BASE+20);
+ MCIERR_INTERNAL = (MCIERR_BASE+21);
+ MCIERR_DRIVER = (MCIERR_BASE+22);
+ MCIERR_CANNOT_USE_ALL = (MCIERR_BASE+23);
+ MCIERR_MULTIPLE = (MCIERR_BASE+24);
+ MCIERR_EXTENSION_NOT_FOUND = (MCIERR_BASE+25);
+ MCIERR_OUTOFRANGE = (MCIERR_BASE+26);
+ MCIERR_FLAGS_NOT_COMPATIBLE = (MCIERR_BASE+28);
+ MCIERR_FILE_NOT_SAVED = (MCIERR_BASE+30);
+ MCIERR_DEVICE_TYPE_REQUIRED = (MCIERR_BASE+31);
+ MCIERR_DEVICE_LOCKED = (MCIERR_BASE+32);
+ MCIERR_DUPLICATE_ALIAS = (MCIERR_BASE+33);
+ MCIERR_BAD_CONSTANT = (MCIERR_BASE+34);
+ MCIERR_MUST_USE_SHAREABLE = (MCIERR_BASE+35);
+ MCIERR_MISSING_DEVICE_NAME = (MCIERR_BASE+36);
+ MCIERR_BAD_TIME_FORMAT = (MCIERR_BASE+37);
+ MCIERR_NO_CLOSING_QUOTE = (MCIERR_BASE+38);
+ MCIERR_DUPLICATE_FLAGS = (MCIERR_BASE+39);
+ MCIERR_INVALID_FILE = (MCIERR_BASE+40);
+ MCIERR_NULL_PARAMETER_BLOCK = (MCIERR_BASE+41);
+ MCIERR_UNNAMED_RESOURCE = (MCIERR_BASE+42);
+ MCIERR_NEW_REQUIRES_ALIAS = (MCIERR_BASE+43);
+ MCIERR_NOTIFY_ON_AUTO_OPEN = (MCIERR_BASE+44);
+ MCIERR_NO_ELEMENT_ALLOWED = (MCIERR_BASE+45);
+ MCIERR_NONAPPLICABLE_FUNCTION = (MCIERR_BASE+46);
+ MCIERR_ILLEGAL_FOR_AUTO_OPEN = (MCIERR_BASE+47);
+ MCIERR_FILENAME_REQUIRED = (MCIERR_BASE+48);
+ MCIERR_EXTRA_CHARACTERS = (MCIERR_BASE+49);
+ MCIERR_DEVICE_NOT_INSTALLED = (MCIERR_BASE+50);
+ MCIERR_GET_CD = (MCIERR_BASE+51);
+ MCIERR_SET_CD = (MCIERR_BASE+52);
+ MCIERR_SET_DRIVE = (MCIERR_BASE+53);
+ MCIERR_DEVICE_LENGTH = (MCIERR_BASE+54);
+ MCIERR_DEVICE_ORD_LENGTH = (MCIERR_BASE+55);
+ MCIERR_NO_INTEGER = (MCIERR_BASE+56);
+ MCIERR_WAVE_OUTPUTSINUSE = (MCIERR_BASE+64);
+ MCIERR_WAVE_SETOUTPUTINUSE = (MCIERR_BASE+65);
+ MCIERR_WAVE_INPUTSINUSE = (MCIERR_BASE+66);
+ MCIERR_WAVE_SETINPUTINUSE = (MCIERR_BASE+67);
+ MCIERR_WAVE_OUTPUTUNSPECIFIED = (MCIERR_BASE+68);
+ MCIERR_WAVE_INPUTUNSPECIFIED = (MCIERR_BASE+69);
+ MCIERR_WAVE_OUTPUTSUNSUITABLE = (MCIERR_BASE+70);
+ MCIERR_WAVE_SETOUTPUTUNSUITABLE = (MCIERR_BASE+71);
+ MCIERR_WAVE_INPUTSUNSUITABLE = (MCIERR_BASE+72);
+ MCIERR_WAVE_SETINPUTUNSUITABLE = (MCIERR_BASE+73);
+ MCIERR_SEQ_DIV_INCOMPATIBLE = (MCIERR_BASE+80);
+ MCIERR_SEQ_PORT_INUSE = (MCIERR_BASE+81);
+ MCIERR_SEQ_PORT_NONEXISTENT = (MCIERR_BASE+82);
+ MCIERR_SEQ_PORT_MAPNODEVICE = (MCIERR_BASE+83);
+ MCIERR_SEQ_PORT_MISCERROR = (MCIERR_BASE+84);
+ MCIERR_SEQ_TIMER = (MCIERR_BASE+85);
+ MCIERR_SEQ_PORTUNSPECIFIED = (MCIERR_BASE+86);
+ MCIERR_SEQ_NOMIDIPRESENT = (MCIERR_BASE+87);
+ MCIERR_NO_WINDOW = (MCIERR_BASE+90);
+ MCIERR_CREATEWINDOW = (MCIERR_BASE+91);
+ MCIERR_FILE_READ = (MCIERR_BASE+92);
+ MCIERR_FILE_WRITE = (MCIERR_BASE+93);
+ MCIERR_NO_IDENTITY = (MCIERR_BASE+94);
+ MCIERR_CUSTOM_DRIVER_BASE = (MCIERR_BASE+256);
+ MCI_FIRST = DRV_MCI_FIRST;
+ MCI_ESCAPE = $805;
+ MCI_PLAY = $806;
+ MCI_SEEK = $807;
+ MCI_STOP = $808;
+ MCI_PAUSE = $809;
+ MCI_INFO = $80A;
+ MCI_GETDEVCAPS = $80B;
+ MCI_BREAK = $811;
+ MCI_WHERE = $843;
+ MCI_FREEZE = $844;
+ MCI_UNFREEZE = $845;
+ MCI_LOAD = $850;
+ MCI_CUT = $851;
+ MCI_COPY = $852;
+ MCI_PASTE = $853;
+ MCI_UPDATE = $854;
+ MCI_RESUME = $855;
+ MCI_DELETE = $856;
+ MCI_SET = $80D;
+ MCI_STEP = $80E;
+ MCI_SAVE = $813;
+ MCI_SPIN = $80C;
+ MCI_STATUS = $814;
+ MCI_CUE = $830;
+ MCI_REALIZE = $840;
+ MCI_WINDOW = $841;
+ MCI_PUT = $842;
+ MCI_RECORD = $80F;
+ MCI_SYSINFO = $810;
+ MCI_OPEN = $803;
+ MCI_CLOSE = $804;
+ MCI_USER_MESSAGES = (DRV_MCI_FIRST+$400);
+ MCI_LAST = $0FFF;
+ MCI_ALL_DEVICE_ID = -1;
+ MCI_DEVTYPE_VCR = 513;
+ MCI_DEVTYPE_VIDEODISC = 514;
+ MCI_DEVTYPE_OVERLAY = 515;
+ MCI_DEVTYPE_CD_AUDIO = 516;
+ MCI_DEVTYPE_DAT = 517;
+ MCI_DEVTYPE_SCANNER = 518;
+ MCI_DEVTYPE_ANIMATION = 519;
+ MCI_DEVTYPE_DIGITAL_VIDEO = 520;
+ MCI_DEVTYPE_OTHER = 521;
+ MCI_DEVTYPE_WAVEFORM_AUDIO = 522;
+ MCI_DEVTYPE_SEQUENCER = 523;
+ MCI_DEVTYPE_FIRST = MCI_DEVTYPE_VCR;
+ MCI_DEVTYPE_LAST = MCI_DEVTYPE_SEQUENCER;
+ MCI_DEVTYPE_FIRST_USER = $1000;
+ MCI_MODE_NOT_READY = (MCI_STRING_OFFSET+12);
+ MCI_MODE_STOP = (MCI_STRING_OFFSET+13);
+ MCI_MODE_PLAY = (MCI_STRING_OFFSET+14);
+ MCI_MODE_RECORD = (MCI_STRING_OFFSET+15);
+ MCI_MODE_SEEK = (MCI_STRING_OFFSET+16);
+ MCI_MODE_PAUSE = (MCI_STRING_OFFSET+17);
+ MCI_MODE_OPEN = (MCI_STRING_OFFSET+18);
+ MCI_FORMAT_MILLISECONDS = 0;
+ MCI_FORMAT_HMS = 1;
+ MCI_FORMAT_MSF = 2;
+ MCI_FORMAT_FRAMES = 3;
+ MCI_FORMAT_SMPTE_24 = 4;
+ MCI_FORMAT_SMPTE_25 = 5;
+ MCI_FORMAT_SMPTE_30 = 6;
+ MCI_FORMAT_SMPTE_30DROP = 7;
+ MCI_FORMAT_BYTES = 8;
+ MCI_FORMAT_SAMPLES = 9;
+ MCI_FORMAT_TMSF = 10;
+
+Function MCI_MSF_MINUTE(msf: longint): byte;inline;
+Function MCI_MSF_SECOND(msf: longint): byte;inline;
+Function MCI_MSF_FRAME(msf: longint): byte;inline;
+Function MCI_MAKE_MSF(m, s, f: byte): longint;inline;
+
+Const
+ MCI_SET_DOOR_OPEN = 256;
+ MCI_SET_DOOR_CLOSED = 512;
+ MCI_SET_TIME_FORMAT = $400;
+ MCI_SET_AUDIO = $800;
+ MCI_SET_VIDEO = $1000;
+ MCI_SET_ON = $2000;
+ MCI_SET_OFF = $4000;
+ MCI_SET_AUDIO_ALL = 0;
+ MCI_SET_AUDIO_LEFT = 1;
+ MCI_SET_AUDIO_RIGHT = 2;
+
+Function MCI_TMSF_TRACK(tmsf: longint): byte;inline;
+Function MCI_TMSF_MINUTE(tmsf: longint): byte;inline;
+Function MCI_TMSF_SECOND(tmsf: longint): byte;inline;
+Function MCI_TMSF_FRAME(tmsf: longint): byte;inline;
+Function MCI_HMS_HOUR(h: longint): byte;inline;
+Function MCI_HMS_MINUTE(h: longint): byte;inline;
+Function MCI_HMS_SECOND(h: longint): byte;inline;
+Function MCI_MAKE_HMS(h, m, s: byte): longint;inline;
+
+Const
+ MCI_INFO_PRODUCT = 256;
+ MCI_INFO_FILE = 512;
+ MCI_INFO_MEDIA_UPC = $400;
+ MCI_INFO_MEDIA_IDENTITY = $800;
+ MCI_INFO_NAME = $1000;
+ MCI_INFO_COPYRIGHT = $2000;
+
+Function MCI_MAKE_TMSF(t, m, s, f: byte): longint;inline;
+
+Const
+ MCI_WAIT = 2;
+ MCI_FROM = 4;
+ MCI_TO = 8;
+ MCI_TRACK = 16;
+ MCI_SEEK_TO_START = 256;
+ MCI_SEEK_TO_END = 512;
+ MCI_STATUS_ITEM = 256;
+ MCI_STATUS_START = 512;
+ MCI_STATUS_LENGTH = 1;
+ MCI_STATUS_POSITION = 2;
+ MCI_STATUS_NUMBER_OF_TRACKS = 3;
+ MCI_STATUS_MODE = 4;
+ MCI_STATUS_MEDIA_PRESENT = 5;
+ MCI_STATUS_TIME_FORMAT = 6;
+ MCI_STATUS_READY = 7;
+ MCI_STATUS_CURRENT_TRACK = 8;
+ MCI_OPEN_SHAREABLE = 256;
+ MCI_OPEN_ELEMENT = 512;
+ MCI_OPEN_ALIAS = $400;
+ MCI_OPEN_ELEMENT_ID = $800;
+ MCI_OPEN_TYPE_ID = $1000;
+ MCI_OPEN_TYPE = $2000;
+ MCI_GETDEVCAPS_ITEM = 256;
+ MCI_GETDEVCAPS_CAN_RECORD = 1;
+ MCI_GETDEVCAPS_HAS_AUDIO = 2;
+ MCI_GETDEVCAPS_HAS_VIDEO = 3;
+ MCI_GETDEVCAPS_DEVICE_TYPE = 4;
+ MCI_GETDEVCAPS_USES_FILES = 5;
+ MCI_GETDEVCAPS_COMPOUND_DEVICE = 6;
+ MCI_GETDEVCAPS_CAN_EJECT = 7;
+ MCI_GETDEVCAPS_CAN_PLAY = 8;
+ MCI_GETDEVCAPS_CAN_SAVE = 9;
+ MCI_SYSINFO_QUANTITY = 256;
+ MCI_SYSINFO_OPEN = 512;
+ MCI_SYSINFO_NAME = $400;
+ MCI_SYSINFO_INSTALLNAME = $800;
+ MCI_NOTIFY_SUCCESSFUL = 1;
+ MCI_NOTIFY_SUPERSEDED = 2;
+ MCI_NOTIFY_ABORTED = 4;
+ MCI_NOTIFY_FAILURE = 8;
+ MCI_NOTIFY = 1;
+ MCI_BREAK_KEY = 256;
+ MCI_BREAK_HWND = 512;
+ MCI_BREAK_OFF = $400;
+ MCI_RECORD_INSERT = 256;
+ MCI_RECORD_OVERWRITE = 512;
+ MCI_SAVE_FILE = 256;
+ MCI_LOAD_FILE = 256;
+ MCI_VD_GETDEVCAPS_FAST_RATE = $4003;
+ MCI_VD_GETDEVCAPS_SLOW_RATE = $4004;
+ MCI_VD_GETDEVCAPS_NORMAL_RATE = $4005;
+ MCI_VD_STEP_FRAMES = $10000;
+ MCI_VD_STEP_REVERSE = $20000;
+ MCI_VD_ESCAPE_STRING = 256;
+ MCI_VD_FORMAT_TRACK = $4001;
+ MCI_VD_PLAY_REVERSE = $10000;
+ MCI_VD_PLAY_FAST = $20000;
+ MCI_VD_MODE_PARK = (MCI_VD_OFFSET+1);
+ MCI_VD_GETDEVCAPS_CAV = $20000;
+ MCI_VD_SPIN_UP = $10000;
+ MCI_VD_SPIN_DOWN = $20000;
+ MCI_VD_SEEK_REVERSE = $10000;
+ MCI_VD_STATUS_SPEED = $4002;
+ MCI_VD_STATUS_FORWARD = $4003;
+ MCI_VD_STATUS_MEDIA_TYPE = $4004;
+ MCI_VD_STATUS_SIDE = $4005;
+ MCI_VD_GETDEVCAPS_CAN_REVERSE = $4002;
+ MCI_VD_MEDIA_CLV = (MCI_VD_OFFSET+2);
+ MCI_VD_MEDIA_CAV = (MCI_VD_OFFSET+3);
+ MCI_VD_MEDIA_OTHER = (MCI_VD_OFFSET+4);
+ MCI_VD_STATUS_DISC_SIZE = $4006;
+ MCI_VD_GETDEVCAPS_CLV = $10000;
+ MCI_VD_PLAY_SPEED = $40000;
+ MCI_VD_PLAY_SCAN = $80000;
+ MCI_VD_PLAY_SLOW = $100000;
+ MCI_WAVE_STATUS_CHANNELS = $4002;
+ MCI_WAVE_STATUS_SAMPLESPERSEC = $4003;
+ MCI_WAVE_PCM = MCI_WAVE_OFFSET;
+ MCI_WAVE_MAPPER = (MCI_WAVE_OFFSET+1);
+ MCI_WAVE_OPEN_BUFFER = $10000;
+ MCI_WAVE_STATUS_BITSPERSAMPLE = $4006;
+ MCI_WAVE_STATUS_LEVEL = $4007;
+ MCI_WAVE_SET_FORMATTAG = $10000;
+ MCI_WAVE_SET_CHANNELS = $20000;
+ MCI_WAVE_SET_SAMPLESPERSEC = $40000;
+ MCI_WAVE_SET_AVGBYTESPERSEC = $80000;
+ MCI_WAVE_SET_BLOCKALIGN = $100000;
+ MCI_WAVE_SET_BITSPERSAMPLE = $200000;
+ MCI_WAVE_INPUT = $400000;
+ MCI_WAVE_OUTPUT = $800000;
+ MCI_WAVE_STATUS_FORMATTAG = $4001;
+ MCI_WAVE_SET_ANYINPUT = $4000000;
+ MCI_WAVE_SET_ANYOUTPUT = $8000000;
+ MCI_WAVE_GETDEVCAPS_INPUTS = $4001;
+ MCI_WAVE_GETDEVCAPS_OUTPUTS = $4002;
+ MCI_WAVE_STATUS_AVGBYTESPERSEC = $4004;
+ MCI_WAVE_STATUS_BLOCKALIGN = $4005;
+ MCI_CDA_STATUS_TYPE_TRACK = $4001;
+ MCI_CDA_TRACK_AUDIO = (MCI_CD_OFFSET);
+ MCI_CDA_TRACK_OTHER = (MCI_CD_OFFSET+1);
+ MCI_SEQ_DIV_PPQN = (MCI_SEQ_OFFSET);
+ MCI_SEQ_DIV_SMPTE_24 = (MCI_SEQ_OFFSET+1);
+ MCI_SEQ_DIV_SMPTE_25 = (MCI_SEQ_OFFSET+2);
+ MCI_SEQ_DIV_SMPTE_30DROP = (MCI_SEQ_OFFSET+3);
+ MCI_SEQ_DIV_SMPTE_30 = (MCI_SEQ_OFFSET+4);
+ MCI_SEQ_FORMAT_SONGPTR = $4001;
+ MCI_SEQ_FILE = $4002;
+ MCI_SEQ_MIDI = $4003;
+ MCI_SEQ_SMPTE = $4004;
+ MCI_SEQ_NONE = 65533;
+ MCI_SEQ_MAPPER = 65535;
+ MCI_SEQ_STATUS_TEMPO = $4002;
+ MCI_SEQ_STATUS_PORT = $4003;
+ MCI_SEQ_STATUS_SLAVE = $4007;
+ MCI_SEQ_STATUS_MASTER = $4008;
+ MCI_SEQ_STATUS_OFFSET = $4009;
+ MCI_SEQ_STATUS_DIVTYPE = $400A;
+ MCI_SEQ_STATUS_NAME = $400B;
+ MCI_SEQ_STATUS_COPYRIGHT = $400C;
+ MCI_SEQ_SET_TEMPO = $10000;
+ MCI_SEQ_SET_PORT = $20000;
+ MCI_SEQ_SET_SLAVE = $40000;
+ MCI_SEQ_SET_MASTER = $80000;
+ MCI_SEQ_SET_OFFSET = $1000000;
+ MCI_ANIM_PLAY_SLOW = $80000;
+ MCI_ANIM_PLAY_SCAN = $100000;
+ MCI_ANIM_GETDEVCAPS_SLOW_RATE = $4003;
+ MCI_ANIM_GETDEVCAPS_NORMAL_RATE = $4004;
+ MCI_ANIM_STEP_REVERSE = $10000;
+ MCI_ANIM_STEP_FRAMES = $20000;
+ MCI_ANIM_STATUS_SPEED = $4001;
+ MCI_ANIM_GETDEVCAPS_PALETTES = $4006;
+ MCI_ANIM_OPEN_WS = $10000;
+ MCI_ANIM_OPEN_PARENT = $20000;
+ MCI_ANIM_OPEN_NOSTATIC = $40000;
+ MCI_ANIM_GETDEVCAPS_FAST_RATE = $4002;
+ MCI_ANIM_PLAY_SPEED = $10000;
+ MCI_ANIM_PLAY_REVERSE = $20000;
+ MCI_ANIM_PLAY_FAST = $40000;
+ MCI_ANIM_STATUS_FORWARD = $4002;
+ MCI_ANIM_STATUS_HWND = $4003;
+ MCI_ANIM_STATUS_HPAL = $4004;
+ MCI_ANIM_STATUS_STRETCH = $4005;
+ MCI_ANIM_INFO_TEXT = $10000;
+ MCI_ANIM_GETDEVCAPS_CAN_REVERSE = $4001;
+ MCI_ANIM_WINDOW_TEXT = $80000;
+ MCI_ANIM_WINDOW_ENABLE_STRETCH = $100000;
+ MCI_ANIM_WINDOW_DISABLE_STRETCH = $200000;
+ MCI_ANIM_WINDOW_DEFAULT = 0;
+ MCI_ANIM_RECT = $10000;
+ MCI_ANIM_PUT_SOURCE = $20000;
+ MCI_ANIM_PUT_DESTINATION = $40000;
+ MCI_ANIM_WHERE_SOURCE = $20000;
+ MCI_ANIM_WHERE_DESTINATION = $40000;
+ MCI_ANIM_UPDATE_HDC = $20000;
+ MCI_ANIM_GETDEVCAPS_CAN_STRETCH = $4007;
+ MCI_ANIM_GETDEVCAPS_MAX_WINDOWS = $4008;
+ MCI_ANIM_REALIZE_NORM = $10000;
+ MCI_ANIM_REALIZE_BKGD = $20000;
+ MCI_ANIM_WINDOW_HWND = $10000;
+ MCI_ANIM_WINDOW_STATE = $40000;
+ TIMERR_NOERROR = 0;
+ TIMERR_NOCANDO = (TIMERR_BASE+1);
+ TIMERR_STRUCT = (TIMERR_BASE+33);
+ TIME_ONESHOT = 0;
+ TIME_PERIODIC = 1;
+ TIME_CALLBACK_FUNCTION = 0;
+ TIME_CALLBACK_EVENT_SET = 16;
+ TIME_CALLBACK_EVENT_PULSE = 32;
+ MCI_OVLY_OPEN_WS = $10000;
+ MCI_OVLY_OPEN_PARENT = $20000;
+ MCI_OVLY_STATUS_HWND = $4001;
+ MCI_OVLY_STATUS_STRETCH = $4002;
+ MCI_OVLY_INFO_TEXT = $10000;
+ MCI_OVLY_GETDEVCAPS_CAN_STRETCH = $4001;
+ MCI_OVLY_GETDEVCAPS_CAN_FREEZE = $4002;
+ MCI_OVLY_GETDEVCAPS_MAX_WINDOWS = $4003;
+ MCI_OVLY_WINDOW_HWND = $10000;
+ MCI_OVLY_WINDOW_STATE = $40000;
+ MCI_OVLY_WINDOW_TEXT = $80000;
+ MCI_OVLY_WINDOW_ENABLE_STRETCH = $100000;
+ MCI_OVLY_WINDOW_DISABLE_STRETCH = $200000;
+ MCI_OVLY_WINDOW_DEFAULT = 0;
+ MCI_OVLY_RECT = $10000;
+ MCI_OVLY_PUT_SOURCE = $20000;
+ MCI_OVLY_PUT_DESTINATION = $40000;
+ MCI_OVLY_PUT_FRAME = $80000;
+ MCI_OVLY_PUT_VIDEO = $100000;
+ MCI_OVLY_WHERE_SOURCE = $20000;
+ MCI_OVLY_WHERE_DESTINATION = $40000;
+ MCI_OVLY_WHERE_FRAME = $80000;
+ MCI_OVLY_WHERE_VIDEO = $100000;
+ AUX_MAPPER = -1;
+ MIXER_GETLINECONTROLSF_ONEBYID = 1;
+ MIXER_GETLINECONTROLSF_ONEBYTYPE = 2;
+ MIXER_GETLINECONTROLSF_ALL = 0;
+ MIXER_GETLINECONTROLSF_QUERYMASK = $F;
+ NEWTRANSPARENT = 3;
+ QUERYROPSUPPORT = 40;
+ SELECTDIB = 41;
+Function DIBINDEX(n: longint): longint;inline;
+
+Const
+ SC_SCREENSAVE = $F140;
+ AUXCAPS_CDAUDIO = 1;
+ AUXCAPS_AUXIN = 2;
+ AUXCAPS_VOLUME = 1;
+ AUXCAPS_LRVOLUME = 2;
+
+(*/////////////////////////////////////////////////////////*)
+(* Structures and typedefs*)
+(*/////////////////////////////////////////////////////////*)
+
+Type
+ _mmtime = packed Record
+ wType: UINT;
+ Case integer Of
+ 0: (ms: DWORD);
+ 1: (sample: DWORD);
+ 2: (cb: DWORD);
+ 3: (ticks: DWORD);
+ 4: (smpte: packed Record
+ hour, min, sec, frame, fps, dummy: byte;
+ pad: Array[0..1] Of byte
+ End);
+ 5: (songptrpos: DWORD);
+ End;
+ MMTIME = _mmtime;
+ PMMTIME = ^_mmtime;
+ NPMMTIME = ^_mmtime;
+ LPMMTIME = ^_mmtime;
+ PWAVEHDR = ^_wavehdr;
+ TMMTime = _mmtime;
+
+ _wavehdr = packed Record
+ lpData: PChar;
+ dwBufferLength: DWORD;
+ dwBytesRecorded: DWORD;
+ dwUser: DWORD;
+ dwFlags: DWORD;
+ dwLoops: DWORD;
+ lpNext: PWAVEHDR;
+ reserved: DWORD;
+ End;
+ WAVEHDR = _wavehdr;
+ TWAVEHDR= WAVEHDR;
+ NPWAVEHDR = ^_wavehdr;
+ LPWAVEHDR = ^_wavehdr;
+
+ _WAVEOUTCAPSA = packed Record
+ wMid: WORD;
+ wPid: WORD;
+ vDriverVersion: MMVERSION;
+ szPname: array [0..Pred(MAXPNAMELEN)] Of CHAR;
+ dwFormats: DWORD;
+ wChannels: WORD;
+ wReserved1: WORD;
+ dwSupport: DWORD;
+ End;
+ WAVEOUTCAPSA = _WAVEOUTCAPSA;
+ TWAVEOUTCAPSA = WAVEOUTCAPSA;
+ PWAVEOUTCAPSA = ^_WAVEOUTCAPSA;
+ NPWAVEOUTCAPSA = ^_WAVEOUTCAPSA;
+ LPWAVEOUTCAPSA = ^_WAVEOUTCAPSA;
+
+ _WAVEOUTCAPSW = packed Record
+ wMid: WORD;
+ wPid: WORD;
+ vDriverVersion: MMVERSION;
+ szPname: array [0..Pred(MAXPNAMELEN)] Of WCHAR;
+ dwFormats: DWORD;
+ wChannels: WORD;
+ wReserved1: WORD;
+ dwSupport: DWORD;
+ End;
+
+ WAVEOUTCAPSW = _WAVEOUTCAPSW;
+ PWAVEOUTCAPSW = ^_WAVEOUTCAPSW;
+ NPWAVEOUTCAPSW = ^_WAVEOUTCAPSW;
+ LPWAVEOUTCAPSW = ^_WAVEOUTCAPSW;
+ TWAVEOUTCAPSW = _WAVEOUTCAPSW;
+ {$ifdef UNICODE}
+ WAVEOUTCAPS = WAVEOUTCAPSW;
+ PWAVEOUTCAPS = PWAVEOUTCAPSW;
+ NPWAVEOUTCAPS = NPWAVEOUTCAPSW;
+ LPWAVEOUTCAPS = LPWAVEOUTCAPSW;
+ {$else}
+ WAVEOUTCAPS = WAVEOUTCAPSA;
+ PWAVEOUTCAPS = PWAVEOUTCAPSA;
+ NPWAVEOUTCAPS = NPWAVEOUTCAPSA;
+ LPWAVEOUTCAPS = LPWAVEOUTCAPSA;
+ {$endif}
+ TWAVEOUTCAPS = WAVEOUTCAPS;
+
+ _WAVEINCAPSA = packed Record
+ wMid: WORD;
+ wPid: WORD;
+ vDriverVersion: MMVERSION;
+ szPname: array [0..Pred(MAXPNAMELEN)] Of CHAR;
+ dwFormats: DWORD;
+ wChannels: WORD;
+ wReserved1: WORD;
+ End;
+ WAVEINCAPSA = _WAVEINCAPSA;
+ PWAVEINCAPSA = ^_WAVEINCAPSA;
+ NPWAVEINCAPSA = ^_WAVEINCAPSA;
+ LPWAVEINCAPSA = ^_WAVEINCAPSA;
+ TWAVEINCAPSA = WAVEINCAPSA;
+
+ _WAVEINCAPSW = packed Record
+ wMid: WORD;
+ wPid: WORD;
+ vDriverVersion: MMVERSION;
+ szPname: array [0..Pred(MAXPNAMELEN)] Of WCHAR;
+ dwFormats: DWORD;
+ wChannels: WORD;
+ wReserved1: WORD;
+ End;
+ WAVEINCAPSW = _WAVEINCAPSW;
+ PWAVEINCAPSW = ^_WAVEINCAPSW;
+ NPWAVEINCAPSW = ^_WAVEINCAPSW;
+ LPWAVEINCAPSW = ^_WAVEINCAPSW;
+ TWAVEINCAPSW = WAVEINCAPSW;
+ {$ifdef UNICODE}
+ WAVEINCAPS = WAVEINCAPSW;
+ PWAVEINCAPS = PWAVEINCAPSW;
+ NPWAVEINCAPS = NPWAVEINCAPSW;
+ LPWAVEINCAPS = LPWAVEINCAPSW;
+ {$else}
+ WAVEINCAPS = WAVEINCAPSA;
+ PWAVEINCAPS = PWAVEINCAPSA;
+ NPWAVEINCAPS = NPWAVEINCAPSA;
+ LPWAVEINCAPS = LPWAVEINCAPSA;
+ {$endif}
+ TWAVEINCAPS = WAVEINCAPS;
+
+ _waveformat = packed Record
+ wFormatTag: WORD;
+ nChannels: WORD;
+ nSamplesPerSec: DWORD;
+ nAvgBytesPerSec: DWORD;
+ nBlockAlign: WORD;
+ End;
+ WAVEFORMAT = _waveformat;
+ PWAVEFORMAT = ^_waveformat;
+ NPWAVEFORMAT = ^_waveformat;
+ LPWAVEFORMAT = ^_waveformat;
+ TWAVEFORMAT = _waveformat;
+
+Const
+ WAVE_FORMAT_PCM = 1;
+
+Type
+ _pcmwaveformat = packed Record
+ wf: WAVEFORMAT;
+ wBitsPerSample: WORD;
+ End;
+ PCMWAVEFORMAT = _pcmwaveformat;
+ PPCMWAVEFORMAT = ^_pcmwaveformat;
+ NPPCMWAVEFORMAT = ^_pcmwaveformat;
+ LPPCMWAVEFORMAT = ^_pcmwaveformat;
+ TPCMWAVEFORMAT = _PCMWAVEFORMAT;
+ _WAVEFORMATEX = packed Record
+ wFormatTag: WORD;
+ nChannels: WORD;
+ nSamplesPerSec: DWORD;
+ nAvgBytesPerSec: DWORD;
+ nBlockAlign: WORD;
+ wBitsPerSample: WORD;
+ cbSize: WORD;
+ End;
+ WAVEFORMATEX = _WAVEFORMATEX;
+ PWAVEFORMATEX = ^_WAVEFORMATEX;
+ NPWAVEFORMATEX = ^_WAVEFORMATEX;
+ LPWAVEFORMATEX = ^_WAVEFORMATEX;
+ LPCWAVEFORMATEX = ^WAVEFORMATEX;
+ TWAVEFORMATEX = WAVEFORMATEX;
+ HMIDI = THandle;
+ HMIDIIN = THandle;
+ HMIDIOUT = THandle;
+ HMIDISTRM = THandle;
+ LPHMIDI = ^HMIDI;
+ LPHMIDIIN = ^HMIDIIN;
+ LPHMIDIOUT = ^HMIDIOUT;
+ LPHMIDISTRM = ^HMIDISTRM;
+ LPMIDICALLBACK = PDRVCALLBACK;
+
+Const
+ MIDIPATCHSIZE = 128;
+
+Type
+ PATCHARRAY = array [0..Pred(MIDIPATCHSIZE)] Of WORD;
+ LPPATCHARRAY = ^WORD;
+ KEYARRAY = array [0..Pred(MIDIPATCHSIZE)] Of WORD;
+ LPKEYARRAY = ^WORD;
+ _MIDIOUTCAPSA = packed Record
+ wMid: WORD;
+ wPid: WORD;
+ vDriverVersion: MMVERSION;
+ szPname: array [0..Pred(MAXPNAMELEN)] Of CHAR;
+ wTechnology: WORD;
+ wVoices: WORD;
+ wNotes: WORD;
+ wChannelMask: WORD;
+ dwSupport: DWORD;
+ End;
+ MIDIOUTCAPSA = _MIDIOUTCAPSA;
+ PMIDIOUTCAPSA = ^_MIDIOUTCAPSA;
+ NPMIDIOUTCAPSA = ^_MIDIOUTCAPSA;
+ LPMIDIOUTCAPSA = ^_MIDIOUTCAPSA;
+ TMIDIOUTCAPSA = _MIDIOUTCAPSA;
+ _MIDIOUTCAPSW = packed Record
+ wMid: WORD;
+ wPid: WORD;
+ vDriverVersion: MMVERSION;
+ szPname: array [0..Pred(MAXPNAMELEN)] Of WCHAR;
+ wTechnology: WORD;
+ wVoices: WORD;
+ wNotes: WORD;
+ wChannelMask: WORD;
+ dwSupport: DWORD;
+ End;
+ MIDIOUTCAPSW = _MIDIOUTCAPSW;
+ PMIDIOUTCAPSW = ^_MIDIOUTCAPSW;
+ NPMIDIOUTCAPSW = ^_MIDIOUTCAPSW;
+ LPMIDIOUTCAPSW = ^_MIDIOUTCAPSW;
+ TMIDIOUTCAPSW = MIDIOUTCAPSW;
+ _MIDIINCAPSA = packed Record
+ wMid: WORD;
+ wPid: WORD;
+ vDriverVersion: MMVERSION;
+ szPname: array [0..Pred(MAXPNAMELEN)] Of CHAR;
+ dwSupport: DWORD;
+ End;
+ MIDIINCAPSA = _MIDIINCAPSA;
+ PMIDIINCAPSA = ^_MIDIINCAPSA;
+ NPMIDIINCAPSA = ^_MIDIINCAPSA;
+ LPMIDIINCAPSA = ^_MIDIINCAPSA;
+ TMIDIINCAPSA = MIDIINCAPSA;
+
+ _MIDIINCAPSW = packed Record
+ wMid: WORD;
+ wPid: WORD;
+ vDriverVersion: MMVERSION;
+ szPname: array [0..Pred(MAXPNAMELEN)] Of WCHAR;
+ dwSupport: DWORD;
+ End;
+ MIDIINCAPSW = _MIDIINCAPSW;
+ PMIDIINCAPSW = ^_MIDIINCAPSW;
+ NPMIDIINCAPSW = ^_MIDIINCAPSW;
+ LPMIDIINCAPSW = ^_MIDIINCAPSW;
+ TMIDIINCAPSW = MIDIINCAPSW;
+
+ {$ifdef UNICODE}
+ MIDIINCAPS = MIDIINCAPSW;
+ PMIDIINCAPS = PMIDIINCAPSW;
+ NPMIDIINCAPS = NPMIDIINCAPSW;
+ LPMIDIINCAPS = LPMIDIINCAPSW;
+ MIDIOUTCAPS = MIDIOUTCAPSW;
+ PMIDIOUTCAPS = PMIDIOUTCAPSW;
+ NPMIDIOUTCAPS = NPMIDIOUTCAPSW;
+ LPMIDIOUTCAPS = LPMIDIOUTCAPSW;
+ {$else}
+ MIDIOUTCAPS = MIDIOUTCAPSA;
+ PMIDIOUTCAPS = PMIDIOUTCAPSA;
+ NPMIDIOUTCAPS = NPMIDIOUTCAPSA;
+ LPMIDIOUTCAPS = LPMIDIOUTCAPSA;
+ MIDIINCAPS = MIDIINCAPSA;
+ PMIDIINCAPS = PMIDIINCAPSA;
+ NPMIDIINCAPS = NPMIDIINCAPSA;
+ LPMIDIINCAPS = LPMIDIINCAPSA;
+ {$endif}
+ TMIDIINCAPS = MIDIINCAPS;
+
+ PMIDIHDR = ^_midihdr;
+ _midihdr = packed Record
+ lpData: PChar;
+ dwBufferLength: DWORD;
+ dwBytesRecorded: DWORD;
+ dwUser: DWORD;
+ dwFlags: DWORD;
+ lpNext: PMIDIHDR;
+ reserved: DWORD;
+ dwOffset: DWORD;
+ dwReserved: array [0..Pred(8)] Of DWORD;
+ End;
+ MIDIHDR = _midihdr;
+ NPMIDIHDR = ^_midihdr;
+ LPMIDIHDR = ^_midihdr;
+ TMIDIHDR = MIDIHDR;
+
+ _midievent = packed Record
+ dwDeltaTime: DWORD;
+ dwStreamID: DWORD;
+ dwEvent: DWORD;
+ dwParms: array [0..Pred(1)] Of DWORD;
+ End;
+ MIDIEVENT = _midievent;
+ TMIDIEVENT= MIDIEVENT;
+
+ _midistrmbuffver = packed Record
+ dwVersion: DWORD;
+ dwMid: DWORD;
+ dwOEMVersion: DWORD;
+ End;
+ MIDISTRMBUFFVER = _midistrmbuffver;
+ TMIDISTRMBUFFVER = MIDISTRMBUFFVER;
+
+ _midiproptimediv = packed Record
+ cbStruct: DWORD;
+ dwTimeDiv: DWORD;
+ End;
+ MIDIPROPTIMEDIV = _midiproptimediv;
+ LPMIDIPROPTIMEDIV = ^_midiproptimediv;
+ TMIDIPROPTIMEDIV = MIDIPROPTIMEDIV;
+
+ _midiproptempo = packed Record
+ cbStruct: DWORD;
+ dwTempo: DWORD;
+ End;
+ MIDIPROPTEMPO = _midiproptempo;
+ LPMIDIPROPTEMPO = ^_midiproptempo;
+ TMIDIPROPTEMPO = MIDIPROPTEMPO;
+
+ _AUXCAPSA = packed Record
+ wMid: WORD;
+ wPid: WORD;
+ vDriverVersion: MMVERSION;
+ szPname: array [0..Pred(MAXPNAMELEN)] Of CHAR;
+ wTechnology: WORD;
+ wReserved1: WORD;
+ dwSupport: DWORD;
+ End;
+ AUXCAPSA = _AUXCAPSA;
+ PAUXCAPSA = ^_AUXCAPSA;
+ NPAUXCAPSA = ^_AUXCAPSA;
+ LPAUXCAPSA = ^_AUXCAPSA;
+ TAUXCAPSA = AUXCAPSA;
+ _AUXCAPSW = packed Record
+ wMid: WORD;
+ wPid: WORD;
+ vDriverVersion: MMVERSION;
+ szPname: array [0..Pred(MAXPNAMELEN)] Of WCHAR;
+ wTechnology: WORD;
+ wReserved1: WORD;
+ dwSupport: DWORD;
+ End;
+ AUXCAPSW = _AUXCAPSW;
+ PAUXCAPSW = ^_AUXCAPSW;
+ NPAUXCAPSW = ^_AUXCAPSW;
+ LPAUXCAPSW = ^_AUXCAPSW;
+ TAUXCAPSW = AUXCAPSW;
+ {$ifdef UNICODE}
+ AUXCAPS = AUXCAPSW;
+ PAUXCAPS = PAUXCAPSW;
+ NPAUXCAPS = NPAUXCAPSW;
+ LPAUXCAPS = LPAUXCAPSW;
+ {$else}
+ AUXCAPS = AUXCAPSA;
+ PAUXCAPS = PAUXCAPSA;
+ NPAUXCAPS = NPAUXCAPSA;
+ LPAUXCAPS = LPAUXCAPSA;
+ {$endif}
+ TAUXCAPS = AUXCAPS;
+
+ HMIXEROBJ = THandle;
+ LPHMIXEROBJ = ^HMIXEROBJ;
+ HMIXER = THandle;
+ LPHMIXER = ^HMIXER;
+
+Function mixerGetNumDevs: UINT;stdcall; external 'winmm.dll' name 'mixerGetNumDevs';
+
+Type
+ _MIXERCAPSA = packed Record
+ wMid: WORD;
+ wPid: WORD;
+ vDriverVersion: MMVERSION;
+ szPname: array [0..Pred(MAXPNAMELEN)] Of CHAR;
+ fdwSupport: DWORD;
+ cDestinations: DWORD;
+ End;
+ MIXERCAPSA = _MIXERCAPSA;
+ PMIXERCAPSA = ^_MIXERCAPSA;
+ LPMIXERCAPSA = ^_MIXERCAPSA;
+ TMIXERCAPSA = MIXERCAPSA;
+
+ _MIXERCAPSW = packed Record
+ wMid: WORD;
+ wPid: WORD;
+ vDriverVersion: MMVERSION;
+ szPname: array [0..Pred(MAXPNAMELEN)] Of WCHAR;
+ fdwSupport: DWORD;
+ cDestinations: DWORD;
+ End;
+ MIXERCAPSW = _MIXERCAPSW;
+ PMIXERCAPSW = ^_MIXERCAPSW;
+ LPMIXERCAPSW = ^_MIXERCAPSW;
+ TMIXERCAPSW = MIXERCAPSW;
+
+ {$ifdef UNICODE}
+ MIXERCAPS = MIXERCAPSW;
+ PMIXERCAPS = PMIXERCAPSW;
+ LPMIXERCAPS = LPMIXERCAPSW;
+ {$else}
+ MIXERCAPS = MIXERCAPSA;
+ PMIXERCAPS = PMIXERCAPSA;
+ LPMIXERCAPS = LPMIXERCAPSA;
+ {$endif}
+ TMIXERCAPS = MIXERCAPS;
+
+ _MIXERLINEA = packed Record
+ cbStruct: DWORD;
+ dwDestination: DWORD;
+ dwSource: DWORD;
+ dwLineID: DWORD;
+ fdwLine: DWORD;
+ dwUser: DWORD;
+ dwComponentType: DWORD;
+ cChannels: DWORD;
+ cConnections: DWORD;
+ cControls: DWORD;
+ szShortName: array [0..Pred(MIXER_SHORT_NAME_CHARS)] Of CHAR;
+ szName: array [0..Pred(MIXER_LONG_NAME_CHARS)] Of CHAR;
+ Target: packed Record
+ dwType,dwDeviceID: DWORD;
+ wMid,wPid: WORD;
+ vDriverVersion: MMVERSION;
+ szPname: array[0..pred(MAXPNAMELEN)] Of Char;
+ End;
+ End;
+ MIXERLINEA = _MIXERLINEA;
+ PMIXERLINEA = ^_MIXERLINEA;
+ LPMIXERLINEA = ^_MIXERLINEA;
+ TMIXERLINEA = MIXERLINEA;
+
+ _MIXERLINEW = packed Record
+ cbStruct: DWORD;
+ dwDestination: DWORD;
+ dwSource: DWORD;
+ dwLineID: DWORD;
+ fdwLine: DWORD;
+ dwUser: DWORD;
+ dwComponentType: DWORD;
+ cChannels: DWORD;
+ cConnections: DWORD;
+ cControls: DWORD;
+ szShortName: array [0..Pred(MIXER_SHORT_NAME_CHARS)] Of WCHAR;
+ szName: array [0..Pred(MIXER_LONG_NAME_CHARS)] Of WCHAR;
+ Target: packed Record
+ dwType,dwDeviceID: DWORD;
+ wMid,wPid: WORD;
+ vDriverVersion: MMVERSION;
+ szPname: array[0..pred(MAXPNAMELEN)] Of WChar;
+ End;
+ End;
+ MIXERLINEW = _MIXERLINEW;
+ TMIXERLINEW = MIXERLINEW;
+ PMIXERLINEW = ^_MIXERLINEW;
+ LPMIXERLINEW = ^_MIXERLINEW;
+ {$ifdef UNICODE}
+ MIXERLINE = MIXERLINEW;
+ PMIXERLINE = PMIXERLINEW;
+ LPMIXERLINE = LPMIXERLINEW;
+ {$else}
+ MIXERLINE = MIXERLINEA;
+ PMIXERLINE = PMIXERLINEA;
+ LPMIXERLINE = LPMIXERLINEA;
+ {$endif}
+ TMIXERLINE = MIXERLINE;
+
+ _MIXERCONTROLA = packed Record
+ cbStruct: DWORD;
+ dwControlID: DWORD;
+ dwControlType: DWORD;
+ fdwControl: DWORD;
+ cMultipleItems: DWORD;
+ szShortName: array [0..Pred(MIXER_SHORT_NAME_CHARS)] Of CHAR;
+ szName: array [0..Pred(MIXER_LONG_NAME_CHARS)] Of CHAR;
+ Bounds: packed Record
+ Case integer Of
+ 0: (lMinimum, lMaximum: longint);
+ 1: (dwMinimum, dwMaximum: DWORD);
+ 2: (dwReserved: Array[0..5] Of DWORD);
+ End;
+ Metrics: packed Record
+ Case Integer Of
+ 0: (cSteps: DWORD);
+ 1: (cbCustomData: DWORD);
+ 2: (dwReserved: Array[0..5] Of DWORD);
+ End;
+ End;
+ MIXERCONTROLA = _MIXERCONTROLA;
+ PMIXERCONTROLA = ^_MIXERCONTROLA;
+ LPMIXERCONTROLA = ^_MIXERCONTROLA;
+ TMIXERCONTROLA = MIXERCONTROLA;
+
+ _MIXERCONTROLW = packed Record
+ cbStruct: DWORD;
+ dwControlID: DWORD;
+ dwControlType: DWORD;
+ fdwControl: DWORD;
+ cMultipleItems: DWORD;
+ szShortName: array [0..Pred(MIXER_SHORT_NAME_CHARS)] Of WCHAR;
+ szName: array [0..Pred(MIXER_LONG_NAME_CHARS)] Of WCHAR;
+ Bounds: packed Record
+ Case integer Of
+ 0: (lMinimum, lMaximum: longint);
+ 1: (dwMinimum, dwMaximum: DWORD);
+ 2: (dwReserved: Array[0..5] Of DWORD);
+ End;
+ Metrics: packed Record
+ Case Integer Of
+ 0: (cSteps: DWORD);
+ 1: (cbCustomData: DWORD);
+ 2: (dwReserved: Array[0..5] Of DWORD);
+ End;
+ End;
+ MIXERCONTROLW = _MIXERCONTROLW;
+ PMIXERCONTROLW = ^_MIXERCONTROLW;
+ LPMIXERCONTROLW = ^_MIXERCONTROLW;
+ TMIXERCONTROLW = MIXERCONTROLW;
+ {$ifdef UNICODE}
+ MIXERCONTROL = MIXERCONTROLW;
+ PMIXERCONTROL = PMIXERCONTROLW;
+ LPMIXERCONTROL = LPMIXERCONTROLW;
+ {$else}
+ MIXERCONTROL = MIXERCONTROLA;
+ PMIXERCONTROL = PMIXERCONTROLA;
+ LPMIXERCONTROL = LPMIXERCONTROLA;
+ {$endif}
+ TMIXERCONTROL = MIXERCONTROL;
+
+
+ _MIXERLINECONTROLSA = packed Record
+ cbStruct: DWORD;
+ dwLineID: DWORD;
+ Case Integer Of
+ 0: (dwControlID: DWORD);
+ 1: (dwControlType, cControls, cbmxctrl: DWORD; pamxctrl:PMIXERCONTROLA);
+ End;
+ MIXERLINECONTROLSA = _MIXERLINECONTROLSA;
+ PMIXERLINECONTROLSA = ^_MIXERLINECONTROLSA;
+ LPMIXERLINECONTROLSA = ^_MIXERLINECONTROLSA;
+ TMIXERLINECONTROLSA = MIXERLINECONTROLSA;
+
+ _MIXERLINECONTROLSW = packed Record
+ cbStruct: DWORD;
+ dwLineID: DWORD;
+ Case Integer Of
+ 0: (dwControlID: DWORD);
+ 1: (dwControlType, cControls, cbmxctrl: DWORD; pamxctrl:PMIXERCONTROLW);
+ End;
+ MIXERLINECONTROLSW = _MIXERLINECONTROLSW;
+ PMIXERLINECONTROLSW = ^_MIXERLINECONTROLSW;
+ LPMIXERLINECONTROLSW = ^_MIXERLINECONTROLSW;
+ TMIXERLINECONTROLSW = MIXERLINECONTROLSW;
+
+{$ifdef UNICODE}
+ MIXERLINECONTROLS = MIXERLINECONTROLSW;
+ PMIXERLINECONTROLS = PMIXERLINECONTROLSW;
+ LPMIXERLINECONTROLS = LPMIXERLINECONTROLSW;
+{$else}
+ MIXERLINECONTROLS = MIXERLINECONTROLSA;
+ PMIXERLINECONTROLS = PMIXERLINECONTROLSA;
+ LPMIXERLINECONTROLS = LPMIXERLINECONTROLSA;
+{$endif}
+ TMIXERLINECONTROLS = MIXERLINECONTROLS;
+
+ TMIXERCONTROLDETAILS = packed Record
+ cbStruct: DWORD;
+ dwControlID: DWORD;
+ cChannels: DWORD;
+ Case Integer Of
+ 0: (hwndOwner: tHandle);
+ 1: (cMultipleItems, cbDetails: DWORD;
+ paDetails: Pointer);
+ End;
+ MIXERCONTROLDETAILS = tMIXERCONTROLDETAILS;
+ PMIXERCONTROLDETAILS = ^tMIXERCONTROLDETAILS;
+ LPMIXERCONTROLDETAILS = ^tMIXERCONTROLDETAILS;
+
+ _MIXERCONTROLDETAILS_LISTTEXTA = packed Record
+ dwParam1: DWORD;
+ dwParam2: DWORD;
+ szName: array [0..Pred(MIXER_LONG_NAME_CHARS)] Of CHAR;
+ End;
+ MIXERCONTROLDETAILS_LISTTEXTA = _MIXERCONTROLDETAILS_LISTTEXTA;
+ PMIXERCONTROLDETAILS_LISTTEXTA = ^_MIXERCONTROLDETAILS_LISTTEXTA;
+ LPMIXERCONTROLDETAILS_LISTTEXTA = ^_MIXERCONTROLDETAILS_LISTTEXTA;
+ TMIXERCONTROLDETAILS_LISTTEXTA = MIXERCONTROLDETAILS_LISTTEXTA;
+
+ _MIXERCONTROLDETAILS_LISTTEXTW = packed Record
+ dwParam1: DWORD;
+ dwParam2: DWORD;
+ szName: array [0..Pred(MIXER_LONG_NAME_CHARS)] Of WCHAR;
+ End;
+ MIXERCONTROLDETAILS_LISTTEXTW = _MIXERCONTROLDETAILS_LISTTEXTW;
+ PMIXERCONTROLDETAILS_LISTTEXTW = ^_MIXERCONTROLDETAILS_LISTTEXTW;
+ LPMIXERCONTROLDETAILS_LISTTEXTW = ^_MIXERCONTROLDETAILS_LISTTEXTW;
+ TMIXERCONTROLDETAILS_LISTTEXTW = MIXERCONTROLDETAILS_LISTTEXTW;
+
+ {$ifdef UNICODE}
+ MIXERCONTROLDETAILS_LISTTEXT = MIXERCONTROLDETAILS_LISTTEXTW;
+ PMIXERCONTROLDETAILS_LISTTEXT = PMIXERCONTROLDETAILS_LISTTEXTW;
+ LPMIXERCONTROLDETAILS_LISTTEXT = LPMIXERCONTROLDETAILS_LISTTEXTW;
+ {$else}
+ MIXERCONTROLDETAILS_LISTTEXT = MIXERCONTROLDETAILS_LISTTEXTA;
+ PMIXERCONTROLDETAILS_LISTTEXT = PMIXERCONTROLDETAILS_LISTTEXTA;
+ LPMIXERCONTROLDETAILS_LISTTEXT = LPMIXERCONTROLDETAILS_LISTTEXTA;
+ {$endif}
+ TMIXERCONTROLDETAILS_LISTTEXT = MIXERCONTROLDETAILS_LISTTEXT;
+
+_MIXERCONTROLDETAILS_BOOLEAN = packed Record
+ fValue: longint;
+ End;
+ MIXERCONTROLDETAILS_BOOLEAN = _MIXERCONTROLDETAILS_BOOLEAN;
+ PMIXERCONTROLDETAILS_BOOLEAN = ^_MIXERCONTROLDETAILS_BOOLEAN;
+ LPMIXERCONTROLDETAILS_BOOLEAN = ^_MIXERCONTROLDETAILS_BOOLEAN;
+ TMIXERCONTROLDETAILS_BOOLEAN = MIXERCONTROLDETAILS_BOOLEAN;
+
+ _MIXERCONTROLDETAILS_SIGNED = packed Record
+ lValue: longint;
+ End;
+ MIXERCONTROLDETAILS_SIGNED = _MIXERCONTROLDETAILS_SIGNED;
+ PMIXERCONTROLDETAILS_SIGNED = ^_MIXERCONTROLDETAILS_SIGNED;
+ LPMIXERCONTROLDETAILS_SIGNED = ^_MIXERCONTROLDETAILS_SIGNED;
+ TMIXERCONTROLDETAILS_SIGNED = _MIXERCONTROLDETAILS_SIGNED;
+
+ _MIXERCONTROLDETAILS_UNSIGNED = packed Record
+ dwValue: DWORD;
+ End;
+ MIXERCONTROLDETAILS_UNSIGNED = _MIXERCONTROLDETAILS_UNSIGNED;
+ PMIXERCONTROLDETAILS_UNSIGNED = ^_MIXERCONTROLDETAILS_UNSIGNED;
+ LPMIXERCONTROLDETAILS_UNSIGNED = ^_MIXERCONTROLDETAILS_UNSIGNED;
+ TMIXERCONTROLDETAILS_UNSIGNED = _MIXERCONTROLDETAILS_UNSIGNED;
+
+ LPTIMECALLBACK =
+ Procedure (uTimerID, uMsg: UINT; dwUser, dw1, dw2: DWORD);stdcall;
+ TTIMECALLBACK=LPTIMECALLBACK;
+
+ TFNTimeCallBack = TTimeCallback; // delphi compat
+
+ _timecaps = packed Record
+ wPeriodMin: UINT;
+ wPeriodMax: UINT;
+ End;
+ TIMECAPS = _timecaps;
+ PTIMECAPS = ^_timecaps;
+ NPTIMECAPS = ^_timecaps;
+ LPTIMECAPS = ^_timecaps;
+ TTIMECAPS = TIMECAPS;
+
+ _JOYCAPSA = packed Record
+ wMid: WORD;
+ wPid: WORD;
+ szPname: array [0..Pred(MAXPNAMELEN)] Of CHAR;
+ wXmin: UINT;
+ wXmax: UINT;
+ wYmin: UINT;
+ wYmax: UINT;
+ wZmin: UINT;
+ wZmax: UINT;
+ wNumButtons: UINT;
+ wPeriodMin: UINT;
+ wPeriodMax: UINT;
+ wRmin: UINT;
+ wRmax: UINT;
+ wUmin: UINT;
+ wUmax: UINT;
+ wVmin: UINT;
+ wVmax: UINT;
+ wCaps: UINT;
+ wMaxAxes: UINT;
+ wNumAxes: UINT;
+ wMaxButtons: UINT;
+ szRegKey: array [0..Pred(MAXPNAMELEN)] Of CHAR;
+ szOEMVxD: array [0..Pred(MAX_JOYSTICKOEMVXDNAME)] Of CHAR;
+ End;
+ JOYCAPSA = _JOYCAPSA;
+ PJOYCAPSA = ^_JOYCAPSA;
+ NPJOYCAPSA = ^_JOYCAPSA;
+ LPJOYCAPSA = ^_JOYCAPSA;
+ TJOYCAPSA = _JOYCAPSA;
+
+ _JOYCAPSW = packed Record
+ wMid: WORD;
+ wPid: WORD;
+ szPname: array [0..Pred(MAXPNAMELEN)] Of WCHAR;
+ wXmin: UINT;
+ wXmax: UINT;
+ wYmin: UINT;
+ wYmax: UINT;
+ wZmin: UINT;
+ wZmax: UINT;
+ wNumButtons: UINT;
+ wPeriodMin: UINT;
+ wPeriodMax: UINT;
+ wRmin: UINT;
+ wRmax: UINT;
+ wUmin: UINT;
+ wUmax: UINT;
+ wVmin: UINT;
+ wVmax: UINT;
+ wCaps: UINT;
+ wMaxAxes: UINT;
+ wNumAxes: UINT;
+ wMaxButtons: UINT;
+ szRegKey: array [0..Pred(MAXPNAMELEN)] Of WCHAR;
+ szOEMVxD: array [0..Pred(MAX_JOYSTICKOEMVXDNAME)] Of WCHAR;
+ End;
+ JOYCAPSW = _JOYCAPSW;
+ PJOYCAPSW = ^_JOYCAPSW;
+ NPJOYCAPSW = ^_JOYCAPSW;
+ LPJOYCAPSW = ^_JOYCAPSW;
+ TJOYCAPSW = _JOYCAPSW;
+
+ {$ifdef UNICODE}
+ JOYCAPS = JOYCAPSW;
+ PJOYCAPS = PJOYCAPSW;
+ NPJOYCAPS = NPJOYCAPSW;
+ LPJOYCAPS = LPJOYCAPSW;
+ {$else}
+ JOYCAPS = JOYCAPSA;
+ PJOYCAPS = PJOYCAPSA;
+ NPJOYCAPS = NPJOYCAPSA;
+ LPJOYCAPS = LPJOYCAPSA;
+ {$endif}
+ TJOYCAPS = JOYCAPS;
+
+ _joyinfo = packed Record
+ wXpos: UINT;
+ wYpos: UINT;
+ wZpos: UINT;
+ wButtons: UINT;
+ End;
+ JOYINFO = _joyinfo;
+ PJOYINFO = ^_joyinfo;
+ NPJOYINFO = ^_joyinfo;
+ LPJOYINFO = ^_joyinfo;
+ TJOYINFO = JOYINFO;
+
+ _joyinfoex = packed Record
+ dwSize: DWORD;
+ dwFlags: DWORD;
+ wXpos: UINT;
+ wYpos: UINT;
+ wZpos: UINT;
+ dwRpos: DWORD;
+ dwUpos: DWORD;
+ dwVpos: DWORD;
+ wButtons: UINT;
+ dwButtonNumber: DWORD;
+ dwPOV: DWORD;
+ dwReserved1: DWORD;
+ dwReserved2: DWORD;
+ End;
+ JOYINFOEX = _joyinfoex;
+ PJOYINFOEX = ^_joyinfoex;
+ NPJOYINFOEX = ^_joyinfoex;
+ LPJOYINFOEX = ^_joyinfoex;
+ TJOYINFOEX = JOYINFOEX;
+
+ FOURCC = DWORD;
+ HPSTR = ^char;
+ HMMIO = THandle;
+ LPMMIOPROC =
+ Function (x1: LPSTR; x2: UINT; x3, x4: LPARAM): LRESULT;stdcall;
+ TMMIOPROC = LPMMIOPROC;
+
+ _MMIOINFO = packed Record
+ dwFlags: DWORD;
+ fccIOProc: FOURCC;
+ pIOProc: LPMMIOPROC;
+ wErrorRet: UINT;
+ htask: HTASK;
+ cchBuffer: longint;
+ pchBuffer: HPSTR;
+ pchNext: HPSTR;
+ pchEndRead: HPSTR;
+ pchEndWrite: HPSTR;
+ lBufOffset: longint;
+ lDiskOffset: longint;
+ adwInfo: array [0..Pred(3)] Of DWORD;
+ dwReserved1: DWORD;
+ dwReserved2: DWORD;
+ hmmio: HMMIO;
+ End;
+ MMIOINFO = _MMIOINFO;
+ PMMIOINFO = ^_MMIOINFO;
+ NPMMIOINFO = ^_MMIOINFO;
+ LPMMIOINFO = ^_MMIOINFO;
+ LPCMMIOINFO = ^MMIOINFO;
+ TMMIOINFO = MMIOINFO;
+
+ _MMCKINFO = packed Record
+ ckid: FOURCC;
+ cksize: DWORD;
+ fccType: FOURCC;
+ dwDataOffset: DWORD;
+ dwFlags: DWORD;
+ End;
+ MMCKINFO = _MMCKINFO;
+ PMMCKINFO = ^_MMCKINFO;
+ NPMMCKINFO = ^_MMCKINFO;
+ LPMMCKINFO = ^_MMCKINFO;
+ LPCMMCKINFO = ^MMCKINFO;
+ TMMCKINFO = MMCKINFO;
+
+ MCIERROR = DWORD;
+ MCIDEVICEID = UINT;
+ YIELDPROC =
+ Function (mciId: MCIDEVICEID; dwYieldData: DWORD): UINT;stdcall;
+ TYIELDPROC = YIELDPROC;
+
+ _MCI_GENERIC_PARMS = packed Record
+ dwCallback: DWORD;
+ End;
+ MCI_GENERIC_PARMS = _MCI_GENERIC_PARMS;
+ PMCI_GENERIC_PARMS = ^_MCI_GENERIC_PARMS;
+ LPMCI_GENERIC_PARMS = ^_MCI_GENERIC_PARMS;
+ TMCI_GENERIC_PARMS = MCI_GENERIC_PARMS;
+
+ _MCI_OPEN_PARMSA = packed Record
+ dwCallback: DWORD;
+ wDeviceID: MCIDEVICEID;
+ lpstrDeviceType: LPCSTR;
+ lpstrElementName: LPCSTR;
+ lpstrAlias: LPCSTR;
+ End;
+ MCI_OPEN_PARMSA = _MCI_OPEN_PARMSA;
+ PMCI_OPEN_PARMSA = ^_MCI_OPEN_PARMSA;
+ LPMCI_OPEN_PARMSA = ^_MCI_OPEN_PARMSA;
+ TMCI_OPEN_PARMSA = MCI_OPEN_PARMSA;
+
+ _MCI_OPEN_PARMSW = packed Record
+ dwCallback: DWORD;
+ wDeviceID: MCIDEVICEID;
+ lpstrDeviceType: LPCWSTR;
+ lpstrElementName: LPCWSTR;
+ lpstrAlias: LPCWSTR;
+ End;
+ MCI_OPEN_PARMSW = _MCI_OPEN_PARMSW;
+ PMCI_OPEN_PARMSW = ^_MCI_OPEN_PARMSW;
+ LPMCI_OPEN_PARMSW = ^_MCI_OPEN_PARMSW;
+ TMCI_OPEN_PARMSW = _MCI_OPEN_PARMSW;
+ {$ifdef UNICODE}
+ MCI_OPEN_PARMS = MCI_OPEN_PARMSW;
+ PMCI_OPEN_PARMS = PMCI_OPEN_PARMSW;
+ LPMCI_OPEN_PARMS = LPMCI_OPEN_PARMSW;
+ {$else}
+ MCI_OPEN_PARMS = MCI_OPEN_PARMSA;
+ PMCI_OPEN_PARMS = PMCI_OPEN_PARMSA;
+ LPMCI_OPEN_PARMS = LPMCI_OPEN_PARMSA;
+ {$endif}
+ TMCI_OPEN_PARMS = MCI_OPEN_PARMS;
+
+ _MCI_PLAY_PARMS = packed Record
+ dwCallback: DWORD;
+ dwFrom: DWORD;
+ dwTo: DWORD;
+ End;
+ MCI_PLAY_PARMS = _MCI_PLAY_PARMS;
+ PMCI_PLAY_PARMS = ^_MCI_PLAY_PARMS;
+ LPMCI_PLAY_PARMS = ^_MCI_PLAY_PARMS;
+ TMCI_PLAY_PARMS = _MCI_PLAY_PARMS;
+
+ _MCI_SEEK_PARMS = packed Record
+ dwCallback: DWORD;
+ dwTo: DWORD;
+ End;
+ MCI_SEEK_PARMS = _MCI_SEEK_PARMS;
+ PMCI_SEEK_PARMS = ^_MCI_SEEK_PARMS;
+ LPMCI_SEEK_PARMS = ^_MCI_SEEK_PARMS;
+ TMCI_SEEK_PARMS = _MCI_SEEK_PARMS;
+
+ _MCI_STATUS_PARMS = packed Record
+ dwCallback: DWORD;
+ dwReturn: DWORD;
+ dwItem: DWORD;
+ dwTrack: DWORD;
+ End;
+ MCI_STATUS_PARMS = _MCI_STATUS_PARMS;
+ PMCI_STATUS_PARMS = ^_MCI_STATUS_PARMS;
+ LPMCI_STATUS_PARMS = ^_MCI_STATUS_PARMS;
+ TMCI_STATUS_PARMS = _MCI_STATUS_PARMS;
+
+ _MCI_INFO_PARMSA = packed Record
+ dwCallback: DWORD;
+ lpstrReturn: PChar;
+ dwRetSize: DWORD;
+ End;
+ MCI_INFO_PARMSA = _MCI_INFO_PARMSA;
+ LPMCI_INFO_PARMSA = ^_MCI_INFO_PARMSA;
+ TMCI_INFO_PARMSA = _MCI_INFO_PARMSA;
+
+ _MCI_INFO_PARMSW = packed Record
+ dwCallback: DWORD;
+ lpstrReturn: LPWSTR;
+ dwRetSize: DWORD;
+ End;
+ MCI_INFO_PARMSW = _MCI_INFO_PARMSW;
+ LPMCI_INFO_PARMSW = ^_MCI_INFO_PARMSW;
+ TMCI_INFO_PARMSW = _MCI_INFO_PARMSW;
+
+ {$ifdef UNICODE}
+ MCI_INFO_PARMS = MCI_INFO_PARMSW;
+ LPMCI_INFO_PARMS = LPMCI_INFO_PARMSW;
+ {$else}
+ MCI_INFO_PARMS = MCI_INFO_PARMSA;
+ LPMCI_INFO_PARMS = LPMCI_INFO_PARMSA;
+ {$endif}
+ TMCI_INFO_PARMS = MCI_INFO_PARMS;
+
+ _MCI_GETDEVCAPS_PARMS = packed Record
+ dwCallback: DWORD;
+ dwReturn: DWORD;
+ dwItem: DWORD;
+ End;
+ MCI_GETDEVCAPS_PARMS = _MCI_GETDEVCAPS_PARMS;
+ PMCI_GETDEVCAPS_PARMS = ^_MCI_GETDEVCAPS_PARMS;
+ LPMCI_GETDEVCAPS_PARMS = ^_MCI_GETDEVCAPS_PARMS;
+ TMCI_GETDEVCAPS_PARMS = _MCI_GETDEVCAPS_PARMS;
+
+
+
+ _MCI_SYSINFO_PARMSA = packed Record
+ dwCallback: DWORD;
+ lpstrReturn: PChar;
+ dwRetSize: DWORD;
+ dwNumber: DWORD;
+ wDeviceType: UINT;
+ End;
+ MCI_SYSINFO_PARMSA = _MCI_SYSINFO_PARMSA;
+ PMCI_SYSINFO_PARMSA = ^_MCI_SYSINFO_PARMSA;
+ LPMCI_SYSINFO_PARMSA = ^_MCI_SYSINFO_PARMSA;
+ TMCI_SYSINFO_PARMSA = _MCI_SYSINFO_PARMSA;
+
+ _MCI_SYSINFO_PARMSW = packed Record
+ dwCallback: DWORD;
+ lpstrReturn: LPWSTR;
+ dwRetSize: DWORD;
+ dwNumber: DWORD;
+ wDeviceType: UINT;
+ End;
+ MCI_SYSINFO_PARMSW = _MCI_SYSINFO_PARMSW;
+ PMCI_SYSINFO_PARMSW = ^_MCI_SYSINFO_PARMSW;
+ LPMCI_SYSINFO_PARMSW = ^_MCI_SYSINFO_PARMSW;
+ TMCI_SYSINFO_PARMSW = _MCI_SYSINFO_PARMSW;
+ {$ifdef UNICODE}
+ MCI_SYSINFO_PARMS = MCI_SYSINFO_PARMSW;
+ PMCI_SYSINFO_PARMS = PMCI_SYSINFO_PARMSW;
+ LPMCI_SYSINFO_PARMS = LPMCI_SYSINFO_PARMSW;
+ {$else}
+ MCI_SYSINFO_PARMS = MCI_SYSINFO_PARMSA;
+ PMCI_SYSINFO_PARMS = PMCI_SYSINFO_PARMSA;
+ LPMCI_SYSINFO_PARMS = LPMCI_SYSINFO_PARMSA;
+ {$endif}
+ TMCI_SYSINFO_PARMS = MCI_SYSINFO_PARMS;
+
+ _MCI_SET_PARMS = packed Record
+ dwCallback: DWORD;
+ dwTimeFormat: DWORD;
+ dwAudio: DWORD;
+ End;
+ MCI_SET_PARMS = _MCI_SET_PARMS;
+ PMCI_SET_PARMS = ^_MCI_SET_PARMS;
+ LPMCI_SET_PARMS = ^_MCI_SET_PARMS;
+ TMCI_SET_PARMS = _MCI_SET_PARMS;
+
+ _MCI_BREAK_PARMS = packed Record
+ dwCallback: DWORD;
+ nVirtKey: longint;
+ hwndBreak: HWND;
+ End;
+ MCI_BREAK_PARMS = _MCI_BREAK_PARMS;
+ PMCI_BREAK_PARMS = ^_MCI_BREAK_PARMS;
+ LPMCI_BREAK_PARMS = ^_MCI_BREAK_PARMS;
+ TMCI_BREAK_PARMS = _MCI_BREAK_PARMS;
+
+ _MCI_SAVE_PARMSA = packed Record
+ dwCallback: DWORD;
+ lpfilename: LPCSTR;
+ End;
+ MCI_SAVE_PARMSA = _MCI_SAVE_PARMSA;
+ PMCI_SAVE_PARMSA = ^_MCI_SAVE_PARMSA;
+ LPMCI_SAVE_PARMSA = ^_MCI_SAVE_PARMSA;
+ TMCI_SAVE_PARMSA = _MCI_SAVE_PARMSA;
+ TMCI_SaveParmsA = TMCI_SAVE_PARMSA;
+
+ _MCI_SAVE_PARMSW = packed Record
+ dwCallback: DWORD;
+ lpfilename: LPCWSTR;
+ End;
+ MCI_SAVE_PARMSW = _MCI_SAVE_PARMSW;
+ PMCI_SAVE_PARMSW = ^_MCI_SAVE_PARMSW;
+ LPMCI_SAVE_PARMSW = ^_MCI_SAVE_PARMSW;
+ TMCI_SAVE_PARMSW = _MCI_SAVE_PARMSW;
+ TMCI_SaveParmsW = TMCI_SAVE_PARMSW;
+
+ {$ifdef UNICODE}
+ MCI_SAVE_PARMS = MCI_SAVE_PARMSW;
+ PMCI_SAVE_PARMS = PMCI_SAVE_PARMSW;
+ LPMCI_SAVE_PARMS = LPMCI_SAVE_PARMSW;
+ {$else}
+ MCI_SAVE_PARMS = MCI_SAVE_PARMSA;
+ PMCI_SAVE_PARMS = PMCI_SAVE_PARMSA;
+ LPMCI_SAVE_PARMS = LPMCI_SAVE_PARMSA;
+ {$endif}
+ TMCI_SAVE_PARMS = MCI_SAVE_PARMS;
+ TMCI_SaveParms = TMCI_SAVE_PARMS;
+
+ _MCI_LOAD_PARMSA = packed Record
+ dwCallback: DWORD;
+ lpfilename: LPCSTR;
+ End;
+ MCI_LOAD_PARMSA = _MCI_LOAD_PARMSA;
+ PMCI_LOAD_PARMSA = ^_MCI_LOAD_PARMSA;
+ LPMCI_LOAD_PARMSA = ^_MCI_LOAD_PARMSA;
+ TMCI_LOAD_PARMSA = _MCI_LOAD_PARMSA;
+
+ _MCI_LOAD_PARMSW = packed Record
+ dwCallback: DWORD;
+ lpfilename: LPCWSTR;
+ End;
+
+ MCI_LOAD_PARMSW = _MCI_LOAD_PARMSW;
+ PMCI_LOAD_PARMSW = ^_MCI_LOAD_PARMSW;
+ LPMCI_LOAD_PARMSW = ^_MCI_LOAD_PARMSW;
+ TMCI_LOAD_PARMSW = _MCI_LOAD_PARMSW;
+
+ {$ifdef UNICODE}
+ MCI_LOAD_PARMS = MCI_LOAD_PARMSW;
+ PMCI_LOAD_PARMS = PMCI_LOAD_PARMSW;
+ LPMCI_LOAD_PARMS = LPMCI_LOAD_PARMSW;
+ {$else}
+ MCI_LOAD_PARMS = MCI_LOAD_PARMSA;
+ PMCI_LOAD_PARMS = PMCI_LOAD_PARMSA;
+ LPMCI_LOAD_PARMS = LPMCI_LOAD_PARMSA;
+ {$endif}
+ TMCI_LOAD_PARMS = MCI_LOAD_PARMS;
+
+ _MCI_RECORD_PARMS = packed Record
+ dwCallback: DWORD;
+ dwFrom: DWORD;
+ dwTo: DWORD;
+ End;
+ MCI_RECORD_PARMS = _MCI_RECORD_PARMS;
+ LPMCI_RECORD_PARMS = ^_MCI_RECORD_PARMS;
+ TMCI_RECORD_PARMS = _MCI_RECORD_PARMS;
+
+ _MCI_VD_PLAY_PARMS = packed Record
+ dwCallback: DWORD;
+ dwFrom: DWORD;
+ dwTo: DWORD;
+ dwSpeed: DWORD;
+ End;
+ MCI_VD_PLAY_PARMS = _MCI_VD_PLAY_PARMS;
+ PMCI_VD_PLAY_PARMS = ^_MCI_VD_PLAY_PARMS;
+ LPMCI_VD_PLAY_PARMS = ^_MCI_VD_PLAY_PARMS;
+ TMCI_VD_PLAY_PARMS = _MCI_VD_PLAY_PARMS;
+
+ _MCI_VD_STEP_PARMS = packed Record
+ dwCallback: DWORD;
+ dwFrames: DWORD;
+ End;
+ MCI_VD_STEP_PARMS = _MCI_VD_STEP_PARMS;
+ PMCI_VD_STEP_PARMS = ^_MCI_VD_STEP_PARMS;
+ LPMCI_VD_STEP_PARMS = ^_MCI_VD_STEP_PARMS;
+
+ _MCI_VD_ESCAPE_PARMSA = packed Record
+ dwCallback: DWORD;
+ lpstrCommand: LPCSTR;
+ End;
+ MCI_VD_ESCAPE_PARMSA = _MCI_VD_ESCAPE_PARMSA;
+ PMCI_VD_ESCAPE_PARMSA = ^_MCI_VD_ESCAPE_PARMSA;
+ LPMCI_VD_ESCAPE_PARMSA = ^_MCI_VD_ESCAPE_PARMSA;
+ TMCI_VD_ESCAPE_PARMSA = _MCI_VD_ESCAPE_PARMSA;
+
+_MCI_VD_ESCAPE_PARMSW = packed Record
+ dwCallback: DWORD;
+ lpstrCommand: LPCWSTR;
+ End;
+ MCI_VD_ESCAPE_PARMSW = _MCI_VD_ESCAPE_PARMSW;
+ PMCI_VD_ESCAPE_PARMSW = ^_MCI_VD_ESCAPE_PARMSW;
+ LPMCI_VD_ESCAPE_PARMSW = ^_MCI_VD_ESCAPE_PARMSW;
+ TMCI_VD_ESCAPE_PARMSW = _MCI_VD_ESCAPE_PARMSW;
+ {$ifdef UNICODE}
+ MCI_VD_ESCAPE_PARMS = MCI_VD_ESCAPE_PARMSW;
+ PMCI_VD_ESCAPE_PARMS = PMCI_VD_ESCAPE_PARMSW;
+ LPMCI_VD_ESCAPE_PARMS = LPMCI_VD_ESCAPE_PARMSW;
+ {$else}
+ MCI_VD_ESCAPE_PARMS = MCI_VD_ESCAPE_PARMSA;
+ PMCI_VD_ESCAPE_PARMS = PMCI_VD_ESCAPE_PARMSA;
+ LPMCI_VD_ESCAPE_PARMS = LPMCI_VD_ESCAPE_PARMSA;
+ {$endif}
+ TMCI_VD_ESCAPE_PARMS = MCI_VD_ESCAPE_PARMS;
+
+ _MCI_WAVE_OPEN_PARMSA = packed Record
+ dwCallback: DWORD;
+ wDeviceID: MCIDEVICEID;
+ lpstrDeviceType: LPCSTR;
+ lpstrElementName: LPCSTR;
+ lpstrAlias: LPCSTR;
+ dwBufferSeconds: DWORD;
+ End;
+ MCI_WAVE_OPEN_PARMSA = _MCI_WAVE_OPEN_PARMSA;
+ PMCI_WAVE_OPEN_PARMSA = ^_MCI_WAVE_OPEN_PARMSA;
+ LPMCI_WAVE_OPEN_PARMSA = ^_MCI_WAVE_OPEN_PARMSA;
+ TMCI_WAVE_OPEN_PARMSA = _MCI_WAVE_OPEN_PARMSA;
+
+ _MCI_WAVE_OPEN_PARMSW = packed Record
+ dwCallback: DWORD;
+ wDeviceID: MCIDEVICEID;
+ lpstrDeviceType: LPCWSTR;
+ lpstrElementName: LPCWSTR;
+ lpstrAlias: LPCWSTR;
+ dwBufferSeconds: DWORD;
+ End;
+ MCI_WAVE_OPEN_PARMSW = _MCI_WAVE_OPEN_PARMSW;
+ PMCI_WAVE_OPEN_PARMSW = ^_MCI_WAVE_OPEN_PARMSW;
+ LPMCI_WAVE_OPEN_PARMSW = ^_MCI_WAVE_OPEN_PARMSW;
+ TMCI_WAVE_OPEN_PARMSW = _MCI_WAVE_OPEN_PARMSW;
+ {$ifdef UNICODE}
+ MCI_WAVE_OPEN_PARMS = MCI_WAVE_OPEN_PARMSW;
+ PMCI_WAVE_OPEN_PARMS = PMCI_WAVE_OPEN_PARMSW;
+ LPMCI_WAVE_OPEN_PARMS = LPMCI_WAVE_OPEN_PARMSW;
+ {$else}
+ MCI_WAVE_OPEN_PARMS = MCI_WAVE_OPEN_PARMSA;
+ PMCI_WAVE_OPEN_PARMS = PMCI_WAVE_OPEN_PARMSA;
+ LPMCI_WAVE_OPEN_PARMS = LPMCI_WAVE_OPEN_PARMSA;
+ {$endif}
+ TMCI_WAVE_OPEN_PARMS = MCI_WAVE_OPEN_PARMS;
+
+ _MCI_WAVE_DELETE_PARMS = packed Record
+ dwCallback: DWORD;
+ dwFrom: DWORD;
+ dwTo: DWORD;
+ End;
+ MCI_WAVE_DELETE_PARMS = _MCI_WAVE_DELETE_PARMS;
+ PMCI_WAVE_DELETE_PARMS = ^_MCI_WAVE_DELETE_PARMS;
+ LPMCI_WAVE_DELETE_PARMS = ^_MCI_WAVE_DELETE_PARMS;
+ TMCI_WAVE_DELETE_PARMS = _MCI_WAVE_DELETE_PARMS;
+
+ _MCI_WAVE_SET_PARMS = packed Record
+ dwCallback: DWORD;
+ dwTimeFormat: DWORD;
+ dwAudio: DWORD;
+ wInput: UINT;
+ wOutput: UINT;
+ wFormatTag: WORD;
+ wReserved2: WORD;
+ nChannels: WORD;
+ wReserved3: WORD;
+ nSamplesPerSec: DWORD;
+ nAvgBytesPerSec: DWORD;
+ nBlockAlign: WORD;
+ wReserved4: WORD;
+ wBitsPerSample: WORD;
+ wReserved5: WORD;
+ End;
+ MCI_WAVE_SET_PARMS = _MCI_WAVE_SET_PARMS;
+ PMCI_WAVE_SET_PARMS = ^_MCI_WAVE_SET_PARMS;
+ LPMCI_WAVE_SET_PARMS = ^_MCI_WAVE_SET_PARMS;
+ TMCI_WAVE_SET_PARMS = _MCI_WAVE_SET_PARMS;
+
+ _MCI_SEQ_SET_PARMS = packed Record
+ dwCallback: DWORD;
+ dwTimeFormat: DWORD;
+ dwAudio: DWORD;
+ dwTempo: DWORD;
+ dwPort: DWORD;
+ dwSlave: DWORD;
+ dwMaster: DWORD;
+ dwOffset: DWORD;
+ End;
+ MCI_SEQ_SET_PARMS = _MCI_SEQ_SET_PARMS;
+ PMCI_SEQ_SET_PARMS = ^_MCI_SEQ_SET_PARMS;
+ LPMCI_SEQ_SET_PARMS = ^_MCI_SEQ_SET_PARMS;
+ TMCI_SEQ_SET_PARMS = _MCI_SEQ_SET_PARMS;
+
+ _MCI_ANIM_OPEN_PARMSA = packed Record
+ dwCallback: DWORD;
+ wDeviceID: MCIDEVICEID;
+ lpstrDeviceType: LPCSTR;
+ lpstrElementName: LPCSTR;
+ lpstrAlias: LPCSTR;
+ dwStyle: DWORD;
+ hWndParent: HWND;
+ End;
+ MCI_ANIM_OPEN_PARMSA = _MCI_ANIM_OPEN_PARMSA;
+ PMCI_ANIM_OPEN_PARMSA = ^_MCI_ANIM_OPEN_PARMSA;
+ LPMCI_ANIM_OPEN_PARMSA = ^_MCI_ANIM_OPEN_PARMSA;
+ TMCI_ANIM_OPEN_PARMSA = _MCI_ANIM_OPEN_PARMSA;
+
+ _MCI_ANIM_OPEN_PARMSW = packed Record
+ dwCallback: DWORD;
+ wDeviceID: MCIDEVICEID;
+ lpstrDeviceType: LPCWSTR;
+ lpstrElementName: LPCWSTR;
+ lpstrAlias: LPCWSTR;
+ dwStyle: DWORD;
+ hWndParent: HWND;
+ End;
+ MCI_ANIM_OPEN_PARMSW = _MCI_ANIM_OPEN_PARMSW;
+ PMCI_ANIM_OPEN_PARMSW = ^_MCI_ANIM_OPEN_PARMSW;
+ LPMCI_ANIM_OPEN_PARMSW = ^_MCI_ANIM_OPEN_PARMSW;
+ {$ifdef UNICODE}
+ MCI_ANIM_OPEN_PARMS = MCI_ANIM_OPEN_PARMSW;
+ PMCI_ANIM_OPEN_PARMS = PMCI_ANIM_OPEN_PARMSW;
+ LPMCI_ANIM_OPEN_PARMS = LPMCI_ANIM_OPEN_PARMSW;
+ {$else}
+ MCI_ANIM_OPEN_PARMS = MCI_ANIM_OPEN_PARMSA;
+ PMCI_ANIM_OPEN_PARMS = PMCI_ANIM_OPEN_PARMSA;
+ LPMCI_ANIM_OPEN_PARMS = LPMCI_ANIM_OPEN_PARMSA;
+ {$endif}
+ TMCI_ANIM_OPEN_PARMS = MCI_ANIM_OPEN_PARMS;
+
+ _MCI_ANIM_WINDOW_PARMSW = packed Record
+ dwCallback: DWORD;
+ Wnd: HWND;
+ nCmdShow: UINT;
+ lpstrText: LPCWSTR;
+ End;
+ MCI_ANIM_WINDOW_PARMSW = _MCI_ANIM_WINDOW_PARMSW;
+ PMCI_ANIM_WINDOW_PARMSW = ^_MCI_ANIM_WINDOW_PARMSW;
+ LPMCI_ANIM_WINDOW_PARMSW = ^_MCI_ANIM_WINDOW_PARMSW;
+ TMCI_ANIM_WINDOW_PARMSW = _MCI_ANIM_WINDOW_PARMSW;
+
+ _MCI_ANIM_STEP_PARMS = packed Record
+ dwCallback: DWORD;
+ dwFrames: DWORD;
+ End;
+ MCI_ANIM_STEP_PARMS = _MCI_ANIM_STEP_PARMS;
+ PMCI_ANIM_STEP_PARMS = ^_MCI_ANIM_STEP_PARMS;
+ LPMCI_ANIM_STEP_PARMS = ^_MCI_ANIM_STEP_PARMS;
+ TMCI_ANIM_STEP_PARMS = _MCI_ANIM_STEP_PARMS;
+
+ _MCI_ANIM_WINDOW_PARMSA = packed Record
+ dwCallback: DWORD;
+ Wnd: HWND;
+ nCmdShow: UINT;
+ lpstrText: LPCSTR;
+ End;
+ MCI_ANIM_WINDOW_PARMSA = _MCI_ANIM_WINDOW_PARMSA;
+ PMCI_ANIM_WINDOW_PARMSA = ^_MCI_ANIM_WINDOW_PARMSA;
+ LPMCI_ANIM_WINDOW_PARMSA = ^_MCI_ANIM_WINDOW_PARMSA;
+ TMCI_ANIM_WINDOW_PARMSA = _MCI_ANIM_WINDOW_PARMSA;
+_MCI_ANIM_PLAY_PARMS = packed Record
+ dwCallback: DWORD;
+ dwFrom: DWORD;
+ dwTo: DWORD;
+ dwSpeed: DWORD;
+ End;
+ MCI_ANIM_PLAY_PARMS = _MCI_ANIM_PLAY_PARMS;
+ PMCI_ANIM_PLAY_PARMS = ^_MCI_ANIM_PLAY_PARMS;
+ LPMCI_ANIM_PLAY_PARMS = ^_MCI_ANIM_PLAY_PARMS;
+ {$ifdef UNICODE}
+ MCI_ANIM_WINDOW_PARMS = MCI_ANIM_WINDOW_PARMSW;
+ PMCI_ANIM_WINDOW_PARMS = PMCI_ANIM_WINDOW_PARMSW;
+ LPMCI_ANIM_WINDOW_PARMS = LPMCI_ANIM_WINDOW_PARMSW;
+ {$else}
+ MCI_ANIM_WINDOW_PARMS = MCI_ANIM_WINDOW_PARMSA;
+ PMCI_ANIM_WINDOW_PARMS = PMCI_ANIM_WINDOW_PARMSA;
+ LPMCI_ANIM_WINDOW_PARMS = LPMCI_ANIM_WINDOW_PARMSA;
+ {$endif}
+ TMCI_ANIM_WINDOW_PARMS = MCI_Anim_Window_Parms;
+ _MCI_ANIM_RECT_PARMS = packed Record
+ dwCallback: DWORD;
+ rc: TRECT;
+ End;
+ MCI_ANIM_RECT_PARMS = _MCI_ANIM_RECT_PARMS;
+ PMCI_ANIM_RECT_PARMS = ^MCI_ANIM_RECT_PARMS;
+ LPMCI_ANIM_RECT_PARMS = ^MCI_ANIM_RECT_PARMS;
+ TMCI_ANIM_RECT_PARMS = _MCI_ANIM_RECT_PARMS;
+
+ _MCI_ANIM_UPDATE_PARMS = packed Record
+ dwCallback: DWORD;
+ rc: TRECT;
+ hDC: HDC;
+ End;
+ MCI_ANIM_UPDATE_PARMS = _MCI_ANIM_UPDATE_PARMS;
+ PMCI_ANIM_UPDATE_PARMS = ^_MCI_ANIM_UPDATE_PARMS;
+ LPMCI_ANIM_UPDATE_PARMS = ^_MCI_ANIM_UPDATE_PARMS;
+ TMCI_ANIM_UPDATE_PARMS = _MCI_ANIM_UPDATE_PARMS;
+
+ _MCI_OVLY_OPEN_PARMSA = packed Record
+ dwCallback: DWORD;
+ wDeviceID: MCIDEVICEID;
+ lpstrDeviceType: LPCSTR;
+ lpstrElementName: LPCSTR;
+ lpstrAlias: LPCSTR;
+ dwStyle: DWORD;
+ hWndParent: HWND;
+ End;
+ MCI_OVLY_OPEN_PARMSA = _MCI_OVLY_OPEN_PARMSA;
+ PMCI_OVLY_OPEN_PARMSA = ^_MCI_OVLY_OPEN_PARMSA;
+ LPMCI_OVLY_OPEN_PARMSA = ^_MCI_OVLY_OPEN_PARMSA;
+ TMCI_OVLY_OPEN_PARMSA = _MCI_OVLY_OPEN_PARMSA;
+
+ _MCI_OVLY_OPEN_PARMSW = packed Record
+ dwCallback: DWORD;
+ wDeviceID: MCIDEVICEID;
+ lpstrDeviceType: LPCWSTR;
+ lpstrElementName: LPCWSTR;
+ lpstrAlias: LPCWSTR;
+ dwStyle: DWORD;
+ hWndParent: HWND;
+ End;
+ MCI_OVLY_OPEN_PARMSW = _MCI_OVLY_OPEN_PARMSW;
+ PMCI_OVLY_OPEN_PARMSW = ^_MCI_OVLY_OPEN_PARMSW;
+ LPMCI_OVLY_OPEN_PARMSW = ^_MCI_OVLY_OPEN_PARMSW;
+ TMCI_OVLY_OPEN_PARMSW = _MCI_OVLY_OPEN_PARMSW;
+
+ {$ifdef UNICODE}
+ MCI_OVLY_OPEN_PARMS = MCI_OVLY_OPEN_PARMSW;
+ PMCI_OVLY_OPEN_PARMS = PMCI_OVLY_OPEN_PARMSW;
+ LPMCI_OVLY_OPEN_PARMS = LPMCI_OVLY_OPEN_PARMSW;
+ {$else}
+ MCI_OVLY_OPEN_PARMS = MCI_OVLY_OPEN_PARMSA;
+ PMCI_OVLY_OPEN_PARMS = PMCI_OVLY_OPEN_PARMSA;
+ LPMCI_OVLY_OPEN_PARMS = LPMCI_OVLY_OPEN_PARMSA;
+ {$endif}
+ TMCI_OVLY_OPEN_PARMS = MCI_OVLY_OPEN_PARMS;
+
+_MCI_OVLY_WINDOW_PARMSA = packed Record
+ dwCallback: DWORD;
+ hWnd: HWND;
+ nCmdShow: UINT;
+ lpstrText: LPCSTR;
+ End;
+ MCI_OVLY_WINDOW_PARMSA = _MCI_OVLY_WINDOW_PARMSA;
+ PMCI_OVLY_WINDOW_PARMSA = ^_MCI_OVLY_WINDOW_PARMSA;
+ LPMCI_OVLY_WINDOW_PARMSA = ^_MCI_OVLY_WINDOW_PARMSA;
+ TMCI_OVLY_WINDOW_PARMSA = _MCI_OVLY_WINDOW_PARMSA;
+
+ _MCI_OVLY_WINDOW_PARMSW = packed Record
+ dwCallback: DWORD;
+ hWnd: HWND;
+ nCmdShow: UINT;
+ lpstrText: LPCWSTR;
+ End;
+ MCI_OVLY_WINDOW_PARMSW = _MCI_OVLY_WINDOW_PARMSW;
+ PMCI_OVLY_WINDOW_PARMSW = ^_MCI_OVLY_WINDOW_PARMSW;
+ LPMCI_OVLY_WINDOW_PARMSW = ^_MCI_OVLY_WINDOW_PARMSW;
+ TMCI_OVLY_WINDOW_PARMSW = _MCI_OVLY_WINDOW_PARMSW;
+
+ {$ifdef UNICODE}
+ MCI_OVLY_WINDOW_PARMS = MCI_OVLY_WINDOW_PARMSW;
+ PMCI_OVLY_WINDOW_PARMS = PMCI_OVLY_WINDOW_PARMSW;
+ LPMCI_OVLY_WINDOW_PARMS = LPMCI_OVLY_WINDOW_PARMSW;
+ {$else}
+ MCI_OVLY_WINDOW_PARMS = MCI_OVLY_WINDOW_PARMSA;
+ PMCI_OVLY_WINDOW_PARMS = PMCI_OVLY_WINDOW_PARMSA;
+ LPMCI_OVLY_WINDOW_PARMS = LPMCI_OVLY_WINDOW_PARMSA;
+ {$endif}
+ TMCI_OVLY_WINDOW_PARMS = MCI_OVLY_WINDOW_PARMSW;
+
+ _MCI_OVLY_RECT_PARMS = packed Record
+ dwCallback: DWORD;
+ rc: TRECT;
+ End;
+ MCI_OVLY_RECT_PARMS = _MCI_OVLY_RECT_PARMS;
+ PMCI_OVLY_RECT_PARMS = ^_MCI_OVLY_RECT_PARMS;
+ LPMCI_OVLY_RECT_PARMS = ^_MCI_OVLY_RECT_PARMS;
+ TMCI_OVLY_RECT_PARMS = _MCI_OVLY_RECT_PARMS;
+
+ _MCI_OVLY_SAVE_PARMSA = packed Record
+ dwCallback: DWORD;
+ lpfilename: LPCSTR;
+ rc: TRECT;
+ End;
+ MCI_OVLY_SAVE_PARMSA = _MCI_OVLY_SAVE_PARMSA;
+ PMCI_OVLY_SAVE_PARMSA = ^_MCI_OVLY_SAVE_PARMSA;
+ LPMCI_OVLY_SAVE_PARMSA = ^_MCI_OVLY_SAVE_PARMSA;
+ TMCI_OVLY_SAVE_PARMSA = _MCI_OVLY_SAVE_PARMSA;
+
+ _MCI_OVLY_SAVE_PARMSW = packed Record
+ dwCallback: DWORD;
+ lpfilename: LPCWSTR;
+ rc: TRECT;
+ End;
+ MCI_OVLY_SAVE_PARMSW = _MCI_OVLY_SAVE_PARMSW;
+ PMCI_OVLY_SAVE_PARMSW = ^_MCI_OVLY_SAVE_PARMSW;
+ LPMCI_OVLY_SAVE_PARMSW = ^_MCI_OVLY_SAVE_PARMSW;
+ TMCI_OVLY_SAVE_PARMSW = _MCI_OVLY_SAVE_PARMSW;
+
+ {$ifdef UNICODE}
+ MCI_OVLY_SAVE_PARMS = MCI_OVLY_SAVE_PARMSW;
+ PMCI_OVLY_SAVE_PARMS = PMCI_OVLY_SAVE_PARMSW;
+ LPMCI_OVLY_SAVE_PARMS = LPMCI_OVLY_SAVE_PARMSW;
+ {$else}
+ MCI_OVLY_SAVE_PARMS = MCI_OVLY_SAVE_PARMSA;
+ PMCI_OVLY_SAVE_PARMS = PMCI_OVLY_SAVE_PARMSA;
+ LPMCI_OVLY_SAVE_PARMS = LPMCI_OVLY_SAVE_PARMSA;
+ {$endif}
+ TMCI_OVLY_SAVE_PARMS = MCI_OVLY_SAVE_PARMS;
+
+ _MCI_OVLY_LOAD_PARMSA = packed Record
+ dwCallback: DWORD;
+ lpfilename: LPCSTR;
+ rc: TRECT;
+ End;
+ MCI_OVLY_LOAD_PARMSA = _MCI_OVLY_LOAD_PARMSA;
+ PMCI_OVLY_LOAD_PARMSA = ^_MCI_OVLY_LOAD_PARMSA;
+ LPMCI_OVLY_LOAD_PARMSA = ^_MCI_OVLY_LOAD_PARMSA;
+ TMCI_OVLY_LOAD_PARMSA = _MCI_OVLY_LOAD_PARMSA;
+ _MCI_OVLY_LOAD_PARMSW = packed Record
+ dwCallback: DWORD;
+ lpfilename: LPCWSTR;
+ rc: TRECT;
+ End;
+ MCI_OVLY_LOAD_PARMSW = _MCI_OVLY_LOAD_PARMSW;
+ PMCI_OVLY_LOAD_PARMSW = ^_MCI_OVLY_LOAD_PARMSW;
+ LPMCI_OVLY_LOAD_PARMSW = ^_MCI_OVLY_LOAD_PARMSW;
+ TMCI_OVLY_LOAD_PARMSW = _MCI_OVLY_LOAD_PARMSW;
+
+ {$ifdef UNICODE}
+ MCI_OVLY_LOAD_PARMS = MCI_OVLY_LOAD_PARMSW;
+ PMCI_OVLY_LOAD_PARMS = PMCI_OVLY_LOAD_PARMSW;
+ LPMCI_OVLY_LOAD_PARMS = LPMCI_OVLY_LOAD_PARMSW;
+ {$else}
+ MCI_OVLY_LOAD_PARMS = MCI_OVLY_LOAD_PARMSA;
+ PMCI_OVLY_LOAD_PARMS = PMCI_OVLY_LOAD_PARMSA;
+ LPMCI_OVLY_LOAD_PARMS = LPMCI_OVLY_LOAD_PARMSA;
+ {$endif}
+ TMCI_OVLY_LOAD_PARMS = MCI_OVLY_LOAD_PARMS;
+
+Type // Delphi compatibility
+// TMMIOInfo = _MMIOINFO;
+// TMMCKInfo = _MMCKINFO;
+ pcmwaveformat_tag = PCMWAVEFORMAT;
+// TPCMWaveFormat = pcmwaveformat_tag;
+
+
+(*////////////////////////////////////////////////////////*)
+(* Function prototypes*)
+(*////////////////////////////////////////////////////////*)
+Function mmioStringToFOURCCA(x1: LPCSTR; x2: UINT): FOURCC;stdcall; external 'winmm.dll' name 'mmioStringToFOURCCA';
+Function mmioStringToFOURCCW(x1: LPCWSTR; x2: UINT): FOURCC;stdcall; external 'winmm.dll' name 'mmioStringToFOURCCW';
+Function mmioStringToFOURCC(x1: PChar; x2: UINT): FOURCC;stdcall; external 'winmm.dll' name
+ {$ifdef UNICODE}'mmioStringToFOURCCW'
+ {$else}'mmioStringToFOURCCA'
+ {$endif};
+Function mmioInstallIOProcA(x1: FOURCC; x2: LPMMIOPROC; x3: DWORD): LPMMIOPROC;stdcall; external 'winmm.dll' name 'mmioInstallIOProcA';
+Function mmioInstallIOProcW(x1: FOURCC; x2: LPMMIOPROC; x3: DWORD): LPMMIOPROC;stdcall; external 'winmm.dll' name 'mmioInstallIOProcW';
+Function mmioInstallIOProc(x1: FOURCC; x2: LPMMIOPROC; x3: DWORD): LPMMIOPROC;stdcall; external 'winmm.dll' name
+ {$ifdef UNICODE}'mmioInstallIOProcW'
+ {$else}'mmioInstallIOProcA'
+ {$endif};
+Function mmioOpenA(x1: LPSTR; x2: LPMMIOINFO; x3: DWORD): HMMIO;stdcall; external 'winmm.dll' name 'mmioOpenA';
+Function mmioOpenW(x1: LPWSTR; x2: LPMMIOINFO; x3: DWORD): HMMIO;stdcall; external 'winmm.dll' name 'mmioOpenW';
+Function mmioOpen(x1: PChar; x2: LPMMIOINFO; x3: DWORD): HMMIO;stdcall; external 'winmm.dll' name
+ {$ifdef UNICODE}'mmioOpenW'
+ {$else}'mmioOpenA'
+ {$endif};
+Function mmioRenameA(x1: LPCSTR; x2: LPCSTR; x3: LPCMMIOINFO; x4: DWORD): MMRESULT;stdcall; external 'winmm.dll' name 'mmioRenameA';
+Function mmioRenameW(x1: LPCWSTR; x2: LPCWSTR; x3: LPCMMIOINFO; x4: DWORD): MMRESULT;stdcall; external 'winmm.dll' name 'mmioRenameW';
+Function mmioRename(x1: PChar; x2: PChar; x3: LPCMMIOINFO; x4: DWORD): MMRESULT;stdcall; external 'winmm.dll' name
+ {$ifdef UNICODE}'mmioRenameW'
+ {$else}'mmioRenameA'
+ {$endif};
+Function mmioClose(x1: HMMIO; x2: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'mmioClose';
+Function mmioRead(x1: HMMIO; x2: HPSTR; x3: LONG): LONG;stdcall; external 'winmm.dll' name 'mmioRead';
+Function mmioWrite(x1: HMMIO; x2: pchar; x3: LONG): LONG;stdcall; external 'winmm.dll' name 'mmioWrite';
+Function mmioSeek(x1: HMMIO; x2: LONG; x3: WINT): LONG;stdcall; external 'winmm.dll' name 'mmioSeek';
+Function mmioGetInfo(x1: HMMIO; x2: LPMMIOINFO; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'mmioGetInfo';
+Function mmioSetInfo(x1: HMMIO; x2: LPCMMIOINFO; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'mmioSetInfo';
+Function mmioSetBuffer(x1: HMMIO; x2: LPSTR; x3: LONG; x4: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'mmioSetBuffer';
+Function mmioFlush(x1: HMMIO; x2: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'mmioFlush';
+Function mmioAdvance(x1: HMMIO; x2: LPMMIOINFO; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'mmioAdvance';
+Function mmioSendMessage(x1: HMMIO; x2: UINT; x3: LPARAM; x4: LPARAM): LRESULT;stdcall; external 'winmm.dll' name 'mmioSendMessage';
+Function mmioDescend(x1: HMMIO; x2: LPMMCKINFO; x3: PMMCKINFO; x4: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'mmioDescend';
+Function mmioAscend(x1: HMMIO; x2: LPMMCKINFO; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'mmioAscend';
+Function mmioCreateChunk(x1: HMMIO; x2: LPMMCKINFO; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'mmioCreateChunk';
+Function mciSendCommandA(x1: MCIDEVICEID; x2: UINT; x3: DWORD; x4: DWORD): MCIERROR;stdcall; external 'winmm.dll' name 'mciSendCommandA';
+Function mciSendCommandW(x1: MCIDEVICEID; x2: UINT; x3: DWORD; x4: DWORD): MCIERROR;stdcall; external 'winmm.dll' name 'mciSendCommandW';
+Function mciSendCommand(x1: MCIDEVICEID; x2: UINT; x3: DWORD; x4: DWORD): MCIERROR;stdcall; external 'winmm.dll' name
+ {$ifdef UNICODE}'mciSendCommandW' {$else}'mciSendCommandA' {$endif};
+Function mciSendStringA(x1: LPCSTR; x2: LPSTR; x3: UINT; x4: HWND): MCIERROR;stdcall; external 'winmm.dll' name 'mciSendStringA';
+Function mciSendStringW(x1: LPCWSTR; x2: LPWSTR; x3: UINT; x4: HWND): MCIERROR;stdcall; external 'winmm.dll' name 'mciSendStringW';
+Function mciSendString(x1: PChar; x2: PChar; x3: UINT; x4: HWND): MCIERROR;stdcall; external 'winmm.dll' name
+ {$ifdef UNICODE}'mciSendStringW' {$else}'mciSendStringA' {$endif};
+Function mciGetDeviceIDA(x1: LPCSTR): MCIDEVICEID;stdcall; external 'winmm.dll' name 'mciGetDeviceIDA';
+Function mciGetDeviceIDW(x1: LPCWSTR): MCIDEVICEID;stdcall; external 'winmm.dll' name 'mciGetDeviceIDW';
+Function mciGetDeviceID(x1: PChar): MCIDEVICEID;stdcall; external 'winmm.dll' name
+ {$ifdef UNICODE}'mciGetDeviceIDW' {$else}'mciGetDeviceIDA' {$endif};
+Function mciGetDeviceIDFromElementIDA(x1: DWORD; x2: LPCSTR): MCIDEVICEID;stdcall; external 'winmm.dll' name 'mciGetDeviceIDFromElementIDA';
+Function mciGetDeviceIDFromElementIDW(x1: DWORD; x2: LPCWSTR): MCIDEVICEID;stdcall; external 'winmm.dll' name 'mciGetDeviceIDFromElementIDW';
+Function mciGetDeviceIDFromElementID(x1: DWORD; x2: PChar): MCIDEVICEID;stdcall; external 'winmm.dll' name
+ {$ifdef UNICODE}'mciGetDeviceIDFromElementIDW' {$else}'mciGetDeviceIDFromElementIDA' {$endif};
+Function mciGetErrorStringA(x1: MCIERROR; x2: LPSTR; x3: UINT): BOOL;stdcall; external 'winmm.dll' name 'mciGetErrorStringA';
+Function mciGetErrorStringW(x1: MCIERROR; x2: LPWSTR; x3: UINT): BOOL;stdcall; external 'winmm.dll' name 'mciGetErrorStringW';
+Function mciGetErrorString(x1: MCIERROR; x2: PChar; x3: UINT): BOOL;stdcall; external 'winmm.dll' name
+ {$ifdef UNICODE}'mciGetErrorStringW' {$else}'mciGetErrorStringA' {$endif};
+Function mciSetYieldProc(x1: MCIDEVICEID; x2: YIELDPROC; x3: DWORD): BOOL;stdcall; external 'winmm.dll' name 'mciSetYieldProc';
+Function mciGetCreatorTask(x1: MCIDEVICEID): HTASK;stdcall; external 'winmm.dll' name 'mciGetCreatorTask';
+Function mciGetYieldProc(x1: MCIDEVICEID; x2: LPDWORD): YIELDPROC;stdcall; external 'winmm.dll' name 'mciGetYieldProc';
+Function mciExecute(x1: LPCSTR): BOOL;stdcall; external 'winmm.dll' name 'mciExecute';
+Function joyGetPos(x1: UINT; x2: LPJOYINFO): MMRESULT;stdcall; external 'winmm.dll' name 'joyGetPos';
+Function joyGetPosEx(x1: UINT; x2: LPJOYINFOEX): MMRESULT;stdcall; external 'winmm.dll' name 'joyGetPosEx';
+Function joyGetThreshold(x1: UINT; x2: LPUINT): MMRESULT;stdcall; external 'winmm.dll' name 'joyGetThreshold';
+Function joyReleaseCapture(x1: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'joyReleaseCapture';
+Function joySetCapture(x1: HWND; x2: UINT; x3: UINT; x4: BOOL): MMRESULT;stdcall; external 'winmm.dll' name 'joySetCapture';
+Function joySetThreshold(x1: UINT; x2: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'joySetThreshold';
+Function waveOutGetNumDevs: UINT;stdcall; external 'winmm.dll' name 'waveOutGetNumDevs';
+Function waveOutGetDevCapsA(x1: UINT; x2: LPWAVEOUTCAPSA; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'waveOutGetDevCapsA';
+Function waveOutGetDevCapsW(x1: UINT; x2: LPWAVEOUTCAPSW; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'waveOutGetDevCapsW';
+Function waveOutGetDevCaps(x1: UINT; x2: LPWAVEOUTCAPS; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name
+ {$ifdef UNICODE}'waveOutGetDevCapsW' {$else}'waveOutGetDevCapsA' {$endif};
+Function waveOutGetVolume(x1: HWAVEOUT; x2: LPDWORD): MMRESULT;stdcall; external 'winmm.dll' name 'waveOutGetVolume';
+Function waveOutSetVolume(x1: HWAVEOUT; x2: DWORD): MMRESULT;stdcall; external 'winmm.dll' name 'waveOutSetVolume';
+Function waveOutGetErrorTextA(x1: MMRESULT; x2: LPSTR; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'waveOutGetErrorTextA';
+Function waveOutGetErrorTextW(x1: MMRESULT; x2: LPWSTR; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'waveOutGetErrorTextW';
+Function waveOutGetErrorText(x1: MMRESULT; x2: PChar; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name
+ {$ifdef UNICODE}'waveOutGetErrorTextW' {$else}'waveOutGetErrorTextA' {$endif};
+Function waveOutOpen(x1: LPHWAVEOUT; x2: UINT; x3: LPCWAVEFORMATEX; x4: DWORD; x5: DWORD;
+ x6: DWORD): MMRESULT;stdcall; external 'winmm.dll' name 'waveOutOpen';
+Function waveOutClose(x1: HWAVEOUT): MMRESULT;stdcall; external 'winmm.dll' name 'waveOutClose';
+Function waveOutPrepareHeader(x1: HWAVEOUT; x2: LPWAVEHDR; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'waveOutPrepareHeader';
+Function waveOutUnprepareHeader(x1: HWAVEOUT; x2: LPWAVEHDR; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'waveOutUnprepareHeader';
+Function waveOutWrite(x1: HWAVEOUT; x2: LPWAVEHDR; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'waveOutWrite';
+Function waveOutPause(x1: HWAVEOUT): MMRESULT;stdcall; external 'winmm.dll' name 'waveOutPause';
+Function waveOutRestart(x1: HWAVEOUT): MMRESULT;stdcall; external 'winmm.dll' name 'waveOutRestart';
+Function waveOutReset(x1: HWAVEOUT): MMRESULT;stdcall; external 'winmm.dll' name 'waveOutReset';
+Function waveOutBreakLoop(x1: HWAVEOUT): MMRESULT;stdcall; external 'winmm.dll' name 'waveOutBreakLoop';
+Function waveOutGetPosition(x1: HWAVEOUT; x2: LPMMTIME; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'waveOutGetPosition';
+Function waveOutGetPitch(x1: HWAVEOUT; x2: LPDWORD): MMRESULT;stdcall; external 'winmm.dll' name 'waveOutGetPitch';
+Function waveOutSetPitch(x1: HWAVEOUT; x2: DWORD): MMRESULT;stdcall; external 'winmm.dll' name 'waveOutSetPitch';
+Function waveOutGetPlaybackRate(x1: HWAVEOUT; x2: LPDWORD): MMRESULT;stdcall; external 'winmm.dll' name 'waveOutGetPlaybackRate';
+Function waveOutSetPlaybackRate(x1: HWAVEOUT; x2: DWORD): MMRESULT;stdcall; external 'winmm.dll' name 'waveOutSetPlaybackRate';
+Function waveOutGetID(x1: HWAVEOUT; x2: LPUINT): MMRESULT;stdcall; external 'winmm.dll' name 'waveOutGetID';
+Function waveOutMessage(x1: HWAVEOUT; x2: UINT; x3: DWORD; x4: DWORD): MMRESULT;stdcall; external 'winmm.dll' name 'waveOutMessage';
+Function waveInGetNumDevs: UINT;stdcall; external 'winmm.dll' name 'waveInGetNumDevs';
+Function waveInGetDevCapsA(x1: UINT; x2: LPWAVEINCAPSA; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'waveInGetDevCapsA';
+Function waveInGetDevCapsW(x1: UINT; x2: LPWAVEINCAPSW; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'waveInGetDevCapsW';
+Function waveInGetDevCaps(x1: UINT; x2: LPWAVEINCAPS; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name
+ {$ifdef UNICODE}'waveInGetDevCapsW' {$else}'waveInGetDevCapsA' {$endif};
+Function waveInGetErrorTextA(x1: MMRESULT; x2: LPSTR; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'waveInGetErrorTextA';
+Function waveInGetErrorTextW(x1: MMRESULT; x2: LPWSTR; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'waveInGetErrorTextW';
+Function waveInGetErrorText(x1: MMRESULT; x2: PChar; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name
+ {$ifdef UNICODE}'waveInGetErrorTextW' {$else}'waveInGetErrorTextA' {$endif};
+Function waveInOpen(x1: LPHWAVEIN; x2: UINT; x3: LPCWAVEFORMATEX; x4: DWORD; x5: DWORD; x6 : DWORD): MMRESULT;stdcall; external 'winmm.dll' name 'waveInOpen';
+Function waveInClose(x1: HWAVEIN): MMRESULT;stdcall; external 'winmm.dll' name 'waveInClose';
+Function waveInPrepareHeader(x1: HWAVEIN; x2: LPWAVEHDR; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'waveInPrepareHeader';
+Function waveInUnprepareHeader(x1: HWAVEIN; x2: LPWAVEHDR; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'waveInUnprepareHeader';
+Function waveInAddBuffer(x1: HWAVEIN; x2: LPWAVEHDR; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'waveInAddBuffer';
+Function waveInStart(x1: HWAVEIN): MMRESULT;stdcall; external 'winmm.dll' name 'waveInStart';
+Function waveInStop(x1: HWAVEIN): MMRESULT;stdcall; external 'winmm.dll' name 'waveInStop';
+Function waveInReset(x1: HWAVEIN): MMRESULT;stdcall; external 'winmm.dll' name 'waveInReset';
+Function waveInGetPosition(x1: HWAVEIN; x2: LPMMTIME; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'waveInGetPosition';
+Function waveInGetID(x1: HWAVEIN; x2: LPUINT): MMRESULT;stdcall; external 'winmm.dll' name 'waveInGetID';
+Function waveInMessage(x1: HWAVEIN; x2: UINT; x3: DWORD; x4: DWORD): MMRESULT;stdcall; external 'winmm.dll' name 'waveInMessage';
+Function mixerGetLineControlsA(x1: HMIXEROBJ; x2: LPMIXERLINECONTROLSA; x3: DWORD):MMRESULT;stdcall; external 'winmm.dll' name 'mixerGetLineControlsA';
+Function mixerGetLineControlsW(x1: HMIXEROBJ; x2: LPMIXERLINECONTROLSW; x3: DWORD):MMRESULT;stdcall; external 'winmm.dll' name 'mixerGetLineControlsW';
+Function mixerGetLineControls(x1: HMIXEROBJ; x2: LPMIXERLINECONTROLS; x3: DWORD): MMRESULT;stdcall; external 'winmm.dll' name
+ {$ifdef UNICODE}'mixerGetLineControlsW' {$else}'mixerGetLineControlsA' {$endif};
+Function joyGetNumDevs: UINT;stdcall; external 'winmm.dll' name 'joyGetNumDevs';
+Function joyGetDevCapsA(x1: UINT; x2: LPJOYCAPSA; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'joyGetDevCapsA';
+Function joyGetDevCapsW(x1: UINT; x2: LPJOYCAPSW; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'joyGetDevCapsW';
+Function joyGetDevCaps(x1: UINT; x2: LPJOYCAPS; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name
+ {$ifdef UNICODE}'joyGetDevCapsW' {$else}'joyGetDevCapsA' {$endif};
+Function mixerGetControlDetailsA(x1: HMIXEROBJ; x2: LPMIXERCONTROLDETAILS; x3: DWORD): MMRESULT;stdcall; external 'winmm.dll' name 'mixerGetControlDetailsA';
+Function mixerGetControlDetailsW(x1: HMIXEROBJ; x2: LPMIXERCONTROLDETAILS; x3: DWORD): MMRESULT;stdcall; external 'winmm.dll' name 'mixerGetControlDetailsW';
+Function mixerGetControlDetails(x1: HMIXEROBJ; x2: LPMIXERCONTROLDETAILS; x3: DWORD): MMRESULT;stdcall; external 'winmm.dll' name
+ {$ifdef UNICODE}'mixerGetControlDetailsW' {$else}'mixerGetControlDetailsA' {$endif};
+Function timeGetSystemTime(x1: LPMMTIME; x2: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'timeGetSystemTime';
+Function timeGetTime: DWORD;stdcall; external 'winmm.dll' name 'timeGetTime';
+Function timeSetEvent(x1: UINT; x2: UINT; x3: LPTIMECALLBACK; x4: DWORD; x5: UINT):MMRESULT;stdcall; external 'winmm.dll' name 'timeSetEvent';
+Function timeKillEvent(x1: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'timeKillEvent';
+Function timeGetDevCaps(x1: LPTIMECAPS; x2: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'timeGetDevCaps';
+Function timeBeginPeriod(x1: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'timeBeginPeriod';
+Function timeEndPeriod(x1: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'timeEndPeriod';
+Function mixerGetDevCapsA(x1: UINT; x2: LPMIXERCAPSA; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'mixerGetDevCapsA';
+Function mixerGetDevCapsW(x1: UINT; x2: LPMIXERCAPSW; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'mixerGetDevCapsW';
+Function mixerGetDevCaps(x1: UINT; x2: LPMIXERCAPS; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name
+ {$ifdef UNICODE}'mixerGetDevCapsW' {$else}'mixerGetDevCapsA' {$endif};
+Function mixerOpen(x1: LPHMIXER; x2: UINT; x3: DWORD; x4: DWORD; x5: DWORD): MMRESULT;stdcall; external 'winmm.dll' name 'mixerOpen';
+Function mixerClose(x1: HMIXER): MMRESULT;stdcall; external 'winmm.dll' name 'mixerClose';
+Function mixerMessage(x1: HMIXER; x2: UINT; x3: DWORD; x4: DWORD): DWORD;stdcall; external 'winmm.dll' name 'mixerMessage';
+Function auxGetNumDevs: UINT;stdcall; external 'winmm.dll' name 'auxGetNumDevs';
+Function auxGetDevCapsA(x1: UINT; x2: LPAUXCAPSA ; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'auxGetDevCapsA';
+Function auxGetDevCapsW(x1: UINT; x2: LPAUXCAPSW ; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'auxGetDevCapsW';
+Function auxGetDevCaps(x1: UINT; x2: LPAUXCAPS ; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name
+ {$ifdef UNICODE}'auxGetDevCapsW' {$else}'auxGetDevCapsA' {$endif};
+Function auxSetVolume(x1: UINT; x2: DWORD): MMRESULT;stdcall; external 'winmm.dll' name 'auxSetVolume';
+Function auxGetVolume(x1: UINT; x2: LPDWORD): MMRESULT;stdcall; external 'winmm.dll' name 'auxGetVolume';
+Function auxOutMessage(x1: UINT; x2: UINT; x3: DWORD; x4: DWORD): MMRESULT;stdcall; external 'winmm.dll' name 'auxOutMessage';
+Function midiOutGetNumDevs: UINT;stdcall; external 'winmm.dll' name 'midiOutGetNumDevs';
+Function midiStreamOpen(x1: LPHMIDISTRM; x2: LPUINT; x3: DWORD; x4: DWORD; x5: DWORD; x6:
+ DWORD): MMRESULT;stdcall; external 'winmm.dll' name 'midiStreamOpen';
+Function midiStreamClose(x1: HMIDISTRM): MMRESULT;stdcall; external 'winmm.dll' name 'midiStreamClose';
+Function midiStreamProperty(x1: HMIDISTRM; x2: LPBYTE; x3: DWORD): MMRESULT;stdcall; external 'winmm.dll' name 'midiStreamProperty';
+Function midiStreamPosition(x1: HMIDISTRM; x2: LPMMTIME; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'midiStreamPosition';
+Function midiStreamOut(x1: HMIDISTRM; x2: LPMIDIHDR; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'midiStreamOut';
+Function midiStreamPause(x1: HMIDISTRM): MMRESULT;stdcall; external 'winmm.dll' name 'midiStreamPause';
+Function midiStreamRestart(x1: HMIDISTRM): MMRESULT;stdcall; external 'winmm.dll' name 'midiStreamRestart';
+Function midiStreamStop(x1: HMIDISTRM): MMRESULT;stdcall; external 'winmm.dll' name 'midiStreamStop';
+Function midiConnect(x1: HMIDI; x2: HMIDIOUT; x3: pointer): MMRESULT;stdcall; external 'winmm.dll' name 'midiConnect';
+Function midiDisconnect(x1: HMIDI; x2: HMIDIOUT; x3: pointer): MMRESULT;stdcall; external 'winmm.dll' name 'midiDisconnect';
+Function midiOutGetDevCapsA(x1: UINT; x2: LPMIDIOUTCAPSA; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'midiOutGetDevCapsA';
+Function midiOutGetDevCapsW(x1: UINT; x2: LPMIDIOUTCAPSW; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'midiOutGetDevCapsW';
+Function midiOutGetDevCaps(x1: UINT; x2: LPMIDIOUTCAPS; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name
+ {$ifdef UNICODE}'midiOutGetDevCapsW' {$else}'midiOutGetDevCapsA' {$endif};
+Function midiOutGetVolume(x1: HMIDIOUT; x2: LPDWORD): MMRESULT;stdcall; external 'winmm.dll' name 'midiOutGetVolume';
+Function midiOutSetVolume(x1: HMIDIOUT; x2: DWORD): MMRESULT;stdcall; external 'winmm.dll' name 'midiOutSetVolume';
+Function midiOutGetErrorTextA(x1: MMRESULT; x2: LPSTR; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'midiOutGetErrorTextA';
+Function midiOutGetErrorTextW(x1: MMRESULT; x2: LPWSTR; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'midiOutGetErrorTextW';
+Function midiOutGetErrorText(x1: MMRESULT; x2: PChar; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name
+ {$ifdef UNICODE}'midiOutGetErrorTextW' {$else}'midiOutGetErrorTextA' {$endif};
+Function midiOutOpen(x1: LPHMIDIOUT; x2: UINT; x3: DWORD; x4: DWORD; x5: DWORD): MMRESULT;stdcall; external 'winmm.dll' name 'midiOutOpen';
+Function midiOutClose(x1: HMIDIOUT): MMRESULT;stdcall; external 'winmm.dll' name 'midiOutClose';
+Function midiOutPrepareHeader(x1: HMIDIOUT; x2: LPMIDIHDR; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'midiOutPrepareHeader';
+Function midiOutUnprepareHeader(x1: HMIDIOUT; x2: LPMIDIHDR; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'midiOutUnprepareHeader';
+Function midiOutShortMsg(x1: HMIDIOUT; x2: DWORD): MMRESULT;stdcall; external 'winmm.dll' name 'midiOutShortMsg';
+Function midiOutLongMsg(x1: HMIDIOUT; x2: LPMIDIHDR; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'midiOutLongMsg';
+Function midiOutReset(x1: HMIDIOUT): MMRESULT;stdcall; external 'winmm.dll' name 'midiOutReset';
+Function midiOutCachePatches(x1: HMIDIOUT; x2: UINT; x3: LPWORD; x4: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'midiOutCachePatches';
+Function midiOutCacheDrumPatches(x1: HMIDIOUT; x2: UINT; x3: LPWORD; x4: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'midiOutCacheDrumPatches';
+Function midiOutGetID(x1: HMIDIOUT; x2: LPUINT): MMRESULT;stdcall; external 'winmm.dll' name 'midiOutGetID';
+Function midiOutMessage(x1: HMIDIOUT; x2: UINT; x3: DWORD; x4: DWORD): MMRESULT;stdcall; external 'winmm.dll' name 'midiOutMessage';
+Function midiInGetNumDevs: UINT;stdcall; external 'winmm.dll' name 'midiInGetNumDevs';
+Function midiInGetDevCapsA(x1: UINT; x2: LPMIDIINCAPSA; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'midiInGetDevCapsA';
+Function midiInGetDevCapsW(x1: UINT; x2: LPMIDIINCAPSW; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'midiInGetDevCapsW';
+Function midiInGetDevCaps(x1: UINT; x2: LPMIDIINCAPS; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name
+ {$ifdef UNICODE}'midiInGetDevCapsW' {$else}'midiInGetDevCapsA' {$endif};
+Function midiInGetErrorTextA(x1: MMRESULT; x2: LPSTR; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'midiInGetErrorTextA';
+Function midiInGetErrorTextW(x1: MMRESULT; x2: LPWSTR; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'midiInGetErrorTextW';
+Function midiInGetErrorText(x1: MMRESULT; x2: PChar; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name
+ {$ifdef UNICODE}'midiInGetErrorTextW' {$else}'midiInGetErrorTextA' {$endif};
+Function midiInOpen(x1: LPHMIDIIN; x2: UINT; x3: DWORD; x4: DWORD; x5: DWORD): MMRESULT;stdcall; external 'winmm.dll' name 'midiInOpen';
+Function midiInClose(x1: HMIDIIN): MMRESULT;stdcall; external 'winmm.dll' name 'midiInClose';
+Function midiInPrepareHeader(x1: HMIDIIN; x2: LPMIDIHDR; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'midiInPrepareHeader';
+Function midiInUnprepareHeader(x1: HMIDIIN; x2: LPMIDIHDR; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'midiInUnprepareHeader';
+Function midiInAddBuffer(x1: HMIDIIN; x2: LPMIDIHDR; x3: UINT): MMRESULT;stdcall; external 'winmm.dll' name 'midiInAddBuffer';
+Function midiInStart(x1: HMIDIIN): MMRESULT;stdcall; external 'winmm.dll' name 'midiInStart';
+Function midiInStop(x1: HMIDIIN): MMRESULT;stdcall; external 'winmm.dll' name 'midiInStop';
+Function midiInReset(x1: HMIDIIN): MMRESULT;stdcall; external 'winmm.dll' name 'midiInReset';
+Function midiInGetID(x1: HMIDIIN; x2: LPUINT): MMRESULT;stdcall; external 'winmm.dll' name 'midiInGetID';
+Function midiInMessage(x1: HMIDIIN; x2: UINT; x3: DWORD; x4: DWORD): MMRESULT;stdcall; external 'winmm.dll' name 'midiInMessage';
+Function mixerGetLineInfoA(x1: HMIXEROBJ; x2: LPMIXERLINEA; x3: DWORD): MMRESULT;stdcall; external 'winmm.dll' name 'mixerGetLineInfoA';
+Function mixerGetLineInfoW(x1: HMIXEROBJ; x2: LPMIXERLINEW; x3: DWORD): MMRESULT;stdcall; external 'winmm.dll' name 'mixerGetLineInfoW';
+Function mixerGetLineInfo(x1: HMIXEROBJ; x2: LPMIXERLINE; x3: DWORD): MMRESULT;stdcall; external 'winmm.dll' name
+ {$ifdef UNICODE}'mixerGetLineInfoW' {$else}'mixerGetLineInfoA' {$endif};
+Function mixerGetID(x1: HMIXEROBJ; Var x2: UINT; x3: DWORD): MMRESULT;stdcall; external 'winmm.dll' name 'mixerGetID';
+Function PlaySoundA(x1: LPCSTR; x2: HMODULE; x3: DWORD): BOOL;stdcall; external 'winmm.dll' name 'PlaySoundA';
+Function PlaySoundW(x1: LPCWSTR; x2: HMODULE; x3: DWORD): BOOL;stdcall; external 'winmm.dll' name 'PlaySoundW';
+Function PlaySound(x1: PChar; x2: HMODULE; x3: DWORD): BOOL;stdcall; external 'winmm.dll' name
+ {$ifdef UNICODE}'PlaySoundW' {$else}'PlaySoundA' {$endif};
+
+implementation
+
+Function MEVT_EVENTTYPE(x: byte): byte;
+ Begin
+ MEVT_EVENTTYPE := (x shr 24) And $FF;
+ End;
+
+Function MEVT_EVENTPARM(x: DWORD): DWORD;
+ Begin
+ MEVT_EVENTPARM := x And $00FFFFFF;
+ End;
+
+Type
+ TFourBytes = packed array [0..3] Of byte;
+
+Function MCI_MSF_MINUTE(msf: longint): byte;
+ Begin
+ MCI_MSF_MINUTE := TFourBytes (msf) [0];
+ End;
+
+Function MCI_TMSF_TRACK(tmsf: longint): byte;
+ Begin
+ MCI_TMSF_TRACK := TFourBytes (tmsf) [0];
+ End;
+
+Function MCI_HMS_HOUR(h: longint): byte;
+ Begin
+ MCI_HMS_HOUR := TFourBytes (h) [0];
+ End;
+
+Function MCI_MSF_SECOND(msf: longint): byte;
+ Begin
+ MCI_MSF_SECOND := TFourBytes (msf) [1];
+ End;
+
+Function MCI_TMSF_MINUTE(tmsf: longint): byte;
+ Begin
+ MCI_TMSF_MINUTE := TFourBytes (tmsf) [1];
+ End;
+
+Function MCI_HMS_MINUTE(h: longint): byte;
+ Begin
+ MCI_HMS_MINUTE := TFourBytes (h) [1];
+ End;
+
+Function MCI_MSF_FRAME(msf: longint): byte;
+ Begin
+ MCI_MSF_FRAME := TFourBytes (msf) [2];
+ End;
+
+Function MCI_TMSF_SECOND(tmsf: longint): byte;
+ Begin
+ MCI_TMSF_SECOND := TFourBytes (tmsf) [2];
+ End;
+
+Function MCI_HMS_SECOND(h: longint): byte;
+ Begin
+ MCI_HMS_SECOND := TFourBytes (h) [2];
+ End;
+
+Function MCI_MAKE_MSF(m, s, f: byte): longint;
+ Begin
+ TFourBytes (Result) [0] := m;
+ TFourBytes (Result) [1] := s;
+ TFourBytes (Result) [2] := f;
+ End;
+
+Function MCI_MAKE_HMS(h, m, s: byte): longint;
+ Begin
+ TFourBytes (Result) [0] := h;
+ TFourBytes (Result) [1] := m;
+ TFourBytes (Result) [2] := s;
+ End;
+
+Function MCI_TMSF_FRAME(tmsf: longint): byte;
+ Begin
+ MCI_TMSF_FRAME := TFourBytes (tmsf) [3];
+ End;
+
+Function mci_Make_TMSF(t, m, s, f: Byte): Longint;
+ Begin
+ TFourBytes (Result) [0] := t;
+ TFourBytes (Result) [1] := m;
+ TFourBytes (Result) [2] := s;
+ TFourBytes (Result) [3] := f;
+ End;
+
+Function DIBINDEX(n: longint): longint;
+ Begin
+ DIBINDEX := n Or $10FF shl 16;
+ End;
+
+End.
diff --git a/packages/winunits-base/src/ole2.pp b/packages/winunits-base/src/ole2.pp
new file mode 100644
index 0000000000..bf9ef75bbb
--- /dev/null
+++ b/packages/winunits-base/src/ole2.pp
@@ -0,0 +1,92 @@
+{
+ 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.
+
+ **********************************************************************}
+{$MODE OBJFPC}
+unit ole2;
+
+ interface
+
+ uses
+ windows;
+
+ const
+ GUID_NULL: TGUID = (D1:$00000000;D2:$0000;D3:$0000;D4:($00,$00,$00,$00,$00,$00,$00,$00));
+ IID_IUnknown: TGUID = (D1:$00000000;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IClassFactory: TGUID = (D1:$00000001;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IMarshal: TGUID = (D1:$00000003;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IMalloc: TGUID = (D1:$00000002;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IStdMarshalInfo: TGUID = (D1:$00000018;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IExternalConnection: TGUID = (D1:$00000019;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IEnumUnknown: TGUID = (D1:$00000100;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IBindCtx: TGUID = (D1:$0000000E;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IEnumMoniker: TGUID = (D1:$00000102;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IRunnableObject: TGUID = (D1:$00000126;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IRunningObjectTable: TGUID = (D1:$00000010;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IPersist: TGUID = (D1:$0000010C;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IPersistStream: TGUID = (D1:$00000109;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IMoniker: TGUID = (D1:$0000000F;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IEnumString: TGUID = (D1:$00000101;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IStream: TGUID = (D1:$0000000C;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IEnumStatStg: TGUID = (D1:$0000000D;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IStorage: TGUID = (D1:$0000000B;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IPersistFile: TGUID = (D1:$0000010B;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IPersistStorage: TGUID = (D1:$0000010A;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_ILockBytes: TGUID = (D1:$0000000A;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IEnumFormatEtc: TGUID = (D1:$00000103;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IEnumStatData: TGUID = (D1:$00000105;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IRootStorage: TGUID = (D1:$00000012;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IAdviseSink: TGUID = (D1:$0000010F;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IAdviseSink2: TGUID = (D1:$00000125;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IDataObject: TGUID = (D1:$0000010E;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IDataAdviseHolder: TGUID = (D1:$00000110;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IMessageFilter: TGUID = (D1:$00000016;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IRpcChannelBuffer: TGUID = (D1:$D5F56B60;D2:$593B;D3:$101A;D4:($B5,$69,$08,$00,$2B,$2D,$BF,$7A));
+ IID_IRpcProxyBuffer: TGUID = (D1:$D5F56A34;D2:$593B;D3:$101A;D4:($B5,$69,$08,$00,$2B,$2D,$BF,$7A));
+ IID_IRpcStubBuffer: TGUID = (D1:$D5F56AFC;D2:$593B;D3:$101A;D4:($B5,$69,$08,$00,$2B,$2D,$BF,$7A));
+ IID_IPSFactoryBuffer: TGUID = (D1:$D5F569D0;D2:$593B;D3:$101A;D4:($B5,$69,$08,$00,$2B,$2D,$BF,$7A));
+ IID_ICreateTypeInfo: TGUID = (D1:$00020405;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_ICreateTypeLib: TGUID = (D1:$00020406;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IDispatch: TGUID = (D1:$00020400;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IEnumVariant: TGUID = (D1:$00020404;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_ITypeComp: TGUID = (D1:$00020403;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_ITypeInfo: TGUID = (D1:$00020401;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_ITypeLib: TGUID = (D1:$00020402;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IErrorInfo: TGUID = (D1:$1CF2B120;D2:$547D;D3:$101B;D4:($8E,$65,$08,$00,$2B,$2B,$D1,$19));
+ IID_ICreateErrorInfo: TGUID = (D1:$22F03340;D2:$547D;D3:$101B;D4:($8E,$65,$08,$00,$2B,$2B,$D1,$19));
+ IID_ISupportErrorInfo: TGUID = (D1:$DF0B3D60;D2:$548F;D3:$101B;D4:($8E,$65,$08,$00,$2B,$2B,$D1,$19));
+ IID_IOleAdviseHolder: TGUID = (D1:$00000111;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IOleCache: TGUID = (D1:$0000011E;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IOleCache2: TGUID = (D1:$00000128;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IOleCacheControl: TGUID = (D1:$00000129;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IParseDisplayName: TGUID = (D1:$0000011A;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IOleContainer: TGUID = (D1:$0000011B;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IOleClientSite: TGUID = (D1:$00000118;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IOleObject: TGUID = (D1:$00000112;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IOleWindow: TGUID = (D1:$00000114;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IOleLink: TGUID = (D1:$0000011D;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IOleItemContainer: TGUID = (D1:$0000011C;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IOleInPlaceUIWindow: TGUID = (D1:$00000115;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IOleInPlaceActiveObject: TGUID = (D1:$00000117;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IOleInPlaceFrame: TGUID = (D1:$00000116;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IOleInPlaceObject: TGUID = (D1:$00000113;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IOleInPlaceSite: TGUID = (D1:$00000119;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IViewObject: TGUID = (D1:$0000010D;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IViewObject2: TGUID = (D1:$00000127;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IDropSource: TGUID = (D1:$00000121;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IDropTarget: TGUID = (D1:$00000122;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+ IID_IEnumOleVerb: TGUID = (D1:$00000104;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
+
+ implementation
+
+end.
diff --git a/packages/winunits-base/src/oleserver.pp b/packages/winunits-base/src/oleserver.pp
new file mode 100644
index 0000000000..b413a68cab
--- /dev/null
+++ b/packages/winunits-base/src/oleserver.pp
@@ -0,0 +1,205 @@
+{$mode objfpc}
+unit OleServer;
+
+interface
+
+uses Windows, Messages, ActiveX, SysUtils, Classes, ComObj;
+
+type
+ TVariantArray = Array of OleVariant;
+ TOleServer = class;
+ TConnectKind = (ckRunningOrNew,
+ ckNewInstance,
+ ckRunningInstance,
+ ckRemote,
+ ckAttachToInterface);
+
+ TServerEventDispatch = class(TObject, IUnknown, IDispatch)
+ private
+ FServer : TOleServer;
+ protected
+ function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
+ function _AddRef: Integer; stdcall;
+ function _Release: Integer; stdcall;
+ function GetTypeInfoCount(out Count: Integer): HResult; stdcall;
+ function GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): HResult; stdcall;
+ function GetIDsOfNames(const IID: TGUID; Names: Pointer;
+ NameCount, LocaleID: Integer; DispIDs: Pointer): HResult; stdcall;
+ function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
+ Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; stdcall;
+ property Server: TOleServer read FServer;
+ function ServerDisconnect :Boolean;
+ public
+ constructor Create(aServer: TOleServer);
+ end;
+
+ PServerData = ^TServerData;
+ TServerData = record
+ ClassID: TGUID;
+ IntfIID: TGUID;
+ EventIID: TGUID;
+ LicenseKey: Pointer;
+ Version: Integer;
+ InstanceCount: Integer;
+ end;
+
+ TOleServer = class(TComponent, IUnknown)
+ private
+ FRemoteMachineName: string;
+ FEventDispatch: TServerEventDispatch;
+ FServerData: PServerData;
+ protected
+ function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall; override;
+ function _AddRef: Integer; stdcall;
+ function _Release: Integer; stdcall;
+
+ procedure Loaded; override;
+ procedure InitServerData; virtual; abstract;
+
+ function GetServer: IUnknown; virtual;
+
+ procedure ConnectEvents(const Obj: IUnknown);
+ procedure DisconnectEvents(const Obj: Iunknown);
+ procedure InvokeEvent(DispID: TDispID; var Params: TVariantArray); virtual;
+
+ function GetConnectKind: TConnectKind;
+ procedure SetConnectKind(ck: TConnectKind);
+
+ function GetAutoConnect: Boolean;
+ procedure SetAutoConnect(flag: Boolean);
+
+ property ServerData: PServerData read FServerData write FServerData;
+ property EventDispatch: TServerEventDispatch read FEventDispatch write FEventDispatch;
+
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ procedure Connect; virtual; abstract;
+ procedure Disconnect; virtual; abstract;
+
+ published
+ property AutoConnect: Boolean read GetAutoConnect write SetAutoConnect;
+ property ConnectKind: TConnectKind read GetConnectKind write SetConnectKind;
+ property RemoteMachineName: string read FRemoteMachineName write FRemoteMachineName;
+ end;
+
+implementation
+
+ function TServerEventDispatch.QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
+ begin
+ end;
+
+
+ function TServerEventDispatch._AddRef: Integer; stdcall;
+ begin
+ end;
+
+
+ function TServerEventDispatch._Release: Integer; stdcall;
+ begin
+ end;
+
+
+ function TServerEventDispatch.GetTypeInfoCount(out Count: Integer): HResult; stdcall;
+ begin
+ end;
+
+
+ function TServerEventDispatch.GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): HResult; stdcall;
+ begin
+ end;
+
+
+ function TServerEventDispatch.GetIDsOfNames(const IID: TGUID; Names: Pointer;
+ NameCount, LocaleID: Integer; DispIDs: Pointer): HResult; stdcall;
+ begin
+ end;
+
+
+ function TServerEventDispatch.Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
+ Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; stdcall;
+ begin
+ end;
+
+
+ function TServerEventDispatch.ServerDisconnect :Boolean;
+ begin
+ end;
+
+
+ constructor TServerEventDispatch.Create(aServer: TOleServer);
+ begin
+ end;
+
+
+ function TOleServer.QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
+ begin
+ end;
+
+
+ function TOleServer._AddRef: Integer; stdcall;
+ begin
+ end;
+
+
+ function TOleServer._Release: Integer; stdcall;
+ begin
+ end;
+
+
+ procedure TOleServer.Loaded;
+ begin
+ end;
+
+
+ function TOleServer.GetServer: IUnknown;
+ begin
+ end;
+
+
+ procedure TOleServer.ConnectEvents(const Obj: IUnknown);
+ begin
+ end;
+
+
+ procedure TOleServer.DisconnectEvents(const Obj: Iunknown);
+ begin
+ end;
+
+
+ procedure TOleServer.InvokeEvent(DispID: TDispID; var Params: TVariantArray);
+ begin
+ end;
+
+
+ function TOleServer.GetConnectKind: TConnectKind;
+ begin
+ end;
+
+
+ procedure TOleServer.SetConnectKind(ck: TConnectKind);
+ begin
+ end;
+
+
+ function TOleServer.GetAutoConnect: Boolean;
+ begin
+ end;
+
+
+ procedure TOleServer.SetAutoConnect(flag: Boolean);
+ begin
+ end;
+
+
+ constructor TOleServer.Create(AOwner: TComponent);
+ begin
+ end;
+
+
+ destructor TOleServer.Destroy;
+ begin
+ end;
+
+
+end.
diff --git a/packages/winunits-base/src/richedit.pp b/packages/winunits-base/src/richedit.pp
new file mode 100644
index 0000000000..e450884867
--- /dev/null
+++ b/packages/winunits-base/src/richedit.pp
@@ -0,0 +1,632 @@
+{ Converted by H2Pas from richedit.h }
+unit richedit;
+
+{$mode objfpc}
+{$calling stdcall}
+
+interface
+
+uses Messages, Windows;
+
+{$IFDEF FPC}
+{$PACKRECORDS C}
+{$ENDIF}
+
+{$ifdef UNICODE }
+ const
+ RICHEDIT_CLASS = 'RichEdit20W';
+{$else}
+ const
+ RICHEDIT_CLASS = 'RichEdit20A';
+{$endif}
+
+ const
+ RICHEDIT_CLASS10A = 'RICHEDIT';
+ CF_RTF = 'Rich Text Format';
+ CF_RTFNOOBJS = 'Rich Text Format Without Objects';
+ CF_RETEXTOBJ = 'RichEdit Text and Objects';
+ CFM_BOLD = 1;
+ CFM_ITALIC = 2;
+ CFM_UNDERLINE = 4;
+ CFM_STRIKEOUT = 8;
+ CFM_PROTECTED = 16;
+ CFM_LINK = 32;
+ CFM_SIZE = $80000000;
+ CFM_COLOR = $40000000;
+ CFM_FACE = $20000000;
+ CFM_OFFSET = $10000000;
+ CFM_CHARSET = $08000000;
+ CFM_SUBSCRIPT = $00030000;
+ CFM_SUPERSCRIPT = $00030000;
+ CFM_EFFECTS = (((((CFM_BOLD or CFM_ITALIC) or CFM_UNDERLINE) or CFM_COLOR) or CFM_STRIKEOUT) or CFE_PROTECTED) or CFM_LINK;
+ CFE_BOLD = 1;
+ CFE_ITALIC = 2;
+ CFE_UNDERLINE = 4;
+ CFE_STRIKEOUT = 8;
+ CFE_PROTECTED = 16;
+ CFE_AUTOCOLOR = $40000000;
+ CFE_SUBSCRIPT = $00010000;
+ CFE_SUPERSCRIPT = $00020000;
+ IMF_FORCENONE = 1;
+ IMF_FORCEENABLE = 2;
+ IMF_FORCEDISABLE = 4;
+ IMF_CLOSESTATUSWINDOW = 8;
+ IMF_VERTICAL = 32;
+ IMF_FORCEACTIVE = 64;
+ IMF_FORCEINACTIVE = 128;
+ IMF_FORCEREMEMBER = 256;
+ SEL_EMPTY = 0;
+ SEL_TEXT = 1;
+ SEL_OBJECT = 2;
+ SEL_MULTICHAR = 4;
+ SEL_MULTIOBJECT = 8;
+ MAX_TAB_STOPS = 32;
+ PFM_ALIGNMENT = 8;
+ PFM_NUMBERING = 32;
+ PFM_OFFSET = 4;
+ PFM_OFFSETINDENT = $80000000;
+ PFM_RIGHTINDENT = 2;
+ PFM_STARTINDENT = 1;
+ PFM_TABSTOPS = 16;
+ PFM_BORDER = 2048;
+ PFM_LINESPACING = 256;
+ PFM_NUMBERINGSTART = 32768;
+ PFM_NUMBERINGSTYLE = 8192;
+ PFM_NUMBERINGTAB = 16384;
+ PFM_SHADING = 4096;
+ PFM_SPACEAFTER = 128;
+ PFM_SPACEBEFORE = 64;
+ PFM_STYLE = 1024;
+ PFM_DONOTHYPHEN = 4194304;
+ PFM_KEEP = 131072;
+ PFM_KEEPNEXT = 262144;
+ PFM_NOLINENUMBER = 1048576;
+ PFM_NOWIDOWCONTROL = 2097152;
+ PFM_PAGEBREAKBEFORE = 524288;
+ PFM_RTLPARA = 65536;
+ PFM_SIDEBYSIDE = 8388608;
+ PFM_TABLE = 1073741824;
+ PFN_BULLET = 1;
+ PFE_DONOTHYPHEN = 64;
+ PFE_KEEP = 2;
+ PFE_KEEPNEXT = 4;
+ PFE_NOLINENUMBER = 16;
+ PFE_NOWIDOWCONTROL = 32;
+ PFE_PAGEBREAKBEFORE = 8;
+ PFE_RTLPARA = 1;
+ PFE_SIDEBYSIDE = 128;
+ PFE_TABLE = 16384;
+ PFA_LEFT = 1;
+ PFA_RIGHT = 2;
+ PFA_CENTER = 3;
+ PFA_JUSTIFY = 4;
+ PFA_FULL_INTERWORD = 4;
+ SF_TEXT = 1;
+ SF_RTF = 2;
+ SF_RTFNOOBJS = 3;
+ SF_TEXTIZED = 4;
+ SF_UNICODE = 16;
+ SF_USECODEPAGE = 32;
+ SF_NCRFORNONASCII = 64;
+ SF_RTFVAL = $0700;
+ SFF_PWD = $0800;
+ SFF_KEEPDOCINFO = $1000;
+ SFF_PERSISTVIEWSCALE = $2000;
+ SFF_PLAINRTF = $4000;
+ SFF_SELECTION = $8000;
+ WB_CLASSIFY = 3;
+ WB_MOVEWORDLEFT = 4;
+ WB_MOVEWORDRIGHT = 5;
+ WB_LEFTBREAK = 6;
+ WB_RIGHTBREAK = 7;
+ WB_MOVEWORDPREV = 4;
+ WB_MOVEWORDNEXT = 5;
+ WB_PREVBREAK = 6;
+ WB_NEXTBREAK = 7;
+ WBF_WORDWRAP = 16;
+ WBF_WORDBREAK = 32;
+ WBF_OVERFLOW = 64;
+ WBF_LEVEL1 = 128;
+ WBF_LEVEL2 = 256;
+ WBF_CUSTOM = 512;
+ ES_DISABLENOSCROLL = 8192;
+ ES_EX_NOCALLOLEINIT = 16777216;
+ ES_NOIME = 524288;
+ ES_NOOLEDRAGDROP = 8;
+ ES_SAVESEL = 32768;
+ ES_SELECTIONBAR = 16777216;
+ ES_SELFIME = 262144;
+ ES_SUNKEN = 16384;
+ ES_VERTICAL = 4194304;
+ EM_CANPASTE = WM_USER+50;
+ EM_DISPLAYBAND = WM_USER+51;
+ EM_EXGETSEL = WM_USER+52;
+ EM_EXLIMITTEXT = WM_USER+53;
+ EM_EXLINEFROMCHAR = WM_USER+54;
+ EM_EXSETSEL = WM_USER+55;
+ EM_FINDTEXT = WM_USER+56;
+ EM_FORMATRANGE = WM_USER+57;
+ EM_GETCHARFORMAT = WM_USER+58;
+ EM_GETEVENTMASK = WM_USER+59;
+ EM_GETOLEINTERFACE = WM_USER+60;
+ EM_GETPARAFORMAT = WM_USER+61;
+ EM_GETSELTEXT = WM_USER+62;
+ EM_HIDESELECTION = WM_USER+63;
+ EM_PASTESPECIAL = WM_USER+64;
+ EM_REQUESTRESIZE = WM_USER+65;
+ EM_SELECTIONTYPE = WM_USER+66;
+ EM_SETBKGNDCOLOR = WM_USER+67;
+ EM_SETCHARFORMAT = WM_USER+68;
+ EM_SETEVENTMASK = WM_USER+69;
+ EM_SETOLECALLBACK = WM_USER+70;
+ EM_SETPARAFORMAT = WM_USER+71;
+ EM_SETTARGETDEVICE = WM_USER+72;
+ EM_STREAMIN = WM_USER+73;
+ EM_STREAMOUT = WM_USER+74;
+ EM_GETTEXTRANGE = WM_USER+75;
+ EM_FINDWORDBREAK = WM_USER+76;
+ EM_SETOPTIONS = WM_USER+77;
+ EM_GETOPTIONS = WM_USER+78;
+ EM_FINDTEXTEX = WM_USER+79;
+ EM_GETWORDBREAKPROCEX = WM_USER+80;
+ EM_SETWORDBREAKPROCEX = WM_USER+81;
+ { RichEdit 2.0 messages }
+ EM_SETUNDOLIMIT = WM_USER+82;
+ EM_REDO = WM_USER+84;
+ EM_CANREDO = WM_USER+85;
+ EM_GETUNDONAME = WM_USER+86;
+ EM_GETREDONAME = WM_USER+87;
+ EM_STOPGROUPTYPING = WM_USER+88;
+ EM_SETTEXTMODE = WM_USER+89;
+ EM_GETTEXTMODE = WM_USER+90;
+ EM_AUTOURLDETECT = WM_USER+91;
+ EM_GETAUTOURLDETECT = WM_USER+92;
+ EM_SETPALETTE = WM_USER+93;
+ EM_GETTEXTEX = WM_USER+94;
+ EM_GETTEXTLENGTHEX = WM_USER+95;
+ EM_SHOWSCROLLBAR = WM_USER+96;
+ EM_SETTEXTEX = WM_USER+97;
+ EM_SETPUNCTUATION = WM_USER+100;
+ EM_GETPUNCTUATION = WM_USER+101;
+ EM_SETWORDWRAPMODE = WM_USER+102;
+ EM_GETWORDWRAPMODE = WM_USER+103;
+ EM_SETIMECOLOR = WM_USER+104;
+ EM_GETIMECOLOR = WM_USER+105;
+ EM_SETIMEOPTIONS = WM_USER+106;
+ EM_GETIMEOPTIONS = WM_USER+107;
+ EM_SETLANGOPTIONS = WM_USER+120;
+ EM_GETLANGOPTIONS = WM_USER+121;
+ EM_GETIMECOMPMODE = WM_USER+122;
+ EM_FINDTEXTW = WM_USER+123;
+ EM_FINDTEXTEXW = WM_USER+124;
+ EM_RECONVERSION = WM_USER+125;
+ EM_SETBIDIOPTIONS = WM_USER+200;
+ EM_GETBIDIOPTIONS = WM_USER+201;
+ EM_SETTYPOGRAPHYOPTIONS = WM_USER+202;
+ EM_GETTYPOGRAPHYOPTIONS = WM_USER+203;
+ EM_SETEDITSTYLE = WM_USER+204;
+ EM_GETEDITSTYLE = WM_USER+205;
+ EM_GETSCROLLPOS = WM_USER+221;
+ EM_SETSCROLLPOS = WM_USER+222;
+ EM_SETFONTSIZE = WM_USER+223;
+ EM_GETZOOM = WM_USER+224;
+ EM_SETZOOM = WM_USER+225;
+ EN_CORRECTTEXT = 1797;
+ EN_DROPFILES = 1795;
+ EN_IMECHANGE = 1799;
+ EN_LINK = 1803;
+ EN_MSGFILTER = 1792;
+ EN_OLEOPFAILED = 1801;
+ EN_PROTECTED = 1796;
+ EN_REQUESTRESIZE = 1793;
+ EN_SAVECLIPBOARD = 1800;
+ EN_SELCHANGE = 1794;
+ EN_STOPNOUNDO = 1798;
+ ENM_NONE = 0;
+ ENM_CHANGE = 1;
+ ENM_CORRECTTEXT = 4194304;
+ ENM_DRAGDROPDONE = 16;
+ ENM_DROPFILES = 1048576;
+ ENM_IMECHANGE = 8388608;
+ ENM_KEYEVENTS = 65536;
+ ENM_LANGCHANGE = 16777216;
+ ENM_LINK = 67108864;
+ ENM_MOUSEEVENTS = 131072;
+ ENM_OBJECTPOSITIONS = 33554432;
+ ENM_PROTECTED = 2097152;
+ ENM_REQUESTRESIZE = 262144;
+ ENM_SCROLL = 4;
+ ENM_SCROLLEVENTS = 8;
+ ENM_SELCHANGE = 524288;
+ ENM_UPDATE = 2;
+ ECO_AUTOWORDSELECTION = 1;
+ ECO_AUTOVSCROLL = 64;
+ ECO_AUTOHSCROLL = 128;
+ ECO_NOHIDESEL = 256;
+ ECO_READONLY = 2048;
+ ECO_WANTRETURN = 4096;
+ ECO_SAVESEL = $8000;
+ ECO_SELECTIONBAR = $1000000;
+ ECO_VERTICAL = $400000;
+ ECOOP_SET = 1;
+ ECOOP_OR = 2;
+ ECOOP_AND = 3;
+ ECOOP_XOR = 4;
+ SCF_DEFAULT = 0;
+ SCF_SELECTION = 1;
+ SCF_WORD = 2;
+ SCF_ALL = 4;
+ SCF_USEUIRULES = 8;
+ TM_PLAINTEXT = 1;
+ TM_RICHTEXT = 2;
+ TM_SINGLELEVELUNDO = 4;
+ TM_MULTILEVELUNDO = 8;
+ TM_SINGLECODEPAGE = 16;
+ TM_MULTICODEPAGE = 32;
+ GT_DEFAULT = 0;
+ GT_USECRLF = 1;
+ yHeightCharPtsMost = 1638;
+ lDefaultTab = 720;
+ FT_MATCHCASE = 4;
+ FT_WHOLEWORD = 2;
+
+ type
+
+ _charformat = record
+ cbSize : UINT;
+ dwMask : DWORD;
+ dwEffects : DWORD;
+ yHeight : LONG;
+ yOffset : LONG;
+ crTextColor : COLORREF;
+ bCharSet : BYTE;
+ bPitchAndFamily : BYTE;
+ szFaceName : array[0..(LF_FACESIZE)-1] of char;
+ end;
+ CHARFORMATA = _charformat;
+ TCHARFORMATA = _charformat;
+
+ _charformatw = record
+ cbSize : UINT;
+ dwMask : DWORD;
+ dwEffects : DWORD;
+ yHeight : LONG;
+ yOffset : LONG;
+ crTextColor : COLORREF;
+ bCharSet : BYTE;
+ bPitchAndFamily : BYTE;
+ szFaceName : array[0..(LF_FACESIZE)-1] of WCHAR;
+ end;
+ CHARFORMATW = _charformatw;
+ TCHARFORMATW = _charformatw;
+
+ _charformat2a = record
+ cbSize : UINT;
+ dwMask : DWORD;
+ dwEffects : DWORD;
+ yHeight : LONG;
+ yOffset : LONG;
+ crTextColor : COLORREF;
+ bCharSet : BYTE;
+ bPitchAndFamily : BYTE;
+ szFaceName : array[0..(LF_FACESIZE)-1] of char;
+ wWeight : WORD;
+ sSpacing : SHORT;
+ crBackColor : COLORREF;
+ lcid : LCID;
+ dwReserved : DWORD;
+ sStyle : SHORT;
+ wKerning : WORD;
+ bUnderlineType : BYTE;
+ bAnimation : BYTE;
+ bRevAuthor : BYTE;
+ end;
+ CHARFORMAT2A = _charformat2a;
+ TCHARFORMAT2A = _charformat2a;
+
+ _charformat2w = record
+ cbSize : UINT;
+ dwMask : DWORD;
+ dwEffects : DWORD;
+ yHeight : LONG;
+ yOffset : LONG;
+ crTextColor : COLORREF;
+ bCharSet : BYTE;
+ bPitchAndFamily : BYTE;
+ szFaceName : array[0..(LF_FACESIZE)-1] of WCHAR;
+ wWeight : WORD;
+ sSpacing : SHORT;
+ crBackColor : COLORREF;
+ lcid : LCID;
+ dwReserved : DWORD;
+ sStyle : SHORT;
+ wKerning : WORD;
+ bUnderlineType : BYTE;
+ bAnimation : BYTE;
+ bRevAuthor : BYTE;
+ end;
+ CHARFORMAT2W = _charformat2w;
+ TCHARFORMAT2W = _charformat2w;
+
+ _charrange = record
+ cpMin : LONG;
+ cpMax : LONG;
+ end;
+ CHARRANGE = _charrange;
+ TCHARRANGE = _charrange;
+
+ _compcolor = record
+ crText : COLORREF;
+ crBackground : COLORREF;
+ dwEffects : DWORD;
+ end;
+ COMPCOLOR = _compcolor;
+ TCOMPCOLOR = _compcolor;
+
+ EDITSTREAMCALLBACK = function (dwCookie:PDWORD; pbBuff:LPBYTE; cb:LONG; var pcb:LONG):DWORD;
+
+ _editstream = record
+ dwCookie : DWORD;
+ dwError : DWORD;
+ pfnCallback : EDITSTREAMCALLBACK;
+ end;
+ EDITSTREAM = _editstream;
+ TEDITSTREAM = _editstream;
+
+ _encorrecttext = record
+ nmhdr : NMHDR;
+ chrg : CHARRANGE;
+ seltyp : WORD;
+ end;
+ ENCORRECTTEXT = _encorrecttext;
+ TENCORRECTTEXT = _encorrecttext;
+
+ _endropfiles = record
+ nmhdr : NMHDR;
+ hDrop : HANDLE;
+ cp : LONG;
+ fProtected : BOOL;
+ end;
+ ENDROPFILES = _endropfiles;
+ TENDROPFILES = _endropfiles;
+
+ _enlink = record
+ nmhdr : NMHDR;
+ msg : UINT;
+ wParam : WPARAM;
+ lParam : LPARAM;
+ chrg : CHARRANGE;
+ end;
+ ENLINK = _enlink;
+ TENLINK = _enlink;
+
+ ENOLEOPFAILED = record
+ nmhdr : NMHDR;
+ iob : LONG;
+ lOper : LONG;
+ hr : HRESULT;
+ end;
+
+ _enprotected = record
+ nmhdr : NMHDR;
+ msg : UINT;
+ wParam : WPARAM;
+ lParam : LPARAM;
+ chrg : CHARRANGE;
+ end;
+ ENPROTECTED = _enprotected;
+ TENPROTECTED = _enprotected;
+ LPENPROTECTED = ^_enprotected;
+
+ _ensaveclipboard = record
+ nmhdr : NMHDR;
+ cObjectCount : LONG;
+ cch : LONG;
+ end;
+ ENSAVECLIPBOARD = _ensaveclipboard;
+ TENSAVECLIPBOARD = _ensaveclipboard;
+
+ _findtextA = record
+ chrg : CHARRANGE;
+ lpstrText : LPSTR;
+ end;
+ FINDTEXTA = _findtextA;
+ TFINDTEXTA = _findtextA;
+
+ _findtextW = record
+ chrg : CHARRANGE;
+ lpstrText : LPWSTR;
+ end;
+ FINDTEXTW = _findtextW;
+ TFINDTEXTW = _findtextW;
+
+ _findtextexA = record
+ chrg : CHARRANGE;
+ lpstrText : LPSTR;
+ chrgText : CHARRANGE;
+ end;
+ FINDTEXTEXA = _findtextexA;
+ TFINDTEXTEXA = _findtextexA;
+
+ _findtextexW = record
+ chrg : CHARRANGE;
+ lpstrText : LPWSTR;
+ chrgText : CHARRANGE;
+ end;
+ FINDTEXTEXW = _findtextexW;
+ TFINDTEXTEXW = _findtextexW;
+
+ _formatrange = record
+ hdc : HDC;
+ hdcTarget : HDC;
+ rc : RECT;
+ rcPage : RECT;
+ chrg : CHARRANGE;
+ end;
+ FORMATRANGE = _formatrange;
+ TFORMATRANGE = _formatrange;
+
+ _msgfilter = record
+ nmhdr : NMHDR;
+ msg : UINT;
+ wParam : WPARAM;
+ lParam : LPARAM;
+ end;
+ MSGFILTER = _msgfilter;
+ TMSGFILTER = _msgfilter;
+
+ TReqSize = record
+ nmhdr: TNMHdr;
+ rc: TRect;
+ end;
+ PReqSize = ^TReqSize;
+
+ _paraformat = record
+ cbSize : UINT;
+ dwMask : DWORD;
+ wNumbering : WORD;
+ wReserved : WORD;
+ dxStartIndent : LONG;
+ dxRightIndent : LONG;
+ dxOffset : LONG;
+ wAlignment : WORD;
+ cTabCount : SHORT;
+ rgxTabs : array[0..(MAX_TAB_STOPS)-1] of LONG;
+ end;
+ PARAFORMAT = _paraformat;
+ TParaFormat = _paraformat;
+
+ _paraformat2 = record
+ cbSize : UINT;
+ dwMask : DWORD;
+ wNumbering : WORD;
+ wEffects : WORD;
+ dxStartIndent : LONG;
+ dxRightIndent : LONG;
+ dxOffset : LONG;
+ wAlignment : WORD;
+ cTabCount : SHORT;
+ rgxTabs : array[0..(MAX_TAB_STOPS)-1] of LONG;
+ dySpaceBefore : LONG;
+ dySpaceAfter : LONG;
+ dyLineSpacing : LONG;
+ sStype : SHORT;
+ bLineSpacingRule : BYTE;
+ bOutlineLevel : BYTE;
+ wShadingWeight : WORD;
+ wShadingStyle : WORD;
+ wNumberingStart : WORD;
+ wNumberingStyle : WORD;
+ wNumberingTab : WORD;
+ wBorderSpace : WORD;
+ wBorderWidth : WORD;
+ wBorders : WORD;
+ end;
+ PARAFORMAT2 = _paraformat2;
+ TPARAFORMAT2 = _paraformat2;
+
+ _selchange = record
+ nmhdr : NMHDR;
+ chrg : CHARRANGE;
+ seltyp : WORD;
+ end;
+ SELCHANGE = _selchange;
+ TSELCHANGE = _selchange;
+
+ _textrange = record
+ chrg : CHARRANGE;
+ lpstrText : LPSTR;
+ end;
+ TEXTRANGEA = _textrange;
+ TTEXTRANGEA = _textrange;
+
+ _textrangew = record
+ chrg : CHARRANGE;
+ lpstrText : LPWSTR;
+ end;
+ TEXTRANGEW = _textrangew;
+ TTEXTRANGEW = _textrangew;
+
+ _reqresize = record
+ nmhdr : NMHDR;
+ rc : RECT;
+ end;
+ REQRESIZE = _reqresize;
+ TREQRESIZE = _reqresize;
+
+ _repastespecial = record
+ dwAspect : DWORD;
+ dwParam : DWORD;
+ end;
+ REPASTESPECIAL = _repastespecial;
+ TREPASTESPECIAL = _repastespecial;
+
+ _punctuation = record
+ iSize : UINT;
+ szPunctuation : LPSTR;
+ end;
+ PUNCTUATION = _punctuation;
+ TPUNCTUATION = _punctuation;
+
+ _gettextex = record
+ cb : DWORD;
+ flags : DWORD;
+ codepage : UINT;
+ lpDefaultChar : LPCSTR;
+ lpUsedDefaultChar : LPBOOL;
+ end;
+ GETTEXTEX = _gettextex;
+ TGETTEXTEX = _gettextex;
+
+ EDITWORDBREAKPROCEX = function (pchText:pchar; cchText:LONG; bCharSet:BYTE; action:LONG):LONG;
+ { Defines for EM_SETTYPOGRAPHYOPTIONS }
+
+ const
+ TO_ADVANCEDTYPOGRAPHY = 1;
+ TO_SIMPLELINEBREAK = 2;
+ { Defines for GETTEXTLENGTHEX }
+ GTL_DEFAULT = 0;
+ GTL_USECRLF = 1;
+ GTL_PRECISE = 2;
+ GTL_CLOSE = 4;
+ GTL_NUMCHARS = 8;
+ GTL_NUMBYTES = 16;
+
+ type
+
+ _gettextlengthex = record
+ flags : DWORD;
+ codepage : UINT;
+ end;
+ GETTEXTLENGTHEX = _gettextlengthex;
+{$ifdef UNICODE}
+
+ CHARFORMAT = CHARFORMATW;
+ TCHARFORMAT = CHARFORMATW;
+ CHARFORMAT2 = CHARFORMAT2W;
+ TCHARFORMAT2 = CHARFORMAT2W;
+ FINDTEXT = FINDTEXTW;
+ TFINDTEXT = FINDTEXTW;
+ FINDTEXTEX = FINDTEXTEXW;
+ TFINDTEXTEX = FINDTEXTEXW;
+ TEXTRANGE = TEXTRANGEW;
+ TTEXTRANGE = TEXTRANGEW;
+{$else}
+
+ type
+
+ CHARFORMAT = CHARFORMATA;
+ TCHARFORMAT = CHARFORMATA;
+ CHARFORMAT2 = CHARFORMAT2A;
+ TCHARFORMAT2 = CHARFORMAT2A;
+ FINDTEXT = FINDTEXTA;
+ TFINDTEXT = FINDTEXTA;
+ FINDTEXTEX = FINDTEXTEXA;
+ TFINDTEXTEX = FINDTEXTEXA;
+ TEXTRANGE = TEXTRANGEA;
+ TTEXTRANGE = TEXTRANGEA;
+{$endif}
+
+implementation
+
+end.
diff --git a/packages/winunits-base/src/shellapi.pp b/packages/winunits-base/src/shellapi.pp
new file mode 100644
index 0000000000..fc4ef3ce2a
--- /dev/null
+++ b/packages/winunits-base/src/shellapi.pp
@@ -0,0 +1,938 @@
+{
+ 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;
+ PHIcon = ^HIcon;
+
+ 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.
diff --git a/packages/winunits-base/src/shfolder.pp b/packages/winunits-base/src/shfolder.pp
new file mode 100644
index 0000000000..9a48bcbe3c
--- /dev/null
+++ b/packages/winunits-base/src/shfolder.pp
@@ -0,0 +1,108 @@
+{
+ 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.
diff --git a/packages/winunits-base/src/shlobj.pp b/packages/winunits-base/src/shlobj.pp
new file mode 100644
index 0000000000..f72fab2c33
--- /dev/null
+++ b/packages/winunits-base/src/shlobj.pp
@@ -0,0 +1,75 @@
+{
+ This file is part of the Free Pascal run time library.
+ Copyright (c) 2007 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.
+
+ Original copyright statement follows.
+
+}
+{$mode objfpc}
+unit shlobj;
+
+ interface
+
+ uses
+ windows,activex;
+
+ type
+ IEnumIDList = interface(IUnknown)
+ ['{000214F2-0000-0000-C000-000000000046}']
+ function Next(celt: ULONG; out rgelt: PItemIDList; var pceltFetched: ULONG): HRESULT; stdcall;
+ function Skip(celt: ULONG): HRESULT; stdcall; function Reset: HRESULT; stdcall;
+ function Clone(out ppenum: IEnumIDList): HRESULT; stdcall;
+ end;
+
+ IShellFolder = interface(IUnknown)
+ ['{000214E6-0000-0000-C000-000000000046}']
+ function ParseDisplayName(hwndOwner: HWND; pbcReserved: Pointer; lpszDisplayName: POLESTR; out pchEaten: ULONG; out ppidl: PItemIDList; var dwAttributes: ULONG): HRESULT; stdcall;
+ function EnumObjects(hwndOwner: HWND; grfFlags: DWORD; out EnumIDList: IEnumIDList): HRESULT; stdcall;
+ function BindToObject(pidl: PItemIDList; pbcReserved: Pointer; const riid: TIID; out ppvOut): HRESULT; stdcall;
+ function BindToStorage(pidl: PItemIDList; pbcReserved: Pointer; const riid: TIID; out ppvObj): HRESULT; stdcall;
+ function CompareIDs(lParam: LPARAM; pidl1, pidl2: PItemIDList): HRESULT; stdcall;
+ function CreateViewObject(hwndOwner: HWND; const riid: TIID; out ppvOut): HRESULT; stdcall;
+ function GetAttributesOf(cidl: UINT; var apidl: PItemIDList; var rgfInOut: UINT): HRESULT; stdcall;
+ function GetUIObjectOf(hwndOwner: HWND; cidl: UINT; var apidl: PItemIDList; const riid: TIID; prgfInOut: Pointer; out ppvOut): HRESULT; stdcall;
+ function GetDisplayNameOf(pidl: PItemIDList; uFlags: DWORD; var lpName: TStrRet): HRESULT; stdcall;
+ function SetNameOf(hwndOwner: HWND; pidl: PItemIDList; lpszName: POLEStr; uFlags: DWORD; var ppidlOut: PItemIDList): HRESULT; stdcall;
+ end;
+
+ IAutoComplete = interface(IUnknown)
+ ['{00bb2762-6a77-11d0-a535-00c04fd7d062}']
+ function Init(hwndEdit: HWND; punkACL: IUnknown; pwszRegKeyPath: LPCWSTR; pwszQuickComplete: LPCWSTR): HRESULT; stdcall;
+ function Enable(fEnable: BOOL): HRESULT; stdcall;
+ end;
+
+ const
+ CLSID_AutoComplete: TGUID = '{00BB2763-6A77-11D0-A535-00C04FD7D062}';
+
+ const
+ { IAutoComplete2 options }
+ ACO_NONE = 0;
+ ACO_AUTOSUGGEST = $1;
+ ACO_AUTOAPPEND = $2;
+ ACO_SEARCH = $4;
+ ACO_FILTERPREFIXES = $8;
+ ACO_USETAB = $10;
+ ACO_UPDOWNKEYDROPSLIST = $20;
+ ACO_RTLREADING = $40;
+
+ type
+ IAutoComplete2 = interface(IAutoComplete)
+ ['{EAC04BC0-3791-11d2-BB95-0060977B464C}']
+ function SetOptions(dwFlag: DWORD): HRESULT; stdcall;
+ function GetOptions(var dwFlag: DWORD): HRESULT; stdcall;
+ end;
+
+ implementation
+
+end.
diff --git a/packages/winunits-base/src/winver.pp b/packages/winunits-base/src/winver.pp
new file mode 100644
index 0000000000..40a0bc4772
--- /dev/null
+++ b/packages/winunits-base/src/winver.pp
@@ -0,0 +1,75 @@
+{
+ This file is part of the Free Pascal run time library.
+ Copyright (c) 2003 by the Free Pascal development team
+
+ Windows Version detection functionality.
+
+ 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}
+unit winver;
+
+Interface
+
+Uses Windows;
+
+const
+ Win32Platform : Integer = 0;
+ Win32MajorVersion : Integer = 0;
+ Win32MinorVersion : Integer = 0;
+ Win32BuildNumber : Integer = 0;
+
+ Win32CSDVersion : string = '';
+
+function CheckWin32Version(Major,Minor : Integer ): Boolean;
+function CheckWin32Version(Major : Integer): Boolean;
+
+Implementation
+
+
+uses sysutils;
+
+procedure InitVersion;
+
+var
+ Info: TOSVersionInfo;
+
+begin
+ Info.dwOSVersionInfoSize := SizeOf(Info);
+ if GetVersionEx(Info) then
+ with Info do
+ begin
+ Win32Platform:=dwPlatformId;
+ Win32MajorVersion:=dwMajorVersion;
+ Win32MinorVersion:=dwMinorVersion;
+ if (Win32Platform=VER_PLATFORM_WIN32_WINDOWS) then
+ Win32BuildNumber:=dwBuildNumber and $FFFF
+ else
+ Win32BuildNumber := dwBuildNumber;
+ Win32CSDVersion := StrPas(szCSDVersion);
+ end;
+end;
+
+function CheckWin32Version(Major : Integer): Boolean;
+
+begin
+ Result:=CheckWin32Version(Major,0)
+end;
+
+function CheckWin32Version(Major,Minor: Integer): Boolean;
+
+begin
+ Result := (Win32MajorVersion>Major) or
+ ((Win32MajorVersion=Major) and (Win32MinorVersion>=Minor));
+end;
+
+initialization
+ InitVersion;
+end.