说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Delphi下编程实现中文输入

HTML文档下载 WORD文档下载 PDF文档下载
Delphi下编程实现中文输入

BorlandDelphi以其强大的功能及和高效的可 视化开发环境为广大程序设计员所青睐。尤其是它封装了WINDOWSAPI函数,能方便地利 用WINDOWS资源

大大加快了程序开发速度。

在平时的计算机操作中

中文输入是不可避免的。 使用者可能喜欢不同的中文输入法(inputmethodeditor

简称IME)

这就不得不经常点击 任务栏中的中文图标或用CTRL+Space

CTRL+Shift热键切换

初学者用起来很不方便。针对 这一问题,可以在开发软件时

在程序中设置用户喜欢的中文输入法

方便用户的使用。Delphi 中只有少数控件如TEdit支持IME

而且该功能不强

不能在运行时更改输入法。

笔者通过实践和摸索

查找了相关的IME资料

利 用了WINDOWSAPI函数

实现了IME的功能。

常用函数有:

API函数:BOOLImmSimulateHotKey

(HWNDhWnd

DWORDdwHotKeyID);//模拟热键

其中Hwnd为程序窗口的句柄

dwHotHKeyID

为模拟的热键

若成功则返回True

HKLGetKeyboardLayout(DWORDdwLayout);

//获得当前键盘状态

BOOLImmIsIME(HKLhKL);

//判断当前是否处于中文输入状态

若是则返回True

自定义函数:

打开相应输入法:OpenIme(imename:string)

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

关闭中文输入法:CloseIme;

以下是一个简单的例子,仅起参考作用。

使用时uses中加上imm

具体的实现方法及源代码如下:

unitUnit1;

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;

procedureFormShow(Sender:TObject);

procedureOpenIme(imename:string);

procedurecloseIme;

procedureComboBox1Change(Sender:TObject);

procedureBitBtn1Click(Sender:TObject);

procedureBitBtn2Click(Sender:TObject);

procedureBitBtn3Click(Sender:TObject);

private

{Privatedeclarations}

public

{Publicdeclarations}

end;

var

Form1:TForm1;

implementation

{$R*.DFM}

procedureTForm1.FormShow(Sender:TObject);

var

j:integer;

begin

forj:=0toscreen.imes.count-1do

begin

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

//获取系统中已安装的中文输入法

end;

end;

procedureTform1.OpenIme(imename:string);

var

I:integer;

myhkl:hkl;

begin

ifImeName<>''then

begin

ifScreen.Imes.Count<>0then

begin

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

ifI>=0then

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

activatekeyboardlayout(myhkl

KLF_ACTIVATE);//设置相应的输入法

end;

end;

end;

procedureTForm1.closeime;

var

myhkl:hkl;

begin

myhkl:=GetKeyBoardLayOut(0);

ifImmIsIME(myhkl)then

//判断是否在中文状态

若是则关闭它

immsimulateHotkey(handle

IME_CHotKey_IME_NonIME_Toggle);

end;

procedureTForm1.ComboBox1Change(Sender:TObject);

begin

OpenIme(ComboBox1.Text);

end;

procedureTForm1.BitBtn1Click(Sender:TObject);

begin

immsimulateHotkey(handle

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

end;

procedureTForm1.BitBtn2Click(Sender:TObject);

begin

immsimulateHotkey(handle

IME_CHotKey_symbol_Toggle);

//切换中文标点模式和英文标点模式

end;

procedureTForm1.BitBtn3Click(Sender:TObject);

begin

closeime;

end;

end.

本程序在Delphi3.0/4.0下通过。

Android数组排序常见方法 使用OpenGL开发一个指南针 Android自绘GridView控件 Android平板开发注意事项 Android控件TextProgressBar进度条上显文字 Android内存管理-SoftReference的使用 反射在Android开发中的利弊 intent调用代码总结二 Android缩略图类源代码 Android多人项目开发指导 AsyncTask对比Thread加Handler Android Drawable叠加处理方法 android.os.Debug调试工具使用方法 Android多点触控开发原理 inent调用代码总结,不断完善中 onRetainNonConfigurationInstance和getLastNonConfigurationInstance Android中String资源文件的format方法 Android工程内嵌资源文件的两种方法 Android AIDL全攻略三 - AIDL框架 Android AIDL全攻略二 - Service绑定 自定义Android主题风格theme.xml方法 Android开发之模拟按下Home键的效果 Android AIDL全攻略一 Android Picture和PictureDrawable的用处 Android自定义View以及layout属性全攻略 Android通过Intent发送电子邮件含附件 Android调试技巧之Eclipse行号和Logcat Android Txt文本读写类源代码 Android游戏开发之旅20 双按事件捕获 Android游戏开发之旅19 分辨率大全 保护你的Android付费软件-LVL全攻略(二) 这样来设置其Datagrid指定行高亮度显示????????????? 那里能载LINUX操作系统,服务器版、单机版 有什么办法可以截获到窗口的beginpaint这个函数 windows- 延缓写入失败什么意思啊 大虾们帮忙看看,为什么下面一段简单的代码运行这么费劲! 歌词收集,大家贴出自己喜欢的歌曲的歌词。 在sql2000里能恢复sql6.5的数据库文件*.dat吗?如果可以怎么做呢? 为什么 CDocument::CanCloseFrame() 这个虚函数无法重载? 新买了一个摄像头,请问装个什么软件比较好 听说Delphi中的visibroker是开发版,如果作为商品软件必须购买license,是真的吗? 香农公式谁能解释解释? 怎样得到数据库服务器的某一数据库的所有用户名称和登录名列表 散分啦!恳请各位大虾帮忙~~ 联通CDMA手机短信与移动GSM手机短信指令有何区别? 关于类设计的问题 jsp中大文件上传问题! onchange在程序改变当前选项时无法触发? 如何将所绘制图形保留在窗口上? 消息机制??? 请教,如何做一个进度显示?希望(详细点)!拜托高手 一个关于属性页的问题 新手问题:SQL*PLUS出错! 一道调用传递引用的参数,实现两个字符串变量的交换的题目,帮帮忙! 离开 论坛 散分 关于php与frontpage之间的一些问题!! 离开 论坛 散分【二】 在ASP中生成SURFER对象时出现错误 离开 论坛 散分【三】 离开 论坛 散分【三】 急救! 如何操作磁卡读写器 Help,如何更改DataGrid控件选中那个单元格的背景色和前景色? 2000共享文件问题,请高手看一下,很古怪的! 朋友,你好! 离开 论坛 散分【四】 高手救命,简单数据库规划问题!!!价值50分!!! 想听听大家对 static 命名的函数、变量的用法 Access数据库传到服务器后,变为只读了?求助,白思不得其解 请问怎样取得PCM流 离开 论坛 散分【五】 打包,解包??? 离开 论坛 散分【六】 离开 论坛 散分【七】 求教SQL语句,高手、或刚入门的同道都进来讨论一哈 最初linux使用什么编译开发的? 离开 论坛 散分【八】 关于字符串截取问题 谁有FASTREPORT的注册版本 我急用!在线等待!谢谢! 离开 论坛 散分【九】 Application.messagebox和messagebox有什么区别呢? 水晶报表的两个小问题? 雷电颂该怎样阅读 《雷电颂》朗读节奏划分下列句子朗读节奏划分错误的一项是( )A.我/思念/那洞庭湖,我/思念那/长江,我/思念/那东海,那/浩浩荡荡的/无边无际的/波澜呀!那/浩浩荡荡的/无边无际的/伟大的/ 1.说说下列句子用了什么修辞手法.(1)风!尽力地咆哮吧!( )(2)鼓动吧,咆哮吧,闪耀吧,( )2.本文运用了象征手法,联系作者写此文的历史背景,说说作者赋予下列事物什么含义?(1)洞庭 Je t'aime,depuis le début,il n'y a pas de raison 飞机是怎么起飞的?飞机首先在跑到跑,然后脱离跑道后就起飞,它是不是向车一样有档位,在跑道上一直加速,然后挂起飞挡?那个叫什么档? 电视上看飞船发射时,我们看到的飞船起飞得很慢,是飞船起飞得就是这么慢还是电视台经过处 雷电颂阅读答案风,雷,电象征什么,洞庭湖,长江,东海象征什么? 伊斯坦布尔的名字在叫君士坦丁堡之前是什么? 1.《怒绿》的行文线索为什么是【作者思想感情的发展变化】而不是【怒绿】 2.《怒绿》一文中,请谈谈你对标题的理解.要规范答案,指出表层义,深层义…… 君士坦丁堡 是什么时候改名为 伊斯坦布尔 君士坦丁堡是现在的伊斯坦布尔吗? 慈溪两岁女童掉进大锅 全身严重烫伤送男子宁波路上擦肩而过时摸女孩胸 被行宁波出台国内首个网购争议处理办法非洲牛郎门谣言案落定 涉事网站被判侵俄印蒙三国总理同日访华非偶然 政治意同济大学开启中美共建全科医学系计划南京大学两位院士候选人就论文是否造假无业男子为供养情妇和私生子 诈骗父母各省区市通报违反八项规定典型 多涉违“中国西藏文化周”在德国柏林开幕 俞冷空气今晚降临杭城 早出晚归的人出门南非在建商场成“楼塌塌”女子长板选手一决高低“萝卜招聘”翻新成“绕道进人”力度空前的“全面改革六十条”完善产权制度和用途管制制度不可偏颇76人裁掉夸梅-布朗 2年打22场耗完善市场资源配置价格形成机制近日,伴随着“一方是独生子女的夫妇可风筝冲浪运动扶摇直上三亚中院3年间珠宝商品下月起明码标价
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘