Browse Source

* Patch from Dmitry. imm + a dynloaded variant to be used for w9x. Mantis 17167

git-svn-id: trunk@15810 -
marco 15 years ago
parent
commit
534fdb2e8c

+ 2 - 0
.gitattributes

@@ -5847,6 +5847,8 @@ packages/winunits-base/src/dwmapi.pp svneol=native#text/plain
 packages/winunits-base/src/flatsb.pp svneol=native#text/plain
 packages/winunits-base/src/flatsb.pp svneol=native#text/plain
 packages/winunits-base/src/htmlhelp.pp svneol=native#text/plain
 packages/winunits-base/src/htmlhelp.pp svneol=native#text/plain
 packages/winunits-base/src/imagehlp.pp svneol=native#text/plain
 packages/winunits-base/src/imagehlp.pp svneol=native#text/plain
+packages/winunits-base/src/imm.pas svneol=native#text/plain
+packages/winunits-base/src/imm_dyn.pas svneol=native#text/plain
 packages/winunits-base/src/mmsystem.pp svneol=native#text/plain
 packages/winunits-base/src/mmsystem.pp svneol=native#text/plain
 packages/winunits-base/src/multimon.pp svneol=native#text/plain
 packages/winunits-base/src/multimon.pp svneol=native#text/plain
 packages/winunits-base/src/ole2.pp svneol=native#text/plain
 packages/winunits-base/src/ole2.pp svneol=native#text/plain

+ 62 - 62
packages/winunits-base/Makefile

@@ -1,5 +1,5 @@
 #
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2010/08/05]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2010/08/11]
 #
 #
 default: all
 default: all
 MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku 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 i386-nativent 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-solaris x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded mipsel-linux
 MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku 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 i386-nativent 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-solaris x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded mipsel-linux
@@ -450,187 +450,187 @@ ifeq ($(FULL_TARGET),mipsel-linux)
 override TARGET_UNITS+=buildwinutilsbase
 override TARGET_UNITS+=buildwinutilsbase
 endif
 endif
 ifeq ($(FULL_TARGET),i386-linux)
 ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
 ifeq ($(FULL_TARGET),i386-go32v2)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),i386-win32)
 ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),i386-os2)
 ifeq ($(FULL_TARGET),i386-os2)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),i386-freebsd)
 ifeq ($(FULL_TARGET),i386-freebsd)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),i386-beos)
 ifeq ($(FULL_TARGET),i386-beos)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),i386-haiku)
 ifeq ($(FULL_TARGET),i386-haiku)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netbsd)
 ifeq ($(FULL_TARGET),i386-netbsd)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
 ifeq ($(FULL_TARGET),i386-solaris)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),i386-qnx)
 ifeq ($(FULL_TARGET),i386-qnx)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netware)
 ifeq ($(FULL_TARGET),i386-netware)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),i386-openbsd)
 ifeq ($(FULL_TARGET),i386-openbsd)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),i386-wdosx)
 ifeq ($(FULL_TARGET),i386-wdosx)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),i386-darwin)
 ifeq ($(FULL_TARGET),i386-darwin)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),i386-emx)
 ifeq ($(FULL_TARGET),i386-emx)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),i386-watcom)
 ifeq ($(FULL_TARGET),i386-watcom)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netwlibc)
 ifeq ($(FULL_TARGET),i386-netwlibc)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),i386-wince)
 ifeq ($(FULL_TARGET),i386-wince)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),i386-embedded)
 ifeq ($(FULL_TARGET),i386-embedded)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),i386-symbian)
 ifeq ($(FULL_TARGET),i386-symbian)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),i386-nativent)
 ifeq ($(FULL_TARGET),i386-nativent)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
 ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
 ifeq ($(FULL_TARGET),m68k-freebsd)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
 ifeq ($(FULL_TARGET),m68k-netbsd)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-amiga)
 ifeq ($(FULL_TARGET),m68k-amiga)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-atari)
 ifeq ($(FULL_TARGET),m68k-atari)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
 ifeq ($(FULL_TARGET),m68k-openbsd)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-palmos)
 ifeq ($(FULL_TARGET),m68k-palmos)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-embedded)
 ifeq ($(FULL_TARGET),m68k-embedded)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
 ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
 ifeq ($(FULL_TARGET),powerpc-netbsd)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-amiga)
 ifeq ($(FULL_TARGET),powerpc-amiga)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-macos)
 ifeq ($(FULL_TARGET),powerpc-macos)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
 ifeq ($(FULL_TARGET),powerpc-darwin)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-morphos)
 ifeq ($(FULL_TARGET),powerpc-morphos)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-embedded)
 ifeq ($(FULL_TARGET),powerpc-embedded)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
 ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
 ifeq ($(FULL_TARGET),sparc-netbsd)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
 ifeq ($(FULL_TARGET),sparc-solaris)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-embedded)
 ifeq ($(FULL_TARGET),sparc-embedded)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
 ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
 ifeq ($(FULL_TARGET),x86_64-freebsd)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-solaris)
 ifeq ($(FULL_TARGET),x86_64-solaris)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-darwin)
 ifeq ($(FULL_TARGET),x86_64-darwin)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
 ifeq ($(FULL_TARGET),x86_64-win64)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
 ifeq ($(FULL_TARGET),x86_64-embedded)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),arm-linux)
 ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),arm-palmos)
 ifeq ($(FULL_TARGET),arm-palmos)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),arm-darwin)
 ifeq ($(FULL_TARGET),arm-darwin)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),arm-wince)
 ifeq ($(FULL_TARGET),arm-wince)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),arm-gba)
 ifeq ($(FULL_TARGET),arm-gba)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),arm-nds)
 ifeq ($(FULL_TARGET),arm-nds)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),arm-embedded)
 ifeq ($(FULL_TARGET),arm-embedded)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),arm-symbian)
 ifeq ($(FULL_TARGET),arm-symbian)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
 ifeq ($(FULL_TARGET),powerpc64-linux)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
 ifeq ($(FULL_TARGET),powerpc64-darwin)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
 ifeq ($(FULL_TARGET),powerpc64-embedded)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),avr-embedded)
 ifeq ($(FULL_TARGET),avr-embedded)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),armeb-linux)
 ifeq ($(FULL_TARGET),armeb-linux)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),armeb-embedded)
 ifeq ($(FULL_TARGET),armeb-embedded)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 ifeq ($(FULL_TARGET),mipsel-linux)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 endif
 endif
 ifeq ($(FULL_TARGET),i386-linux)
 ifeq ($(FULL_TARGET),i386-linux)
 override TARGET_RSTS+=jwawintype comconst
 override TARGET_RSTS+=jwawintype comconst

+ 1 - 1
packages/winunits-base/Makefile.fpc

@@ -12,7 +12,7 @@ packages=fcl-registry fcl-base
 [target]
 [target]
 units=buildwinutilsbase
 units=buildwinutilsbase
 implicitunits=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver \
 implicitunits=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver \
-	shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool
+	shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
 
 
 examples=examples
 examples=examples
 
 

+ 1 - 1
packages/winunits-base/src/buildwinutilsbase.pp

@@ -24,7 +24,7 @@ uses
     flatsb, winver, mmsystem, comconst, commctrl, comobj, commdlg,
     flatsb, winver, mmsystem, comconst, commctrl, comobj, commdlg,
     ole2, activex, shellapi, shlobj, oleserver,  shfolder, richedit,
     ole2, activex, shellapi, shlobj, oleserver,  shfolder, richedit,
     imagehlp, wininet, uxtheme, dwmapi, multimon, htmlhelp, winutils,
     imagehlp, wininet, uxtheme, dwmapi, multimon, htmlhelp, winutils,
-    comserv, winspool;
+    comserv, winspool, imm, imm_dyn;
 
 
 implementation
 implementation
 
 

+ 652 - 0
packages/winunits-base/src/imm.pas

@@ -0,0 +1,652 @@
+(********************************************************************* *)
+(*      imm.h - Input Method Manager definitions                       *)
+(*                                                                     *)
+(*      Copyright (c) Microsoft Corporation. All rights reserved.      *)
+(*                                                                     *)
+(* Converted to pascal by Dmitry Boyarintsev, using Chelper.           *)
+(*                                                                     *)
+(********************************************************************* *)
+
+unit
+  imm;
+
+{$mode delphi}
+
+interface
+
+uses
+  Windows;
+
+{$PACKRECORDS C}
+
+// IME_Codes
+// bit field for conversion mode
+const
+  IME_CMODE_ALPHANUMERIC          = $0000;
+  IME_CMODE_NATIVE                = $0001;
+  IME_CMODE_CHINESE               = IME_CMODE_NATIVE;
+  IME_CMODE_HANGUL                = IME_CMODE_NATIVE;
+  IME_CMODE_JAPANESE              = IME_CMODE_NATIVE;
+  IME_CMODE_KATAKANA              = $0002;  // only effect under IME_CMODE_NATIVE
+  IME_CMODE_LANGUAGE              = $0003;
+  IME_CMODE_FULLSHAPE             = $0008;
+  IME_CMODE_ROMAN                 = $0010;
+  IME_CMODE_CHARCODE              = $0020;
+  IME_CMODE_HANJACONVERT          = $0040;
+
+type
+  HIMC = DWORD;
+  HIMCC = DWORD;
+
+type
+  PHKL  = ^HKL;
+  LPHKL = PHKL;
+
+type
+  LPUINT = PUINT;
+
+// declared at rtl\win\wininc\struct.inc
+{type
+  PtagCOMPOSITIONFORM = ^tagCOMPOSITIONFORM;
+  tagCOMPOSITIONFORM = record
+    dwStyle       : DWORD;
+    ptCurrentPos  : POINT;
+    rcArea        : RECT;
+  end;
+  COMPOSITIONFORM = tagCOMPOSITIONFORM;
+  PCOMPOSITIONFORM = PtagCOMPOSITIONFORM;
+  NPCOMPOSITIONFORM = PtagCOMPOSITIONFORM;
+  LPCOMPOSITIONFORM = PtagCOMPOSITIONFORM;}
+
+// declared at rtl\win\wininc\struct.inc
+{type
+  PtagCANDIDATEFORM = ^tagCANDIDATEFORM;
+  tagCANDIDATEFORM = packed record
+    dwIndex      : DWORD;
+    dwStyle      : DWORD;
+    ptCurrentPos : POINT;
+    rcArea       : RECT;
+  end;
+  CANDIDATEFORM = tagCANDIDATEFORM;
+  PCANDIDATEFORM = PtagCANDIDATEFORM;
+  NPCANDIDATEFORM = PtagCANDIDATEFORM;
+  LPCANDIDATEFORM = PtagCANDIDATEFORM;}
+
+
+// declared at rtl\win\wininc\struct.inc
+{type
+  PtagCANDIDATELIST = ^tagCANDIDATELIST;
+  tagCANDIDATELIST = packed record
+    dwSize : DWORD;
+    dwStyle : DWORD;
+    dwCount : DWORD;
+    dwSelection : DWORD;
+    dwPageStart : DWORD;
+    dwPageSize : DWORD;
+    dwOffset : array [0..0] of DWORD;
+  end;
+  CANDIDATELIST = tagCANDIDATELIST;
+  PCANDIDATELIST = PtagCANDIDATELIST;
+  NPCANDIDATELIST = PtagCANDIDATELIST;
+  LPCANDIDATELIST = PtagCANDIDATELIST;}
+
+
+type
+  PtagREGISTERWORDA = ^tagREGISTERWORDA;
+  tagREGISTERWORDA = packed record
+    lpReading : LPSTR;
+    lpWord : LPSTR;
+  end;
+  REGISTERWORDA = tagREGISTERWORDA;
+  TREGISTERWORDA = REGISTERWORDA;
+  PREGISTERWORDA = PtagREGISTERWORDA;
+  NPREGISTERWORDA = PtagREGISTERWORDA;
+  LPREGISTERWORDA = PtagREGISTERWORDA;
+
+type
+  PtagREGISTERWORDW = ^tagREGISTERWORDW;
+  tagREGISTERWORDW = packed record
+    lpReading : LPWSTR;
+    lpWord : LPWSTR;
+  end;
+  REGISTERWORDW = tagREGISTERWORDW;
+  TREGISTERWORDW = REGISTERWORDW;
+  PREGISTERWORDW = PtagREGISTERWORDW;
+  NPREGISTERWORDW = PtagREGISTERWORDW;
+  LPREGISTERWORDW = PtagREGISTERWORDW;
+
+type
+  PtagRECONVERTSTRING = ^tagRECONVERTSTRING;
+  tagRECONVERTSTRING = packed record
+    dwSize : DWORD;
+    dwVersion : DWORD;
+    dwStrLen : DWORD;
+    dwStrOffset : DWORD;
+    dwCompStrLen : DWORD;
+    dwCompStrOffset : DWORD;
+    dwTargetStrLen : DWORD;
+    dwTargetStrOffset : DWORD;
+  end;
+  RECONVERTSTRING = tagRECONVERTSTRING;
+  TRECONVERTSTRING = RECONVERTSTRING;
+  PRECONVERTSTRING = PtagRECONVERTSTRING;
+  NPRECONVERTSTRING = PtagRECONVERTSTRING;
+  LPRECONVERTSTRING = PtagRECONVERTSTRING;
+
+const
+  STYLE_DESCRIPTION_SIZE = 32;
+
+type
+  PtagSTYLEBUFA = ^tagSTYLEBUFA;
+  tagSTYLEBUFA = packed record
+    dwStyle : DWORD;
+    szDescription : array [0..STYLE_DESCRIPTION_SIZE-1] of AnsiChar;
+  end;
+  STYLEBUFA = tagSTYLEBUFA;
+  TSTYLEBUFA = STYLEBUFA;
+  PSTYLEBUFA = PtagSTYLEBUFA;
+  NPSTYLEBUFA = PtagSTYLEBUFA;
+  LPSTYLEBUFA = PtagSTYLEBUFA;
+
+type
+  PtagSTYLEBUFW = ^tagSTYLEBUFW;
+  tagSTYLEBUFW = packed record
+    dwStyle : DWORD;
+    szDescription : array [0..STYLE_DESCRIPTION_SIZE-1] of WCHAR;
+  end;
+  STYLEBUFW = tagSTYLEBUFW;
+  TSTYLEBUFW = STYLEBUFW;
+  PSTYLEBUFW = PtagSTYLEBUFW;
+  NPSTYLEBUFW = PtagSTYLEBUFW;
+  LPSTYLEBUFW = PtagSTYLEBUFW;
+
+const
+  IMEMENUITEM_STRING_SIZE = 80;
+
+type
+  PtagIMEMENUITEMINFOA = ^tagIMEMENUITEMINFOA;
+  tagIMEMENUITEMINFOA = packed record
+    cbSize : UINT;
+    fType : UINT;
+    fState : UINT;
+    wID : UINT;
+    hbmpChecked : HBITMAP;
+    hbmpUnchecked : HBITMAP;
+    dwItemData : DWORD;
+    szString : array [0..IMEMENUITEM_STRING_SIZE-1] of AnsiChar;
+    hbmpItem : HBITMAP;
+  end;
+  IMEMENUITEMINFOA = tagIMEMENUITEMINFOA;
+  TIMEMENUITEMINFOA = IMEMENUITEMINFOA;
+  PIMEMENUITEMINFOA = PtagIMEMENUITEMINFOA;
+  NPIMEMENUITEMINFOA = PtagIMEMENUITEMINFOA;
+  LPIMEMENUITEMINFOA = PtagIMEMENUITEMINFOA;
+
+type
+  PtagIMEMENUITEMINFOW = ^tagIMEMENUITEMINFOW;
+  tagIMEMENUITEMINFOW = packed record
+    cbSize : UINT;
+    fType : UINT;
+    fState : UINT;
+    wID : UINT;
+    hbmpChecked : HBITMAP;
+    hbmpUnchecked : HBITMAP;
+    dwItemData : DWORD;
+    szString : array [0..IMEMENUITEM_STRING_SIZE-1] of WCHAR;
+    hbmpItem : HBITMAP;
+  end;
+  IMEMENUITEMINFOW = tagIMEMENUITEMINFOW;
+  TIMEMENUITEMINFOW = IMEMENUITEMINFOW;
+  PIMEMENUITEMINFOW = PtagIMEMENUITEMINFOW;
+  NPIMEMENUITEMINFOW = PtagIMEMENUITEMINFOW;
+  LPIMEMENUITEMINFOW = PtagIMEMENUITEMINFOW;
+
+type
+  PtagIMECHARPOSITION = ^tagIMECHARPOSITION;
+  tagIMECHARPOSITION = packed record
+    dwSize : DWORD;
+    dwCharPos : DWORD;
+    pt : POINT;
+    cLineHeight : UINT;
+    rcDocument : RECT;
+  end;
+  IMECHARPOSITION = tagIMECHARPOSITION;
+  TIMECHARPOSITION = IMECHARPOSITION;
+  PIMECHARPOSITION = PtagIMECHARPOSITION;
+  NPIMECHARPOSITION = PtagIMECHARPOSITION;
+  LPIMECHARPOSITION = PtagIMECHARPOSITION;
+
+type
+  IMCENUMPROC = function(par0: HIMC; par1: LPARAM): LongBool; stdcall;
+  TIMCENUMPROC = IMCENUMPROC;
+
+// prototype of IMM API
+
+const
+  Imm = 'imm32';
+
+function ImmInstallIMEA(lpszIMEFileName, lpszLayoutText: LPCSTR): HKL; stdcall; external Imm name 'ImmInstallIMEA';
+function ImmInstallIMEW(lpszIMEFileName, lpszLayoutText: LPCWSTR): HKL; stdcall; external Imm name 'ImmInstallIMEW';
+function ImmGetDefaultIMEWnd(wnd: HWND): HWND; stdcall; external Imm name 'ImmGetDefaultIMEWnd';
+function ImmGetDescriptionA(kl: HKL; lpszDescription: LPSTR; uBufLen: UINT): UINT; stdcall; external Imm name 'ImmGetDescriptionA';
+function ImmGetDescriptionW(kl: HKL; lpszDescription: LPWSTR; uBufLen: UINT): UINT; stdcall; external Imm name 'ImmGetDescriptionW';
+
+function ImmGetIMEFileNameA(kl: HKL; lpszFileName: LPSTR; uBufLen: UINT): UINT; stdcall; external Imm name 'ImmGetIMEFileNameA';
+function ImmGetIMEFileNameW(kl: HKL; lpszFileName: LPWSTR; uBufLen: UINT): UINT; stdcall; external Imm name 'ImmGetIMEFileNameW';
+
+function ImmGetProperty (kl: HKL; fdwIndex: DWORD): DWORD; stdcall; external Imm name 'ImmGetProperty';
+function ImmIsIME(kl: HKL): LongBool; stdcall; external Imm name 'ImmIsIME';
+function ImmSimulateHotKey(wnd: HWND; dwHotKeyID: DWORD): LongBool; stdcall; external Imm name 'ImmSimulateHotKey';
+
+function ImmCreateContext: HIMC; stdcall; external Imm name 'ImmCreateContext';
+function ImmDestroyContext(imc: HIMC): LongBool; stdcall; external Imm name 'ImmDestroyContext';
+function ImmGetContext(wnd: HWND): HIMC; stdcall; external Imm name 'ImmGetContext';
+
+function ImmReleaseContext(wnd: HWND; imc: HIMC): LongBool; stdcall; external Imm name 'ImmReleaseContext';
+function ImmAssociateContext(wnd: HWND; imc: HIMC): HIMC; stdcall; external Imm name 'ImmAssociateContext';
+
+function ImmAssociateContextEx(wnd: HWND; imc: HIMC; dwFlags: DWORD): LongBool; stdcall; external Imm name 'ImmAssociateContextEx';
+function ImmGetCompositionStringA(imc: HIMC; dwIndex: DWORD;
+    lpBuf: LPVOID; dwBufLen: DWORD): Longword; stdcall; external Imm name 'ImmGetCompositionStringA';
+function ImmGetCompositionStringW(imc: HIMC; dwIndex: DWORD;
+    lpBuf: LPVOID; dwBufLen: DWORD): Longword; stdcall; external Imm name 'ImmGetCompositionStringW';
+
+function ImmSetCompositionStringA(imc: HIMC; dwIndex: DWORD; lpComp: LPVOID;
+    dwCompLen: DWORD; lpRead: LPVOID; dwReadLen: DWORD): LongBool; stdcall; external Imm name 'ImmSetCompositionStringA';
+function ImmSetCompositionStringW(imc: HIMC; dwIndex: DWORD; lpComp: LPVOID;
+    dwCompLen: DWORD; lpRead: LPVOID; dwReadLen: DWORD): LongBool; stdcall; external Imm name 'ImmSetCompositionStringW';
+
+function ImmGetCandidateListCountA(imc: HIMC; lpdwListCount: LPDWORD): DWORD; stdcall; external Imm name 'ImmGetCandidateListCountA';
+function ImmGetCandidateListCountW(imc: HIMC; lpdwListCount: LPDWORD): DWORD; stdcall; external Imm name 'ImmGetCandidateListCountW';
+
+function ImmGetCandidateListA(imc: HIMC; deIndex: DWORD;
+    lpCandList: LPCANDIDATELIST; dwBufLen: DWORD): DWORD; stdcall; external Imm name 'ImmGetCandidateListA';
+function ImmGetCandidateListW(imc: HIMC; deIndex: DWORD;
+    lpCandList: LPCANDIDATELIST; dwBufLen: DWORD): DWORD; stdcall; external Imm name 'ImmGetCandidateListW';
+
+function ImmGetGuideLineA(imc: HIMC; dwIndex: DWORD; lpBuf: LPSTR;
+    dwBufLen: DWORD): DWORD; stdcall ; external Imm name 'ImmGetGuideLineA';
+function ImmGetGuideLineW(imc: HIMC; dwIndex: DWORD; lpBuf: LPWSTR;
+    dwBufLen: DWORD): DWORD; stdcall ; external Imm name 'ImmGetGuideLineW';
+
+function ImmGetConversionStatus(imc: HIMC; lpfdwConversion, lpfdwSentence: LPDWORD): LongBool; stdcall ; external Imm name 'ImmGetConversionStatus';
+function ImmSetConversionStatus(imc: HIMC; fdwConversion, fdwSentence: DWORD): LongBool; stdcall ; external Imm name 'ImmSetConversionStatus';
+function ImmGetOpenStatus(imc: HIMC): LongBool; stdcall ; external Imm name 'ImmGetOpenStatus';
+function ImmSetOpenStatus(imc: HIMC; par1: LongBool): LongBool; stdcall ; external Imm name 'ImmSetOpenStatus';
+
+function ImmGetCompositionFontA(imc: HIMC; lplf: PLOGFONTA): LongBool; stdcall ; external Imm name 'ImmGetCompositionFontA';
+function ImmGetCompositionFontW(imc: HIMC; lplf: PLOGFONTW): LongBool; stdcall ; external Imm name 'ImmGetCompositionFontW';
+
+function ImmSetCompositionFontA(imc: HIMC; lplf: PLOGFONTA): LongBool; stdcall ; external Imm name 'ImmSetCompositionFontA';
+function ImmSetCompositionFontW(imc: HIMC; lplf: PLOGFONTW): LongBool; stdcall ; external Imm name 'ImmSetCompositionFontW';
+
+function ImmConfigureIMEA(kl: HKL; wnd: HWND; dwMode: DWORD; lpData: LPVOID): LongBool; stdcall ; external Imm name 'ImmConfigureIMEA';
+function ImmConfigureIMEW(kl: HKL; wnd: HWND; dwMode: DWORD; lpData: LPVOID): LongBool; stdcall ; external Imm name 'ImmConfigureIMEW';
+
+function ImmEscapeA(kl: HKL; imc: HIMC; uEscape: UINT; lpData: LPVOID): LRESULT; stdcall ; external Imm name 'ImmEscapeA';
+function ImmEscapeW(kl: HKL; imc: HIMC; uEscape: UINT; lpData: LPVOID): LRESULT; stdcall ; external Imm name 'ImmEscapeW';
+
+function ImmGetConversionListA(kl: HKL; imc: HIMC; lpSrc: LPCSTR;
+    lpDst: LPCANDIDATELIST; dwBufLen: DWORD; uFlag: UINT): DWORD; stdcall ; external Imm name 'ImmGetConversionListA';
+function ImmGetConversionListW(kl: HKL; imc: HIMC; lpSrc: LPCWSTR;
+    lpDst: LPCANDIDATELIST; dwBufLen: DWORD; uFlag: UINT): DWORD; stdcall ; external Imm name 'ImmGetConversionListW';
+
+function ImmNotifyIME(imc: HIMC; dwAction, dwIndex, dwValue: DWORD): LongBool; stdcall ; external Imm name 'ImmNotifyIME';
+function ImmGetStatusWindowPos(imc: HIMC; lpptPos: LPPOINT): LongBool; stdcall ; external Imm name 'ImmGetStatusWindowPos';
+function ImmSetStatusWindowPos(imc: HIMC; lpptPos: LPPOINT): LongBool; stdcall ; external Imm name 'ImmSetStatusWindowPos';
+function ImmGetCompositionWindow(imc: HIMC; lpCompForm: LPCOMPOSITIONFORM): LongBool; stdcall ; external Imm name 'ImmGetCompositionWindow';
+function ImmSetCompositionWindow(imc: HIMC; lpCompForm: LPCOMPOSITIONFORM): LongBool; stdcall ; external Imm name 'ImmSetCompositionWindow';
+function ImmGetCandidateWindow(imc: HIMC; par1: DWORD; lpCandidate: LPCANDIDATEFORM): LongBool; stdcall ; external Imm name 'ImmGetCandidateWindow(';
+function ImmSetCandidateWindow(imc: HIMC; lpCandidate: LPCANDIDATEFORM): LongBool; stdcall ; external Imm name 'ImmSetCandidateWindow';
+
+function ImmIsUIMessageA(wnd: HWND; msg: UINT; wPar: WPARAM; lPar: LPARAM): LongBool; stdcall ; external Imm name 'ImmIsUIMessageA';
+function ImmIsUIMessageW(wnd: HWND; msg: UINT; wPar: WPARAM; lPar: LPARAM): LongBool; stdcall ; external Imm name 'ImmIsUIMessageW';
+
+function ImmGetVirtualKey(wnd: HWND): UINT; stdcall ; external Imm name 'ImmGetVirtualKey';
+
+type
+  REGISTERWORDENUMPROCA = function(lpszReading: LPCSTR; par1: DWORD;
+    lpszString: LPCSTR; par3: LPVOID): Integer; stdcall;
+  TREGISTERWORDENUMPROCA = REGISTERWORDENUMPROCA;
+
+  REGISTERWORDENUMPROCW = function(lpszReading: LPCWSTR; par1: DWORD;
+    lpszString: LPCWSTR; par3: LPVOID): Integer; stdcall;
+  TREGISTERWORDENUMPROCW = REGISTERWORDENUMPROCW;
+
+function ImmRegisterWordA(kl: HKL; lpszReading: LPCSTR; dwStyle: DWORD; lpszRegister: LPCSTR): LongBool; stdcall ; external Imm name 'ImmRegisterWordA';
+function ImmRegisterWordW(kl: HKL; lpszReading: LPCWSTR; dwStyle: DWORD; lpszRegister: LPCWSTR): LongBool; stdcall ; external Imm name 'ImmRegisterWordW';
+
+function ImmUnregisterWordA(kl: HKL; lpszReading: LPCSTR; dwStyle: DWORD; lpszUnregister: LPCSTR): LongBool; stdcall ; external Imm name 'ImmUnregisterWordA';
+function ImmUnregisterWordW(kl: HKL; lpszReading: LPCWSTR; dwStyle: DWORD; lpszUnregister: LPCWSTR): LongBool; stdcall ; external Imm name 'ImmUnregisterWordW';
+
+function ImmGetRegisterWordStyleA(kl: HKL; nItem: UINT; lpStyleBuf: LPSTYLEBUFA): UINT; stdcall ; external Imm name 'ImmGetRegisterWordStyleA';
+function ImmGetRegisterWordStyleW(kl: HKL; nItem: UINT; lpStyleBuf: LPSTYLEBUFW): UINT; stdcall ; external Imm name 'ImmGetRegisterWordStyleW';
+
+function ImmEnumRegisterWordA(kl: HKL; lpfnEnumProc: REGISTERWORDENUMPROCA;
+    lpszReading: LPCSTR; dwStyle: DWORD; lpszRegister: LPCSTR; lpData: LPVOID): UINT; stdcall ; external Imm name 'ImmEnumRegisterWordA';
+function ImmEnumRegisterWordW(kl: HKL; lpfnEnumProc: REGISTERWORDENUMPROCW;
+    lpszReading: LPCWSTR; dwStyle: DWORD; lpszRegister: LPCWSTR; lpData: LPVOID): UINT; stdcall ; external Imm name 'ImmEnumRegisterWordW';
+
+function ImmDisableIME(idThread: DWORD): LongBool; stdcall  ; external Imm name 'ImmDisableIME';
+function ImmEnumInputContext(idThread: DWORD; lpfn: IMCENUMPROC; lParam: LPARAM): LongBool; stdcall ; external Imm name 'ImmEnumInputContext';
+function ImmGetImeMenuItemsA(imc: HIMC; dwFlags, dwType: DWORD;
+    lpImeParentMenu, lpImeMenu: LPIMEMENUITEMINFOA; dwSize: DWORD): DWORD; stdcall ; external Imm name 'ImmGetImeMenuItemsA';
+function ImmGetImeMenuItemsW(par0: HIMC; dwFlags, dwType: DWORD;
+    lpImeParentMenu, lpImeMenu: LPIMEMENUITEMINFOW; dwSize: DWORD): DWORD; stdcall ; external Imm name 'ImmGetImeMenuItemsW';
+
+function ImmDisableTextFrameService(idThread: DWORD): LongBool; stdcall ; external Imm name 'ImmDisableTextFrameService';
+
+// wParam for WM_IME_CONTROL
+const
+  IMC_GETCANDIDATEPOS      = $0007;
+  IMC_SETCANDIDATEPOS      = $0008;
+  IMC_GETCOMPOSITIONFONT   = $0009;
+  IMC_SETCOMPOSITIONFONT   = $000A;
+  IMC_GETCOMPOSITIONWINDOW = $000B;
+  IMC_SETCOMPOSITIONWINDOW = $000C;
+  IMC_GETSTATUSWINDOWPOS   = $000F;
+  IMC_SETSTATUSWINDOWPOS   = $0010;
+  IMC_CLOSESTATUSWINDOW    = $0021;
+  IMC_OPENSTATUSWINDOW     = $0022;
+
+  // dwAction for ImmNotifyIME
+  NI_OPENCANDIDATE            = $0010;
+  NI_CLOSECANDIDATE           = $0011;
+  NI_SELECTCANDIDATESTR       = $0012;
+  NI_CHANGECANDIDATELIST      = $0013;
+  NI_FINALIZECONVERSIONRESULT = $0014;
+  NI_COMPOSITIONSTR           = $0015;
+  NI_SETCANDIDATE_PAGESTART   = $0016;
+  NI_SETCANDIDATE_PAGESIZE    = $0017;
+  NI_IMEMENUSELECTED          = $0018;
+
+  // lParam for WM_IME_SETCONTEXT
+  ISC_SHOWUICANDIDATEWINDOW    = $00000001;
+  ISC_SHOWUICOMPOSITIONWINDOW  = $80000000;
+  ISC_SHOWUIGUIDELINE          = $40000000;
+  ISC_SHOWUIALLCANDIDATEWINDOW = $0000000F;
+  ISC_SHOWUIALL                = $C000000F;
+
+  // dwIndex for ImmNotifyIME/NI_COMPOSITIONSTR
+  CPS_COMPLETE  = $0001;
+  CPS_CONVERT   = $0002;
+  CPS_REVERT    = $0003;
+  CPS_CANCEL    = $0004;
+
+  // the modifiers of hot key
+  MOD_ALT      = $0001;
+  MOD_CONTROL  = $0002;
+  MOD_SHIFT    = $0004;
+  MOD_LEFT     = $8000;
+  MOD_RIGHT    = $4000;
+  MOD_ON_KEYUP = $0800;
+  MOD_IGNORE_ALL_MODIFIER = $0400;
+
+  // Windows for Simplified Chinese Edition hot key ID from 0x10 - 0x2F
+  IME_CHOTKEY_IME_NONIME_TOGGLE = $10;
+  IME_CHOTKEY_SHAPE_TOGGLE      = $11;
+  IME_CHOTKEY_SYMBOL_TOGGLE     = $12;
+
+  // Windows for Japanese Edition hot key ID from 0x30 - 0x4F
+  IME_JHOTKEY_CLOSE_OPEN    = $30;
+
+  // Windows for Korean Edition hot key ID from 0x50 - 0x6F
+  IME_KHOTKEY_SHAPE_TOGGLE  = $50;
+  IME_KHOTKEY_HANJACONVERT  = $51;
+  IME_KHOTKEY_ENGLISH       = $52;
+
+  // Windows for Traditional Chinese Edition hot key ID from 0x70 - 0x8F
+  IME_THOTKEY_IME_NONIME_TOGGLE = $70;
+  IME_THOTKEY_SHAPE_TOGGLE      = $71;
+  IME_THOTKEY_SYMBOL_TOGGLE     = $72;
+
+  // direct switch hot key ID from 0x100 - 0x11F
+  IME_HOTKEY_DSWITCH_FIRST  = $100;
+  IME_HOTKEY_DSWITCH_LAST   = $11F;
+
+  // IME private hot key from 0x200 - 0x21F
+  IME_HOTKEY_PRIVATE_FIRST          = $200;
+  IME_ITHOTKEY_RESEND_RESULTSTR     = $200;
+  IME_ITHOTKEY_PREVIOUS_COMPOSITION = $201;
+  IME_ITHOTKEY_UISTYLE_TOGGLE       = $202;
+  IME_ITHOTKEY_RECONVERTSTRING      = $203;
+  IME_HOTKEY_PRIVATE_LAST           = $21F;
+
+  // parameter of ImmGetCompositionString
+  GCS_COMPREADSTR       = $0001;
+  GCS_COMPREADATTR      = $0002;
+  GCS_COMPREADCLAUSE    = $0004;
+  GCS_COMPSTR           = $0008;
+  GCS_COMPATTR          = $0010;
+  GCS_COMPCLAUSE        = $0020;
+  GCS_CURSORPOS         = $0080;
+  GCS_DELTASTART        = $0100;
+  GCS_RESULTREADSTR     = $0200;
+  GCS_RESULTREADCLAUSE  = $0400;
+  GCS_RESULTSTR         = $0800;
+  GCS_RESULTCLAUSE      = $1000;
+
+  // style bit flags for WM_IME_COMPOSITION
+  CS_INSERTCHAR   = $2000;
+  CS_NOMOVECARET  = $4000;
+
+  // IME version constants
+  IMEVER_0310 = $0003000A;
+  IMEVER_0400 = $00040000;
+
+
+  // IME property bits
+  IME_PROP_AT_CARET              = $00010000;
+  IME_PROP_SPECIAL_UI            = $00020000;
+  IME_PROP_CANDLIST_START_FROM_1 = $00040000;
+  IME_PROP_UNICODE               = $00080000;
+  IME_PROP_COMPLETE_ON_UNSELECT  = $00100000;
+
+  // IME UICapability bits
+  UI_CAP_2700   = $00000001;
+  UI_CAP_ROT90  = $00000002;
+  UI_CAP_ROTANY = $00000004;
+
+  // ImmSetCompositionString Capability bits
+  SCS_CAP_COMPSTR            = $00000001;
+  SCS_CAP_MAKEREAD           = $00000002;
+  SCS_CAP_SETRECONVERTSTRING = $00000004;
+
+  // IME WM_IME_SELECT inheritance Capability bits
+  SELECT_CAP_CONVERSION = $00000001;
+  SELECT_CAP_SENTENCE   = $00000002;
+
+  // ID for deIndex of ImmGetGuideLine
+  GGL_LEVEL   = $00000001;
+  GGL_INDEX   = $00000002;
+  GGL_STRING  = $00000003;
+  GGL_PRIVATE = $00000004;
+
+  // ID for dwLevel of GUIDELINE Structure
+  GL_LEVEL_NOGUIDELINE = $00000000;
+  GL_LEVEL_FATAL       = $00000001;
+  GL_LEVEL_ERROR       = $00000002;
+  GL_LEVEL_WARNING     = $00000003;
+  GL_LEVEL_INFORMATION = $00000004;
+
+  // ID for dwIndex of GUIDELINE Structure
+  GL_ID_UNKNOWN           = $00000000;
+  GL_ID_NOMODULE          = $00000001;
+  GL_ID_NODICTIONARY      = $00000010;
+  GL_ID_CANNOTSAVE        = $00000011;
+  GL_ID_NOCONVERT         = $00000020;
+  GL_ID_TYPINGERROR       = $00000021;
+  GL_ID_TOOMANYSTROKE     = $00000022;
+  GL_ID_READINGCONFLICT   = $00000023;
+  GL_ID_INPUTREADING      = $00000024;
+  GL_ID_INPUTRADICAL      = $00000025;
+  GL_ID_INPUTCODE         = $00000026;
+  GL_ID_INPUTSYMBOL       = $00000027;
+  GL_ID_CHOOSECANDIDATE   = $00000028;
+  GL_ID_REVERSECONVERSION = $00000029;
+  GL_ID_PRIVATE_FIRST     = $00008000;
+  GL_ID_PRIVATE_LAST      = $0000FFFF;
+
+  // ID for dwIndex of ImmGetProperty
+  IGP_GETIMEVERSION = -4;
+  IGP_PROPERTY      = $00000004;
+  IGP_CONVERSION    = $00000008;
+  IGP_SENTENCE      = $0000000c;
+  IGP_UI            = $00000010;
+  IGP_SETCOMPSTR    = $00000014;
+  IGP_SELECT        = $00000018;
+
+  // dwIndex for ImmSetCompositionString API
+  SCS_SETSTR               = (GCS_COMPREADSTR or GCS_COMPSTR);
+  SCS_CHANGEATTR           = (GCS_COMPREADATTR or GCS_COMPATTR);
+  SCS_CHANGECLAUSE         = (GCS_COMPREADCLAUSE or GCS_COMPCLAUSE);
+  SCS_SETRECONVERTSTRING   = $00010000;
+  SCS_QUERYRECONVERTSTRING = $00020000;
+
+  // attribute for COMPOSITIONSTRING Structure
+  ATTR_INPUT               = $00;
+  ATTR_TARGET_CONVERTED    = $01;
+  ATTR_CONVERTED           = $02;
+  ATTR_TARGET_NOTCONVERTED = $03;
+  ATTR_INPUT_ERROR         = $04;
+  ATTR_FIXEDCONVERTED      = $05;
+
+  // bit field for IMC_SETCOMPOSITIONWINDOW, IMC_SETCANDIDATEWINDOW
+  CFS_DEFAULT        = $0000;
+  CFS_RECT           = $0001;
+  CFS_POINT          = $0002;
+  CFS_FORCE_POSITION = $0020;
+  CFS_CANDIDATEPOS   = $0040;
+  CFS_EXCLUDE        = $0080;
+
+  // conversion direction for ImmGetConversionList
+  GCL_CONVERSION        = $0001;
+  GCL_REVERSECONVERSION = $0002;
+  GCL_REVERSE_LENGTH    = $0003;
+
+  // bit field for conversion mode
+  // IME_CMODE_HANGEUL is old name of IME_CMODE_HANGUL. It will be gone eventually.
+  IME_CMODE_HANGEUL      = IME_CMODE_NATIVE;
+  IME_CMODE_SOFTKBD      = $0080;
+  IME_CMODE_NOCONVERSION = $0100;
+  IME_CMODE_EUDC         = $0200;
+  IME_CMODE_SYMBOL       = $0400;
+  IME_CMODE_FIXED        = $0800;
+  IME_CMODE_RESERVED     = $F0000000;
+
+  // bit field for sentence mode
+  IME_SMODE_NONE          = $0000;
+  IME_SMODE_PLAURALCLAUSE = $0001;
+  IME_SMODE_SINGLECONVERT = $0002;
+  IME_SMODE_AUTOMATIC     = $0004;
+  IME_SMODE_PHRASEPREDICT = $0008;
+  IME_SMODE_CONVERSATION  = $0010;
+  IME_SMODE_RESERVED      = $0000F000;
+
+  // style of candidate
+  IME_CAND_UNKNOWN = $0000;
+  IME_CAND_READ    = $0001;
+  IME_CAND_CODE    = $0002;
+  IME_CAND_MEANING = $0003;
+  IME_CAND_RADICAL = $0004;
+  IME_CAND_STROKE  = $0005;
+
+  // wParam of report message WM_IME_NOTIFY
+  IMN_CLOSESTATUSWINDOW    = $0001;
+  IMN_OPENSTATUSWINDOW     = $0002;
+  IMN_CHANGECANDIDATE      = $0003;
+  IMN_CLOSECANDIDATE       = $0004;
+  IMN_OPENCANDIDATE        = $0005;
+  IMN_SETCONVERSIONMODE    = $0006;
+  IMN_SETSENTENCEMODE      = $0007;
+  IMN_SETOPENSTATUS        = $0008;
+  IMN_SETCANDIDATEPOS      = $0009;
+  IMN_SETCOMPOSITIONFONT   = $000A;
+  IMN_SETCOMPOSITIONWINDOW = $000B;
+  IMN_SETSTATUSWINDOWPOS   = $000C;
+  IMN_GUIDELINE            = $000D;
+  IMN_PRIVATE              = $000E;
+
+  // wParam of report message WM_IME_REQUEST
+  IMR_COMPOSITIONWINDOW      = $0001;
+  IMR_CANDIDATEWINDOW        = $0002;
+  IMR_COMPOSITIONFONT        = $0003;
+  IMR_RECONVERTSTRING        = $0004;
+  IMR_CONFIRMRECONVERTSTRING = $0005;
+  IMR_QUERYCHARPOSITION      = $0006;
+  IMR_DOCUMENTFEED           = $0007;
+
+  // error code of ImmGetCompositionString
+  IMM_ERROR_NODATA  = -1;
+  IMM_ERROR_GENERAL = -2;
+
+  // dialog mode of ImmConfigureIME
+  IME_CONFIG_GENERAL          = 1;
+  IME_CONFIG_REGISTERWORD     = 2;
+  IME_CONFIG_SELECTDICTIONARY = 3;
+
+  // flags for ImmEscape
+  IME_ESC_QUERY_SUPPORT        = $0003;
+  IME_ESC_RESERVED_FIRST       = $0004;
+  IME_ESC_RESERVED_LAST        = $07FF;
+  IME_ESC_PRIVATE_FIRST        = $0800;
+  IME_ESC_PRIVATE_LAST         = $0FFF;
+  IME_ESC_SEQUENCE_TO_INTERNAL = $1001;
+  IME_ESC_GET_EUDC_DICTIONARY  = $1003;
+  IME_ESC_SET_EUDC_DICTIONARY  = $1004;
+  IME_ESC_MAX_KEY              = $1005;
+  IME_ESC_IME_NAME             = $1006;
+  IME_ESC_SYNC_HOTKEY          = $1007;
+  IME_ESC_HANJA_MODE           = $1008;
+  IME_ESC_AUTOMATA             = $1009;
+  IME_ESC_PRIVATE_HOTKEY       = $100a;
+  IME_ESC_GETHELPFILENAME      = $100b;
+
+  // style of word registration
+  IME_REGWORD_STYLE_EUDC       = $00000001;
+  IME_REGWORD_STYLE_USER_FIRST = $80000000;
+  IME_REGWORD_STYLE_USER_LAST  = $FFFFFFFF;
+
+  // dwFlags for ImmAssociateContextEx
+  IACE_CHILDREN        = $0001;
+  IACE_DEFAULT         = $0010;
+  IACE_IGNORENOCONTEXT = $0020;
+
+  // dwFlags for ImmGetImeMenuItems
+  IGIMIF_RIGHTMENU = $0001;
+
+  // dwType for ImmGetImeMenuItems
+  IGIMII_CMODE      = $0001;
+  IGIMII_SMODE      = $0002;
+  IGIMII_CONFIGURE  = $0004;
+  IGIMII_TOOLS      = $0008;
+  IGIMII_HELP       = $0010;
+  IGIMII_OTHER      = $0020;
+  IGIMII_INPUTTOOLS = $0040;
+
+  // fType of IMEMENUITEMINFO structure
+  IMFT_RADIOCHECK = $00001;
+  IMFT_SEPARATOR  = $00002;
+  IMFT_SUBMENU    = $00004;
+
+  // fState of IMEMENUITEMINFO structure
+  IMFS_GRAYED    = MFS_GRAYED;
+  IMFS_DISABLED  = MFS_DISABLED;
+  IMFS_CHECKED   = MFS_CHECKED;
+  IMFS_HILITE    = MFS_HILITE;
+  IMFS_ENABLED   = MFS_ENABLED;
+  IMFS_UNCHECKED = MFS_UNCHECKED;
+  IMFS_UNHILITE  = MFS_UNHILITE;
+  IMFS_DEFAULT   = MFS_DEFAULT;
+
+  // type of soft keyboard
+  // for Windows Tranditional Chinese Edition
+  SOFTKEYBOARD_TYPE_T1 = $0001;
+
+  // for Windows Simplified Chinese Edition
+  SOFTKEYBOARD_TYPE_C1 = $0002;
+
+implementation
+
+
+end.

+ 224 - 0
packages/winunits-base/src/imm_dyn.pas

@@ -0,0 +1,224 @@
+(********************************************************************* *)
+(*      imm.h - Input Method Manager definitions                       *)
+(*                                                                     *)
+(*      Copyright (c) Microsoft Corporation. All rights reserved.      *)
+(*                                                                     *)
+(* Converted to pascal by Dmitry Boyarintsev, using Chelper.           *)
+(*                                                                     *)
+(*   The dynamic interface is used to load function dynamicly.         *)
+(* It's users responsibility to check functions have been loaded       *)
+(* successfully.                                                       *)
+(*   imm_dyn and imm function names match. In oreder to be sure that   *)
+(* dynamicly loaded functions are used, always add imm_dyn to the uses *)
+(* section after imm unit.                                             *)
+(*                                                                     *)
+(********************************************************************* *)
+unit imm_dyn;
+
+{$mode delphi}
+
+interface
+
+uses
+  Windows, imm;
+
+var
+  ImmInstallIMEA : function (lpszIMEFileName, lpszLayoutText: LPCSTR): HKL; stdcall = nil;
+  ImmInstallIMEW : function (lpszIMEFileName, lpszLayoutText: LPCWSTR): HKL; stdcall = nil;
+  ImmGetDefaultIMEWnd : function (wnd: HWND): HWND; stdcall = nil;
+  ImmGetDescriptionA : function (kl: HKL; lpszDescription: LPSTR; uBufLen: UINT): UINT; stdcall = nil;
+  ImmGetDescriptionW : function (kl: HKL; lpszDescription: LPWSTR; uBufLen: UINT): UINT; stdcall = nil;
+
+  ImmGetIMEFileNameA : function (kl: HKL; lpszFileName: LPSTR; uBufLen: UINT): UINT; stdcall = nil;
+  ImmGetIMEFileNameW : function (kl: HKL; lpszFileName: LPWSTR; uBufLen: UINT): UINT; stdcall = nil;
+
+  ImmGetProperty : function (kl: HKL; fdwIndex: DWORD): DWORD; stdcall = nil;
+  ImmIsIME : function (kl: HKL): LongBool; stdcall = nil;
+  ImmSimulateHotKey : function (wnd: HWND; dwHotKeyID: DWORD): LongBool; stdcall = nil;
+
+  ImmCreateContext: function : HIMC; stdcall = nil;
+  ImmDestroyContext: function (imc: HIMC): LongBool; stdcall = nil;
+  ImmGetContext: function (wnd: HWND): HIMC; stdcall = nil;
+
+  ImmReleaseContext: function (wnd: HWND; imc: HIMC): LongBool; stdcall = nil;
+  ImmAssociateContext: function (wnd: HWND; imc: HIMC): HIMC; stdcall = nil;
+
+  ImmAssociateContextEx: function (wnd: HWND; imc: HIMC; dwFlags: DWORD): LongBool; stdcall = nil;
+  ImmGetCompositionStringA: function (imc: HIMC; dwIndex: DWORD;
+    lpBuf: LPVOID; dwBufLen: DWORD): Longword; stdcall = nil;
+  ImmGetCompositionStringW: function (imc: HIMC; dwIndex: DWORD;
+    lpBuf: LPVOID; dwBufLen: DWORD): Longword; stdcall = nil;
+
+  ImmSetCompositionStringA: function (imc: HIMC; dwIndex: DWORD; lpComp: LPVOID;
+    dwCompLen: DWORD; lpRead: LPVOID; dwReadLen: DWORD): LongBool; stdcall = nil;
+  ImmSetCompositionStringW: function (imc: HIMC; dwIndex: DWORD; lpComp: LPVOID;
+    dwCompLen: DWORD; lpRead: LPVOID; dwReadLen: DWORD): LongBool; stdcall = nil;
+
+  ImmGetCandidateListCountA: function (imc: HIMC; lpdwListCount: LPDWORD): DWORD; stdcall = nil;
+  ImmGetCandidateListCountW: function (imc: HIMC; lpdwListCount: LPDWORD): DWORD; stdcall = nil;
+
+  ImmGetCandidateListA: function (imc: HIMC; deIndex: DWORD;
+    lpCandList: LPCANDIDATELIST; dwBufLen: DWORD): DWORD; stdcall = nil;
+  ImmGetCandidateListW: function (imc: HIMC; deIndex: DWORD;
+    lpCandList: LPCANDIDATELIST; dwBufLen: DWORD): DWORD; stdcall = nil;
+
+  ImmGetGuideLineA: function (imc: HIMC; dwIndex: DWORD; lpBuf: LPSTR;
+    dwBufLen: DWORD): DWORD; stdcall = nil;
+  ImmGetGuideLineW: function (imc: HIMC; dwIndex: DWORD; lpBuf: LPWSTR;
+    dwBufLen: DWORD): DWORD; stdcall = nil;
+
+  ImmGetConversionStatus: function (imc: HIMC; lpfdwConversion, lpfdwSentence: LPDWORD): LongBool; stdcall = nil;
+  ImmSetConversionStatus: function (imc: HIMC; fdwConversion, fdwSentence: DWORD): LongBool; stdcall = nil;
+  ImmGetOpenStatus: function (imc: HIMC): LongBool; stdcall = nil;
+  ImmSetOpenStatus: function (imc: HIMC; par1: LongBool): LongBool; stdcall = nil;
+
+  ImmGetCompositionFontA: function (imc: HIMC; lplf: PLOGFONTA): LongBool; stdcall = nil;
+  ImmGetCompositionFontW: function (imc: HIMC; lplf: PLOGFONTW): LongBool; stdcall = nil;
+
+  ImmSetCompositionFontA: function (imc: HIMC; lplf: PLOGFONTA): LongBool; stdcall = nil;
+  ImmSetCompositionFontW: function (imc: HIMC; lplf: PLOGFONTW): LongBool; stdcall = nil;
+
+  ImmConfigureIMEA: function (kl: HKL; wnd: HWND; dwMode: DWORD; lpData: LPVOID): LongBool; stdcall = nil;
+  ImmConfigureIMEW: function (kl: HKL; wnd: HWND; dwMode: DWORD; lpData: LPVOID): LongBool; stdcall = nil;
+
+  ImmEscapeA: function (kl: HKL; imc: HIMC; uEscape: UINT; lpData: LPVOID): LRESULT; stdcall = nil;
+  ImmEscapeW: function (kl: HKL; imc: HIMC; uEscape: UINT; lpData: LPVOID): LRESULT; stdcall = nil;
+
+  ImmGetConversionListA: function (kl: HKL; imc: HIMC; lpSrc: LPCSTR;
+    lpDst: LPCANDIDATELIST; dwBufLen: DWORD; uFlag: UINT): DWORD; stdcall = nil;
+  ImmGetConversionListW: function (kl: HKL; imc: HIMC; lpSrc: LPCWSTR;
+    lpDst: LPCANDIDATELIST; dwBufLen: DWORD; uFlag: UINT): DWORD; stdcall = nil;
+
+  ImmNotifyIME: function (imc: HIMC; dwAction, dwIndex, dwValue: DWORD): LongBool; stdcall = nil;
+  ImmGetStatusWindowPos: function (imc: HIMC; lpptPos: LPPOINT): LongBool; stdcall = nil;
+  ImmSetStatusWindowPos: function (imc: HIMC; lpptPos: LPPOINT): LongBool; stdcall = nil;
+  ImmGetCompositionWindow: function (imc: HIMC; lpCompForm: LPCOMPOSITIONFORM): LongBool; stdcall = nil;
+  ImmSetCompositionWindow: function (imc: HIMC; lpCompForm: LPCOMPOSITIONFORM): LongBool; stdcall = nil;
+  ImmGetCandidateWindow: function (imc: HIMC; par1: DWORD; lpCandidate: LPCANDIDATEFORM): LongBool; stdcall = nil;
+  ImmSetCandidateWindow: function (imc: HIMC; lpCandidate: LPCANDIDATEFORM): LongBool; stdcall = nil;
+
+  ImmIsUIMessageA: function (wnd: HWND; msg: UINT; wPar: WPARAM; lPar: LPARAM): LongBool; stdcall = nil;
+  ImmIsUIMessageW: function (wnd: HWND; msg: UINT; wPar: WPARAM; lPar: LPARAM): LongBool; stdcall = nil;
+
+  ImmGetVirtualKey: function (wnd: HWND): UINT; stdcall = nil;
+
+  ImmRegisterWordA: function (kl: HKL; lpszReading: LPCSTR; dwStyle: DWORD; lpszRegister: LPCSTR): LongBool; stdcall = nil;
+  ImmRegisterWordW: function (kl: HKL; lpszReading: LPCWSTR; dwStyle: DWORD; lpszRegister: LPCWSTR): LongBool; stdcall = nil;
+
+  ImmUnregisterWordA: function (kl: HKL; lpszReading: LPCSTR; dwStyle: DWORD; lpszUnregister: LPCSTR): LongBool; stdcall = nil;
+
+  ImmUnregisterWordW: function (kl: HKL; lpszReading: LPCWSTR; dwStyle: DWORD; lpszUnregister: LPCWSTR): LongBool; stdcall = nil;
+
+  ImmGetRegisterWordStyleA: function (kl: HKL; nItem: UINT; lpStyleBuf: LPSTYLEBUFA): UINT; stdcall = nil;
+  ImmGetRegisterWordStyleW: function (kl: HKL; nItem: UINT; lpStyleBuf: LPSTYLEBUFW): UINT; stdcall = nil;
+
+  ImmEnumRegisterWordA: function (kl: HKL; lpfnEnumProc: REGISTERWORDENUMPROCA;
+    lpszReading: LPCSTR; dwStyle: DWORD; lpszRegister: LPCSTR; lpData: LPVOID): UINT; stdcall = nil;
+  ImmEnumRegisterWordW: function (kl: HKL; lpfnEnumProc: REGISTERWORDENUMPROCW;
+    lpszReading: LPCWSTR; dwStyle: DWORD; lpszRegister: LPCWSTR; lpData: LPVOID): UINT; stdcall = nil;
+
+  ImmDisableIME: function (idThread: DWORD): LongBool; stdcall  = nil;
+  ImmEnumInputContext: function (idThread: DWORD; lpfn: IMCENUMPROC; lParam: LPARAM)
+    : LongBool; stdcall = nil;
+  ImmGetImeMenuItemsA: function (imc: HIMC; dwFlags, dwType: DWORD;
+    lpImeParentMenu, lpImeMenu: LPIMEMENUITEMINFOA; dwSize: DWORD): DWORD; stdcall = nil;
+  ImmGetImeMenuItemsW: function (par0: HIMC; dwFlags, dwType: DWORD;
+    lpImeParentMenu, lpImeMenu: LPIMEMENUITEMINFOW; dwSize: DWORD): DWORD; stdcall = nil;
+
+  ImmDisableTextFrameService: function (idThread: DWORD): LongBool; stdcall = nil;
+
+implementation
+
+var
+  lib : THandle=0;
+
+procedure InitImm;
+begin
+  lib:=LoadLibraryA('Imm32.dll');
+  if lib=0 then Exit;
+  ImmInstallIMEA              := GetProcAddress(lib,'ImmInstallIMEA');
+  ImmInstallIMEW              := GetProcAddress(lib,'ImmInstallIMEW');
+  ImmGetDefaultIMEWnd         := GetProcAddress(lib,'ImmGetDefaultIMEWnd');
+  ImmGetDescriptionA          := GetProcAddress(lib,'ImmGetDescriptionA');
+  ImmGetDescriptionW          := GetProcAddress(lib,'ImmGetDescriptionW');
+
+  ImmGetIMEFileNameA          := GetProcAddress(lib,'ImmGetIMEFileNameA');
+  ImmGetIMEFileNameW          := GetProcAddress(lib,'ImmGetIMEFileNameW');
+
+  ImmGetProperty              := GetProcAddress(lib,'ImmGetProperty');
+  ImmIsIME                    := GetProcAddress(lib,'ImmIsIME');
+  ImmSimulateHotKey           := GetProcAddress(lib,'ImmSimulateHotKey');
+
+  ImmCreateContext            := GetProcAddress(lib,'ImmCreateContext');
+  ImmDestroyContext           := GetProcAddress(lib,'ImmDestroyContext');
+  ImmGetContext               := GetProcAddress(lib,'ImmGetContext');
+
+  ImmReleaseContext           := GetProcAddress(lib,'ImmReleaseContext');
+  ImmAssociateContext         := GetProcAddress(lib,'ImmAssociateContext');
+
+  ImmAssociateContextEx       := GetProcAddress(lib,'ImmAssociateContextEx');
+  ImmGetCompositionStringA    := GetProcAddress(lib,'ImmGetCompositionStringA');
+  ImmGetCompositionStringW    := GetProcAddress(lib,'ImmGetCompositionStringW');
+
+  ImmSetCompositionStringA    := GetProcAddress(lib,'ImmSetCompositionStringA');
+  ImmSetCompositionStringW    := GetProcAddress(lib,'ImmSetCompositionStringW');
+  ImmGetCandidateListCountA   := GetProcAddress(lib,'ImmGetCandidateListCountA');
+  ImmGetCandidateListCountW   := GetProcAddress(lib,'ImmGetCandidateListCountW');
+  ImmGetCandidateListA        := GetProcAddress(lib,'ImmGetCandidateListA');
+  ImmGetCandidateListW        := GetProcAddress(lib,'ImmGetCandidateListW');
+  ImmGetGuideLineA            := GetProcAddress(lib,'ImmGetGuideLineA');
+  ImmGetGuideLineW            := GetProcAddress(lib,'ImmGetGuideLineW');
+  ImmGetConversionStatus      := GetProcAddress(lib,'ImmGetConversionStatus');
+  ImmSetConversionStatus      := GetProcAddress(lib,'ImmSetConversionStatus');
+  ImmGetOpenStatus            := GetProcAddress(lib,'ImmGetOpenStatus');
+  ImmSetOpenStatus            := GetProcAddress(lib,'ImmSetOpenStatus');
+  ImmGetCompositionFontA      := GetProcAddress(lib,'ImmGetCompositionFontA');
+  ImmGetCompositionFontW      := GetProcAddress(lib,'ImmGetCompositionFontW');
+  ImmSetCompositionFontA      := GetProcAddress(lib,'ImmSetCompositionFontA');
+  ImmSetCompositionFontW      := GetProcAddress(lib,'ImmSetCompositionFontW');
+  ImmConfigureIMEA            := GetProcAddress(lib,'ImmConfigureIMEA');
+  ImmConfigureIMEW            := GetProcAddress(lib,'ImmConfigureIMEW');
+  ImmEscapeA                  := GetProcAddress(lib,'ImmEscapeA');
+  ImmEscapeW                  := GetProcAddress(lib,'ImmEscapeW');
+  ImmGetConversionListA       := GetProcAddress(lib,'ImmGetConversionListA');
+  ImmGetConversionListW       := GetProcAddress(lib,'ImmGetConversionListW');
+
+  ImmNotifyIME                := GetProcAddress(lib,'ImmNotifyIME');
+  ImmGetStatusWindowPos       := GetProcAddress(lib,'ImmGetStatusWindowPos');
+  ImmSetStatusWindowPos       := GetProcAddress(lib,'ImmSetStatusWindowPos');
+  ImmGetCompositionWindow     := GetProcAddress(lib,'ImmGetCompositionWindow');
+  ImmSetCompositionWindow     := GetProcAddress(lib,'ImmSetCompositionWindow');
+  ImmGetCandidateWindow       := GetProcAddress(lib,'ImmGetCandidateWindow');
+  ImmSetCandidateWindow       := GetProcAddress(lib,'ImmSetCandidateWindow');
+  ImmIsUIMessageA             := GetProcAddress(lib,'ImmIsUIMessageA');
+  ImmIsUIMessageW             := GetProcAddress(lib,'ImmIsUIMessageW');
+  ImmGetVirtualKey            := GetProcAddress(lib,'ImmGetVirtualKey');
+  ImmRegisterWordA            := GetProcAddress(lib,'ImmRegisterWordA');
+  ImmRegisterWordW            := GetProcAddress(lib,'ImmRegisterWordW');
+
+  ImmUnregisterWordA          := GetProcAddress(lib,'ImmUnregisterWordA');
+  ImmUnregisterWordW          := GetProcAddress(lib,'ImmUnregisterWordW');
+
+  ImmGetRegisterWordStyleA    := GetProcAddress(lib,'ImmGetRegisterWordStyleA');
+  ImmGetRegisterWordStyleW    := GetProcAddress(lib,'ImmGetRegisterWordStyleW');
+
+  ImmEnumRegisterWordA        := GetProcAddress(lib,'ImmEnumRegisterWordA');
+  ImmEnumRegisterWordW        := GetProcAddress(lib,'ImmEnumRegisterWordW');
+
+  ImmDisableIME               := GetProcAddress(lib,'ImmDisableIME');
+  ImmEnumInputContext         := GetProcAddress(lib,'ImmEnumInputContext');
+  ImmGetImeMenuItemsA         := GetProcAddress(lib,'ImmGetImeMenuItemsA');
+  ImmGetImeMenuItemsW         := GetProcAddress(lib,'ImmGetImeMenuItemsW');
+
+  ImmDisableTextFrameService  := GetProcAddress(lib,'ImmDisableTextFrameService');
+end;
+
+initialization
+  InitImm;
+
+finalization
+  if lib<>0 then FreeLibrary(lib);
+
+
+end.
+