Borland C++ Builder输入法的自动切换

发表于:2007-07-04来源:作者:点击数: 标签:
邓世刚 左晓辉 摘要 本文介绍了在C++ Builder中自动切换输入法的实现。就其原理和方法进行论述,并给出了一个简化的实例。 关键字 界面,切换技术 ,C++ Auto-switch input method in Borland C++ Builder Deng Shigang Zu0 Xiaohui Computer Science Departm
邓世刚 左晓辉

  摘要 本文介绍了在C++ Builder中自动切换输入法的实现。就其原理和方法进行论述,并给出了一个简化的实例。

  关键字 界面,切换技术 ,C++

  Auto-switch input method in Borland C++ Builder

   Deng Shigang Zu0 Xiaohui

   Computer Science Department ,Xuzhou Normal University

  Abstract This article describes a resolving method that Auto-switch input method in Borland C++ Builder. This paper discusses the theories and methods about these questions and a simple sample is given.

  Keywords Interface ,Switch technology ,C++

  Borland C++ Builder(BCB)是一种优秀的可视化编程工具,把应用程序界面的开发简化到无与伦比的程度,从而极大地缩短了软件的开发周期。但是在实际的开发中,友好的用户界面却不是仅仅使用可视化组件就可以简单地完成的,这不仅要考虑到人机工程,最重要的是要使操作尽量简单。例如在图书管理系统的设计中,数据输入是一项繁重的工作,最令输入人员头疼的是中英文输入方式的转换,如输入书名时要切换到中文输入方式,而输入书号时又要切换到英文输入方式,如果软件能提供输入方式的自动转换,而不需要输入人员手工切换,就可以大大提高软件的亲和力,并减轻输入的工作量。本文即讨论在BCB3.0中的输入法自动切换功能的实现。


  一、 输入法与输入模式


  C++ Builder为象中国这样的使用双字节Windows的国家提供了相应的输入法,在Tedit等编辑组件中都包含ImeName和ImeMode两个属性,分别用于控制输入法和输入模式。

  ImeName属性:设置组件的输入法。在设计阶段可从ImeName属性的下拉列表中选择输入法,在运行时刻可用下列语法设置:Edit1-〉ImeName=” 智能ABC输入法”, C++ Builder自动调用保护方法SetIme(void)激活IME(Input Method Editor)。设置了ImeName属性后,当输入焦点进入Edit1时,输入法自动转换成智能ABC拼音输入,而输入焦点从Edit1失去时,又会自动切换到英文状态。

  ImeMode属性:设置组件输入法的模式,一些比较重要的值及意义见下表:

imdontcare 激活用户最后采用的输入法 imalpha 接受双字节的罗马字符输入 imchinese 接受双字节汉字输入 imclose 关闭前台输入窗,但输入法仍起作用 imopen 打开输入窗 imsalpha 接受字节的罗马字符输入
  通常,对于输入数字和字母的组件,一般设置ImeMode为imSAlpha,而不设置ImeName;而对于输入中文的组件,一般设置ImeName,而不设置ImeMode,建议使用以上经验。


  二、 设计时刻设置输入法


  窗体布局如图1,组件属性为:

组件 属性 属性值 label1 caption 书名 label2 caption 作者 label3 caption 书号 edit1 imename 全拼输入法
  Edit1用于输入中文书名,Edit2用于输入英文作者名,Edit3用于输入书号。

   (图1)

  运行该程序时会发现,当输入焦点在三个Edit组件间切换时,相应的输入法也自动切换,但是这种方法有一个缺点,就是输入法固定,若用户不用全拼输入法,反而会引起麻烦,解决的方法就是在运行时刻动态改变输入法。


  三、 运行时刻设置输入法


  在窗体增加一个ComboBox组件ComboBox1,并取消上面设置的Edit1的ImeName属性。窗体布局如图2。

  1. 在窗体的OnCreate事件过程加入以下代码:

  ComboBox1-〉Items-〉Clear();

  ComboBox1-〉Items=Screen-〉Imes;

  这里使用了Tscreen类型的全局系统变量Screen,该变量在项目(project)建立时自动创建,代表屏幕设备,由其属性可获得当前活动窗体、当前活动控制、屏幕宽度和位深度等有用信息,其中Imes属性包含系统中所有能使用的输入法。

  2. 在ComboBox1的OnChange事件过程输入以下代码:

  Edit1-〉ImeName=ComboBox1-〉Text;

  3.运行程序,只要在下拉列表中选择了输入法,再将输入焦点移入‘中文书名’编辑框时,输入法自动切换到所选输入法,而移出焦点时,又切换回英文方式。

   (图2)


  四、 与数据库组件的配合使用


  在实际应用中,大量的数据输入通常发生于数据库应用程序,这里用实例说明在数据库应用程序中普遍使用的DBGrid组件如何采用这种技术。

  当使用DBGrid组件进行数据输入和修改时,如图3,每一列对应数据库的一个字段,而不同的字段要求的输入方法不同,在这种情况下,为了实现输入方法的自动切换,只能使用我们上面讨论的第二种方法,因为在设计时刻,DBGrid组件的的各列是不可见的,因此只能在运行时刻进行设置。

  (图3)

  组件属性为: 组件 属性 属性值 label1 caption 请选择输入法 combobox1 table1 databasename e:\ tablename test.db datasource1 dataset table1 dbgrid1 datasource datasource1
  在该例中,假设我们的Aaa字段为中文内容,Bbb和Cclearcase/" target="_blank" >cc字段为英文内容,我们可以这样设置:

  1. Form1的OnCreate事件过程与三相同。

  2. ComboBox1的OnChange事件过程输入以下代码:

  DBGrid1-〉Columns-〉Items[0]-〉ImeName=ComboBox1-〉Text;

  DBGrid1-〉Columns-〉Items[1]-〉ImeName=imAlpha;

  DBGrid1-〉Columns-〉Items[2]-〉ImeName=imAlpha; //英文输入模式

  3.运行程序,首先在下拉列表中选择了输入法,之后当输入焦点移入Aaa字段时,输入法自动切换到所选输入法,而移入到Bbb和Ccc字段时,又切换回英文方式。

  以上讨论了在C++ Builder中自动切换输入法的几种途径,实践证明,在有大量数据输入的系统中,采用这种技术,可以在很大程度上减轻输入量,是一种很好的界面形式。有兴趣的朋友们不妨将这种技术用在自己的软件中,相信一定会使你的软件增色不少。
 

原文转自:http://www.ltesting.net