<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      Delphi下編程完成中文輸入法

      [摘要]江 蘇 省 電 信 傳 輸 局 周 曉 ---- Borland Delphi 以 其 強 大 的 功 能 及 和 高 效 的 可 視 化 開 發 環 境 為 廣 大 程 序 設 計 員 所 青 睞 。 尤 其 是 它 封 裝 了WINDOWS API 函 數, 能 方 便 地 利 用WIND...
      江 蘇 省 電 信 傳 輸 局  

      周 曉  

      ---- Borland Delphi 以 其 強 大 的 功 能 及 和 高 效 的 可 視 化 開 發 環 境 為 廣 大 程 序 設 計 員 所 青 睞 。 尤 其 是 它 封 裝 了WINDOWS API 函 數, 能 方 便 地 利 用WINDOWS 資 源, 大 大 加 快 了 程 序 開 發 速 度。  


      ---- 在 平 時 的 計 算 機 操 作 中, 中 文 輸 入 是 不 可 避 免 的。 使 用 者 可 能 喜 歡 不 同 的 中 文 輸 入 法(inputmethod editor, 簡 稱IME), 這 就 不 得 不 經 常 點 擊 任 務 欄 中 的 中 文 圖 標 或 用CTRL+Space,CTRL+Shift 熱 鍵 切 換, 初 學 者 用 起 來 很 不 方 便。 針 對 這 一 問 題, 可 以 在 開 發 軟 件 時, 在 程 序 中 設 置 用 戶 喜 歡 的 中 文 輸 入 法, 方 便 用 戶 的 使 用。Delphi 中 只 有 少 數 控 件 如TEdit 支 持IME, 而 且 該 功 能 不 強, 不 能 在 運 行 時 更 改 輸 入 法。  


      ---- 筆 者 通 過 實 踐 和 摸 索, 查 找 了 相 關 的IME 資 料, 利 用 了WINDOWS API 函 數, 實 現 了IME 的 功 能。  


      ---- 常 用 函 數 有:  


      API函數:BOOL ImmSimulateHotKey

      (HWND hWnd,DWORD dwHotKeyID);//模擬熱鍵

      其中Hwnd為程序窗口的句柄,dwHotHKeyID

      為模擬的熱鍵,若成功則返回True


      HKL GetKeyboardLayout(DWORD dwLayout);

      //獲得當前鍵盤狀態


      BOOL ImmIsIME(HKL hKL);

      //判斷當前是否處于中文輸入狀態,若是則返回True

      自定義函數:

      打開相應輸入法:OpenIme(imename:string),

      例OpenIme('全拼輸入法');

      關閉中文輸入法:CloseIme;


      以下是一個簡單的例子,僅起參考作用。


      使用時uses中加上imm  


      具體的實現方法及源代碼如下:  

      unit Unit1;


      interface


      uses

      Windows, Messages, SysUtils, Classes,

      Graphics, Controls, Forms, Dialogs,

      StdCtrls, Buttons,imm;


      type

      TForm1 = class(TForm)

      ComboBox1: TComboBox;

      BitBtn1: TBitBtn;

      BitBtn2: TBitBtn;

      BitBtn3: TBitBtn;

      procedure FormShow(Sender: TObject);

      procedure OpenIme(imename:string);

      procedure closeIme;

      procedure ComboBox1Change(Sender: TObject);

      procedure BitBtn1Click(Sender: TObject);

      procedure BitBtn2Click(Sender: TObject);

      procedure BitBtn3Click(Sender: TObject);


      private

      { Private declarations }

      public

      { Public declarations }

      end;


      var

      Form1: TForm1;


      implementation


      {$R *.DFM}


      procedure TForm1.FormShow(Sender: TObject);

      var

      j:integer;

      begin

      for j:=0 to screen.imes.count-1 do

      begin

      ComBoBox1.Items.Add(screen.Imes.strings[j]);

      //獲取系統中已安裝的中文輸入法

      end;

      end;


      procedure Tform1.OpenIme(imename:string);

      var

      I:integer;

      myhkl:hkl;

      begin

      if ImeName<>'' then

      begin

      if Screen.Imes.Count<>0 then

      begin

      I:=screen.Imes.indexof(imename);

      if I>=0 then

      myhkl:=hkl(screen.Imes.objects[i]);

      activatekeyboardlayout(myhkl,

      KLF_ACTIVATE);//設置相應的輸入法

      end;

      end;  

      end;


      procedure TForm1.closeime;

      var

      myhkl:hkl;

      begin

      myhkl:=GetKeyBoardLayOut(0);

      if ImmIsIME(myhkl) then  

      //判斷是否在中文狀態,若是則關閉它

      immsimulateHotkey(handle,

      IME_CHotKey_IME_NonIME_Toggle);

      end;


      procedure TForm1.ComboBox1Change(Sender: TObject);

      begin

      OpenIme(ComboBox1.Text);

      end;


      procedure TForm1.BitBtn1Click(Sender: TObject);

      begin

      immsimulateHotkey(handle,

      IME_CHotKey_shape_Toggle);//切換半角和全角模式

      end;


      procedure TForm1.BitBtn2Click(Sender: TObject);

      begin

      immsimulateHotkey(handle,

      IME_CHotKey_symbol_Toggle);

      //切換中文標點模式和英文標點模式

      end;


       

       

      procedure TForm1.BitBtn3Click(Sender: TObject);

      begin

      closeime;

      end;


      end.

      ---- 本 程 序 在Delphi 3.0/4.0 下 通 過。


      日韩精品一区二区三区高清