ImeDefs.pas
上传用户:wen198501
上传日期:2013-04-01
资源大小:335k
文件大小:12k
源码类别:

输入法编程

开发平台:

Delphi

  1.  {*************************************************}
  2.  {                                                 }
  3.  {    Copyright (C) 1995-1999 Microsoft Inc.       }
  4.  {                                                 }
  5.  {    Module Name:  ImeDefs.h ->>  ImeDefs.pas     }
  6.  {                                                 }
  7.  {    Translator:  Liu_mazi@126.com, 2005-11-15    }
  8.  {                                                 }
  9.  {*************************************************}
  10. unit ImeDefs;
  11. {$I Define.Inc}
  12. interface
  13. uses Windows, Messages, ImmDev;
  14. const
  15.   NATIVE_CHARSET = GB2312_CHARSET;
  16.   // resource ID
  17. const
  18.   IDI_IME =  $0100;
  19.   IDS_STATUSERR =  $0200;
  20.   IDS_CHICHAR   =  $0201;
  21.   IDS_EUDC      =  $0202;
  22.   IDS_USRDIC_FILTER  =  $0210;
  23.   IDS_FILE_OPEN_ERR  =  $0220;
  24.   IDS_MEM_LESS_ERR   =  $0221;
  25.   IDS_SETFILE        =  $0300;
  26.   IDS_IMENAME        =  $0320;
  27.   IDS_IMEUICLASS     =  $0321;
  28.   IDS_IMECOMPCLASS   =  $0322;
  29.   IDS_IMECANDCLASS   =  $0323;
  30.   IDS_IMESTATUSCLASS =  $0324;
  31.   IDS_IMECMENUCLASS  =  $0325;
  32.   IDS_IMESOFTKEYMENUCLASS = $0326;
  33.   IDS_IMEREGNAME     =  $0327;
  34.   IDS_IMENAME_QW     =  $0328;
  35.   IDS_IMENAME_NM     =  $0329;
  36.   IDS_IMENAME_UNI    =  $0330;
  37.   IDS_WARN_OPENREG   =  $0602;
  38.   IDM_HLP    =  $0400;
  39.   IDM_OPTGUD =  $0403;
  40.   IDM_IMEGUD =  $0405;
  41.   IDM_VER    =  $0401;
  42.   IDM_PROP   =  $0402;
  43.   IDM_IME    =  $0450;
  44.   IDM_SKL1   =  $0500;
  45.   IDM_SKL2   =  $0501;
  46.   IDM_SKL3   =  $0502;
  47.   IDM_SKL4   =  $0503;
  48.   IDM_SKL5   =  $0504;
  49.   IDM_SKL6   =  $0505;
  50.   IDM_SKL7   =  $0506;
  51.   IDM_SKL8   =  $0507;
  52.   IDM_SKL9   =  $0508;
  53.   IDM_SKL10  =  $0509;
  54.   IDM_SKL11  =  $050a;
  55.   IDM_SKL12  =  $050b;
  56.   IDM_SKL13  =  $050c;
  57.   DlgPROP     =   101;
  58.   DlgUIMODE   =   102;
  59.   IDC_UIMODE1 =  1001;
  60.   IDC_UIMODE2 =  1002;
  61.   IDC_USER1   =  1003;
  62.   IDC_TRACE   =  1000;
  63.   // state of composition
  64. const
  65.   CST_INIT              =  0;
  66.   CST_INPUT             =  1;
  67.   CST_CHOOSE            =  2;
  68.   CST_SYMBOL            =  3;
  69.   CST_SOFTKB            =  4;       // not in iImeState
  70.   CST_TOGGLE_PHRASEWORD =  5;       // not in iImeState
  71.   CST_ALPHABET          =  6;       // not in iImeState
  72.   CST_ALPHANUMERIC      =  7;       // not in iImeState
  73.   CST_INVALID           =  8;       // not in iImeState
  74.   CST_INVALID_INPUT     =  9;       // not in iImeState
  75.   CST_ONLINE_CZ         =  10;
  76.   CST_CAPITAL           =  11;
  77.   // state engin
  78. const
  79.   ENGINE_COMP     =  0;
  80.   ENGINE_ASCII    =  1;
  81.   ENGINE_RESAULT  =  2;
  82.   ENGINE_CHCAND   =  3;
  83.   ENGINE_BKSPC    =  4;
  84.   ENGINE_MULTISEL =  5;
  85.   ENGINE_ESC      =  6;
  86. const
  87.   CANDPERPAGE = 9;
  88.   MAXSTRLEN       =  40;
  89.   MAXCAND         =  256;
  90.   IME_MAXCAND     =  94;
  91.   IME_XGB_MAXCAND =  190;
  92.   MAXCODE     =  12;
  93.   MAXSOFTKEYS =  48;
  94.   // set ime character
  95. const
  96.   SIC_INIT   =  0;
  97.   SIC_SAVE2  =  1;
  98.   SIC_READY  =  2;
  99.   SIC_MODIFY =  3;
  100.   SIC_SAVE1  =  4;
  101.   // Candidates 界面风格
  102. const
  103.   BOX_UI =  0;  // 多行方框
  104.   LIN_UI =  1;  // 单行长条
  105.   // border for UI
  106. const
  107.   UI_MARGIN   =   4;
  108.   COMP_TEXT_Y =  17;
  109. const
  110.   UI_CANDINF  =  20;
  111.   UI_CANDBTW  =  13;
  112.   UI_CANDBTH  =  13;
  113.   UI_CANDICON =  16;
  114.   UI_CANDSTR  =  300;
  115. const  
  116.   STATUS_DIM_X       =  20;
  117.   STATUS_DIM_Y       =  20;
  118.   STATUS_NAME_MARGIN =  15; // **
  119.   // if UI_MOVE_OFFSET == WINDOW_NOTDRAG, not in drag operation
  120. const
  121.   WINDOW_NOT_DRAG = LongInt($FFFFFFFF);
  122.   // window extra for composition window
  123. const  
  124.   UI_MOVE_OFFSET =  0;
  125.   UI_MOVE_XY     =  4;
  126.   // the start number of candidate list
  127. const
  128.   CAND_START    =  1;
  129.   uCandHome     =  0;
  130.   uCandUp       =  1;
  131.   uCandDown     =  2;
  132.   uCandEnd      =  3;
  133.   CandGBinfoLen =  64;
  134.   // the flag for an opened or start UI
  135. const
  136.   IMN_PRIVATE_UPDATE_STATUS        =  $0001;
  137.   IMN_PRIVATE_COMPOSITION_SIZE     =  $0002;
  138.   IMN_PRIVATE_UPDATE_QUICK_KEY     =  $0004;
  139.   IMN_PRIVATE_UPDATE_SOFTKBD       =  $0005;
  140.   IMN_PRIVATE_DESTROYCANDWIN       =  $0006;
  141.   IMN_PRIVATE_CMENUDESTROYED       =  $0007;
  142.   IMN_PRIVATE_SOFTKEYMENUDESTROYED =  $0008;
  143. const
  144.   MSG_ALREADY_OPEN       =  $000001;
  145.   MSG_ALREADY_OPEN2      =  $000002;
  146.   MSG_OPEN_CANDIDATE     =  $000010;
  147.   MSG_OPEN_CANDIDATE2    =  $000020;
  148.   MSG_CLOSE_CANDIDATE    =  $000100;
  149.   MSG_CLOSE_CANDIDATE2   =  $000200;
  150.   MSG_CHANGE_CANDIDATE   =  $001000;
  151.   MSG_CHANGE_CANDIDATE2  =  $002000;
  152.   MSG_ALREADY_START      =  $010000;
  153.   MSG_START_COMPOSITION  =  $020000;
  154.   MSG_END_COMPOSITION    =  $040000;
  155.   MSG_COMPOSITION        =  $080000;
  156.   MSG_IMN_COMPOSITIONPOS =  $100000;
  157.   MSG_IMN_UPDATE_SOFTKBD =  $200000;
  158.   MSG_IMN_UPDATE_STATUS  =  $000400;
  159.   MSG_GUIDELINE          =  $400000;
  160.   MSG_IN_IMETOASCIIEX    =  $800000;
  161.   MSG_IMN_DESTROYCAND    =  $004000;
  162.   MSG_BACKSPACE          =  $000800;
  163.   // this constant is depend on TranslateImeMessage
  164. const
  165.   GEN_MSG_MAX =  6;
  166.   // the flag for set context
  167. const
  168.   SC_SHOW_UI             =  $0001;
  169.   SC_HIDE_UI             =  $0002;
  170.   SC_ALREADY_SHOW_STATUS =  $0004;
  171.   SC_WANT_SHOW_STATUS    =  $0008;
  172.   SC_HIDE_STATUS         =  $0010;
  173.   // the new flag for set context
  174. const
  175.   ISC_SHOWUICANDIDATEWINDOW      = $00000001;
  176.   ISC_SHOWUICOMPOSITIONWINDOW    = $80000000;
  177.   ISC_SHOWUIGUIDELINE            = $40000000;
  178.   ISC_SHOWUIALLCANDIDATEWINDOW   = $0000000F;
  179.   ISC_SHOWUIALL                  = $C000000F;
  180.   ISC_SHOW_SOFTKBD       =  $02000000;
  181.   ISC_OPEN_STATUS_WINDOW =  $04000000;
  182.   ISC_OFF_CARET_UI       =  $08000000;
  183.   ISC_SHOW_UI_ALL        =  (ISC_SHOWUIALL or ISC_SHOW_SOFTKBD or ISC_OPEN_STATUS_WINDOW);
  184.   ISC_SETCONTEXT_UI      =  (ISC_SHOWUIALL or ISC_SHOW_SOFTKBD);
  185.   ISC_HIDE_COMP_WINDOW   =  $00400000;
  186.   ISC_HIDE_CAND_WINDOW   =  $00800000;
  187.   ISC_HIDE_SOFTKBD       =  $01000000;
  188.   // the flag for composition string show status
  189. const
  190.   IME_STR_SHOWED = $0001;
  191.   IME_STR_ERROR  = $0002;
  192.   // the mode configuration for an IME
  193. const
  194.   MODE_CONFIG_QUICK_KEY    =  $0001;
  195.   MODE_CONFIG_WORD_PREDICT =  $0002;
  196.   MODE_CONFIG_PREDICT      =  $0004;
  197.   // the virtual key value
  198. const
  199.   VK_OEM_SEMICLN  =  $ba;    //  ;    :
  200.   VK_OEM_EQUAL    =  $bb;    //  =    +
  201.   VK_OEM_SLASH    =  $bf;    //  /    ?
  202.   VK_OEM_LBRACKET =  $db;    //  [    {
  203.   VK_OEM_BSLASH   =  $dc;    //      |
  204.   VK_OEM_RBRACKET =  $dd;    //  ]    }
  205.   VK_OEM_QUOTE    =  $de;    //  '    "
  206. const
  207.   MAXMBNUMS =  40;
  208.   // for ime property info
  209. const
  210.   MAXNUMCODES =  48;
  211.   LINE_LEN  =  80;
  212.   CLASS_LEN =  24;
  213.   NumsSK =  13;
  214.   // mb file for create word
  215. const
  216.   ID_LENGTH =  28;
  217.   NUMTABLES =  7;
  218.   TAG_DESCRIPTION =  $00000001;
  219.   TAG_RULER       =  $00000002;
  220.   TAG_CRTWORDCODE =  $00000004;
  221.   // window extra for context menu owner
  222. const
  223.   CMENU_HUIWND       =  0;
  224.   CMENU_MENU         =  4;
  225.   SOFTKEYMENU_HUIWND =  0;
  226.   SOFTKEYMENU_MENU   =  4;
  227. const
  228.   WM_USER_DESTROY =  (WM_USER + $0400);
  229.   // the flags for GetNearCaretPosition
  230. const
  231.   NEAR_CARET_FIRST_TIME =  $0001;
  232.   NEAR_CARET_CANDIDATE  =  $0002;
  233. type
  234.   PUnaDWord = ^DWord;
  235.   PUnaWord  = ^Word;
  236.   // local structure, per IME structure
  237. type
  238.   tagImeL = record
  239.     dwSKState: array[0..NumsSK-1] of DWord;
  240.     dwSKWant: DWord;
  241.     hSKMenu: hMenu;        // SoftKeyboard Menu
  242.     hPropMenu: hMenu;      // Property Menu
  243.     xCompWi: Integer;      // width
  244.     yCompHi: Integer;      // height
  245.     ptDefComp: TPoint;     // default composition window position
  246.     cxCompBorder: Integer; // border width of composition window
  247.     cyCompBorder: Integer; // border height of composition window
  248.     rcCompText: TRect;     // text position relative to composition window key related data
  249.     fModeConfig: Word;     // quick key/prediction mode
  250.     nMaxKey: Word;         // max key of compsiton str
  251.   end;
  252.   TImeL = tagImeL;
  253.   PImeL = ^tagImeL;
  254. const
  255.   NFULLABC =  95;
  256.   // match with the IMEG
  257. type
  258.   tagFullABC = record
  259.     wFullABC: array[0..NFULLABC-1] of Word;
  260.   end;
  261.   TFullABC = tagFullABC;
  262.   PFullABC = ^tagFullABC;
  263.    // global sturcture for ime init data.
  264.    // global structure, can be share by all IMEs,
  265.    // the seperation (IMEL and IMEG) is only
  266.    // useful in UNI-IME, other IME can use one
  267. type
  268.   tagImeG = record
  269.     fDiffSysCharSet: Bool; // the system charset is not NATIVE_CHARSET
  270.     UsedCodes: array[0..17] of Char;// IME Charact
  271.     wNumCodes: Word;
  272.     IC_Enter: DWord;
  273.     IC_Trace: DWord;
  274.     
  275.     rcWorkArea: TRect;     // the work area of applications
  276.     xChiCharWi: Integer;   // Chinese char width & height
  277.     yChiCharHi: Integer;
  278.                            // candidate list of composition
  279.     xCandWi: Integer;      // width of candidate list
  280.     yCandHi: Integer;      // high of candidate list
  281.     cxCandBorder: Integer; // border width of candidate list
  282.     cyCandBorder: Integer; // border height of candidate list
  283.     rcCandText: TRect;     // text position relative to candidate window
  284.     rcCandBTD: TRect;
  285.     rcCandBTU: TRect;
  286.     rcCandBTE: TRect;
  287.     rcCandBTH: TRect;
  288.     rcCandInf: TRect;
  289.     rcCandIcon: TRect;
  290.                           // status window
  291.     xStatusWi: Integer;   // width of status window
  292.     yStatusHi: Integer;   // high of status window
  293.     rcStatusText: TRect;  // text position relative to status window
  294.     rcImeIcon: TRect;     // ImeIcon position relative to status window
  295.     rcImeName: TRect;     // ImeName position relative to status window
  296.     rcShapeText: TRect;   // shape text relative to status window
  297.     rcSymbol: TRect;      // symbol relative to status window
  298.     rcSKText: TRect;      // SK text relative to status window
  299.     wFullSpace: Word;     // full shape space (reversed internal code)
  300.     wFullABC: array[0..NFULLABC-1] of Word; // full shape chars (internal code)
  301.     szStatusErr: array[0..8] of Char; // error string
  302.     cbStatusErr: Integer;
  303.     iCandStart: Integer;  // candidate string start from 0 or 1
  304.     iPara: Integer;       // setting of UI
  305.     iPerp: Integer;
  306.     iParaTol: Integer;
  307.     iPerpTol: Integer;
  308.   end;
  309.   TImeG = tagImeG;
  310.   PImeG = ^tagImeG;
  311. const
  312.   IME_SELECT_GB   = $0001;
  313.   IME_SELECT_XGB  = $0002;
  314.   IME_SELECT_AREA = $0004;
  315.   // IME private data for each context  
  316. type
  317.   tagPRIVCONTEXT = record
  318.     iImeState: Integer; // the composition state - input, choose, or
  319.     fdwImeMsg: DWord;   // what messages should be generated
  320.     dwCompChar: DWord;  // wParam of WM_IME_COMPOSITION
  321.     fdwGcsFlag: DWord;  // lParam for WM_IME_COMPOSITION
  322.     uSYHFlg: uInt;
  323.     uDYHFlg: uInt;
  324.     uDSMHCount: uInt;
  325.     uDSMHFlg: uInt;
  326.                                 // input data
  327.     bSeq: array[0..12] of Char; // sequence code of input char
  328.     fdwGB: DWord;
  329.   end;
  330.   TPrivContext = tagPRIVCONTEXT;
  331.   PPrivContext = ^tagPRIVCONTEXT;
  332.   // IME private UI data
  333. type
  334.   tagUIPRIV = record
  335.     hCompWnd: hWnd;           // composition window
  336.     nShowCompCmd: Integer;
  337.     hCandWnd: hWnd;           // candidate window for composition
  338.     nShowCandCmd: Integer;
  339.     hSoftKbdWnd: hWnd;        // soft keyboard window
  340.     nShowSoftKbdCmd: Integer;
  341.     hStatusWnd: hWnd;         // status window
  342.     nShowStatusCmd: Integer;
  343.     fdwSetContext: DWord;     // the actions to take at set context time
  344.     hIMC: HImc;               // the recent selected hIMC
  345.     hCMenuWnd: hWnd;          // a window owner for context menu
  346.     hSoftkeyMenuWnd: hWnd;    // a window owner for softkeyboard menu
  347.   end;
  348.   TUIPriv = tagUIPRIV;
  349.   PUIPriv = ^tagUIPRIV;
  350.   // for near caret offset calculatation
  351. type
  352.   tagNEARCARET = record
  353.     iLogFontFacX: Integer;
  354.     iLogFontFacY: Integer;
  355.     iParaFacX: Integer;
  356.     iPerpFacX: Integer;
  357.     iParaFacY: Integer;
  358.     iPerpFacY: Integer;
  359.   end;
  360.   TNearCaret = tagNEARCARET;
  361.   PNearCaret = ^tagNEARCARET;
  362.   // Other ..
  363. const
  364.   REGSTR_PATH_SETUP = 'SoftwareMicrosoftWindowsCurrentVersion';
  365. implementation
  366. end.