首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何(在代码中)知道某些字符在Delphi程序的界面中显示正常(或不显示)

如何(在代码中)知道某些字符在Delphi程序的界面中显示正常(或不显示)
EN

Stack Overflow用户
提问于 2011-04-09 16:18:43
回答 4查看 448关注 0票数 1

对不起,我的英语...

我正在尝试用Delphi7编写一个小程序。它的界面将有我的语言的文本,其中有一些带有变音符号的字符。如果将"Language for non-Unicode programs“设置为”my language“,这些字符总是可以正常显示。这很正常。如果设置为其他值,则有时显示良好,有时不显示。我如何知道它们是否可以正常显示...?哦,我不能使用Unicode组件,只能正常使用。

我发现的唯一方法是将一个字符的图像捕获到位图中,并逐个像素地检查。但它的实现有很多工作要做,既慢又不精确。

我可以使用GetSystemDefaultLangID函数,并且知道“用于非Unicode程序的语言”设置为其他值,但仍然不知道它们是否显示良好。

谢谢你的任何想法。

EN

回答 4

Stack Overflow用户

发布于 2011-04-09 20:56:38

欢迎来到使用代码页编码的AnsiStrings的乐趣。您根本不应该使用AnsiStrings,您也知道这一点,但是您没有解释就说您不能使用unicode控件。这对我来说似乎很奇怪。您应该使用以下两种方法之一:

(a) Delphi (2009,2010,XE)的Unicode版本,其中String=UnicodeString。

(b)如果不是,至少使用适当的Unicode控件,例如TNT控件,并在需要存储重音字符或国际字符的地方在内部使用WideString类型。

您的Delphi版本具有String=AnsiString,并且您依赖于系统设置的语言环境(如您在问题中所说的)来选择重音字符的代码页表示,这是一个有问题的方案。如果你真的不能从Delphi7升级,至少开始使用WideStrings和TNT Unicode控件,但我必须说,这些努力都是浪费的,你最好获得Delphi,然后直接移植到Unicode。

您的问题是“我如何知道它们是否可以很好地存储?”您可以使用您的代码页进行编码和解码,并检查是否有任何内容被"?“替换。例如,窗口函数WideCharToMultiByte的行为是这样的。MBCS是一个痛苦的世界,不值得去做,但您问到如何才能找出地板从哪里掉下来,这样API就可以帮助您理解所选的编码规则。

票数 2
EN

Stack Overflow用户

发布于 2011-04-10 00:03:22

使用WideCharToMultiByte函数- http://msdn.microsoft.com/en-us/library/dd374130(v=vs.85).aspx并检查lpUsedDefaultChar参数。

票数 1
EN

Stack Overflow用户

发布于 2011-04-09 16:57:27

代码语言:javascript
复制
procedure TForm1.Button2Click(Sender: TObject);
var
    ACP: Integer;
begin
    ACP := GetACP;
    Caption := 'CP' + IntToStr(ACP);
    if ACP = 1250 then
        Caption := Caption + ' is okay for Romanian language';
end;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5603777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档