TEdit 和 TMemo 在界面上,运行期,鼠标右键点下去,会出来一个弹出式下拉菜单,里面的内容是:

Cut
Copy
Paste
Delete
SelectAll

都是文本操作的常用功能。

问题是,它是英文的。有人问,改成中文怎么办。有人回答,直找到 FMX.Consts.pas 去修改里面的常量定义。这个办法我没测试过,但多半有效。问题是,这样直接修改 Delphi 的源代码也点简单粗暴,而且也不支持多语言。假设你做的程序,需要支持多语言怎么办?

FMX 本身支持多语言。TLabel, TButton 等,都有一个 AutoTranslate 属性,默认是 True。

如果使用它的多语言功能?我之前有 Blog 写过,地址。

假期有时间写代码:FireMonkey 之多语言(TLang)_pcplayer的博客-CSDN博客

这里再次简单说一下如何做。

如何让你的 FMX APP 有多语言

1. 首先建立语言文件。假设你的程序里面,在写代码阶段,都用英语来写(因为上述弹出菜单就是英语的,所以,没办法,我们就用英语来写),比如:

ShowMessage('Please Login');
ButtonLogin.Text := 'Login';
LabelUserName.Text := 'User Name';

我们创建一个对应的语言文件,内容如下:

Cut=剪切
Copy=复制
Paste=粘贴
Delete=删除
SelectAll=全选Please Login=请登录
Login=登录
User Name=用户名

把这个文件保存为一个文本文件,名字随便起,这里我起名:MyCn.txt;

同样,你还可以做韩文,日文,德文的文件,就是把等号后面的词汇替换为对应的语言的词汇。

2. 程序里面,需要切换语言的地方,加载对应的语言文件。假设这里就是加载中文:

varSL: TStringList;
beginSL := TStringList.Create;trySL.LoadFromFile('MyCn.txt');LoadLangFromStrings(SL);  //自动翻译完成finallySL.Free;end;
end;

上述代码,LoadLangFromStrings 函数,在 FMX.Types 单元里面。如果你用这句话编译通不过,就 uses FMX.Types;

LoadLangFromStrings 调用完成,你会发现,你界面上的 ButtonLogin, LabelUserName 显示的文字,瞬间就从英文变成中文了。

再改动一下 ShowMessage 的代码:

ShowMessage(Translate('Please Login'));

如果这个时候执行那个 ShowMessage('Please Login') 你会发现弹出来的框里面,显示的是中文而不是那句英文。

3. 菜单条的汉化

假设设计期,你有一些自己设计的主菜单,或者 PopupMenu 的菜单,菜单条你写了英文。执行完上述操作,你的菜单条仍然是英文,并没有变成中文。

你在属性面板里面看,会发现,TLabel 有一个属性叫做 AutoTranslate,但菜单没有。

其实它是有的,只不过没有 Published 而是 public 的,因此不会出现在属性面板里面。

所以,必须用代码来设置。比如你有一个菜单条是 MenuItem1: TMenuItem;

MenuItem1.Text := 'Cut';
MenuItem1.AutoTranslate := True;

那么,默认它显示为 Cut,执行完上述语言切换代码后,它就会自动变成“剪切”。

4. 重头戏来了,TMemo, TEdit 的那个默认的弹出菜单怎么办?

这里就只说 TEdit,TMemo 的原理是一样的。

读 FMX 的源代码,发现 TEdit 内部有一个 TStyledEdit,这个 TStyledEdit 内部有一个 EditPopupMenu,这个玩意,就是鼠标右键点下去的那个默认菜单。

TEdit 本身有一个 PopupMenu 属性,你拖一个 PopupMenu1 到界面上,在属性面板里面指定 TEdit 的 PopupMenu 指向  PopupMenu1,则运行期鼠标右键点下去,弹出的就不是这个 EditPopupMenu 了,而是你给点那个 PopupMenu1。设计期指定的这个外部的 PopupMenu1 其实是挂载到了 TControl.PopupMenu 底下,而不是 TStyledEdit.EditPopupMenu 底下。

问题是如何通过 Edit1, 拿到这个 TStyledEdit,通过 TEdit 的公开的方法,确实没法获得。

在源代码里面,TStyledEdit 的 EditPopupMenu 是在 Protected 底下,而不是 Public 底下。

有个高手给出了一个【Hack】的方法。代码如下:

  if Edit1.Presentation is TStyledEdit thenbeginwith TStyledEditHack(Edit1.Presentation).EditPopupMenu dobeginfor i := 0 to ItemsCount -1 dobeginItems[i].AutoTranslate := True;end;end;end;

执行完上述代码,就是给那个默认的弹出菜单,每一条,都设置了自动翻译属性为 True。

执行完上述代码后,如果再执行切换语言的代码,你会发现,TEdit 的默认弹出菜单都变成中文的了。

通过这个方式,可以实现这个默认弹出菜单的多语言。

FireMonkey 的菜单条的汉化,以及多语言相关推荐

  1. eclipse如何汉化--安装各国语言包

    eclipse如何汉化–安装各国语言包 虽然我强烈推荐程序员使用Eclipse的英文版(当然,到了现在这个节点,我更喜欢IDEA),但仔细想想,好好了解下Eclipse的语言包插件也是个不错的选择.因 ...

  2. pycharm不用下载汉化包修改语言为中文

    pycharm不用下载汉化包修改语言为中文 选择设置/快捷键ctrl+alt+s 最后重新启动pycharm,就OK了.

  3. 如何汉化DNN--中文语言包的使用

    注意:对于模块的汉化包安装是同样的步骤. 1,下载语言包,如果找不到,这里有 DNN 4.6.2的中文语言包 2,用HOST登录 3,到"Host->Language" 4, ...

  4. 模拟设计的100条圣经(汉化版)

    1.Capacitors and resistors have parasitic inductance, about 0.4nH for surface mount and 4nH for a le ...

  5. 小乌龟Tortoisegit官方汉化包 中文语言安装

    进入小乌龟官网的Download界面下拉在Language中选择中文语言包简体 https://tortoisegit.org/download/ 下载后直接双击,一步到位安装好,不用管安装路径 在桌 ...

  6. 说说Cisco Packet Tracer的各种汉化中文语言包

    cisco packet tracer版本更新很快,目前很多人还在使用古老的5.X版本的,因为很多资料基于5.0版本的,其实新版本是可以兼容旧版本的,当然少量的功能不能使用也是有的. 首先看看官网的介 ...

  7. 再谈Cisco Packet Tracer的各种汉化包的使用场合

    上篇文章"说说Cisco Packet Tracer的各种汉化包",我罗列了Cisco Packet Tracer的各种汉化包,但是很多网友并不知道这些汉化包怎么用?用在哪些版本上 ...

  8. VisualStudio2005英文版被SQL2005简体中文版汉化

    今天装了SQL SERVER 2005 简体中文开发版,结果发现原来的VisualStudio2005英文版变成中文版了. 有部分菜单未被汉化,如TEST 发现是SQL SERVER 2005 安装后 ...

  9. CodeBlocks中文汉化Code::Blocks 10.05 中文版

    http://jianhai1229.blog.163.com/blog/static/3488700020101250125766/ 实现中文界面  实现中文界面,包括两个步骤.最主要的是安装其中文 ...

最新文章

  1. VC的包含文件和引用文件是不一样的~
  2. QT的QBitArray 类的使用
  3. 坑爹的属性,android:descendantFocusability用法简析
  4. 听说面试又挂在计算机操作系统了?仔细看看这个!!!【强烈推荐】
  5. CSS边框,背景,边距,溢出
  6. python最简分数_592. 分数加减法运算(Python)
  7. python和java哪个有用_python和java哪个好
  8. 用 Ansible 实现基于 OpenShift (Kubernetes) 的 DevOps
  9. equal java用法_equal,和等号的用法..
  10. oracle多关键字查询,Oracle多关键字查询
  11. 【kaggle注册页面没有显示验证码】
  12. 按头安利!好看又实用的电机 SolidWorks模型素材看这里
  13. C#时间格式转换时间戳
  14. 【老骥伏枥-原创】DIY在VMware上安装万由U-NAS系统的初体验
  15. uniapp不是自定义导航栏的情况下,点击返回按钮直接返回首页
  16. 微信小程序休眠setTimeout
  17. lsa ospf的opaque_OSPF LSA类型详解
  18. 关于Java基础部分知识的综合应用之成员调度系统的项目
  19. java连不上sqlserver_java和SQL连接不上——解决步骤
  20. 《医院管理系统》项目研发总结

热门文章

  1. Latex安装与配置
  2. python手写多个字母识别_一个带界面的CNN手写数字识别,使用Python(tensorflow, kivy)实现...
  3. n对括号的所有的合法组合排序解法
  4. MATLAB中fft与ifft需要注意的问题
  5. 中国水牛品种、存栏量及水牛奶产量、企业格局分析[图]
  6. es (Elasticsearch)--Java REST Client解析
  7. 【车间调度】基于matlab混合蛙跳算法 (SFLA) 求解简单调度问题【含Matlab源码 2247期】
  8. Chrome-adblock插件下载安装
  9. axure条件判断:不用变量简单实现
  10. Java家庭成员姓名