diff options
author | marco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2008-01-05 19:00:24 +0000 |
---|---|---|
committer | marco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2008-01-05 19:00:24 +0000 |
commit | 590766ec86d3e2396100b1bbdbd454b813d27ce6 (patch) | |
tree | ee473cf18940da55e74b32c1b593ca28e13c4612 | |
parent | 7b68c9617b9b36942619bc83e1d57d0c2aa354bf (diff) | |
download | fpc-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/Makefile | 2745 | ||||
-rw-r--r-- | packages/winunits-base/Makefile.fpc | 30 | ||||
-rw-r--r-- | packages/winunits-base/fpmake.inc | 24 | ||||
-rw-r--r-- | packages/winunits-base/fpmake.pp | 17 | ||||
-rw-r--r-- | packages/winunits-base/src/activex.pp | 3388 | ||||
-rw-r--r-- | packages/winunits-base/src/buildwinutilsbase.pp | 29 | ||||
-rw-r--r-- | packages/winunits-base/src/comconst.pp | 30 | ||||
-rw-r--r-- | packages/winunits-base/src/commctrl.pp | 12471 | ||||
-rw-r--r-- | packages/winunits-base/src/comobj.pp | 1060 | ||||
-rw-r--r-- | packages/winunits-base/src/flatsb.pp | 115 | ||||
-rw-r--r-- | packages/winunits-base/src/mmsystem.pp | 2702 | ||||
-rw-r--r-- | packages/winunits-base/src/ole2.pp | 92 | ||||
-rw-r--r-- | packages/winunits-base/src/oleserver.pp | 205 | ||||
-rw-r--r-- | packages/winunits-base/src/richedit.pp | 632 | ||||
-rw-r--r-- | packages/winunits-base/src/shellapi.pp | 938 | ||||
-rw-r--r-- | packages/winunits-base/src/shfolder.pp | 108 | ||||
-rw-r--r-- | packages/winunits-base/src/shlobj.pp | 75 | ||||
-rw-r--r-- | packages/winunits-base/src/winver.pp | 75 |
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. |