pb 应用的中英文切换如何作?--- 200分

eastyan 2002-06-10 10:16:41

如果应用较大,涉及众多的pb对象:窗口、菜单、数据窗口、用户对象等等。
如何处理?

或者有较为折衷的办法?
...全文
458 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
devil_heart 2002-07-02
  • 打赏
  • 举报
回复
如果做简繁体,倒有控件可以,做中英文就不好做了,参考以下的吧:

(转载)
有外资管理背景的企业,常常要求应用软件能实现同一程序动态中英文切换,以满足中方和外方管理人员的不同需要。本文介绍一种简单实现中英文切换的方法,适用于PB的各种版本。
用户界面包括三个部分:1.菜单、窗体、窗体上的文本、按钮等各控件;2.提示信息框;3.数据内容。实现思路是将中英文对照信息分散地放在每一个对象的Tag属性上;再用递归方法遍历各种控件及其下层的子控件,对于搜索到的控件,用Tag中存放的中英文对照替换此控件的.Text等文本显示属性。
用户对象nvo_translate主要包括of_translate(a_menu,as_language)和of_translate(a_window,as_language)两个重载的递归函数,对象本身声明为Auto Intantiate。

一、首先在nvo_translate中声明一个实例变量,用于记录当前的语言:
string is_language = 'ENGLISH'

二、菜单的翻译
菜单项有一个属性数组Item[],定义了其下级的菜单项。

// of_translate(menu a_menu,string as_language) return integer
Long i,n
string s
n=UpperBound(a_menu.item)
For i=1 To n
if trim(a_menu.Item[i].text) <> '-' then
if pos(upper(a_menu.Item[i].tag),'ENGLISH')=0 then
a_menu.Item[i].tag += ',ENGLISH='+a_menu.Item[i].text
end if
s = trim(xargs(a_menu.Item[i].tag,as_language))
if len(s)>0 then
a_menu.Item[i].text = s
a_menu.Item[i].ToolbarItemText = s
end if
end if
If UpperBound(a_menu.Item[i].Item)>0 Then
This.of_translate(a_menu.Item[i],as_language) // 递归
End If
Next
Return 0

三、窗体的翻译
窗体对象有一个属性数组control[],定义了窗体上各个对象的Handle。

// 中英文切换: of_translate(a_window,as_language)
Long i,n
string s
window w
DataWindow dw
Tab tb
UserObject uo
StaticText st
CommandButton cb
CheckBox cx
RadioButton rb
PictureButton pb
GroupBox gb

SetPointer(HourGlass!)
a_window.SetRedraw(False)

// 翻译窗体标题
if pos(upper(a_window.tag),'ENGLISH')=0 then
a_window.tag += ',ENGLISH='+a_window.title
end if
s= trim(xargs(a_window.tag,as_language))
if len(s)>0 then a_window.title = s

// 翻译窗体中的文本、按钮等各种对象
n=UpperBound(a_window.control)
For i=1 To n
if not a_window.control[i].visible then continue
Choose Case a_window.control[i].TypeOf()
Case StaticText!
st = a_window.control[i]
if pos(upper(st.tag),'ENGLISH')=0 then
st.tag += ',ENGLISH='+st.text
end if
s = trim(xargs(st.tag,as_language))
if len(s)>0 then
st.text = s
end if
Case CommandButton!
cb = a_window.control[i]
if pos(upper(cb.tag),'ENGLISH')=0 then
cb.tag += ',ENGLISH='+cb.text
end if
s = trim(xargs(cb.tag,as_language))
if len(s)>0 then
cb.text = s
end if
Case CheckBox!
cx = a_window.control[i]
if pos(upper(cx.tag),'ENGLISH')=0 then
cx.tag += ',ENGLISH='+cx.text
end if
s = trim(xargs(cx.tag,as_language))
if len(s)>0 then cx.text = s
Case RadioButton!
rb = a_window.control[i]
if pos(upper(rb.tag),'ENGLISH')=0 then
rb.tag += ',ENGLISH='+rb.text
end if
s = trim(xargs(rb.tag,as_language))
if len(s)>0 then rb.text = s
Case PictureButton!
pb = a_window.control[i]
if pos(upper(pb.tag),'ENGLISH')=0 then
pb.tag += ',ENGLISH='+pb.text
end if
s = trim(xargs(pb.tag,as_language))
if len(s)>0 then pb.text = s
Case GroupBox!
gb = a_window.control[i]
if pos(upper(gb.tag),'ENGLISH')=0 then
gb.tag += ',ENGLISH='+gb.text
end if
s = trim(xargs(gb.tag,as_language))
if len(s)>0 then gb.text = s
Case DataWindow!
dw = a_window.control[i]
if pos(upper(dw.tag),'ENGLISH')=0 then
dw.tag += ',ENGLISH='+dw.title
end if
s = trim(xargs(dw.tag,as_language))
if len(s)>0 then dw.title = s
// this.of_translate(dw,as_language) // 略
Case Tab!
tb = a_window.control[i]
// this.of_translate(tb,as_language) // 类似窗体翻译
Case UserObject!
uo = a_window.control[i]
// this.of_translate(uo,as_language) // 类似窗体翻译
End Choose
Next

a_window.SetRedraw(True)
SetPointer(Arrow!)

Return 0

四、在应用程序中的调用
1.主菜单(Menu)、主窗体(Frame)、子窗体(Sheet)、响应窗体(Response)等对象均要声明一个Instant变量is_language来记录当前语言:
string is_language='ENGLISH'
2.在主窗口(w_mdi_frame)的Activate事件中:
// 翻译主窗口
if this.is_language<>gnvo_translate.is_language then
gnvo_translate.of_translate(this,gnvo_translate.is_language)
this.is_language = gnvo_translate.is_language
end if
// 翻译主菜单
if m_genapp_frame.is_language<>gnvo_translate.is_language then
gnvo_translate.of_translate(m_genapp_frame,gnvo_translate.is_language)
m_genapp_frame.is_language = gnvo_translate.is_language
end if
3.在子窗体的Activate事件或响应窗体的Open事件中:
if this.is_language<>gnvo_translate.is_language then
gnvo_translate.of_translate(this,gnvo_translate.is_language)
this.is_language = gnvo_translate.is_language
end if

五、在窗单项、窗体及窗体中的每个对象的Tag属性中:
Tag = "Chinese=中文文本, English=英文文本, Help=..."
例如:
菜单:"Chinese=打开(&O), English=&Open"
窗体:"Chinese=直拨单, English=Direct Issue Voucher"
按钮:"Chinese=打印(&P), English=&Print"
文本:"Chinese=单据日期:,English=Transaction Date:"

在实际使用中,如果默认是英文显示,则Tag属性中只需要记录Chinese项,翻译过程中会自动将原来的英文文本追加到Tag中。要注意各种控件要预留足够的宽度来显示中文或英文的文字。当控件的tag属性中未定义对应的中英文信息时,也可扩充为从存放在数据库的表中或本地文件中的中英文对照表中查字典。
jeking 2002-07-02
  • 打赏
  • 举报
回复
好像没什么简单好方法。
都要重新做的。
bys_home 2002-07-02
  • 打赏
  • 举报
回复
表:语言
列:中文,英文
eastyan 2002-07-02
  • 打赏
  • 举报
回复
对不起!出差回来了。

看来有些朋友误会了我的问题。
我指的不是‘中英文切换’,而是整个应用的‘语种变化’,
就像许多网占有语种的变化一样。

C语言 的应用比较容易,pb 应用好像无法办到????
pbworm 2002-06-10
  • 打赏
  • 举报
回复
好象楼主不是要求输入法的切换吧
pbworm 2002-06-10
  • 打赏
  • 举报
回复
应该不是输入法的切换吧
dotnba 2002-06-10
  • 打赏
  • 举报
回复
http://www.csdn.net/expert/topic/776/776196.xml?temp=.2927667
FOLEX 2002-06-10
  • 打赏
  • 举报
回复
function boolean ImmSimulateHotKey (UnsignedLong hWnd,
UnsingedLong dwHotKeyID) library "IMM32.dll"
function unsignedlong GetKeyboardLayout (unsignedlongwLayout)library "
user32.dll"
function boolean ImmIsIME(unsignedLong hklKeyboardLayout)library "IMM3
2.DLL"

英文输入法切换
constant int IME_THotKey_IME_NonIME_Toggle=112
uint hklCurrent
unsignedlong hnd

hklCurrent=GetKeyboardLayout(0)
if ImmIsIME(hklCurrent) then
hnd=Handle(parent)
ImmSimulateHotKey(hnd,IME_THotKey_IME_NonIME_Toggle)
end if

中文输入法切换
constant int IME_THotKey_IME_NonIME_Toggle=112
uint hklCurrent
unsignedlong hnd

hklCurrent=GetKeyboardLayout(0)
if not ImmIsIME(hklCurrent) then
hnd=Handle(parent)
ImmSimulateHotKey(hnd,IME_THotKey_IME_NonIME_Toggle)
end if
dotnba 2002-06-10
  • 打赏
  • 举报
回复
http://www.csdn.net/expert/topic/776/776196.xml?temp=.2927667
ddtid 2002-06-10
  • 打赏
  • 举报
回复
用API 函数
function boolean ImmSimulateHotKey (ULong hWnd, ULong dwHotKeyID) library "IMM32.dll"
function ulong GetKeyboardLayout(ulong dwLayout) LIBRARY "user32.dll"
function boolean ImmIsIME(uLong hklKeyboardLayout) library "IMM32.DLL"

代码:

this.selecttext(1,len(this.text))
hklCurrent=GetKeyboardLayout(0)
if not ImmIsIME(hklCurrent) then
hnd=Handle(parent)
ImmSimulateHotKey(hnd,IME_THotKey_IME_NonIME_Toggle)
end if
ddtid 2002-06-10
  • 打赏
  • 举报
回复
用API 函数
function boolean ImmSimulateHotKey (ULong hWnd, ULong dwHotKeyID) library "IMM32.dll"
function ulong GetKeyboardLayout(ulong dwLayout) LIBRARY "user32.dll"
function boolean ImmIsIME(uLong hklKeyboardLayout) library "IMM32.DLL"

代码:

this.selecttext(1,len(this.text))
hklCurrent=GetKeyboardLayout(0)
if not ImmIsIME(hklCurrent) then
hnd=Handle(parent)
ImmSimulateHotKey(hnd,IME_THotKey_IME_NonIME_Toggle)
end if
misslyy 2002-06-10
  • 打赏
  • 举报
回复
查找以前的帖子,有很多答案的,而且,我这里有历程,想要的话说一声,给你发过去
myclife 2002-06-10
  • 打赏
  • 举报
回复
帮你UP
2021(国开)计算机应用基础(本)形考任务1 单选题 1. 当前的计算机一般被认为是第四代计算机,它所采用的逻辑元件是__D____。 选择一项: A.电子管 B.晶体管 C.集成电路 D.大规模集成电路 第一台电子计算机是1946年在美国研制成功的,该机的英文缩写名称是____A__。 选择一项: A.ENIAC B.EDVAC C.MARK D.EDSAC 3.要移动窗口,可以将鼠标指针移到窗口的___B_。 选择一项: A.工具栏位置上拖曳 B.标题栏位置上拖曳 C.状态栏位置上拖曳 D.编辑栏位置上拖曳 4.在Windows中,排列桌面项目图标的第一步操是__B__。 选择一项: A.按鼠标左键单击任务栏空白区 B.按鼠标右键单击桌面空白区 C.按鼠标右键单击任务栏空白区 D.按鼠标左键单击桌面空白区 5.计算机的硬件系统由五大部组成,下列各项中不属于这五大部的是__D____。 选择一项: A.运算器 B.I/O设备 C.控制器 D.语言处理 6.在Windows操环境下,将整个屏幕画面全部复制到剪贴板中使用的键是__C__。 选择一项: A.Page Up B.Alt+F4 C.Print Screen D.Ctrl+Space 7.在Windows中,Alt+Tab键的用是__C__。 选择一项: A.关闭应用程序 B.打开应用程序的控制菜单 C.应用程序之间相互切换 D.打开"开始"菜单 8.在Windows中,为了查找文件名以"A"字母打头的所有文件,应当在查找名称框内输入 __D__。 选择一项: A.A B.A# C.A? D.A* 9.8个字节含二进制位__C____。 选择一项: A.8个 B.16个 C.64个 D.32个 10.二进制数10110001相对应的十进制数应是___A___。 选择一项: A.177 B.179 C.123 D.167 11.冯·诺依曼结构计算机的五大基本构件包括运算器、存储器、输入设备、输出设备和 ___B___。 选择一项: A.显示器 B.控制器 C.鼠标器 D.硬盘存储器 12.Windows的任务栏可用于____。 选择一项: A.修改程序组的属性 B.添加应用程序 C.修改程序项的属性 D.切换当前应用程序 多选题 13.下列四个计算机存储容量的换算公式中,正确的是__BCD____。 选择一项或多项: A.1GB=1024PB B.1MB=1024KB C.1KB=1024B D.1TB=1024GB 14.以下关于文件压缩的描述中,正确的是___BC___。 选择一项或多项: A.文件压缩是不可逆的 B.不同类型的文件的压缩比率是不同的 C.文件压缩后文件尺寸一般会变小 D.使用文件压缩工具可以将JPG图像文件压缩70%左右 15.关于Windows窗口,以下叙述错误的是_BCD___。 选择一项或多项: A.屏幕上可以出现多个窗口,但只有一个是活动窗口 B.屏幕上只能出现一个窗口,这就是活动窗口 C.当屏幕上出现多个窗口时,就没有了活动窗口 D.屏幕上可以出现多个窗口,但不止一个活动窗口 16.信息的不同形式有数字、文字和__ACD____。 选择一项或多项: A.视频 B.函数 C.图片 D.音频 17.在Windows中,关于文件夹的描述正确的是_BCD___。 选择一项或多项: A.文件夹中可以存放两个同名文件 B.文件夹中可以存放驱动程序文件 C."我的电脑"是一个系统文件夹 D.文件夹是用来组织和管理文件的 18.计算机软件为系统软件和应用软件两大类,下列各项中属于系统软件的是__ABC__ __。 选择一项或多项: A.故障诊断程序 B.编译程序 C.操系统 D.办公软件 19.下列关于通用计算机的描述中,正确的是__BCD____。 选择一项或多项: A.只可进行科学计算 B.用于解决不同类型问题而设计 C.用途广泛 D.是一种用途广泛、结构复杂的计算机 20.下列关于Windows的叙述中,正确的是_ABD___。 选择一项或多项: A.双击某类扩展名的文件,操系统可启动相关的应用程序 B.删除目录时,可将此目录下的所有文件及子目录一同删除 C.删除应用程序快捷图标时,会连同其所对应的程序文件一同删除 D.设置文件夹属性时,可以将属性应用于其包含的所有文件和子文件夹 判断题 21.文件ABC.mp3存放在F盘的T文件夹中,它的完整路径是F:\T\ABC.mp3。 选择一项: 对 错 22.ASCII码是国际上通用的英文字符编码。 选择一项: 对 错 23.在Windows中,通过控制面板可以添加新硬件。 选择一项: 对 错 24.在资源管理器中,按住Shift键,单击每一个要选定的文件图标,可选定多个非连续 文件。 选
计算机应用基础(本)形考任务1-3全文共5页,当前为第1页。计算机应用基础(本)形考任务1-3全文共5页,当前为第1页。 计算机应用基础(本)形考任务1-3全文共5页,当前为第1页。 计算机应用基础(本)形考任务1-3全文共5页,当前为第1页。 形考任务1 在Windows中,排列桌面项目图标的第一步操是____。 正确答案是:按鼠标右键单击桌面空白区 当前的计算机一般被认为是第四代计算机,它所采用的逻辑元件是______。 正确答案是:大规模集成电路 第一台电子计算机是1946年在美国研制成功的,该机的英文缩写名称是______。 正确答案是:ENIAC 计算机的硬件系统由五大部组成,下列各项中不属于这五大部的是______。 正确答案是:语言处理 要移动窗口,可以将鼠标指针移到窗口的____。 正确答案是:标题栏位置上拖曳 在Windows操环境下,将整个屏幕画面全部复制到剪贴板中使用的键是____。 正确答案是:Print Screen 8个字节含二进制位______。 正确答案是:64个 冯·诺依曼结构计算机的五大基本构件包括运算器、存储器、输入设备、输出设备和______。 正确答案是:控制器 在Windows中,为了查找文件名以"A"字母打头的所有文件,应当在查找名称框内输入____。 正确答案是:A* 二进制数10110001相对应的十进制数应是______。 正确答案是:177 在Windows中,Alt+Tab键的用是____。 正确答案是:应用程序之间相互切换 Windows的任务栏可用于____。 正确答案是:切换当前应用程序 下列关于通用计算机的描述中,正确的是______。 正确答案是:(去除:只可进行科学计算)用于解决不同类型问题而设计, 用途广泛, 是一种用途广泛、结构复杂的计算机 下列四个计算机存储容量的换算公式中,正确的是______。 正确答案是:(去除:1GB=1024PB)1TB=1024GB, 1KB=1024B, 1MB=1024KB 关于Windows窗口,以下叙述错误的是____。 正确答案是:(去除:屏幕上可以出现多个窗口,但只有一个是活动窗口)屏幕上只能出现一个窗口,这就是活动窗口, 屏幕上可以出现多个窗口,但不止一个活动窗口, 当屏幕上出现多个窗口时,就没有了活动窗口 信息的不同形式有数字、文字和______。 正确答案是:(去除:函数)图片, 音频, 视频 在Windows中,关于文件夹的描述正确的是____。 正确答案是:(去除:文件夹中可以存放两个同名文件)文件夹是用来组织和管理文件的, "我的电脑"是一个系统文件夹, 文件夹中可以存放驱动程序文件 以下关于文件压缩的描述中,正确的是______。 正确答案是:(选择)文件压缩后文件尺寸一般会变小, 不同类型的文件的压缩比率是不同的 下列关于Windows的叙述中,正确的是____。 正确答案是:(去除:删除应用程序快捷图标时,会连同其所对应的程序文件一同删除)设置文件夹属性时,可以将属性应用于其包含的所有文件和子文件夹, 删除目录时,可将此目录下的所有文件及子目录一同删除, 双击某类扩展名的文件,操系统可启动相关的应用程序 计算机软件为系统软件和应用软件两大类,下列各项中属于系统软件的是______。 计算机应用基础(本)形考任务1-3全文共5页,当前为第2页。计算机应用基础(本)形考任务1-3全文共5页,当前为第2页。正确答案是:(去除:办公软件)操系统, 编译程序, 故障诊断程序 计算机应用基础(本)形考任务1-3全文共5页,当前为第2页。 计算机应用基础(本)形考任务1-3全文共5页,当前为第2页。 ASCII码是国际上通用的英文字符编码。 正确答案是:"对"。 计算机断电后,会使ROM存储器中存储的数据丢失。 正确答案是:"错"。 文件ABC.mp3存放在F盘的T文件夹中,它的完整路径是F:\T\ABC.mp3。 正确答案是:"对"。 计算机一次能处理数据的最大位数称为该机器的字节数。 正确答案是:"错"。 在Windows中,"记事本"文件默认的文件扩展名是".txt"。 正确答案是:"对"。 在Windows中,通过控制面板可以添加新硬件。 正确答案是:"对"。 在资源管理器中,按住Shift键,单击每一个要选定的文件图标,可选定多个非连续文件。 正确答案是:"错"。 计算机中,运算器的主要功能是完成算术和逻辑运算。 正确答案是:"对"。 在Windows中,"回收站"中的文件或文件夹被还原后,将被放在一个专门存放还原文件的文件夹中。 正确答案是:"错"。 专用计算机是为某种特定目的而设计的计算机,针对性强、效率高,结构比通用计算机简单。 正确答案是:"对"。 形考任务2 每台计算机必须
计算机应用基础 形考业(第一、二章) 一、单选题 试题 1 第一台电子计算机是 1946 年在美国研制成功的,该机的英文缩写名称是______。 A.MARK B.EDSAC C.ENIAC D.EDVAC 试题 2 计算机的硬件系统由五大部组成,下列各项中不属于这五大部的是______。 A.I/O 设备 B.语言处理 C.控制器 D.运算器 试题 3 在 Windows 中,排列桌面项目图标的第一步操是____。 A.按鼠标左键单击任务栏空白区 B.按鼠标右键单击桌面空白区 C.按鼠标右键单击任务栏空白区 D.按鼠标左键单击桌面空白区 试题 4 要移动窗口,可以将鼠标指针移到窗口的____。 A.工具栏位置上拖曳 B.标题栏位置上拖曳 C.状态栏位置上拖曳 D.编辑栏位置上拖曳 试题 5 在 Windows 操环境下,将整个屏幕画面全部复制到剪贴板中使用的键是____。 A.Alt+F4 B.Print Screen C.Page Up D.Ctrl+Space 试题 6 当前的计算机一般被认为是第四代计算机,它所采用的逻辑元件是______。 A.大规模集成电路 B.电子管 C.集成电路 D.晶体管 试题 7 二进制数 10110001 相对应的十进制数应是______。 A.123 B.167 C.177 D.179 试题 8 冯·诺依曼结构计算机的五大基本构件包括运算器、存储器、输入设备、输出设备 和______。 A.鼠标器 B.控制器 C.显示器 D.硬盘存储器 试题 9 8 个字节含二进制位______。 A.64 个 B.32 个 C.16 个 D.8 个 试题 10 在 Windows 中,为了查找文件名以"A"字母打头的所有文件,应当在查找名称框内 输入____。 A.A B.A* C.A# D.A? 试题 11 Windows 的任务栏可用于____。 A.修改程序组的属性 B.切换当前应用程序 C.加应用程序 D.修改程序项的属性 试题 12 在 Windows 中,Alt+Tab 键的用是____。 A.关闭应用程序 B.打开应用程序的控制菜单 C.应用程序之间相互切换 D.打开"开始"菜单 二、多选题 试题 13 信息的不同形式有数字、文字和______。 A.视频 B.函数 C.图片 D.音频 试题 14 下列关于 Windows 的叙述中,正确的是____。 A.删除应用程序快捷图标时,会连同其所对应的程序文件一同删除 B.删除目录时,可将此目录下的所有文件及子目录一同删除 C.双击某类扩展名的文件,操系统可启动相关的应用程序 D.设置文件夹属性时,可以将属性应用于其包含的所有文件和子文件夹 试题 15 计算机软件为系统软件和应用软件两大类, 下列各项中属于系统软件的是______。 A.办公软件 B.编译程序 C.操系统 D.故障诊断程序 试题 16 下列四个计算机存储容量的换算公式中,正确的是______。 A.1TB=1024GB B.1GB=1024PB C.1MB=1024KB D.1KB=1024B 试题 17 关于 Windows 窗口,以下叙述错误的是____。 A.屏幕上只能出现一个窗口,这就是活动窗口 B.屏幕上可以出现多个窗口,但不止一个活动窗口 C.当屏幕上出现多个窗口时,就没有了活动窗口 D.屏幕上可以出现多个窗口,但只有一个是活动窗口 试题 18 在 Windows 中,关于文件夹的描述正确的是____。 A.文件夹是用来组织和管理文件的 B.文件夹中可以存放两个同名文件 C."我的电脑"是一个系统文件夹 D.文件夹中可以存放驱动程序文件 试题 19 下列关于通用计算机的描述中,正确的是______。 A.用途广泛 B.只可进行科学计算 C.用于解决不同类型问题而设计 D.是一种用途广泛、结构复杂的计算机 试题 20 以下关于文件压缩的描述中,正确的是______。 选择一项或多项: A.文件压缩后文件尺寸一般会变小 B.不同类型的文件的压缩比率是不同的 C.使用文件压缩工具可以将 JPG 图像文件压缩 70%左右 D.文件压缩是不可逆的 三、判断题 试题 21 计算机断电后,会使 ROM 存储器中存储的数据丢失。 对 错 试题 22 ASCII 码是国际上通用的英文字符编码。 对 错 试题 23 计算机中,运算器的主要功能是完成算术和逻辑运算。 对 错 试题 24 专用计算机是为某种特定目的而设计的计算机, 针对性强、 效率高, 结构比通用计算机简单。 对 错 试题 25 在 Windows 中, "回收站"中的文件或文件夹被还原后, 将被放在一个专门存放还原文件的文 件夹中。 对 错 试题 26 文件 ABC.mp3 存放在 F 盘的 T 文件

1,077

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧