فهرست منبع

+ Added extapi and imm wince api units by Vasil Maximov.
* Updated some existing wince api units by Vasil Maximov.

git-svn-id: trunk@12839 -

yury 16 سال پیش
والد
کامیت
08b551b504

+ 2 - 0
.gitattributes

@@ -4684,9 +4684,11 @@ packages/winceunits/src/connmgr.pp svneol=native#text/plain
 packages/winceunits/src/cpl.pp svneol=native#text/plain
 packages/winceunits/src/devload.pp svneol=native#text/plain
 packages/winceunits/src/devmgmt.pp svneol=native#text/plain
+packages/winceunits/src/extapi.pp svneol=native#text/plain
 packages/winceunits/src/gpsapi.pp svneol=native#text/plain
 packages/winceunits/src/gx.pp svneol=native#text/plain
 packages/winceunits/src/htmlctrl.pp svneol=native#text/plain
+packages/winceunits/src/imm.pp svneol=native#text/plain
 packages/winceunits/src/iphlpapi.pp svneol=native#text/plain
 packages/winceunits/src/keybd.pp svneol=native#text/plain
 packages/winceunits/src/mmreg.pp svneol=native#text/plain

+ 17 - 3
packages/winceunits/Makefile

@@ -1,5 +1,5 @@
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/01/10]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/03/01]
 #
 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 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-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded
@@ -275,10 +275,10 @@ ifeq ($(FULL_TARGET),arm-wince)
 override TARGET_UNITS+=comobj buildwinceunits
 endif
 ifeq ($(FULL_TARGET),i386-wince)
-override TARGET_IMPLICITUNITS+=aygshell commctrl commdlg iphlpapi notify oleauto power shellapi simmgr tapi gpsapi todaycmn windbase cesync gx winioctl msgqueue pm service htmlctrl sipapi cpl bt_api bt_sdp bthapi bthutil pimstore ril sms ws2bth keybd nled phone connmgr devload devmgmt mmreg mmsystem msacm wininet ras raserror sip projects wap tsp activex ole2 comconst
+override TARGET_IMPLICITUNITS+=aygshell commctrl commdlg iphlpapi notify oleauto power shellapi simmgr tapi gpsapi todaycmn windbase cesync gx winioctl msgqueue pm service htmlctrl sipapi cpl bt_api bt_sdp bthapi bthutil pimstore ril sms ws2bth keybd nled phone connmgr devload devmgmt mmreg mmsystem msacm wininet ras raserror sip projects wap tsp extapi imm activex ole2 comconst
 endif
 ifeq ($(FULL_TARGET),arm-wince)
-override TARGET_IMPLICITUNITS+=aygshell commctrl commdlg iphlpapi notify oleauto power shellapi simmgr tapi gpsapi todaycmn windbase cesync gx winioctl msgqueue pm service htmlctrl sipapi cpl bt_api bt_sdp bthapi bthutil pimstore ril sms ws2bth keybd nled phone connmgr devload devmgmt mmreg mmsystem msacm wininet ras raserror sip projects wap tsp activex ole2 comconst
+override TARGET_IMPLICITUNITS+=aygshell commctrl commdlg iphlpapi notify oleauto power shellapi simmgr tapi gpsapi todaycmn windbase cesync gx winioctl msgqueue pm service htmlctrl sipapi cpl bt_api bt_sdp bthapi bthutil pimstore ril sms ws2bth keybd nled phone connmgr devload devmgmt mmreg mmsystem msacm wininet ras raserror sip projects wap tsp extapi imm activex ole2 comconst
 endif
 ifeq ($(FULL_TARGET),i386-linux)
 override TARGET_RSTS+=comconst
@@ -1022,6 +1022,7 @@ endif
 ifeq ($(OS_TARGET),go32v2)
 STATICLIBPREFIX=
 SHORTSUFFIX=dos
+IMPORTLIBPREFIX=
 endif
 ifeq ($(OS_TARGET),watcom)
 STATICLIBPREFIX=
@@ -1029,6 +1030,7 @@ OEXT=.obj
 ASMEXT=.asm
 SHAREDLIBEXT=.dll
 SHORTSUFFIX=wat
+IMPORTLIBPREFIX=
 endif
 ifeq ($(OS_TARGET),linux)
 BATCHEXT=.sh
@@ -1065,6 +1067,7 @@ STATICLIBPREFIX=
 SHAREDLIBEXT=.dll
 SHORTSUFFIX=os2
 ECHO=echo
+IMPORTLIBPREFIX=
 endif
 ifeq ($(OS_TARGET),emx)
 BATCHEXT=.cmd
@@ -1073,6 +1076,7 @@ STATICLIBPREFIX=
 SHAREDLIBEXT=.dll
 SHORTSUFFIX=emx
 ECHO=echo
+IMPORTLIBPREFIX=
 endif
 ifeq ($(OS_TARGET),amiga)
 EXEEXT=
@@ -1112,17 +1116,20 @@ ifeq ($(OS_TARGET),netware)
 EXEEXT=.nlm
 STATICLIBPREFIX=
 SHORTSUFFIX=nw
+IMPORTLIBPREFIX=imp
 endif
 ifeq ($(OS_TARGET),netwlibc)
 EXEEXT=.nlm
 STATICLIBPREFIX=
 SHORTSUFFIX=nwl
+IMPORTLIBPREFIX=imp
 endif
 ifeq ($(OS_TARGET),macos)
 BATCHEXT=
 EXEEXT=
 DEBUGSYMEXT=.xcoff
 SHORTSUFFIX=mac
+IMPORTLIBPREFIX=imp
 endif
 ifeq ($(OS_TARGET),darwin)
 BATCHEXT=.sh
@@ -1149,14 +1156,17 @@ STATICLIBEXT=.a1
 SHAREDLIBEXT=.so1
 STATICLIBPREFIX=
 SHORTSUFFIX=v1
+IMPORTLIBPREFIX=
 endif
 ifeq ($(OS_TARGET),go32v2)
 STATICLIBPREFIX=
 SHORTSUFFIX=dos
+IMPORTLIBPREFIX=
 endif
 ifeq ($(OS_TARGET),watcom)
 STATICLIBPREFIX=
 SHORTSUFFIX=wat
+IMPORTLIBPREFIX=
 endif
 ifeq ($(OS_TARGET),linux)
 BATCHEXT=.sh
@@ -1203,6 +1213,7 @@ STATICLIBEXT=.ao2
 SHAREDLIBEXT=.dll
 SHORTSUFFIX=os2
 ECHO=echo
+IMPORTLIBPREFIX=
 endif
 ifeq ($(OS_TARGET),amiga)
 EXEEXT=
@@ -1263,6 +1274,7 @@ STATICLIBEXT=.a
 SHAREDLIBEXT=.nlm
 EXEEXT=.nlm
 SHORTSUFFIX=nw
+IMPORTLIBPREFIX=imp
 endif
 ifeq ($(OS_TARGET),netwlibc)
 STATICLIBPREFIX=
@@ -1274,6 +1286,7 @@ STATICLIBEXT=.a
 SHAREDLIBEXT=.nlm
 EXEEXT=.nlm
 SHORTSUFFIX=nwl
+IMPORTLIBPREFIX=imp
 endif
 ifeq ($(OS_TARGET),macos)
 BATCHEXT=
@@ -1285,6 +1298,7 @@ STATICLIBEXT=.a
 EXEEXT=
 DEBUGSYMEXT=.xcoff
 SHORTSUFFIX=mac
+IMPORTLIBPREFIX=imp
 endif
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)

+ 1 - 1
packages/winceunits/Makefile.fpc

@@ -12,7 +12,7 @@ implicitunits_wince=aygshell commctrl commdlg iphlpapi notify oleauto power shel
                     gpsapi todaycmn windbase cesync gx winioctl msgqueue pm service htmlctrl \
                     sipapi cpl bt_api bt_sdp bthapi bthutil pimstore ril sms ws2bth keybd nled \
                     phone connmgr devload devmgmt mmreg mmsystem msacm wininet ras raserror \
-                    sip projects wap tsp \
+                    sip projects wap tsp extapi imm \
                     activex ole2 comconst
 
 units_win32=rapi cesync

+ 3 - 2
packages/winceunits/src/aygshell.pp

@@ -62,8 +62,6 @@
            302    LoadHTML
            241    LoadStringEtcOver
            180    NotifyAppsOnEvent
-            24    PathAddBackslash
-            26    PathCombine
             23    PathFindExtension
             27    PathFindFileName
            160    PathFindNextComponent
@@ -487,6 +485,9 @@ type
 // functions
 //*****************************************************************************
 
+function PathAddBackslash(lpszPath:LPTSTR):LPTSTR; external UserDLLAyg name 'PathAddBackslash'; // index 24
+function PathCombine(lpszDest:LPTSTR; lpszDir:LPCTSTR; lpszFile:LPCTSTR):LPTSTR; external UserDLLAyg name 'PathCombine'; // index 26
+
 function ExitWindowsEx(uFlags:UINT; dwReserved:DWORD):WINBOOL; external UserDLLAyg name 'ExitWindowsEx';
 function SHCloseApps( dwMemSought : DWORD ): WINBOOL; external UserDLLAyg name 'SHCloseApps';
 function SHCreateMenuBar(pmbi : PSHMENUBARINFO ): WINBOOL; external UserDLLAyg name 'SHCreateMenuBar';

+ 1 - 1
packages/winceunits/src/buildwinceunits.pp

@@ -25,7 +25,7 @@ uses
   gpsapi,todaycmn,windbase,cesync,gx,winioctl,msgqueue,pm,service,htmlctrl,
   sipapi, cpl, bt_api, bt_sdp, bthapi, bthutil, pimstore, ril, sms, ws2bth,
   keybd, nled, phone, connmgr, devload, devmgmt, mmreg, mmsystem, msacm,
-  wininet, ras, raserror, sip, projects, wap, tsp;
+  wininet, ras, raserror, sip, projects, wap, tsp, extapi, imm;
 
 implementation
 

+ 433 - 0
packages/winceunits/src/extapi.pp

@@ -0,0 +1,433 @@
+{
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 2009 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.
+
+********************************************************************* }
+
+//**********************************************************************/
+//*                                                                    */
+//* EXTAPI.H - Extended TAPI header file.                              */
+//* Extended TAPI extends wireless functionality to include such       */
+//* things as asking for signal strength, choosing the cellular        */
+//* network, and more. ExTAPI works with Telephony API (TAPI) and uses */
+//* all of the TAPI line devices. ExTAPI operations are available only */
+//* if the application has successfully negotiated a device-specific   */
+//* extension version with lineNegotiateExtVersion and successfully    */
+//* obtained a line device handle with lineOpen.                       */
+//*                                                                    */
+//**********************************************************************/
+
+//
+//  Microsoft Windows Mobile 6.0 for PocketPC SDK.
+//
+
+
+unit extapi;
+
+{$CALLING cdecl}
+
+interface
+
+uses Windows, TAPI;
+
+const
+// ExTAPI LINEERR_ constants
+      LINEERR_INCORRECTPASSWORD               = $80010001;
+
+// Line barring modes
+      LINEBARRMODE_OUT                        = $00000001;
+      LINEBARRMODE_OUT_INT                    = $00000002;
+      LINEBARRMODE_OUT_INTEXTOHOME            = $00000004;
+      LINEBARRMODE_IN                         = $00000008;
+      LINEBARRMODE_IN_ROAM                    = $00000010;
+      LINEBARRMODE_IN_NOTINSIM                = $00000020;
+      LINEBARRMODE_ALL                        = $00000040;
+      LINEBARRMODE_ALL_OUT                    = $00000080;
+      LINEBARRMODE_ALL_IN                     = $00000100;
+
+// Line call-waiting states
+      LINECALLWAITING_ENABLED                 = $00000001;
+      LINECALLWAITING_DISABLED                = $00000002;
+
+// Line capability classes
+      LINECAPSCLASS_VOICE                     = $00000001;
+      LINECAPSCLASS_DATA                      = $00000002;
+      LINECAPSCLASS_FAX                       = $00000004;
+      LINECAPSCLASS_SMS                       = $00000008;
+      LINECAPSCLASS_SYNCDATA                  = $00000010;
+      LINECAPSCLASS_ASYNCDATA                 = $00000020;
+      LINECAPSCLASS_PACKET                    = $00000040;
+      LINECAPSCLASS_PAD                       = $00000080;
+      LINECAPSCLASS_ALL                       = $000000ff;
+
+// Line equipment states
+      LINEEQUIPSTATE_MINIMUM                  = $00000001;
+      LINEEQUIPSTATE_RXONLY                   = $00000002;
+      LINEEQUIPSTATE_TXONLY                   = $00000003;
+      LINEEQUIPSTATE_NOTXRX                   = $00000004;
+      LINEEQUIPSTATE_FULL                     = $00000005;
+
+// Line GPRS class types
+      LINEGPRSCLASS_GSMANDGPRS                = $00000001;
+      LINEGPRSCLASS_GSMORGPRS                 = $00000002;
+      LINEGPRSCLASS_GSMORGPRS_EXCLUSIVE       = $00000003;
+      LINEGPRSCLASS_GPRSONLY                  = $00000004;
+      LINEGPRSCLASS_GSMONLY                   = $00000005;
+
+// Line GPRS class changed types
+      LINEGPRSCLASSCHANGED_NETWORK            = $00000001;
+      LINEGPRSCLASSCHANGED_RADIO              = $00000002;
+
+// Line HSCSD air-rates
+      LINEHSCSDAIRRATE_9600                   = $00000001;
+      LINEHSCSDAIRRATE_14400                  = $00000002;
+      LINEHSCSDAIRRATE_19200                  = $00000003;
+      LINEHSCSDAIRRATE_28800                  = $00000004;
+      LINEHSCSDAIRRATE_38400                  = $00000005;
+      LINEHSCSDAIRRATE_43200                  = $00000006;
+      LINEHSCSDAIRRATE_57600                  = $00000007;
+
+// Line HSCSD codings
+      LINEHSCSDCODING_4800                    = $00000001;
+      LINEHSCSDCODING_9600                    = $00000002;
+      LINEHSCSDCODING_14400                   = $00000004;
+
+// Line mute states
+      LINEMUTESTATE_MUTEENABLED               = $00000001;
+      LINEMUTESTATE_MUTEDISABLED              = $00000002;
+
+// Line operator formats
+      LINEOPFORMAT_NONE                       = $00000000;
+      LINEOPFORMAT_ALPHASHORT                 = $00000001;
+      LINEOPFORMAT_ALPHALONG                  = $00000002;
+      LINEOPFORMAT_NUMERIC                    = $00000004;
+      LINEOPFORMAT_ACCESS_TYPE                = $00000008;
+
+// Line operator statuses
+      LINEOPSTATUS_UNKNOWN                    = $00000000;
+      LINEOPSTATUS_AVAILABLE                  = $00000001;
+      LINEOPSTATUS_CURRENT                    = $00000002;
+      LINEOPSTATUS_FORBIDDEN                  = $00000003;
+
+// Line radio presence states
+      LINERADIOPRESENCE_PRESENT               = $00000001;
+      LINERADIOPRESENCE_NOTPRESENT            = $00000002;
+
+// Line radio support states
+      LINERADIOSUPPORT_OFF                    = $00000001;
+      LINERADIOSUPPORT_ON                     = $00000002;
+      LINERADIOSUPPORT_UNKNOWN                = $00000003;
+
+// Line register modes
+      LINEREGMODE_AUTOMATIC                   = $00000001;
+      LINEREGMODE_MANUAL                      = $00000002;
+      LINEREGMODE_MANAUTO                     = $00000003;
+
+// Line register status
+      LINEREGSTATUS_UNKNOWN                   = $00000001;
+      LINEREGSTATUS_DENIED                    = $00000002;
+      LINEREGSTATUS_UNREGISTERED              = $00000003;
+      LINEREGSTATUS_ATTEMPTING                = $00000004;
+      LINEREGSTATUS_HOME                      = $00000005;
+      LINEREGSTATUS_ROAM                      = $00000006;
+      LINEREGSTATUS_DIGITAL                   = $00000007;
+      LINEREGSTATUS_ANALOG                    = $00000008;
+
+// Line send caller-ID states
+      LINESENDCALLERID_ENABLED                = $00000001;
+      LINESENDCALLERID_DISABLED               = $00000002;
+
+// Line system types, CDMA
+      LINESYSTEMTYPE_NONE                     = $00000000;
+      LINESYSTEMTYPE_IS95A                    = $00000001;
+      LINESYSTEMTYPE_IS95B                    = $00000002;
+      LINESYSTEMTYPE_1XRTTPACKET              = $00000004;
+// Line system types, GSM
+      LINESYSTEMTYPE_GSM                      = $00000008;
+      LINESYSTEMTYPE_GPRS                     = $00000010;
+// Line system types, GSM, CDMA, UMTS, HSDPA
+      LINESYSTEMTYPE_EDGE                     = $00000020;
+      LINESYSTEMTYPE_1XEVDOPACKET             = $00000040;
+      LINESYSTEMTYPE_1XEVDVPACKET             = $00000080;
+      LINESYSTEMTYPE_UMTS                     = $00000100;
+      LINESYSTEMTYPE_HSDPA                    = $00000200;
+
+// Line USSD flags
+      LINEUSSDFLAG_ACTIONREQUIRED             = $00000001;
+      LINEUSSDFLAG_ACTIONNOTNEEDED            = $00000002;
+      LINEUSSDFLAG_TERMINATED                 = $00000004;
+      LINEUSSDFLAG_OTHERCLIENTRESPONDED       = $00000008;
+      LINEUSSDFLAG_UNSUPPORTED                = $00000010;
+      LINEUSSDFLAG_TIMEOUT                    = $00000020;
+      LINEUSSDFLAG_ENDSESSION                 = $00000040;
+
+// Special LINEOPERATOR index values
+      LINEOPERATOR_USEFIRSTAVAILABLEINDEX     = -1;
+
+// Line operator statuses
+      LINEACCESSTYPE_UNKNOWN                  = $00000000;
+      LINEACCESSTYPE_UMTS                     = $00000001;
+      LINEACCESSTYPE_GSM                      = $00000002;
+      LINEACCESSTYPE_GSM_COMPACT              = $00000003;
+
+// Maximum string lengths
+      MAX_LENGTH_OPERATOR_LONG                = 32;
+      MAX_LENGTH_OPERATOR_SHORT               = 16;
+      MAX_LENGTH_OPERATOR_NUMERIC             = 16;
+
+
+// LINE_DEVSPECIFIC message types
+      LINE_EQUIPSTATECHANGE                   = $00000100;
+    // dwParam1 = LINE_EQUIPSTATECHANGE
+    // dwParam2 = One of the LINEEQUIPSTATE_* constants
+    // dwParam3 = One of the LINERADIOSUPPORT_* constants
+
+      LINE_GPRSCLASS                          = $00000101;
+    // dwParam1 = LINE_GPRSCLASS
+    // dwParam2 = One of the LINEGPRSCLASS_* constants
+    // dwParam3 = One of the LINEGPRSCLASSCHANGED_* constants
+
+      LINE_GPRSREGISTERSTATE                  = $00000102;
+    // dwParam1 = LINE_GPRSREGISTERSTATE
+    // dwParam2 = One of the LINEREGSTATUS_* constants
+    // dwParam3 Unused
+
+      LINE_RADIOPRESENCE                      = $00000103;
+    // dwParam1 = LINE_RADIOPRESENCE
+    // dwParam2 = One of the LINERADIOPRESENCE_* constants
+    // dwParam3 Unused
+
+      LINE_REGISTERSTATE                      = $00000104;
+    // dwParam1 = LINE_REGISTERSTATE
+    // dwParam2 = One of the LINEREGSTATUS_* constants
+    // dwParam3 Unused
+
+      LINE_USSD                               = $00000105;
+    // dwParam1 = LINE_USSD
+    // dwParam2 = Message identifier
+    // dwParam3 = Size in bytes of message
+
+      LINE_CURRENTLINECHANGE                  = $00000106;
+    // dwParam1 = LINE_CURRENTLINECHANGE
+    // dwParam2 = New line identifier
+    // dwParam3 = New address ID
+
+      LINE_CURRENTSYSTEMCHANGE                = $00000107;
+    // dwParam1 = LINE_CURRENTSYSTEMCHANGE
+    // dwParam2 = New system coverage (LINESYSTEMTYPE_*)
+    // dwParam3 = unused
+
+// Structures
+type
+     lineoperator_tag = record
+       dwIndex:DWORD;
+       dwValidFields:DWORD;
+       dwStatus:DWORD;
+       lpszLongName:array[0..MAX_LENGTH_OPERATOR_LONG-1] of TCHAR;
+       lpszShortName:array[0..MAX_LENGTH_OPERATOR_SHORT-1] of TCHAR;
+       lpszNumName:array[0..MAX_LENGTH_OPERATOR_NUMERIC-1] of TCHAR;
+     end;
+     LINEOPERATOR = lineoperator_tag;
+     LPLINEOPERATOR = ^lineoperator_tag;
+
+     lineoperatorex_tag = record
+       cbSize:DWORD;
+       dwIndex:DWORD;
+       dwValidFields:DWORD;
+       dwStatus:DWORD;
+       lpszLongName:array[0..MAX_LENGTH_OPERATOR_LONG-1] of TCHAR;
+       lpszShortName:array[0..MAX_LENGTH_OPERATOR_SHORT-1] of TCHAR;
+       lpszNumName:array[0..MAX_LENGTH_OPERATOR_NUMERIC-1] of TCHAR;
+       dwAccessType:DWORD;
+     end;
+     LINEOPERATOREX = lineoperatorex_tag;
+     LPLINEOPERATOREX = ^lineoperatorex_tag;
+
+     lineoperatorstatus_tag = record
+       dwTotalSize:DWORD;
+       dwNeededSize:DWORD;
+       dwUsedSize:DWORD;
+       dwPreferredCount:DWORD;
+       dwPreferredSize:DWORD;
+       dwPreferredOffset:DWORD;
+       dwAvailableCount:DWORD;
+       dwAvailableSize:DWORD;
+       dwAvailableOffset:DWORD;
+     end;
+     LINEOPERATORSTATUS = lineoperatorstatus_tag;
+     LPLINEOPERATORSTATUS = ^lineoperatorstatus_tag;
+
+     linegeneralinfo_tag = record
+       dwTotalSize:DWORD;
+       dwNeededSize:DWORD;
+       dwUsedSize:DWORD;
+       dwManufacturerSize:DWORD;
+       dwManufacturerOffset:DWORD;
+       dwModelSize:DWORD;
+       dwModelOffset:DWORD;
+       dwRevisionSize:DWORD;
+       dwRevisionOffset:DWORD;
+       dwSerialNumberSize:DWORD;
+       dwSerialNumberOffset:DWORD;
+       dwSubscriberNumberSize:DWORD;
+       dwSubscriberNumberOffset:DWORD;
+     end;
+     LINEGENERALINFO = linegeneralinfo_tag;
+     LPLINEGENERALINFO = ^linegeneralinfo_tag;
+
+// Functions
+const
+      ExTapiDLL = 'cellcore.dll';
+
+function lineGetCallBarringCaps(hLine:HLINE;
+                                lpdwModes:LPDWORD;
+                                lpdwClasses:LPDWORD):LONG; external ExTapiDLL name 'lineGetCallBarringCaps';
+
+function lineGetCallBarringState(hLine:HLINE;
+                                 dwMode:DWORD;
+                                 lpdwClasses:LPDWORD;
+                                 lpszPassword:LPCTSTR):LONG; external ExTapiDLL name 'lineGetCallBarringState';
+
+function lineGetCallWaitingCaps(hLine:HLINE;
+                                lpdwClasses:LPDWORD):LONG; external ExTapiDLL name 'lineGetCallWaitingCaps';
+
+function lineGetCallWaitingState(hLine:HLINE;
+                                 lpdwClasses:LPDWORD):LONG; external ExTapiDLL name 'lineGetCallWaitingState';
+
+function lineGetCurrentAddressID(hLine:HLINE;
+                                 lpdwAddressID:LPDWORD):LONG; external ExTapiDLL name 'lineGetCurrentAddressID';
+
+function lineGetCurrentHSCSDStatus(hLine:HLINE;
+                                   lpdwChannelsIn:LPDWORD;
+                                   lpdwChannelsOut:LPDWORD;
+                                   lpdwChannelCoding:LPDWORD;
+                                   lpdwAirInterfaceRate:LPDWORD):LONG; external ExTapiDLL name 'lineGetCurrentHSCSDStatus';
+
+function lineGetCurrentOperator(hLine:HLINE;
+                                lpCurrentOperator:LPLINEOPERATOR):LONG; external ExTapiDLL name 'lineGetCurrentOperator';
+
+function lineGetCurrentOperatorEx(hLine:HLINE;
+                                  lpCurrentOperatorEx:LPLINEOPERATOREX):LONG; external ExTapiDLL name 'lineGetCurrentOperatorEx';
+
+function lineGetCurrentSystemType(hLine:HLINE;
+                                  lpdwCurrentSystemType:LPDWORD):LONG; external ExTapiDLL name 'lineGetCurrentSystemType';
+
+function lineGetEquipmentState(hLine:HLINE;
+                               lpdwState:LPDWORD;
+                               lpdwRadioSupport:LPDWORD):LONG; external ExTapiDLL name 'lineGetEquipmentState';
+
+function lineGetGeneralInfo(hLine:HLINE;
+                            lpLineGeneralInfo:LPLINEGENERALINFO):LONG; external ExTapiDLL name 'lineGetGeneralInfo';
+
+function lineGetGPRSClass(hLine:HLINE;
+                          lpdwClass:LPDWORD):LONG; external ExTapiDLL name 'lineGetGPRSClass';
+
+function lineGetHSCSDCaps(hLine:HLINE;
+                          lpdwClass:LPDWORD;
+                          lpdwChannelsIn:LPDWORD;
+                          lpdwChannelsOut:LPDWORD;
+                          lpdwChannelsSum:LPDWORD;
+                          lpdwChannelCodings:LPDWORD):LONG; external ExTapiDLL name 'lineGetHSCSDCaps';
+
+function lineGetHSCSDState(hLine:HLINE;
+                           lpdwChannelsIn:LPDWORD;
+                           lpdwMaxChannelsIn:LPDWORD;
+                           lpdwChannelCodings:LPDWORD;
+                           lpdwAirInterfaceRate:LPDWORD):LONG; external ExTapiDLL name 'lineGetHSCSDState';
+
+function lineGetMuteState(hLine:HLINE;
+                          lpdwState:LPDWORD):LONG; external ExTapiDLL name 'lineGetMuteState';
+
+function lineGetNumberCalls(hLine:HLINE;
+                            lpdwNumActiveCalls:LPDWORD;
+                            lpdwNumOnHoldCalls:LPDWORD;
+                            lpdwNumOnHoldPendCalls:LPDWORD):LONG; external ExTapiDLL name 'lineGetNumberCalls';
+
+function lineGetOperatorStatus(hLine:HLINE;
+                               lpOperatorStatus:LPLINEOPERATORSTATUS):LONG; external ExTapiDLL name 'lineGetOperatorStatus';
+
+function lineGetOperatorStatusEx(hLine:HLINE;
+                                 lpOperatorStatus:LPLINEOPERATORSTATUS):LONG; external ExTapiDLL name 'lineGetOperatorStatusEx';
+
+function lineGetRadioPresence(hLine:HLINE;
+                              lpdwRadioPresence:LPDWORD):LONG; external ExTapiDLL name 'lineGetRadioPresence';
+
+function lineGetRegisterStatus(hLine:HLINE;
+                               lpdwRegisterStatus:LPDWORD):LONG; external ExTapiDLL name 'lineGetRegisterStatus';
+
+function lineGetSendCallerIDState(hLine:HLINE;
+                                  lpdwState:LPDWORD):LONG; external ExTapiDLL name 'lineGetSendCallerIDState';
+
+function lineGetUSSD(hLine:HLINE;
+                     dwID:DWORD;
+                     lpbUSSD:LPBYTE;
+                     dwUSSDSize:DWORD;
+                     lpdwFlags:LPDWORD):LONG; external ExTapiDLL name 'lineGetUSSD';
+
+function lineRegister(hLine:HLINE;
+                      dwRegisterMode:DWORD;
+                      lpszOperator:LPCTSTR;
+                      dwOperatorFormat:DWORD):LONG; external ExTapiDLL name 'lineRegister';
+
+function lineRegisterEx(hLine:HLINE;
+                        dwRegisterMode:DWORD;
+                        lpOperatorEx:LPLINEOPERATOREX):LONG; external ExTapiDLL name 'lineRegisterEx';
+
+function lineSendUSSD(hLine:HLINE;
+                      lpbUSSD:LPBYTE;
+                      dwUSSDSize:DWORD;
+                      dwFlags:DWORD):LONG; external ExTapiDLL name 'lineSendUSSD';
+
+function lineSetCallBarringPassword(hLine:HLINE;
+                                    dwMode:DWORD;
+                                    lpszOldPassword:LPCTSTR;
+                                    lpszNewPassword:LPCTSTR):LONG; external ExTapiDLL name 'lineSetCallBarringPassword';
+
+function lineSetCallBarringState(hLine:HLINE;
+                                 dwMode:DWORD;
+                                 dwClasses:DWORD;
+                                 lpszPassword:LPCTSTR):LONG; external ExTapiDLL name 'lineSetCallBarringState';
+
+function lineSetCallWaitingState(hLine:HLINE;
+                                 dwClasses:DWORD;
+                                 dwState:DWORD):LONG; external ExTapiDLL name 'lineSetCallWaitingState';
+
+function lineSetCurrentAddressID(hLine:HLINE;
+                                 dwAddressID:DWORD):LONG; external ExTapiDLL name 'lineSetCurrentAddressID';
+
+function lineSetEquipmentState(hLine:HLINE;
+                               dwState:DWORD):LONG; external ExTapiDLL name 'lineSetEquipmentState';
+
+function lineSetGPRSClass(hLine:HLINE;
+                          dwClass:DWORD):LONG; external ExTapiDLL name 'lineSetGPRSClass';
+
+function lineSetHSCSDState(hLine:HLINE;
+                           dwChannelsIn:DWORD;
+                           dwMaxChannelsIn:DWORD;
+                           dwChannelCodings:DWORD;
+                           dwAirInterfaceRate:DWORD):LONG; external ExTapiDLL name 'lineSetHSCSDState';
+
+function lineSetMuteState(hLine:HLINE;
+                          dwState:DWORD):LONG; external ExTapiDLL name 'lineSetMuteState';
+
+function lineSetSendCallerIDState(hLine:HLINE;
+                                  dwState:DWORD):LONG; external ExTapiDLL name 'lineSetSendCallerIDState';
+
+function lineSetPreferredOperator(hLine:HLINE;
+                                  lpOperator:LPLINEOPERATOR):LONG; external ExTapiDLL name 'lineSetPreferredOperator';
+
+function lineSetPreferredOperatorEx(hLine:HLINE;
+                                    lpOperatorEx:LPLINEOPERATOREX):LONG; external ExTapiDLL name 'lineSetPreferredOperatorEx';
+
+function lineUnregister(hLine:HLINE):LONG; external ExTapiDLL name 'lineUnregister';
+
+implementation
+
+end.

+ 1384 - 0
packages/winceunits/src/imm.pp

@@ -0,0 +1,1384 @@
+{
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 2009 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.
+
+********************************************************************* }
+
+//**********************************************************************/
+//*                                                                    */
+//*      IMM.H - Input Method Manager definitions                      */
+//*                                                                    */
+//**********************************************************************/
+
+//
+//  Microsoft Windows Mobile 6.0 for PocketPC SDK.
+//
+
+unit imm;
+
+{$CALLING cdecl}
+
+interface
+
+uses Windows;
+
+type
+     HIMC  = DWORD;
+     HIMCC = DWORD;
+
+const
+      NULLIMC	= HIMC(0);
+
+type
+     LPHKL = ^HKL;
+     LPUINT = ^UINT;
+
+
+type
+     tagCOMPOSITIONFORM = record
+       dwStyle:DWORD;
+       ptCurrentPos:POINT;
+       rcArea:RECT;
+     end;
+     COMPOSITIONFORM = tagCOMPOSITIONFORM;
+     PCOMPOSITIONFORM = ^COMPOSITIONFORM;
+     NPCOMPOSITIONFORM = ^COMPOSITIONFORM;
+     LPCOMPOSITIONFORM = ^COMPOSITIONFORM;
+
+type
+     tagCANDIDATEFORM  = record
+       dwIndex:DWORD;
+       dwStyle:DWORD;
+       ptCurrentPos:POINT;
+       rcArea:RECT;
+     end;
+     CANDIDATEFORM = tagCANDIDATEFORM;
+     PCANDIDATEFORM = ^CANDIDATEFORM;
+     NPCANDIDATEFORM = ^CANDIDATEFORM;
+     LPCANDIDATEFORM = ^CANDIDATEFORM;
+
+
+type
+     tagCANDIDATELIST = record
+       dwSize:DWORD;
+       dwStyle:DWORD;
+       dwCount:DWORD;
+       dwSelection:DWORD;
+       dwPageStart:DWORD;
+       dwPageSize:DWORD;
+       dwOffset:array[0..0] of DWORD;
+     end;
+     CANDIDATELIST = tagCANDIDATELIST;
+     PCANDIDATELIST = ^CANDIDATELIST;
+     NPCANDIDATELIST = ^CANDIDATELIST;
+     LPCANDIDATELIST = ^CANDIDATELIST;
+
+type
+     tagREGISTERWORDA = record
+       lpReading:LPSTR;
+       lpWord:LPSTR;
+     end;
+     REGISTERWORDA = tagREGISTERWORDA;
+     PREGISTERWORDA = ^REGISTERWORDA;
+     NPREGISTERWORDA = ^REGISTERWORDA;
+     LPREGISTERWORDA = ^REGISTERWORDA;
+
+type
+     tagREGISTERWORDW = record
+       lpReading:LPWSTR;
+       lpWord:LPWSTR;
+     end;
+     REGISTERWORDW = tagREGISTERWORDW;
+     PREGISTERWORDW = ^REGISTERWORDW;
+     NPREGISTERWORDW = ^REGISTERWORDW;
+     LPREGISTERWORDW = ^REGISTERWORDW;
+
+{$IFDEF UNICODE}
+type
+     REGISTERWORD = REGISTERWORDW;
+     PREGISTERWORD = PREGISTERWORDW;
+     NPREGISTERWORD = NPREGISTERWORDW;
+     LPREGISTERWORD = LPREGISTERWORDW;
+{$ELSE UNICODE}
+type
+     REGISTERWORD = REGISTERWORDA;
+     PREGISTERWORD = PREGISTERWORDA;
+     NPREGISTERWORD = NPREGISTERWORDA;
+     LPREGISTERWORD = LPREGISTERWORDA;
+{$ENDIF UNICODE}
+
+const
+      STYLE_DESCRIPTION_SIZE  = 32;
+
+type
+     tagSTYLEBUFA = record
+       dwStyle:DWORD;
+       szDescription:array[0..STYLE_DESCRIPTION_SIZE-1] of char;
+     end;
+     STYLEBUFA = tagSTYLEBUFA;
+     PSTYLEBUFA = ^STYLEBUFA;
+     NPSTYLEBUFA = ^STYLEBUFA;
+     LPSTYLEBUFA = ^STYLEBUFA;
+
+type
+     tagSTYLEBUFW = record
+       dwStyle:DWORD;
+       szDescription:array[0..STYLE_DESCRIPTION_SIZE-1] of WCHAR;
+     end;
+     STYLEBUFW = tagSTYLEBUFW;
+     PSTYLEBUFW = ^STYLEBUFW;
+     NPSTYLEBUFW = ^STYLEBUFW;
+     LPSTYLEBUFW = ^STYLEBUFW;
+
+{$IFDEF UNICODE}
+type
+     STYLEBUF = STYLEBUFW;
+     PSTYLEBUF = PSTYLEBUFW;
+     NPSTYLEBUF = NPSTYLEBUFW;
+     LPSTYLEBUF = LPSTYLEBUFW;
+{$ELSE UNICODE}
+type
+     STYLEBUF = STYLEBUFA;
+     PSTYLEBUF = PSTYLEBUFA;
+     NPSTYLEBUF = NPSTYLEBUFA;
+     LPSTYLEBUF = LPSTYLEBUFA;
+{$ENDIF UNICODE}
+
+const
+      IMEMENUITEM_STRING_SIZE = 80;
+
+type
+     tagIMEMENUITEMINFOA = record
+       cbSize:UINT;
+       fType:UINT;
+       fState:UINT;
+       wID:UINT;
+       hbmpChecked:HBITMAP;
+       hbmpUnchecked:HBITMAP;
+       dwItemData:DWORD;
+       szString:array[0..IMEMENUITEM_STRING_SIZE-1] of char;
+       hbmpItem:HBITMAP;
+     end;
+     IMEMENUITEMINFOA = tagIMEMENUITEMINFOA;
+     PIMEMENUITEMINFOA = ^IMEMENUITEMINFOA;
+     NPIMEMENUITEMINFOA = ^IMEMENUITEMINFOA;
+     LPIMEMENUITEMINFOA = ^IMEMENUITEMINFOA;
+
+type
+     tagIMEMENUITEMINFOW = 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;
+     PIMEMENUITEMINFOW = ^IMEMENUITEMINFOW;
+     NPIMEMENUITEMINFOW = ^IMEMENUITEMINFOW;
+     LPIMEMENUITEMINFOW = ^IMEMENUITEMINFOW;
+
+{$IFDEF UNICODE}
+type
+     IMEMENUITEMINFO = IMEMENUITEMINFOW;
+     PIMEMENUITEMINFO = PIMEMENUITEMINFOW;
+     NPIMEMENUITEMINFO = NPIMEMENUITEMINFOW;
+     LPIMEMENUITEMINFO = LPIMEMENUITEMINFOW;
+{$ELSE UNICODE}
+type
+     IMEMENUITEMINFO = IMEMENUITEMINFOA;
+     PIMEMENUITEMINFO = PIMEMENUITEMINFOA;
+     NPIMEMENUITEMINFO = NPIMEMENUITEMINFOA;
+     LPIMEMENUITEMINFO = LPIMEMENUITEMINFOA;
+{$ENDIF UNICODE}
+
+type
+     tagIMECHARPOSITION = record
+       dwSize:DWORD;
+       dwCharPos:DWORD;
+       pt:POINT;
+       cLineHeight:UINT;
+       rcDocument:RECT;
+     end;
+     IMECHARPOSITION = tagIMECHARPOSITION;
+     PIMECHARPOSITION = ^IMECHARPOSITION;
+     NPIMECHARPOSITION = ^IMECHARPOSITION;
+     LPIMECHARPOSITION = ^IMECHARPOSITION;
+
+
+// prototype of IMM API
+
+const
+      ImmDLL = 'coredll.dll';
+
+{$IFNDEF WINCE}
+function ImmInstallIMEW(lpszIMEFileName:LPCWSTR; lpszLayoutText:LPCWSTR):HKL; external ImmDLL name 'ImmInstallIMEW';
+
+{$IFDEF UNICODE}
+function ImmInstallIME(lpszIMEFileName:LPCWSTR; lpszLayoutText:LPCWSTR):HKL; external ImmDLL name 'ImmInstallIMEW';
+{$ELSE UNICODE}
+function ImmInstallIME(lpszIMEFileName:LPCWSTR; lpszLayoutText:LPCWSTR):HKL; external ImmDLL name 'ImmInstallIMEA';
+{$ENDIF UNICODE}
+
+{$ENDIF WINCE}
+
+function ImmGetDefaultIMEWnd(_hwnd:HWND):HWND; external ImmDLL name 'ImmGetDefaultIMEWnd'; // 459
+
+function ImmGetDescriptionW(_hkl:HKL; lpszDescription:LPWSTR; uBufLen:UINT):UINT; external ImmDLL name 'ImmGetDescriptionW'; // 45A
+{$IFDEF UNICODE}
+function ImmGetDescription(_hkl:HKL; lpszDescription:LPWSTR; uBufLen:UINT):UINT; external ImmDLL name 'ImmGetDescriptionW';
+{$ELSE UNICODE}
+function ImmGetDescription(_hkl:HKL; lpszDescription:LPSTR; uBufLen:UINT):UINT; external ImmDLL name 'ImmGetDescriptionA';
+{$ENDIF UNICODE}
+
+function ImmGetIMEFileNameW(_hkl:HKL; lpszFileName:LPWSTR; uBufLen:UINT):UINT; external ImmDLL name 'ImmGetIMEFileNameW'; // 477
+{$IFDEF UNICODE}
+function ImmGetIMEFileName(_hkl:HKL; lpszFileName:LPWSTR; uBufLen:UINT):UINT; external ImmDLL name 'ImmGetIMEFileNameW';
+{$ELSE UNICODE}
+function ImmGetIMEFileName(_hkl:HKL; lpszFileName:LPSTR; uBufLen:UINT):UINT; external ImmDLL name 'ImmGetIMEFileNameA';
+{$ENDIF UNICODE}
+
+function ImmGetProperty(_hkl:HKL; fdwIndex:DWORD):DWORD; external ImmDLL name 'ImmGetProperty'; // 460
+
+function ImmIsIME(_hkl:HKL):BOOL; external ImmDLL name 'ImmIsIME'; // 448 
+
+function ImmSimulateHotKey(_hwnd:HWND; dwHotKeyID:DWORD):BOOL; external ImmDLL name 'ImmSimulateHotKey'; // 472
+
+function ImmCreateContext:HIMC; external ImmDLL name 'ImmCreateContext'; // 44A
+function ImmDestroyContext(_himc:HIMC):BOOL; external ImmDLL name 'ImmDestroyContext'; // 44B
+function ImmGetContext(_hwnd:HWND):HIMC; external ImmDLL name 'ImmGetContext'; // 440
+function ImmReleaseContext(_hwnd:HWND; _himc:HIMC):BOOL; external ImmDLL name 'ImmReleaseContext'; // 445
+function ImmAssociateContext(_hwnd:HWND; _himc:HIMC):HIMC; external ImmDLL name 'ImmAssociateContext'; // 44C
+function ImmAssociateContextEx(_hwnd:HWND; _himc:HIMC; dwFlags:DWORD):BOOL; external ImmDLL name 'ImmAssociateContextEx'; // 476
+
+function ImmGetCompositionStringW(_himc:HIMC; dwIndex:DWORD; lpBuf:LPVOID; dwBufLen:DWORD):LONG; external ImmDLL name 'ImmGetCompositionStringW'; // 447
+{$IFDEF UNICODE}
+function ImmGetCompositionString(_himc:HIMC; dwIndex:DWORD; lpBuf:LPVOID; dwBufLen:DWORD):LONG; external ImmDLL name 'ImmGetCompositionStringW';
+{$ELSE UNICODE}
+function ImmGetCompositionString(_himc:HIMC; dwIndex:DWORD; lpBuf:LPVOID; dwBufLen:DWORD):LONG; external ImmDLL name 'ImmGetCompositionStringA';
+{$ENDIF UNICODE}
+
+function ImmSetCompositionStringW(_himc:HIMC;
+                                  dwIndex:DWORD;
+                                  lpComp:LPCVOID;
+                                  dwCompLen:DWORD;
+                                  lpRead:LPCVOID;
+                                  dwReadLen:DWORD):BOOL; external ImmDLL name 'ImmSetCompositionStringW'; // 46B
+{$IFDEF UNICODE}
+function ImmSetCompositionString(_himc:HIMC;
+                                 dwIndex:DWORD;
+                                 lpComp:LPCVOID;
+                                 dwCompLen:DWORD;
+                                 lpRead:LPCVOID;
+                                 dwReadLen:DWORD):BOOL; external ImmDLL name 'ImmSetCompositionStringW';
+{$ELSE UNICODE}
+function ImmSetCompositionString(_himc:HIMC;
+                                 dwIndex:DWORD;
+                                 lpComp:LPCVOID;
+                                 dwCompLen:DWORD;
+                                 lpRead:LPCVOID;
+                                 dwReadLen:DWORD):BOOL; external ImmDLL name 'ImmSetCompositionStringA';
+{$ENDIF UNICODE}
+
+function ImmGetCandidateListCountW(_himc:HIMC; lpdwListCount:LPDWORD):DWORD; external ImmDLL name 'ImmGetCandidateListCountW'; // 454
+{$IFDEF UNICODE}
+function ImmGetCandidateListCount(_himc:HIMC; lpdwListCount:LPDWORD):DWORD; external ImmDLL name 'ImmGetCandidateListCountW';
+{$ELSE UNICODE}
+function ImmGetCandidateListCount(_himc:HIMC; lpdwListCount:LPDWORD):DWORD; external ImmDLL name 'ImmGetCandidateListCountA';
+{$ENDIF UNICODE}
+
+function ImmGetCandidateListW(_himc:HIMC; deIndex:DWORD; lpCandList:LPCANDIDATELIST; dwBufLen:DWORD):DWORD; external ImmDLL name 'ImmGetCandidateListW'; // 453
+{$IFDEF UNICODE}
+function ImmGetCandidateList(_himc:HIMC; deIndex:DWORD; lpCandList:LPCANDIDATELIST; dwBufLen:DWORD):DWORD; external ImmDLL name 'ImmGetCandidateListW'; 
+{$ELSE UNICODE}
+function ImmGetCandidateList(_himc:HIMC; deIndex:DWORD; lpCandList:LPCANDIDATELIST; dwBufLen:DWORD):DWORD; external ImmDLL name 'ImmGetCandidateListA';
+{$ENDIF UNICODE}
+
+function ImmGetGuideLineW(_himc:HIMC; deIndex:DWORD; lpBuf:LPWSTR; dwBufLen:DWORD):DWORD; external ImmDLL name 'ImmGetGuideLineW'; // 45B
+{$IFDEF UNICODE}
+function ImmGetGuideLine(_himc:HIMC; deIndex:DWORD; lpBuf:LPWSTR; dwBufLen:DWORD):DWORD; external ImmDLL name 'ImmGetGuideLineW';
+{$ELSE UNICODE}
+function ImmGetGuideLine(_himc:HIMC; deIndex:DWORD; lpBuf:LPSTR; dwBufLen:DWORD):DWORD; external ImmDLL name 'ImmGetGuideLineA';
+{$ENDIF UNICODE}
+
+function ImmGetConversionStatus(_himc:HIMC; lpfdwConversion:LPDWORD; lpfdwSentence:LPDWORD):BOOL; external ImmDLL name 'ImmGetConversionStatus'; // 441 ImmGetConversionStatus
+function ImmSetConversionStatus(_himc:HIMC; fdwConversion:DWORD; fdwSentence:DWORD):BOOL; external ImmDLL name 'ImmSetConversionStatus'; // 446
+function ImmGetOpenStatus(_himc:HIMC):BOOL; external ImmDLL name 'ImmGetOpenStatus'; // 45F
+function ImmSetOpenStatus(_himc:HIMC; fOpen:BOOL):BOOL; external ImmDLL name 'ImmSetOpenStatus'; // 46F
+
+function ImmGetCompositionFontW(_himc:HIMC; lplf:LPLOGFONTW):BOOL; external ImmDLL name 'ImmGetCompositionFontW'; // 456
+{$IFDEF UNICODE}
+function ImmGetCompositionFont(_himc:HIMC; lplf:LPLOGFONTW):BOOL; external ImmDLL name 'ImmGetCompositionFontW';
+{$ELSE UNICODE}
+function ImmGetCompositionFont(_himc:HIMC; lplf:LPLOGFONTA):BOOL; external ImmDLL name 'ImmGetCompositionFontA';
+{$ENDIF UNICODE}
+
+function ImmSetCompositionFontW(_himc:HIMC; lplf:LPLOGFONTW):BOOL; external ImmDLL name 'ImmSetCompositionFontW'; // 46A
+{$IFDEF UNICODE}
+function ImmSetCompositionFont(_himc:HIMC; lplf:LPLOGFONTW):BOOL; external ImmDLL name 'ImmSetCompositionFontW';
+{$ELSE UNICODE}
+function ImmSetCompositionFont(_himc:HIMC; lplf:LPLOGFONT):BOOL; external ImmDLL name 'ImmSetCompositionFontA';
+{$ENDIF UNICODE}
+
+function ImmConfigureIMEW(_hkl:HKL; _hwnd:HWND; dwMode:DWORD; lpData:LPVOID):BOOL; external ImmDLL name 'ImmConfigureIMEW'; // 44D
+{$IFDEF UNICODE}
+function ImmConfigureIME(_hkl:HKL; _hwnd:HWND; dwMode:DWORD; lpData:LPVOID):BOOL; external ImmDLL name 'ImmConfigureIMEW';
+{$ELSE UNICODE}
+function ImmConfigureIME(_hkl:HKL; _hwnd:HWND; dwMode:DWORD; lpData:LPVOID):BOOL; external ImmDLL name 'ImmConfigureIMEA';
+{$ENDIF UNICODE}
+
+function ImmEscapeW(_hkl:HKL; _himc:HIMC; uEscape:UINT; lpData:LPVOID):LRESULT; external ImmDLL name 'ImmEscapeW'; // 451
+{$IFDEF UNICODE}
+function ImmEscape(_hkl:HKL; _himc:HIMC; uEscape:UINT; lpData:LPVOID):LRESULT; external ImmDLL name 'ImmEscapeW';
+{$ELSE UNICODE}
+function ImmEscape(_hkl:HKL; _himc:HIMC; uEscape:UINT; lpData:LPVOID):LRESULT; external ImmDLL name 'ImmEscapeA';
+{$ENDIF UNICODE}
+
+function ImmGetConversionListW(_hkl:HKL;
+                               _himc:HIMC;
+                               lpSrc:LPCWSTR;
+                               lpDest:LPCANDIDATELIST;
+                               dwBufLen:DWORD;
+                               uFlag:UINT):DWORD; external ImmDLL name 'ImmGetConversionListW'; // 458
+{$IFDEF UNICODE}
+function ImmGetConversionList(_hkl:HKL;
+                              _himc:HIMC;
+                              lpSrc:LPCWSTR;
+                              lpDest:LPCANDIDATELIST;
+                              dwBufLen:DWORD;
+                              uFlag:UINT):DWORD; external ImmDLL name 'ImmGetConversionListW';
+{$ELSE UNICODE}
+function ImmGetConversionList(_hkl:HKL;
+                              _himc:HIMC;
+                              lpSrc:LPCSTR;
+                              lpDest:LPCANDIDATELIST;
+                              dwBufLen:DWORD;
+                              uFlag:UINT):DWORD; external ImmDLL name 'ImmGetConversionListA';
+{$ENDIF UNICODE}
+
+function ImmNotifyIME(_himc:HIMC; dwAction:DWORD; dwIndex:DWORD; dwValue:DWORD):BOOL; external ImmDLL name 'ImmNotifyIME'; // 442
+
+function ImmActivateLayout(hSelKL:HKL):BOOL; external ImmDLL name 'ImmActivateLayout'; // ?7BB
+
+function ImmSendNotification:BOOL; external ImmDLL name 'ImmSendNotification'; // ?7BC
+
+function ImmGetStatusWindowPos(_himc:HIMC; lpptPos:LPPOINT):BOOL; external ImmDLL name 'ImmGetStatusWindowPos'; // 471
+function ImmSetStatusWindowPos(_himc:HIMC; lpptPos:LPPOINT):BOOL; external ImmDLL name 'ImmSetStatusWindowPos'; // 470
+function ImmGetCompositionWindow(_himc:HIMC; lpCompForm:LPCOMPOSITIONFORM):BOOL; external ImmDLL name 'ImmGetCompositionWindow'; // 457
+function ImmSetCompositionWindow(_himc:HIMC; lpCompForm:LPCOMPOSITIONFORM):BOOL; external ImmDLL name 'ImmSetCompositionWindow'; // 46C
+function ImmGetCandidateWindow(_himc:HIMC; dwIndex:DWORD; lpCandidate:LPCANDIDATEFORM):BOOL; external ImmDLL name 'ImmGetCandidateWindow'; // 455
+function ImmSetCandidateWindow(_himc:HIMC; lpCandidate:LPCANDIDATEFORM):BOOL; external ImmDLL name 'ImmSetCandidateWindow'; // 469 
+
+function ImmIsUIMessageW(hWndIME:HWND; msg:UINT; wParam:WPARAM; lParam:LPARAM):BOOL; external ImmDLL name 'ImmIsUIMessageW'; // 462
+{$IFDEF UNICODE}
+function ImmIsUIMessage(hWndIME:HWND; msg:UINT; wParam:WPARAM; lParam:LPARAM):BOOL; external ImmDLL name 'ImmIsUIMessageW';
+{$ELSE UNICODE}
+function ImmIsUIMessage(hWndIME:HWND; msg:UINT; wParam:WPARAM; lParam:LPARAM):BOOL; external ImmDLL name 'ImmIsUIMessageA';
+{$ENDIF UNICODE}
+
+function ImmGetVirtualKey(_hwnd:HWND):UINT; external ImmDLL name 'ImmGetVirtualKey'; // 478
+
+type
+     REGISTERWORDENUMPROCA = function(lpszReading:LPCSTR; dwStyle:DWORD; lpszString:LPCSTR; lpData:LPVOID):longint; cdecl;
+     REGISTERWORDENUMPROCW = function(lpszReading:LPCWSTR; dwStyle:DWORD; lpszString:LPCWSTR; lpData:LPVOID):longint; cdecl;
+{$IFDEF UNICODE}
+     REGISTERWORDENUMPROC = REGISTERWORDENUMPROCW;
+{$ELSE UNICODE}
+     REGISTERWORDENUMPROC = REGISTERWORDENUMPROCA;
+{$ENDIF UNICODE}
+
+function ImmRegisterWordW(_hkl:HKL; lpszReading:LPCWSTR; dwStyle:DWORD; lpszRegister:LPCWSTR):BOOL; external ImmDLL name 'ImmRegisterWordW'; // 466
+{$IFDEF UNICODE}
+function ImmRegisterWord(_hkl:HKL; lpszReading:LPCWSTR; dwStyle:DWORD; lpszRegister:LPCWSTR):BOOL; external ImmDLL name 'ImmRegisterWordW';
+{$ELSE UNICODE}
+function ImmRegisterWord(_hkl:HKL; lpszReading:LPCSTR; dwStyle:DWORD; lpszRegister:LPCSTR):BOOL; external ImmDLL name 'ImmRegisterWordA';
+{$ENDIF UNICODE}
+
+function ImmUnregisterWordW(_hkl:HKL; lpszReading:LPCWSTR; dwStyle:DWORD; lpszUnregister:LPCWSTR):BOOL; external ImmDLL name 'ImmUnregisterWordW'; // 475 ImmUnregisterWordW
+{$IFDEF UNICODE}
+function ImmUnregisterWord(_hkl:HKL; lpszReading:LPCWSTR; dwStyle:DWORD; lpszUnregister:LPCWSTR):BOOL; external ImmDLL name 'ImmUnregisterWordW';
+{$ELSE UNICODE}
+function ImmUnregisterWord(_hkl:HKL; lpszReading:LPCSTR; dwStyle:DWORD; lpszUnregister:LPCSTR):BOOL; external ImmDLL name 'ImmUnregisterWordA';
+{$ENDIF UNICODE}
+
+function ImmGetRegisterWordStyleW(_hkl:HKL; nItem:UINT; _lpStyleBuf:LPSTYLEBUFW):UINT; external ImmDLL name 'ImmGetRegisterWordStyleW'; // 461
+{$IFDEF UNICODE}
+function ImmGetRegisterWordStyle(_hkl:HKL; nItem:UINT; _lpStyleBuf:LPSTYLEBUFW):UINT; external ImmDLL name 'ImmGetRegisterWordStyleW';
+{$ELSE UNICODE}
+function ImmGetRegisterWordStyle(_hkl:HKL; nItem:UINT; _lpStyleBuf:LPSTYLEBUFA):UINT; external ImmDLL name 'ImmGetRegisterWordStyleA';
+{$ENDIF UNICODE}
+
+function ImmEnumRegisterWordW(_hkl:HKL;
+                              lpfnEnumProc:REGISTERWORDENUMPROCW;
+                              lpszReading:LPCWSTR;
+                              dwStyle:DWORD;
+                              lpszRegister:LPCWSTR;
+                              lpData:LPVOID):UINT; external ImmDLL name 'ImmEnumRegisterWordW'; // 450
+{$IFDEF UNICODE}
+function ImmEnumRegisterWord(_hkl:HKL;
+                             lpfnEnumProc:REGISTERWORDENUMPROCW;
+                             lpszReading:LPCWSTR;
+                             dwStyle:DWORD;
+                             lpszRegister:LPCWSTR;
+                             lpData:LPVOID):UINT; external ImmDLL name 'ImmEnumRegisterWordW';
+{$ELSE UNICODE}
+function ImmEnumRegisterWord(_hkl:HKL;
+                             lpfnEnumProc:REGISTERWORDENUMPROCA;
+                             lpszReading:LPCSTR;
+                             dwStyle:DWORD;
+                             lpszRegister:LPCSTR;
+                             lpData:LPVOID):UINT; external ImmDLL name 'ImmEnumRegisterWordA';
+{$ENDIF UNICODE}
+
+function ImmDisableIME(idThread:DWORD):BOOL; external ImmDLL name 'ImmDisableIME'; // 443
+
+{$IFNDEF WINCE}
+function ImmGetImeMenuItemsA(_himc:HIMC;
+                             dwFlags:DWORD;
+                             dwType:DWORD;
+                             lpImeParentMenu:LPIMEMENUITEMINFOA;
+                             lpImeMenu:LPIMEMENUITEMINFOA;
+                             dwSize:DWORD):DWORD; external ImmDLL name 'ImmGetImeMenuItemsA';
+{$ENDIF WINCE}
+
+function ImmGetImeMenuItemsW(_himc:HIMC;
+                             dwFlags:DWORD;
+                             dwType:DWORD;
+                             lpImeParentMenu:LPIMEMENUITEMINFOW;
+                             lpImeMenu:LPIMEMENUITEMINFOW;
+                             dwSize:DWORD):DWORD; external ImmDLL name 'ImmGetImeMenuItemsW'; // 479
+{$IFDEF UNICODE}
+function ImmGetImeMenuItems(_himc:HIMC;
+                            dwFlags:DWORD;
+                            dwType:DWORD;
+                            lpImeParentMenu:LPIMEMENUITEMINFO;
+                            lpImeMenu:LPIMEMENUITEMINFO;
+                            dwSize:DWORD):DWORD; external ImmDLL name 'ImmGetImeMenuItemsW';
+{$ELSE UNICODE}
+function ImmGetImeMenuItems(_himc:HIMC;
+                            dwFlags:DWORD;
+                            dwType:DWORD;
+                            lpImeParentMenu:LPIMEMENUITEMINFO;
+                            lpImeMenu:LPIMEMENUITEMINFO;
+                            dwSize:DWORD):DWORD; external ImmDLL name 'ImmGetImeMenuItemsA';
+{$ENDIF UNICODE}
+
+
+// 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
+const
+      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;
+
+
+// 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_FIRST						                 = $10;
+      IME_CHOTKEY_IME_NONIME_TOGGLE           = $10;
+      IME_CHOTKEY_SHAPE_TOGGLE                = $11;
+      IME_CHOTKEY_SYMBOL_TOGGLE               = $12;
+      IME_CHOTKEY_LAST						                  = $2f;
+
+// Windows for Japanese Edition hot key ID from 0x30 - 0x4F
+      IME_JHOTKEY_FIRST						                 = $30;
+      IME_JHOTKEY_CLOSE_OPEN                  = $30;
+      IME_JHOTKEY_LAST						                  = $4f;
+
+// Windows for Korean Edition hot key ID from 0x50 - 0x6F
+      IME_KHOTKEY_FIRST						                 = $50;
+      IME_KHOTKEY_SHAPE_TOGGLE                = $50;
+      IME_KHOTKEY_HANJACONVERT                = $51;
+      IME_KHOTKEY_ENGLISH                     = $52;
+      IME_KHOTKEY_LAST						                  = $6f;
+
+// Windows for Traditional Chinese Edition hot key ID from 0x70 - 0x8F
+      IME_THOTKEY_FIRST						                 = $70;
+      IME_THOTKEY_IME_NONIME_TOGGLE           = $70;
+      IME_THOTKEY_SHAPE_TOGGLE                = $71;
+      IME_THOTKEY_SYMBOL_TOGGLE               = $72;
+      IME_THOTKEY_LAST						                  = $8f;
+
+// 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_HOTKEY_PRIVATE_LAST                 = $21F;
+
+
+// dwSystemInfoFlags bits
+
+// 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;
+
+
+
+// bits of fdwInit of INPUTCONTEXT
+// IME version constants
+      IMEVER_0310                     = $0003000A;
+      IMEVER_0400                     = $00040000;
+
+
+// IME property bits
+      IME_PROP_END_UNLOAD             = $00000001;
+      IME_PROP_KBD_CHAR_FIRST         = $00000002;
+      IME_PROP_IGNORE_UPKEYS          = $00000004;
+      IME_PROP_NEED_ALTKEY            = $00000008;
+      IME_PROP_NO_KEYS_ON_CLOSE       = $00000010;
+      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 property bits, anyone adding a new bit must update this
+      IME_PROP_ALL                    = $001F001F;
+
+
+// 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               = DWORD(-4);
+      IGP_PROPERTY                    = $00000004;
+      IGP_CONVERSION                  = $00000008;
+      IGP_SENTENCE                    = $0000000c;
+      IGP_UI                          = $00000010;
+      IGP_SETCOMPSTR                  = $00000014;
+      IGP_SELECT                      = $00000018;
+      IGP_PRIVATEDATASIZE				         = $0000001c;
+// last property index, anyone adding a new property index must update this
+      IGP_LAST                        = IGP_PRIVATEDATASIZE;
+
+
+// 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;
+
+
+// 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_ALPHANUMERIC          = $0000;
+      IME_CMODE_NATIVE                = $0001;
+      IME_CMODE_CHINESE               = IME_CMODE_NATIVE;
+// IME_CMODE_HANGEUL is old name of IME_CMODE_HANGUL. It will be gone eventually.
+      IME_CMODE_HANGEUL               = 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;
+      IME_CMODE_SOFTKBD               = $0080;
+      IME_CMODE_NOCONVERSION          = $0100;
+      IME_CMODE_EUDC                  = $0200;
+      IME_CMODE_SYMBOL                = $0400;
+      IME_CMODE_PASSWORD				          = $80000000;
+
+
+      IME_SMODE_NONE                  = $0000;
+      IME_SMODE_PLAURALCLAUSE         = $0001;
+      IME_SMODE_SINGLECONVERT         = $0002;
+      IME_SMODE_AUTOMATIC             = $0004;
+      IME_SMODE_PHRASEPREDICT         = $0008;
+
+
+// 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;
+
+
+// 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;
+
+
+// dialog mode of 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;
+
+
+// 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          = MF_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 Traditional Chinese Edition
+      SOFTKEYBOARD_TYPE_T1            = $0001;
+// for Windows Simplified Chinese Edition
+      SOFTKEYBOARD_TYPE_C1            = $0002;
+
+
+
+//	Windows CE immp.h merged into imm.h
+
+type
+     tagCOMPOSITIONSTRING = record
+       dwSize:DWORD;
+       dwCompReadAttrLen:DWORD;
+       dwCompReadAttrOffset:DWORD;
+       dwCompReadClauseLen:DWORD;
+       dwCompReadClauseOffset:DWORD;
+       dwCompReadStrLen:DWORD;
+       dwCompReadStrOffset:DWORD;
+       dwCompAttrLen:DWORD;
+       dwCompAttrOffset:DWORD;
+       dwCompClauseLen:DWORD;
+       dwCompClauseOffset:DWORD;
+       dwCompStrLen:DWORD;
+       dwCompStrOffset:DWORD;
+       dwCursorPos:DWORD;
+       dwDeltaStart:DWORD;
+       dwResultReadClauseLen:DWORD;
+       dwResultReadClauseOffset:DWORD;
+       dwResultReadStrLen:DWORD;
+       dwResultReadStrOffset:DWORD;
+       dwResultClauseLen:DWORD;
+       dwResultClauseOffset:DWORD;
+       dwResultStrLen:DWORD;
+       dwResultStrOffset:DWORD;
+       dwPrivateSize:DWORD;
+       dwPrivateOffset:DWORD;
+     end;
+     COMPOSITIONSTRING = tagCOMPOSITIONSTRING;
+     PCOMPOSITIONSTRING = ^tagCOMPOSITIONSTRING;
+     NPCOMPOSITIONSTRING = ^tagCOMPOSITIONSTRING;
+     LPCOMPOSITIONSTRING = ^tagCOMPOSITIONSTRING;
+
+
+type
+     tagGUIDELINE = record
+       dwSize:DWORD;
+       dwLevel:DWORD;
+       dwIndex:DWORD;
+       dwStrLen:DWORD;
+       dwStrOffset:DWORD;
+       dwPrivateSize:DWORD;
+       dwPrivateOffset:DWORD;
+     end;
+     GUIDELINE = tagGUIDELINE;
+     PGUIDELINE = ^tagGUIDELINE;
+     NPGUIDELINE = ^tagGUIDELINE;
+     LPGUIDELINE = ^tagGUIDELINE;
+
+type
+     tagRECONVERTSTRING = record
+       dwSize:DWORD;
+       dwVersion:DWORD;
+       dwStrLen:DWORD;
+       dwStrOffset:DWORD;
+       dwCompStrLen:DWORD;
+       dwCompStrOffset:DWORD;
+       dwTargetStrLen:DWORD;
+       dwTargetStrOffset:DWORD;
+     end;
+     RECONVERTSTRING = tagRECONVERTSTRING;
+     PRECONVERTSTRING = ^tagRECONVERTSTRING;
+     NPRECONVERTSTRING = ^tagRECONVERTSTRING;
+     LPRECONVERTSTRING = ^tagRECONVERTSTRING;
+
+type
+     tagCANDIDATEINFO = record
+       dwSize:DWORD;
+       dwCount:DWORD;
+       dwOffset:array[0..31] of DWORD;
+       dwPrivateSize:DWORD;
+       dwPrivateOffset:DWORD;
+     end;
+     CANDIDATEINFO = tagCANDIDATEINFO;
+     PCANDIDATEINFO = ^tagCANDIDATEINFO;
+     NPCANDIDATEINFO = ^tagCANDIDATEINFO;
+     LPCANDIDATEINFO = ^tagCANDIDATEINFO;
+
+
+type
+     INPUTCONTEXTLOGFONT = record
+       case longint of
+         0: (A:LOGFONTA);
+         1: (W:LOGFONTW);
+     end;
+     tagINPUTCONTEXT = record
+       _hwnd:HWND;
+       fOpen:BOOL;
+					  fdwClient:DWORD;		//	Windows CE addition.
+	      hwndImeInUse:HWND;	//	Windows CE addition.
+       ptStatusWndPos:POINT;
+       ptSoftKbdPos:POINT;
+       fdwConversion:DWORD;
+       fdwSentence:DWORD;
+       lfFont:INPUTCONTEXTLOGFONT;
+(*
+    union   {
+        LOGFONTA        A;
+        LOGFONTW        W;
+    } lfFont;
+*)
+       cfCompForm:COMPOSITIONFORM;
+       cfCandForm:array[0..3] of CANDIDATEFORM;
+       hCompStr:HIMCC;
+       hCandInfo:HIMCC;
+       hGuideLine:HIMCC;
+       hPrivate:HIMCC;
+       dwNumMsgBuf:DWORD;
+       hMsgBuf:HIMCC;
+       fdwInit:DWORD;
+       dwReserve:array[0..2] of DWORD;
+       uSavedVKey:UINT;
+       fChgMsg:BOOL;
+       fdwFlags:DWORD;
+       fdw31Compat:DWORD;
+       dwRefCount:DWORD;
+
+       pImeModeSaver:PVOID;
+       fdwDirty:DWORD;
+     end;
+     INPUTCONTEXT = tagINPUTCONTEXT;
+     PINPUTCONTEXT = ^tagINPUTCONTEXT;
+     NPINPUTCONTEXT = ^tagINPUTCONTEXT;
+     LPINPUTCONTEXT = ^tagINPUTCONTEXT;
+
+
+type
+     tagIMEINFO = record
+       dwPrivateDataSize:DWORD;
+       fdwProperty:DWORD;
+       fdwConversionCaps:DWORD;
+       fdwSentenceCaps:DWORD;
+       fdwUICaps:DWORD;
+       fdwSCSCaps:DWORD;
+       fdwSelectCaps:DWORD;
+     end;
+     IMEINFO = tagIMEINFO;
+     PIMEINFO = ^tagIMEINFO;
+     NPIMEINFO = ^tagIMEINFO;
+     LPIMEINFO = ^tagIMEINFO;
+
+
+type
+     tagSOFTKBDDATA = record
+       uCount:UINT;
+       wCode:array[0..0,0..255] of word;
+     end;
+     SOFTKBDDATA = tagSOFTKBDDATA;
+     PSOFTKBDDATA = ^tagSOFTKBDDATA;
+     NPSOFTKBDDATA = ^tagSOFTKBDDATA;
+     LPSOFTKBDDATA = ^tagSOFTKBDDATA;
+
+
+function ImmGetHotKey(dwHotKeyID:DWORD; lpuModifiers:LPUINT; lpuVKey:LPUINT; _lphkl:LPHKL):BOOL; external ImmDLL name 'ImmGetHotKey'; // 46E
+function ImmSetHotKey(dwHotKeyID:DWORD; uModifiers:UINT; uVKey:UINT; _hkl:HKL):BOOL; external ImmDLL name 'ImmSetHotKey'; // 46D 
+function ImmGenerateMessage(_himc:HIMC):BOOL; external ImmDLL name 'ImmGenerateMessage'; // 452 
+
+{$IFNDEF WINCE}
+function ImmRequestMessageA(HIMC, WPARAM, LPARAM):LRESULT; external ImmDLL name 'ImmRequestMessageA';
+{$ENDIF WINCE}
+function ImmRequestMessageW(_himc:HIMC; wParam:WPARAM; lParam:LPARAM):LRESULT; external ImmDLL name 'ImmRequestMessageW'; // 480
+{$IFDEF UNICODE}
+function ImmRequestMessage(_himc:HIMC; wParam:WPARAM; lParam:LPARAM):LRESULT; external ImmDLL name 'ImmRequestMessageW';
+{$ELSE UNICODE}
+function ImmRequestMessage(_himc:HIMC; wParam:WPARAM; lParam:LPARAM):LRESULT; external ImmDLL name 'ImmRequestMessageA';
+{$ENDIF UNICODE}
+
+//
+// Prototype of soft keyboard APIs
+//
+
+{$IFNDEF WINCE}
+function ImmCreateSoftKeyboard(param1:UINT; _hwnd:HWND; paran3:longint; param4:longint):HWND; external ImmDLL name 'ImmCreateSoftKeyboard';
+function ImmDestroySoftKeyboard(_hwnd:HWND):BOOL; external ImmDLL name 'ImmDestroySoftKeyboard';
+function ImmShowSoftKeyboard(_hwnd:HWND; param2:longint):BOOL; external ImmDLL name 'ImmShowSoftKeyboard';
+{$ENDIF WINCE}
+
+function ImmLockIMC(_himc:HIMC):LPINPUTCONTEXT; external ImmDLL name 'ImmLockIMC'; // 463
+function ImmUnlockIMC(_himc:HIMC):BOOL; external ImmDLL name 'ImmUnlockIMC'; // 473 
+function ImmGetIMCLockCount(_himc:HIMC):DWORD; external ImmDLL name 'ImmGetIMCLockCount'; // 45E 
+
+function ImmCreateIMCC(dwSize:DWORD):HIMCC; external ImmDLL name 'ImmCreateIMCC'; // 44E 
+function ImmDestroyIMCC(_himcc:HIMCC):HIMCC; external ImmDLL name 'ImmDestroyIMCC'; // 44F
+function ImmLockIMCC(_himcc:HIMCC):LPVOID; external ImmDLL name 'ImmLockIMCC'; // 464
+function ImmUnlockIMCC(_himcc:HIMCC):BOOL; external ImmDLL name 'ImmUnlockIMCC'; // 474
+function ImmGetIMCCLockCount(_himcc:HIMCC):DWORD; external ImmDLL name 'ImmGetIMCCLockCount'; // 45C
+function ImmReSizeIMCC(_himcc:HIMCC; dwSize:DWORD):HIMCC; external ImmDLL name 'ImmReSizeIMCC'; // 465
+function ImmGetIMCCSize(_himcc:HIMCC):DWORD; external ImmDLL name 'ImmGetIMCCSize'; // 45D
+
+
+const
+// the window extra offset
+      IMMGWL_IMC                      = 0;
+      IMMGWL_PRIVATE                  = SizeOf(LONG);
+
+
+// 0x11 - 0x20 is reserved for soft keyboard
+// wParam for WM_IME_SYSTEM
+      IMS_DESTROYWINDOW               = $0001;
+      IMS_IME31COMPATIBLE             = $0002;
+      IMS_SETOPENSTATUS               = $0003;
+      IMS_SETACTIVECONTEXT            = $0004;
+      IMS_CHANGE_SHOWSTAT             = $0005;
+      IMS_WINDOWPOS                   = $0006;
+
+      IMS_SENDIMEMSG                  = $0007;
+      IMS_SENDIMEMSGEX                = $0008;
+      IMS_SETCANDIDATEPOS             = $0009;
+      IMS_SETCOMPOSITIONFONT          = $000A;
+      IMS_SETCOMPOSITIONWINDOW        = $000B;
+      IMS_CHECKENABLE                 = $000C;
+      IMS_CONFIGUREIME                = $000D;
+      IMS_CONTROLIMEMSG               = $000E;
+      IMS_SETOPENCLOSE                = $000F;
+      IMS_ISACTIVATED                 = $0010;
+      IMS_UNLOADTHREADLAYOUT          = $0011;
+      IMS_LCHGREQUEST                 = $0012;
+      IMS_SETSOFTKBDONOFF             = $0013;
+      IMS_GETCONVERSIONMODE           = $0014;
+      IMS_IMEHELP                     = $0015;
+
+      IMS_IMENT35SENDAPPMSG           = $0016;
+      IMS_ACTIVATECONTEXT             = $0017;
+      IMS_DEACTIVATECONTEXT           = $0018;
+      IMS_ACTIVATETHREADLAYOUT        = $0019;
+      IMS_CLOSEPROPERTYWINDOW         = $001a;
+      IMS_OPENPROPERTYWINDOW          = $001b;
+
+      IMS_GETIMEMENU                  = $001c;
+      IMS_ENDIMEMENU                  = $001d;
+
+      IMS_SENDNOTIFICATION            = $001f;
+// IMS_SENDNOTIFICATION dirty bits for INPUTCONTEXT
+      IMSS_UPDATE_OPEN               	= $0001;
+      IMSS_UPDATE_CONVERSION         	= $0002;
+      IMSS_UPDATE_SENTENCE           	= $0004;
+      IMSS_INIT_OPEN                 	= $0100;
+
+// These two msgs are CE only & on desktop IMS_XXX msgs range till
+// 0x0024 - so these two msgs are defined from 0x0030.
+      IMS_SETCONVERSIONSTATUS         = $0030;
+      IMS_SETSENTENCEMODE             = $0031;
+
+// for NI_CONTEXTUPDATED
+      IMC_GETCONVERSIONMODE           = $0001;
+      IMC_SETCONVERSIONMODE           = $0002;
+      IMC_GETSENTENCEMODE             = $0003;
+      IMC_SETSENTENCEMODE             = $0004;
+      IMC_GETOPENSTATUS               = $0005;
+      IMC_SETOPENSTATUS               = $0006;
+// wParam for WM_IME_CONTROL to the soft keyboard
+      IMC_GETSOFTKBDFONT              = $0011;
+      IMC_SETSOFTKBDFONT              = $0012;
+      IMC_GETSOFTKBDPOS               = $0013;
+      IMC_SETSOFTKBDPOS               = $0014;
+      IMC_GETSOFTKBDSUBTYPE           = $0015;
+      IMC_SETSOFTKBDSUBTYPE           = $0016;
+      IMC_SETSOFTKBDDATA              = $0018;
+
+
+      NI_CONTEXTUPDATED               = $0003;
+// the return bits of ImmProcessHotKey
+      IPHK_HOTKEY                     = $0001;
+      IPHK_PROCESSBYIME               = $0002;
+      IPHK_CHECKCTRL                  = $0004;
+// NT only
+      IPHK_SKIPTHISKEY                = $0010;
+
+
+      MOD_WIN                         = $0008;
+      IME_INVALID_HOTKEY              = $ffffffff;
+      IME_SYSINFO_WINLOGON            = $0001;
+      IME_SYSINFO_WOW16               = $0002;
+      GCS_COMP                        = GCS_COMPSTR or GCS_COMPATTR or GCS_COMPCLAUSE;
+      GCS_COMPREAD                    = GCS_COMPREADSTR or GCS_COMPREADATTR or GCS_COMPREADCLAUSE;
+      GCS_RESULT                      = GCS_RESULTSTR or GCS_RESULTCLAUSE;
+      GCS_RESULTREAD                  = GCS_RESULTREADSTR or GCS_RESULTREADCLAUSE;
+      INIT_STATUSWNDPOS               = $00000001;
+      INIT_CONVERSION                 = $00000002;
+      INIT_SENTENCE                   = $00000004;
+      INIT_LOGFONT                    = $00000008;
+      INIT_COMPFORM                   = $00000010;
+      INIT_SOFTKBDPOS                 = $00000020;
+
+
+// fdw31Compat of INPUTCONTEXT
+      F31COMPAT_NOKEYTOIME     = $00000001;
+      F31COMPAT_MCWHIDDEN      = $00000002;
+      F31COMPAT_MCWVERTICAL    = $00000004;
+      F31COMPAT_CALLFROMWINNLS = $00000008;
+      F31COMPAT_SAVECTRL       = $00010000;
+      F31COMPAT_PROCESSEVENT   = $00020000;
+      F31COMPAT_ECSETCFS       = $00040000;
+
+
+// the return value of ImmGetAppIMECompatFlags
+      IMECOMPAT_UNSYNC31IMEMSG = $00000001;
+// the meaning of this bit depend on the same bit in
+// IMELinkHdr.ctCountry.fdFlags
+      IMECOMPAT_DUMMYTASK      = $00000002;
+// For Japanese and Hangeul versions, this bit on
+// indicates no dummy task is needed
+      IMECOMPAT_NODUMMYTASK    = IMECOMPAT_DUMMYTASK;
+// For Chinese and PRC versions, this bit on indicates
+// a dummy tasked is needed
+      IMECOMPAT_NEEDDUMMYTASK         = IMECOMPAT_DUMMYTASK;
+      IMECOMPAT_POSTDUMMY             = $00000004;
+      IMECOMPAT_ECNOFLUSH             = $00000008;
+      IMECOMPAT_NOINPUTLANGCHGTODLG   = $00000010;
+      IMECOMPAT_ECREDRAWPARENT        = $00000020;
+      IMECOMPAT_SENDOLDSBM            = $00000040;
+      IMECOMPAT_UNSYNC31IMEMSG2       = $00000080;
+      IMECOMPAT_NOIMEMSGINTERTASK     = $00000100;
+      IMECOMPAT_USEXWANSUNG           = $00000200;
+      IMECOMPAT_JXWFORATOK            = $00000400;
+      IMECOMPAT_NOIME                 = $00000800;
+      IMECOMPAT_NOKBDHOOK             = $00001000;
+      IMECOMPAT_APPWNDREMOVEIMEMSGS   = $00002000;
+      IMECOMPAT_LSTRCMP31COMPATIBLE   = $00004000;
+      IMECOMPAT_USEALTSTKFORSHLEXEC   = $00008000;
+      IMECOMPAT_NOVKPROCESSKEY        = $00010000;
+      IMECOMPAT_NOYIELDWMCHAR         = $00020000;
+      IMECOMPAT_SENDSC_RESTORE        = $00040000;
+      IMECOMPAT_NOSENDLANGCHG         = $00080000;
+      IMECOMPAT_FORCEUNSYNC31IMEMSG   = $00100000;
+      IMECOMPAT_CONSOLEIMEPROCESS     = $00200000;
+
+      IMGTF_CANT_SWITCH_LAYOUT        = $00000001;
+      IMGTF_CANT_UNLOAD_IME           = $00000002;
+
+      UI_CAP_SOFTKBD                  = $00010000;
+// all IME UICapability bits, anyone adding a new bit must update this mask
+      UI_CAP_ALL                      = $00010007;
+// all ImmSetCompositionString Capability bits, anyone adding a new bit must update this mask
+      SCS_CAP_ALL                     = $00000007;
+// all IME WM_IME_SELECT inheritance Capability bits, anyone adding a new bit must update this mask
+      SELECT_CAP_ALL                  = $00000003;
+      CFS_SCREEN                      = $0004;
+      CFS_VERTICAL                    = $0008;
+      CFS_HIDDEN                      = $0010;
+// all conversion mode bits, anyone adding a new bit must update this mask
+      IME_CMODE_ALL                   = $0FFF;
+// all sentence mode bits, anyone adding a new bit must update this mask
+      IME_SMODE_ALL                   = $001F;
+      IMN_SOFTKBDDESTROYED            = $0011;
+
+
+
+{$IFNDEF WINCE}
+// protype of IME APIs
+function ImeInquire(param1:LPIMEINFO; lpszUIClass:LPWSTR; dwSystemInfoFlags:DWORD):BOOL;
+function ImeConfigure(param1:HKL; param2:HWND; param3:DWORD; param4:LPVOID):BOOL;
+function ImeConversionListW(param1:HIMC; param2:LPCWSTR; param3:LPCANDIDATELIST; dwBufLen:DWORD; uFlag:UINT):DWORD;
+function ImeDestroy(param1:UINT):BOOL;
+function ImeEscape(param1:HIMC; param2:UINT; param3:LPVOID):LRESULT;
+function ImeProcessKey(param1:HIMC; param2:UINT; param3:LPARAM; param4:LPBYTE):BOOL;
+function ImeSelect(param1:HIMC; param2:BOOL):BOOL;
+function ImeSetActiveContext(param1:HIMC; param2:BOOL):BOOL;
+function ImeToAsciiEx(uVirtKey:UINT; uScaCode:UINT; lpbKeyState:LPBYTE; lpdwTransBuf:LPDWORD; fuState:UINT; _himc:HIMC):UINT;
+function NotifyIME(_himc:HIMC; param2:DWORD; param3:DWORD; param4:DWORD):BOOL;
+function ImeRegisterWord(param1:LPCWSTR; param2:DWORD; param3:LPCWSTR):BOOL;
+function ImeUnregisterWord(param1:LPCWSTR; param2:DWORD; param3:LPCWSTR):BOOL;
+function ImeGetRegisterWordStyle(nItem:UINT; param2:LPSTYLEBUF):UINT;
+function ImeEnumRegisterWord(param1:REGISTERWORDENUMPROC; param2:LPCWSTR; param3:DWORD; param4:LPCWSTR; param2:LPVOID):UINT;
+function ImeSetCompositionString(_himc:HIMC; dwIndex:DWORD; lpComp:LPCVOID; param4:DWORD; lpRead:LPCVOID; param6:DWORD):BOOL;
+function ImeGetImeMenuItems(_himc:HIMC; dwFlags:DWORD; dwType:DWORD; lpParentMenu:LPIMEMENUITEMINFO; lpMenu:LPIMEMENUITEMINFO; dwSize:DWORD):DWORD;
+{$ENDIF WINCE}
+
+
+
+//	Windows CE additions
+
+
+function ImmIsValidIMC(_himc:HIMC):BOOL; external ImmDLL name 'ImmIsValidIMC'; // ?
+
+//*****************************************
+// Messages From Parent window
+//  wParam : 0
+//  lParam : appropriate value for Message
+//*****************************************
+const
+      CLM_START       = $00001000;
+
+      CLM_SETCANDLIST    = CLM_START + 0; // lParam : LPCANDIDATELIST
+      CLM_SETWNDPOS      = CLM_START + 1; // lParam : MAKELONG(POINT)
+      CLM_GETCURSEL      = CLM_START + 2; // lParam : 0 ; return : current selection
+      CLM_GETPAGESTART   = CLM_START + 3; // lParam : 0 ; return : current page start
+
+// Internal for CANDLIST window
+//*****************************************
+// Special window styles for candidate list
+//*****************************************
+const
+      CLS_BUTTONS     = $00000001;
+      CLS_FRACTION    = $00000002;
+      CLS_ACTIVATE    = $00000004;
+      WS_NOTIFY       = $00000008;
+
+
+//*****************************************
+// Notification from Candidate list window
+//  wParam for WM_CAND_NOTIFY message
+//*****************************************
+const
+      CLN_NOTIFYCODE  = $0100;
+      CLN_DETERMINE   = CLN_NOTIFYCODE + 0;
+      CLN_SELECTION   = CLN_NOTIFYCODE + 1;
+      CLN_PAGESTART   = CLN_NOTIFYCODE + 2;
+
+
+//*****************************************
+// Structure for Globaled candidate proc
+//*****************************************
+type
+     _MYCANDLIST = record
+       ParentWnd:HWND;  // Parent window handle.
+       CandList:LPCANDIDATELIST;   // Candidate list structure.
+     end;
+     MYCANDLIST = _MYCANDLIST;
+
+
+{/*
+ * Handwriting pad specific structures
+ */}
+type
+     _tagHWXRESULT = record
+       cbCount:word;          // Number of candidates in the list
+       iSelection:word;      // Current selection
+       iPosition:word;       // cursor position
+       chCandidate:array[0..0] of TCHAR;   // The array of candidates
+     end;
+     HWXRESULT = _tagHWXRESULT;
+     PHWXRESULT = ^_tagHWXRESULT;
+
+// Internal window style
+const
+      ES_COMPWND                  = $00004000;
+
+// Internal defines and API
+const
+      WM_IME_CONTROL_EDIT         = $00001000;
+      IMC_EDIT_CONVERT            = $00000001;
+      IMC_EDIT_DETERMINE          = $00000002;
+      IMC_EDIT_CANCELCONVERT      = $00000003;
+      IMC_EDIT_GETSTATUS          = $00000004;
+      IMC_EDIT_UNDO               = $00000005;
+      IMC_EDIT_CANUNDO            = $00000006;
+      IMC_EDIT_EMPTYUNDOBUFFER    = $00000007;
+      IMC_EDIT_REPLACESEL         = $00000008;
+      IMC_EDIT_CLEARALL           = $00000009;
+      IMC_EDIT_SETIMC             = $0000000A;
+      IMC_EDIT_GETCANDIDATEPOS    = $0000000B;
+      IMC_EDIT_UPDATEPROP         = $0000000C;
+      IMC_EDIT_HALFWIDTH          = $0000000D;
+      IMC_EDIT_UPDATECLIST        = $0000000E;
+
+// Edit control is in input mode, no IME is involved
+      IMCR_INPUT                  = $0001;
+// Edit control is in conversion mode.
+      IMCR_CONVERT                = $0002;
+// Edit control is in conversion mode, the current clauses is un-converted
+// and the cursor is within current clause
+      IMCR_UNCONVERT              = $0003;
+// Edit control is in composition mode, but not in conversion mode.
+      IMCR_COMPOSITION            = $0004;
+
+// For set cursor posision on composition string ( Internal )
+      IME_ESC_SETCURSOR           = $100A;
+
+
+      SIP_QUERY_STATE             = $2000;
+      SIP_SET_STATE               = $2001;
+      SIP_STATE_HDKB              = $0001;
+      SIP_STATE_NOHDKB			         = $0002;
+
+      SIP_QUERY_RCMASK            = $3000;
+      SIP_SET_RCMASK              = $3001;
+
+      SIP_SET_OPENCANDWND			      = $5000;
+      SIP_SET_CLOSECANDWND		      = $5001;
+
+      SIP_QUERY_HALFWIDTH			      = $6000;
+      SIP_SET_HALFWIDTH			        = $6001;
+      SIP_WIDTHSETTING_HALF       = $01;
+
+      SIP_QUERY_MODE				          = $8000;
+      SIP_SET_MODE				            = $8001;
+      SIP_MODE_MINIMAL		          = $0000;
+      SIP_MODE_REDUCED		          = $0001;
+      SIP_MODE_FULL				           = $0002;
+      SIP_MODE_FULL_HIDDEN		      = $0003;
+
+      SIP_NOTIFY_FOCUS_CHANGE     = $FFFB;
+      SIP_RELEASE_STICKY_KEYS     = $FFFC;
+      SIP_CONFIG_CHANGED          = $FFFD;
+      SIP_SHOW_WARNING			         = $FFFE;
+      SIP_KILL_MENU				           = $FFFF;
+
+
+
+
+// wIndex value of ImmSIPanelState
+      SIP_QUERY_LOCATION          = $1000;
+      SIP_SET_LOCATION            = $1001;
+      SIP_INPUT_ATTRIBUTES		      = $7000;
+      SIP_INPUT_NUMERIC 			       = $00000004;
+      SIP_INPUT_ALPHANUMERIC		    = $00000008;
+      SIP_INPUT_HIRAGANA			       = $00000010;
+      SIP_INPUT_KATAKANA			       = $00000100;
+      SIP_INPUT_EVERYTHING		      = $00000000;
+      SIP_INPUT_PASSWORD          = $00000020;
+      SIP_INPUT_HALFWIDTH			      = $00000001;
+      SIP_INPUT_FULLWIDTH			      = $00000002;
+
+function ImmSIPanelState(dwCmd:UINT; pValue:LPVOID):BOOL; external ImmDLL name 'ImmSIPanelState'; // 467
+
+
+const
+// 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;
+// reserved value
+      IMR_RESERVED0x1000              = $1000;
+
+{
+#ifdef WINCEOEM
+#include <pimm.h>	// internal defines
+#endif
+}
+
+
+
+// Additional function declared in pwinuser.h from WM 6.0 Platform Builder.
+
+function ImmEnableIME(param1:DWORD):BOOL; external ImmDLL name 'ImmEnableIME'; // 444
+
+function ImmGetKeyboardLayout(dwThreadId:DWORD):HKL; external ImmDLL name 'ImmGetKeyboardLayout'; // 449
+
+implementation
+
+end.

+ 1 - 59
rtl/wince/wininc/coredll.inc

@@ -267,65 +267,7 @@
       43D ImageList_Copy
       423 ImageList_CopyDitherImage
       43E ImageList_Duplicate
-      44C ImmAssociateContext
-      476 ImmAssociateContextEx
-      44D ImmConfigureIMEW
-      44A ImmCreateContext
-      44E ImmCreateIMCC
-      44B ImmDestroyContext
-      44F ImmDestroyIMCC
-      443 ImmDisableIME
-      444 ImmEnableIME
-      450 ImmEnumRegisterWordW
-      451 ImmEscapeW
-      452 ImmGenerateMessage
-      454 ImmGetCandidateListCountW
-      453 ImmGetCandidateListW
-      455 ImmGetCandidateWindow
-      456 ImmGetCompositionFontW
-      447 ImmGetCompositionStringW
-      457 ImmGetCompositionWindow
-      440 ImmGetContext
-      458 ImmGetConversionListW
-      441 ImmGetConversionStatus
-      459 ImmGetDefaultIMEWnd
-      45A ImmGetDescriptionW
-      45B ImmGetGuideLineW
-      46E ImmGetHotKey
-      45C ImmGetIMCCLockCount
-      45D ImmGetIMCCSize
-      45E ImmGetIMCLockCount
-      477 ImmGetIMEFileNameW
-      479 ImmGetImeMenuItemsW
-      449 ImmGetKeyboardLayout
-      45F ImmGetOpenStatus
-      460 ImmGetProperty
-      461 ImmGetRegisterWordStyleW
-      471 ImmGetStatusWindowPos
-      478 ImmGetVirtualKey
-      448 ImmIsIME
-      462 ImmIsUIMessageW
-      463 ImmLockIMC
-      464 ImmLockIMCC
-      442 ImmNotifyIME
-      465 ImmReSizeIMCC
-      466 ImmRegisterWordW
-      445 ImmReleaseContext
-      480 ImmRequestMessageW
-      467 ImmSIPanelState
-      469 ImmSetCandidateWindow
-      46A ImmSetCompositionFontW
-      46B ImmSetCompositionStringW
-      46C ImmSetCompositionWindow
-      446 ImmSetConversionStatus
-      46D ImmSetHotKey
       47E ImmSetImeWndIMC
-      46F ImmSetOpenStatus
-      470 ImmSetStatusWindowPos
-      472 ImmSimulateHotKey
-      473 ImmUnlockIMC
-      474 ImmUnlockIMCC
-      475 ImmUnregisterWordW
         D InitLocale
       38C InputDebugCharW
       2F8 Int_CreateEventW
@@ -524,7 +466,6 @@
        87 StringCchVPrintfW
       387 StringCompress
       388 StringDecompress
-      49D SystemIdleTimerReset
         5 SystemMemoryLow
         4 SystemStarted
       30D THCreateSnapshot
@@ -2805,6 +2746,7 @@ function StretchDIBits(_para1:HDC; _para2:longint; _para3:longint; _para4:longin
   external KernelDLL name 'StretchDIBits';
 function SubtractRect(lprcDst:LPRECT; const lprcSrc1:RECT; const lprcSrc2:RECT):WINBOOL; external KernelDLL name 'SubtractRect';
 function SuspendThread(hThread:HANDLE):DWORD; external KernelDLL name 'SuspendThread';
+procedure SystemIdleTimerReset; external KernelDLL name 'SystemIdleTimerReset'; // 49D
 function SystemParametersInfo(uiAction:UINT; uiParam:UINT; pvParam:PVOID; fWinIni:UINT):WINBOOL; external KernelDLL name 'SystemParametersInfoW';
 function SystemParametersInfoW(uiAction:UINT; uiParam:UINT; pvParam:PVOID; fWinIni:UINT):WINBOOL; external KernelDLL name 'SystemParametersInfoW';
 function SystemTimeToFileTime(lpSystemTime:LPSYSTEMTIME; lpFileTime:LPFILETIME):WINBOOL; external KernelDLL name 'SystemTimeToFileTime';