中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > Web开发 > JavaScripts > 综合文章
与中文输入相关的函数
作者:佚名 时间:2005-02-26 11:03 出处:互连网 责编:chinaitpower
              摘要:与中文输入相关的函数

unit Ime;


{=======================================================================
  DESIGN BY :  彭国辉
  DATE:        2004-10-12
  SITE:       
http://kacarton.yeah.net/
  BLOG:        http://blog.csdn.net/nhconch
  EMAIL:       kacarton@sohu.com


  文章为作者原创,转载前请先与本人联系,转载请注明文章出处、保留作者信息,谢谢支持!
========================================================================}


interface


uses IMM, Windows;


  procedure ImmActive(hWindows: THandle; bChinese: Boolean);  //打开或关闭输入法
  procedure ImmEnabled(hWindows: THandle; bChinese: Boolean); //允许或禁止输入法
  procedure SendDBCSString(hFocus: HWND; const Text: string); //向控件发送中文文本


implementation


//打开或关闭输入法,EX:ImeActive(0, true);
//网上可以搜索到类似的代码,不过用的是IME_THOTKEY_IME_NONIME_TOGGLE,只对繁体版中文Windows有效,用在简体中文Windows下当然不行了

procedure ImmActive(hWindows: THandle; bChinese: Boolean);
begin
  if hWindows=0 then hWindows := GetFocus;
  if hWindows=0 then Exit;
  if ImmIsIME(GetKeyboardLayOut(0)) <> bChinese then
    ImmSimulateHotKey(hWindows, IME_CHOTKEY_IME_NONIME_TOGGLE);
end;


//允许与禁止输入法,EX:ImmEnabled(Edit1.Handle, true)
//等效于把Edit1.ImeMode设为imChinese(True)、imClose(False)

procedure ImmEnabled(hWindows: THandle; bChinese: Boolean);
var
  hImmc: HIMC;
begin
  if hWindows=0 then hWindows := GetFocus;
  if hWindows=0 then Exit;
  hImmc := ImmGetContext(hWindows);
  ImmSetOpenStatus(hImmc, bChinese);
end;


//向控件发送中文文本,EX:SendDBCSString(Edit1.Handle, '哗,终于可以发中文啦!')
procedure SendDBCSString(hFocus: HWND; const Text: string);
var
  i: integer;
  ch: byte;
begin
  if hFocus = 0 then hFocus := GetFocus;
  if hFocus = 0 then Exit;
  i := 1;
  while i <= Length(Text) do begin
    ch := byte(Text[i]);
    if Windows.IsDBCSLeadByte(ch) then begin
      Inc(i);
      SendMessage(hFocus, WM_IME_CHAR, MakeWord(byte(Text[i]), ch), 0);
    end
    else SendMessage(hFocus, WM_IME_CHAR, word(ch), 0);
    Inc(i);
  end;
end;


end.

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有