Repository URL to install this package:
Version:
3.0.0 ▾
|
{******************************************************************************}
{ }
{ IME Component API interface Unit for Object Pascal }
{ }
{ Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft }
{ Corporation. All Rights Reserved. }
{ }
{ The original file is: ime.h, released June 2000. The original Pascal }
{ code is: Ime.pas, released December 2000. The initial developer of the }
{ Pascal code is Marcel van Brakel (brakelm att chello dott nl). }
{ }
{ Portions created by Marcel van Brakel are Copyright (C) 1999-2001 }
{ Marcel van Brakel. All Rights Reserved. }
{ }
{ Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
{ }
{ You may retrieve the latest version of this file at the Project JEDI }
{ APILIB home page, located at http://jedi-apilib.sourceforge.net }
{ }
{ The contents of this file are used with permission, subject to the Mozilla }
{ Public License Version 1.1 (the "License"); you may not use this file except }
{ in compliance with the License. You may obtain a copy of the License at }
{ http://www.mozilla.org/MPL/MPL-1.1.html }
{ }
{ Software distributed under the License is distributed on an "AS IS" basis, }
{ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
{ the specific language governing rights and limitations under the License. }
{ }
{ Alternatively, the contents of this file may be used under the terms of the }
{ GNU Lesser General Public License (the "LGPL License"), in which case the }
{ provisions of the LGPL License are applicable instead of those above. }
{ If you wish to allow use of your version of this file only under the terms }
{ of the LGPL License and not to allow others to use your version of this file }
{ under the MPL, indicate your decision by deleting the provisions above and }
{ replace them with the notice and other provisions required by the LGPL }
{ License. If you do not delete the provisions above, a recipient may use }
{ your version of this file under either the MPL or the LGPL License. }
{ }
{ For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
{ }
{******************************************************************************}
// $Id: JwaIme.pas,v 1.12 2007/09/14 06:48:46 marquardt Exp $
{$IFNDEF JWA_OMIT_SECTIONS}
unit JwaIme;
{$WEAKPACKAGEUNIT}
{$ENDIF JWA_OMIT_SECTIONS}
{$HPPEMIT ''}
{$HPPEMIT '#include "Ime.h"'}
{$HPPEMIT ''}
{$IFNDEF JWA_OMIT_SECTIONS}
{$I jediapilib.inc}
interface
uses
JwaWinType;
{$ENDIF JWA_OMIT_SECTIONS}
{$IFNDEF JWA_IMPLEMENTATIONSECTION}
const
IME_MAXPROCESS = 32;
{$EXTERNALSYM IME_MAXPROCESS}
function SendIMEMessageExA(hWnd: HWND; lParam: LPARAM): LRESULT; stdcall;
{$EXTERNALSYM SendIMEMessageExA}
function SendIMEMessageExW(hWnd: HWND; lParam: LPARAM): LRESULT; stdcall;
{$EXTERNALSYM SendIMEMessageExW}
function SendIMEMessageEx(hWnd: HWND; lParam: LPARAM): LRESULT; stdcall;
{$EXTERNALSYM SendIMEMessageEx}
//
// IMESTRUCT structure for SendIMEMessageEx
//
type
tagIMESTRUCT = record
fnc: UINT; // function code
wParam: WPARAM; // word parameter
wCount: UINT; // word counter
dchSource: UINT; // offset to Source from top of memory object
dchDest: UINT; // offset to Desrination from top of memory object
lParam1: LPARAM;
lParam2: LPARAM;
lParam3: LPARAM;
end;
{$EXTERNALSYM tagIMESTRUCT}
IMESTRUCT = tagIMESTRUCT;
{$EXTERNALSYM IMESTRUCT}
LPIMESTRUCT = ^IMESTRUCT;
{$EXTERNALSYM LPIMESTRUCT}
PIMESTRUCT = ^IMESTRUCT;
{$EXTERNALSYM PIMESTRUCT}
NPIMESTRUCT = ^IMESTRUCT;
{$EXTERNALSYM NPIMESTRUCT}
TImeStruct = IMESTRUCT;
const
CP_HWND = 0;
{$EXTERNALSYM CP_HWND}
CP_OPEN = 1;
{$EXTERNALSYM CP_OPEN}
CP_DIRECT = 2;
{$EXTERNALSYM CP_DIRECT}
CP_LEVEL = 3;
{$EXTERNALSYM CP_LEVEL}
//
// Virtual Keys
//
VK_DBE_ALPHANUMERIC = $0f0;
{$EXTERNALSYM VK_DBE_ALPHANUMERIC}
VK_DBE_KATAKANA = $0f1;
{$EXTERNALSYM VK_DBE_KATAKANA}
VK_DBE_HIRAGANA = $0f2;
{$EXTERNALSYM VK_DBE_HIRAGANA}
VK_DBE_SBCSCHAR = $0f3;
{$EXTERNALSYM VK_DBE_SBCSCHAR}
VK_DBE_DBCSCHAR = $0f4;
{$EXTERNALSYM VK_DBE_DBCSCHAR}
VK_DBE_ROMAN = $0f5;
{$EXTERNALSYM VK_DBE_ROMAN}
VK_DBE_NOROMAN = $0f6;
{$EXTERNALSYM VK_DBE_NOROMAN}
VK_DBE_ENTERWORDREGISTERMODE = $0f7;
{$EXTERNALSYM VK_DBE_ENTERWORDREGISTERMODE}
VK_DBE_ENTERIMECONFIGMODE = $0f8;
{$EXTERNALSYM VK_DBE_ENTERIMECONFIGMODE}
VK_DBE_FLUSHSTRING = $0f9;
{$EXTERNALSYM VK_DBE_FLUSHSTRING}
VK_DBE_CODEINPUT = $0fa;
{$EXTERNALSYM VK_DBE_CODEINPUT}
VK_DBE_NOCODEINPUT = $0fb;
{$EXTERNALSYM VK_DBE_NOCODEINPUT}
VK_DBE_DETERMINESTRING = $0fc;
{$EXTERNALSYM VK_DBE_DETERMINESTRING}
VK_DBE_ENTERDLGCONVERSIONMODE = $0fd;
{$EXTERNALSYM VK_DBE_ENTERDLGCONVERSIONMODE}
//
// switch for wParam of IME_SETCONVERSIONWINDOW
//
MCW_DEFAULT = $00;
{$EXTERNALSYM MCW_DEFAULT}
MCW_RECT = $01;
{$EXTERNALSYM MCW_RECT}
MCW_WINDOW = $02;
{$EXTERNALSYM MCW_WINDOW}
MCW_SCREEN = $04;
{$EXTERNALSYM MCW_SCREEN}
MCW_VERTICAL = $08;
{$EXTERNALSYM MCW_VERTICAL}
MCW_HIDDEN = $10;
{$EXTERNALSYM MCW_HIDDEN}
//
// switch for wParam of IME_SETCONVERSIONMODE
// and IME_GETCONVERSIONMODE
//
IME_MODE_ALPHANUMERIC = $0001;
{$EXTERNALSYM IME_MODE_ALPHANUMERIC}
{$IFDEF KOREA} // BeomOh - 9/29/92
IME_MODE_SBCSCHAR = $0002;
{$EXTERNALSYM IME_MODE_SBCSCHAR}
{$ELSE}
IME_MODE_SBCSCHAR = $0008;
{$EXTERNALSYM IME_MODE_SBCSCHAR}
{$ENDIF KOREA}
IME_MODE_KATAKANA = $0002;
{$EXTERNALSYM IME_MODE_KATAKANA}
IME_MODE_HIRAGANA = $0004;
{$EXTERNALSYM IME_MODE_HIRAGANA}
IME_MODE_HANJACONVERT = $0004;
{$EXTERNALSYM IME_MODE_HANJACONVERT}
IME_MODE_DBCSCHAR = $0010;
{$EXTERNALSYM IME_MODE_DBCSCHAR}
IME_MODE_ROMAN = $0020;
{$EXTERNALSYM IME_MODE_ROMAN}
IME_MODE_NOROMAN = $0040;
{$EXTERNALSYM IME_MODE_NOROMAN}
IME_MODE_CODEINPUT = $0080;
{$EXTERNALSYM IME_MODE_CODEINPUT}
IME_MODE_NOCODEINPUT = $0100;
{$EXTERNALSYM IME_MODE_NOCODEINPUT}
//
//
//
// IME APIs
//
IME_GETIMECAPS = $03;
{$EXTERNALSYM IME_GETIMECAPS}
IME_SETOPEN = $04;
{$EXTERNALSYM IME_SETOPEN}
IME_GETOPEN = $05;
{$EXTERNALSYM IME_GETOPEN}
IME_GETVERSION = $07;
{$EXTERNALSYM IME_GETVERSION}
IME_SETCONVERSIONWINDOW = $08;
{$EXTERNALSYM IME_SETCONVERSIONWINDOW}
IME_MOVEIMEWINDOW = IME_SETCONVERSIONWINDOW; // KOREA only
{$EXTERNALSYM IME_MOVEIMEWINDOW}
IME_SETCONVERSIONMODE = $10;
{$EXTERNALSYM IME_SETCONVERSIONMODE}
IME_GETCONVERSIONMODE = $11;
{$EXTERNALSYM IME_GETCONVERSIONMODE}
IME_SET_MODE = $12; // KOREA only
{$EXTERNALSYM IME_SET_MODE}
IME_SENDVKEY = $13;
{$EXTERNALSYM IME_SENDVKEY}
IME_ENTERWORDREGISTERMODE = $18;
{$EXTERNALSYM IME_ENTERWORDREGISTERMODE}
IME_SETCONVERSIONFONTEX = $19;
{$EXTERNALSYM IME_SETCONVERSIONFONTEX}
//
// IME_CODECONVERT subfunctions
//
IME_BANJAtoJUNJA = $13; // KOREA only
{$EXTERNALSYM IME_BANJAtoJUNJA}
IME_JUNJAtoBANJA = $14; // KOREA only
{$EXTERNALSYM IME_JUNJAtoBANJA}
IME_JOHABtoKS = $15; // KOREA only
{$EXTERNALSYM IME_JOHABtoKS}
IME_KStoJOHAB = $16; // KOREA only
{$EXTERNALSYM IME_KStoJOHAB}
//
// IME_AUTOMATA subfunctions
//
IMEA_INIT = $01; // KOREA only
{$EXTERNALSYM IMEA_INIT}
IMEA_NEXT = $02; // KOREA only
{$EXTERNALSYM IMEA_NEXT}
IMEA_PREV = $03; // KOREA only
{$EXTERNALSYM IMEA_PREV}
//
// IME_HANJAMODE subfunctions
//
IME_REQUEST_CONVERT = $01; // KOREA only
{$EXTERNALSYM IME_REQUEST_CONVERT}
IME_ENABLE_CONVERT = $02; // KOREA only
{$EXTERNALSYM IME_ENABLE_CONVERT}
//
// IME_MOVEIMEWINDOW subfunctions
//
INTERIM_WINDOW = $00; // KOREA only
{$EXTERNALSYM INTERIM_WINDOW}
MODE_WINDOW = $01; // KOREA only
{$EXTERNALSYM MODE_WINDOW}
HANJA_WINDOW = $02; // KOREA only
{$EXTERNALSYM HANJA_WINDOW}
//
// error code
//
IME_RS_ERROR = $01; // genetal error
{$EXTERNALSYM IME_RS_ERROR}
IME_RS_NOIME = $02; // IME is not installed
{$EXTERNALSYM IME_RS_NOIME}
IME_RS_TOOLONG = $05; // given string is too long
{$EXTERNALSYM IME_RS_TOOLONG}
IME_RS_ILLEGAL = $06; // illegal charactor(s) is string
{$EXTERNALSYM IME_RS_ILLEGAL}
IME_RS_NOTFOUND = $07; // no (more) candidate
{$EXTERNALSYM IME_RS_NOTFOUND}
IME_RS_NOROOM = $0a; // no disk/memory space
{$EXTERNALSYM IME_RS_NOROOM}
IME_RS_DISKERROR = $0e; // disk I/O error
{$EXTERNALSYM IME_RS_DISKERROR}
IME_RS_INVALID = $11; // Win3.1/NT
{$EXTERNALSYM IME_RS_INVALID}
IME_RS_NEST = $12; // called nested
{$EXTERNALSYM IME_RS_NEST}
IME_RS_SYSTEMMODAL = $13; // called when system mode
{$EXTERNALSYM IME_RS_SYSTEMMODAL}
//
// report messge from IME to WinApps
//
WM_IME_REPORT = $0280;
{$EXTERNALSYM WM_IME_REPORT}
//
// report message parameter for WM_IME_REPORT
//
IR_STRINGSTART = $100;
{$EXTERNALSYM IR_STRINGSTART}
IR_STRINGEND = $101;
{$EXTERNALSYM IR_STRINGEND}
IR_OPENCONVERT = $120;
{$EXTERNALSYM IR_OPENCONVERT}
IR_CHANGECONVERT = $121;
{$EXTERNALSYM IR_CHANGECONVERT}
IR_CLOSECONVERT = $122;
{$EXTERNALSYM IR_CLOSECONVERT}
IR_FULLCONVERT = $123;
{$EXTERNALSYM IR_FULLCONVERT}
IR_IMESELECT = $130;
{$EXTERNALSYM IR_IMESELECT}
IR_STRING = $140;
{$EXTERNALSYM IR_STRING}
IR_DBCSCHAR = $160;
{$EXTERNALSYM IR_DBCSCHAR}
IR_UNDETERMINE = $170;
{$EXTERNALSYM IR_UNDETERMINE}
IR_STRINGEX = $180; // New for 3.1
{$EXTERNALSYM IR_STRINGEX}
IR_MODEINFO = $190;
{$EXTERNALSYM IR_MODEINFO}
//#define WM_CONVERTREQUESTEX 0x0109
WM_WNT_CONVERTREQUESTEX = $0109; // WM_CONVERTREQUESTEX: 109 for NT, 108 for OT
{$EXTERNALSYM WM_WNT_CONVERTREQUESTEX}
WM_CONVERTREQUEST = $010A;
{$EXTERNALSYM WM_CONVERTREQUEST}
WM_CONVERTRESULT = $010B;
{$EXTERNALSYM WM_CONVERTRESULT}
WM_INTERIM = $010C;
{$EXTERNALSYM WM_INTERIM}
WM_IMEKEYDOWN = $290;
{$EXTERNALSYM WM_IMEKEYDOWN}
WM_IMEKEYUP = $291;
{$EXTERNALSYM WM_IMEKEYUP}
//
// UNDETERMINESTRING structure for IR_UNDETERMINE
//
type
tagUNDETERMINESTRUCT = record
dwSize: DWORD;
uDefIMESize: UINT;
uDefIMEPos: UINT;
uUndetTextLen: UINT;
uUndetTextPos: UINT;
uUndetAttrPos: UINT;
uCursorPos: UINT;
uDeltaStart: UINT;
uDetermineTextLen: UINT;
uDetermineTextPos: UINT;
uDetermineDelimPos: UINT;
uYomiTextLen: UINT;
uYomiTextPos: UINT;
uYomiDelimPos: UINT;
end;
{$EXTERNALSYM tagUNDETERMINESTRUCT}
UNDETERMINESTRUCT = tagUNDETERMINESTRUCT;
{$EXTERNALSYM UNDETERMINESTRUCT}
LPUNDETERMINESTRUCT = ^UNDETERMINESTRUCT;
{$EXTERNALSYM LPUNDETERMINESTRUCT}
PUNDETERMINESTRUCT = ^UNDETERMINESTRUCT;
{$EXTERNALSYM PUNDETERMINESTRUCT}
NPUNDETERMINESTRUCT = ^UNDETERMINESTRUCT;
{$EXTERNALSYM NPUNDETERMINESTRUCT}
TUndetermineStruct = UNDETERMINESTRUCT;
tagSTRINGEXSTRUCT = record
dwSize: DWORD;
uDeterminePos: UINT;
uDetermineDelimPos: UINT;
uYomiPos: UINT;
uYomiDelimPos: UINT;
end;
{$EXTERNALSYM tagSTRINGEXSTRUCT}
STRINGEXSTRUCT = tagSTRINGEXSTRUCT;
{$EXTERNALSYM STRINGEXSTRUCT}
LPSTRINGEXSTRUCT = ^STRINGEXSTRUCT;
{$EXTERNALSYM LPSTRINGEXSTRUCT}
PSTRINGEXSTRUCT = ^STRINGEXSTRUCT;
{$EXTERNALSYM PSTRINGEXSTRUCT}
NPSTRINGEXSTRUCT = ^STRINGEXSTRUCT;
{$EXTERNALSYM NPSTRINGEXSTRUCT}
TStringexStruct = STRINGEXSTRUCT;
{$ENDIF JWA_IMPLEMENTATIONSECTION}
{$IFNDEF JWA_OMIT_SECTIONS}
implementation
//uses ...
{$ENDIF JWA_OMIT_SECTIONS}
{$IFNDEF JWA_INTERFACESECTION}
{$IFNDEF JWA_INCLUDEMODE}
const
imelib = 'user32.dll';
{$IFDEF UNICODE}
AWSuffix = 'W';
{$ELSE}
AWSuffix = 'A';
{$ENDIF UNICODE}
{$ENDIF JWA_INCLUDEMODE}
{$IFDEF DYNAMIC_LINK}
var
_SendIMEMessageExA: Pointer;
function SendIMEMessageExA;
begin
GetProcedureAddress(_SendIMEMessageExA, imelib, 'SendIMEMessageExA');
asm
MOV ESP, EBP
POP EBP
JMP [_SendIMEMessageExA]
end;
end;
var
_SendIMEMessageExW: Pointer;
function SendIMEMessageExW;
begin
GetProcedureAddress(_SendIMEMessageExW, imelib, 'SendIMEMessageExW');
asm
MOV ESP, EBP
POP EBP
JMP [_SendIMEMessageExW]
end;
end;
var
_SendIMEMessageEx: Pointer;
function SendIMEMessageEx;
begin
GetProcedureAddress(_SendIMEMessageEx, imelib, 'SendIMEMessageEx' + AWSuffix);
asm
MOV ESP, EBP
POP EBP
JMP [_SendIMEMessageEx]
end;
end;
{$ELSE}
function SendIMEMessageExA; external imelib name 'SendIMEMessageExA';
function SendIMEMessageExW; external imelib name 'SendIMEMessageExW';
function SendIMEMessageEx; external imelib name 'SendIMEMessageEx' + AWSuffix;
{$ENDIF DYNAMIC_LINK}
{$ENDIF JWA_INTERFACESECTION}
{$IFNDEF JWA_OMIT_SECTIONS}
end.
{$ENDIF JWA_OMIT_SECTIONS}