[100]我想开发一个输入法 可现在一点路子也没有 请仙人指路!
如题 问题点数:100、回复次数:16Top
1 楼fengyvn(我菜我自在)回复于 2004-05-03 01:39:48 得分 5
设计字体排列顺序,然后响应键盘消息.Top
2 楼visual_cjiajia(bios(阿贡))回复于 2004-05-03 09:07:53 得分 10
很难啊 :你先回答 偶这个 1000年都没 回答的问题:
第3题):<输入法的钩子>原理是如何实现的?
1)输入法框出现后,他不影响当前正处于激活的
窗体,这是怎么回事?随便打开比如说《智能全拼》
会发现当他的窗口出现时原来是处于激活的当前窗口仍然是被激活激活,
不会因为<智能全拼》的出现而使他失去焦点,任凭你怎么点击输入法的
框框也不影响,当前窗体!如何实现?
2)他是如何做到只要是能允许输入的地方,
他都可以把字符发送到那个控件?
"先得到当前光标所在控件的handle,然后判断是否可以输入"
???具体代码是什么样的啊?
Top
3 楼Amuclan(西绪弗斯)回复于 2004-05-04 18:49:03 得分 0
你说的我也想不明白 可是我估计 开发输入法应该是有个类似模板的东西 比如说我们可以发现微软的全拼,郑码,五笔等输入法的外观以及运行的感觉都非常的相似 所以我考虑应该有类似的开发模板.....
还是请高手指点Top
4 楼Amuclan(西绪弗斯)回复于 2004-05-04 19:01:36 得分 0
你说的都是很底层的东西了 老实说我现在的水平肯定还达不到 我现在想的是先做个小小的输入法 然后再去考虑你说的那些问题...
Top
5 楼bottom(死了N回了呵呵!)回复于 2004-05-04 20:41:02 得分 0
倒 那个要搜索以前的帖子 已经被高手说烂了 人家现在已经不回答了!Top
6 楼Amuclan(西绪弗斯)回复于 2004-05-05 00:37:46 得分 0
请问你是高手吗?
你会吗?Top
7 楼bottom(死了N回了呵呵!)回复于 2004-05-05 08:54:41 得分 0
偶不是 偶没空做这种事情 偶还有其他很难的题目已经堆积了 129道了 也没人回答的完Top
8 楼aiirii(ari-http://spaces.msn.com/members/aiirii/)回复于 2004-05-05 09:02:07 得分 70
http://wwsys.51.net/start.htmTop
9 楼Amuclan(西绪弗斯)回复于 2004-05-06 01:26:42 得分 0
又是爱的眼睛大侠 对你的敬仰有如滔滔江水.................Top
10 楼Amuclan(西绪弗斯)回复于 2004-05-06 01:27:36 得分 0
这个网站太经典了 可惜后面的几章我这里怎么打不开Top
11 楼Amuclan(西绪弗斯)回复于 2004-05-07 18:49:37 得分 0
这个也结帖Top
12 楼visual_cjiajia(bios(阿贡))回复于 2004-05-07 20:50:18 得分 0
当然要结!Top
13 楼ahalf(ahalf)回复于 2004-05-07 21:02:30 得分 5
看看微软在win中为你提供的输入法生成器Top
14 楼miky(miky)回复于 2004-05-07 21:39:08 得分 5
给你参考一下。
Delphi下汉字输入法的编程及使用
主题:Delphi下汉字输入法的编程及使用
发信人: teleme(PassWord)
整理人: teleme(2001-02-11 11:10:47) 站内信件
发信人: yeniu()
Delphi下汉字输入法的编程及使用
.王俊峰李怀立
许多Windows应用程序的中西文录入界面中,中西文的录入需要反复切换汉字
输入法,这样使用起来非常麻烦,下面来介绍一种比较简便的解决方法。本文的
程序设计环境为Delphi Client/Server Suit Ver 3.0(以下简称Delphi 3.0)和
中文Windows 95。
1.Delphi下的Imename、Imemode属性
在Delphi 3.0中的Tedit、Tmemo、TmaskEdit等编辑元件在应用程序中经常使
用,这三种元件都具有ImeName、ImeMode属性。其中ImeName属性是输入法名称,
在对象观察器中对应一个包括当前系统中所有汉字输入法的下拉组合框;ImeMod
e属性是输入法模式,在对象观察器中也对应一个下拉组合框,组合框中包含imC
lose、imOpen、imChinese、imDontCare、imSAlpha、imAlpha六项内容。
imClose 表示输入法处于关闭状态;
ImOpen 表示输入法处于打开状态;
ImChinese 表示处于中文输入法状态;
ImDontCare 表示若输入法处于关闭状态则打开最近一次使用过的输入法;
ImSAlpha 表示输入处于半角状态;
ImAlpha 表示输入处于全角状态。
2.Delphi下汉字输入法的编程
在Delphi 3.0中,中西文录入界面中涉及到的输入元件都具有ImeName、Ime
Mode属性。在设计录入界面表单时,对其中每一个元件的这两种属性赋值,系统
就可以在元件获得焦点时自动打开或关闭所设定的汉字输入法。但是对于用户来
说,这种编程方法一点灵活性也没有。若系统所设定的输入法不是用户所喜欢的,那么只好再通过Windows 95的输入法选择器重新选择。其实,通过在Form下放
置一个标签及一个下拉组合框的方法就可以灵活地解决这个问题了。本文示例的
Form中共放置了四个Label、两个Edit、一个ComboBox、一个Memo及一个Button,
下面对这个示例作个说明。
(1)在Delphi中选择File | New Application菜单项生成一个新的应用程序,
设定新窗体Form1的属性为:
Caption=输入法编程示例;
(2)在Form1中添加标签Label1、Label2、Label3及编辑框Edit1、Edit2、Me
mo1,设定其属性为:
Label1.Caption=中文输入编辑框
Label1.Font.Size=12
Label2.Caption= 西文输入编辑框
Label2.Font.Size=12
Label3.Caption= 中文多行文本编辑器
Label3.Font.Size=12
Edit1.ImeMode=ImOpen
Edit2.ImeMode=ImDontCare(缺省值)
Memo1.ImeMode=ImOpen
编程时,一般把输入西文或以西文为主的元件的ImeMode属性设为缺省值;而
把输入中文或以中文为主的元件的ImeMode属性设为ImOpen;ImeName属性值则在
程序运行时由用户设定。这个方法的灵活性就在于此。另外,还需要把Edit1.Te
xt、Edit2.Text、Memo1.Lines的值设为空。
(3)在Form1中添加一个标签Label4,设定其属性为:
Caption = 选择最喜欢的输入法
Font.Size=12
Font.Color=红色
(4)在Form1中添加一个下拉组合框ComboBox1,在对象观察器Object Inpect
or中选择Events选项卡,双击OnDropDown,对此事件进行编程,其代码如下:
ComboBox1.Items.CommaText:=Screen.Imes.CommaText;
上面这个语句可以将中文Windows 95中安装的汉字输入法添加到下拉组合框
中,它巧妙地运用了TScreen类的Imes特性,而Imes特性本身又是一个Tstring类,其属性Commatext包含了Windows 95已安装的汉字输入法,可以将其直接赋值给
ComboBox1的相应属性。如果直接编辑ComboBox1的属性Items来添加汉字输入法名
称,则会在应用程序发布时,因用户机器汉字输入法的不确定性造成应用程序的
不通用性。
在对象观察器中双击OnExit事件,对此事件进行编程,代码如下:
Edit1.ImeName:=ComboBox1.Text;
Memo1.ImeName:=ComboBox1.Text;
(5)在Form1中添加一个命令按钮Button1,设置其属性为:
Caption=退出
Font.Size=12
双击此命令按钮,对Click事件进行编程,代码如下:
Close;
至此,整个示例的程序设计过程就完成了,保存此应用程序及表单,再进行
编译、运行,运行后其界面如图所示。
3.汉字输入法的使用
首先在下拉组合框中选择你所喜欢的汉字输入法,将光标移到中文输入编辑
框中就会发现所选的汉字输入法已自动出现在屏幕上;再将光标移到西文输入编
辑框中,汉字输入法就会自动关闭;如果将光标移到中文多行文本编辑框中,则
已选中汉字输入法又自动出现了。
从上面的程序中可以得出,在应用程序的录入界面中,设置一个选择输入法
的下拉组合框,并让其控制录入界面中所有可输入项的ImeName属性,既可以做到
在中西文录入过程中不必进行录入法的来回切换,还可以做到让用户选择自己最
喜欢的汉字输入法,而且这样的录入界面对于用户来说也是非常友好、方便、快
捷的。PCC
(作者地址:山东省潍坊市东风东街181号 261031 收稿日期:1998.12.08)
[原文转载北京社区精华区],
Top
15 楼jlutt(林渔)回复于 2004-05-10 01:18:39 得分 5
基于IME实现的输入法最后生成IME文件实际上就是一个DLL,所以用delphi来实现绝对的可行.
首先你要做的就是需要IMM头文件delphi版(自己翻译,不要delphi自带的那个,有很多结构没有).
然后你要做的就是实现一个输入法dll需要导出的IME函数(好像是19吧,上面那个网站上有介绍).(具体的实现方法俺没写,就是把函数一堆编译了,sorry),8过你可以参照自由拼音输入法的源码来翻译,或者可以看看DDK带的输入法的例子.
编译完后最重要的就是写资源文件了,先写好rc文件,然后用delphi带的bcc32来编译成res.
(至于rc的格式估计要完全按照自由拼音输入法带的来写,用delphi直接生成的res安装不上)
最后就是把生成的dll改名叫***.IME,copy到system32目录下,修改注册表,然后添加输入法就ok了:)Top
16 楼Amuclan(西绪弗斯)回复于 2004-07-04 12:28:15 得分 0
实在不好意思 这个帖子早该结了
小弟 前一段时间 关注的问题转到别的方面去了 所以好久没来CSDN 请各位见谅
本想搞个有关输入法的东西 可惜 在公司里做 常常是身不由己
现在又要搞手机短信程序(SP) 不知道什么时候才能实现自己的那一点点想法....
在公司里做了几个月了 水平有点进步 但进步不大....搞的东西太杂 现在形容自己是杂食动物 很难深入进去搞点东西 所以水平依然的菜....有点迷茫.....
不管怎么说 都谢谢各位 结帖先
愿交天下朋友
QQ6178625
MSN ccfstt@hotmail.com
Top




