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
ifImeNamethen
begin
ifScreen.Imes.Count0then
begin
I:=scr .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.


delphi编程 实现一功能
答:如果不是,测长,通过TEXTOUT(我记得好像是...)输出普通字符,每输出一个字符前都要扣一个计数器,然后下一个输出点是(500-50*L)如果计数器到0了或者字符是回车的话 那给TEXTOUT的TOP+80(字50 字纵间距30)如果此数组字符输出结束了,下一个数组必定是"["开头,所以把现在剩余的长度加上关键字的...

用Delphi 7编程,要使一文本框中只可输入数字,而且当输入的数字错误时还...
答:if (key<>#46) and (key<#48) or (key>#57) or (key<>#13) then//这里把#13换成退格的ascii begin key:=#0;showmessage('...');end;

编程时输入英文或者代码时要用ch中文(中国)输入法还是用en(英文)美 ...
答:但是中文输入,即使输入英语,有时也不是 ASCII 代码形式,所以会造成程序的问题。因此为了保险起见,同时也养成一个固定的习惯,不管做网页时我是给外国人看的英文,还是Delphi编程时用,或者其他编程用。遇到英语部分,都转换成英语输入,而不是中文输入中的英语输入,这样会避免很多不必要的麻烦。在中文...

delphi的编程方法
答:Delphi的编程语言是以Pascal为基础的。Pascal语言具有可读性好、编写容易的特点,这使得它很适合作为基础的开发语言。同时,使用编译器创建的应用程序只生成单个可执行文件(.EXE),正是这种结合,使得Pascal成为Delphi这种先进开发环境的编程语言。本章中,将讨论ObjectPascal的主要特点,并讲解如何在事件处理...

请问如何通过Delphi编程,做到在一个输入框中,只能输入数字,而不能输...
答:edit的maxlength设置为2;在edit的onkeypress事件内 procedure Ttbdlform.Edit1KeyPress(Sender: TObject; var Key: Char);begin if key <> #9 then// #9 是空格,你可以查找下数字1\2\3是什么值 showmessage('请输入数字')end;

如何在Delphi中实现ASP编程
答:在这方面由于asp技术是微软推出的,因此我们一般利用vb或vc,那么delphi程序员又如何实现呢?在这方面笔者最近通过inrpisre的资料,实现了在delphi环境中实现asp技术的web编程,现以一个介绍如下:1、在delphi环境中建立一个新的acdiveX DLL项目Project1,然后通过delphi的Active Server Object建立一个ASP对象...

delphi 编程:从输入框中输入的数据如何到指定的编辑框中显示、计算_百...
答://在按回车事件内判断(在此之前先将edit1,edit2……edit20的值初始化为0)procedure TForm1.MaskEdit1KeyPress(Sender: TObject; var Key: Char);var s1,s2:string;//s1为输入内容的前两位,S2后面部分,i2,symbol:integer; //symbol运算符号; i2对应s2的整数类型 begin if key=#13 then b...

Delphi快速入门(一)
答:1.1.2 面向对象编程的概念面向对象的程序设计(Object-Oriented Programming,简记为OOP)是Delphi诞生的基础。OOP立意于创建软件重用代码,具备更好地模拟现实世界环境的能力,这使它被公认为是自上而下编程的优胜者。它通过给程序中加入扩展语句,把函数“封装”进Windows编程所必需的“对象”中。面向对象的编程语言使得...

delphi编程
答:1 C 2 C 3 B 例子:X-Y -A(负A)4 A 5 B 6 A 7 D 8 A 9 B 10 C 11 A OnCreate事件是在窗口创建时运行 二 1.选中状态 DELETE 2.Pascal 3.and or 4.if case 5.default值设置为TRUE 6.INTEGER(整数型),STRING(字符型,按字母顺序排列),enumerated(枚举型),subrange...

delphi indy10 无法接收中文
答:以我10年delphi经验来看,绝对不能用indy,这是一套华而不实,从头烂到脚的控件。编程的时候觉得还好,一旦实际使用,会发现根本无法胜任工作。只适合当当教学工具。你要做发送和接收,给你推荐2个方法是我平常用的 1. 直接用api,网上有类似代码,阻塞模式很简单也很实用,要非阻塞就用线程。2. 用...