Thai是一种非常特殊的语言。你可以像其他任何语言一样在辅音后面、前面、上面或下面(好吧,只有短长“u”的音可以放在下面,但无论如何...)书写元音(共32个)。
此外,还有其他修饰符(4个声调标记、ga-ran、mai-tai-ku和其他修饰符)可以放在已有元音的上方!
例如:
如您所见,如果我尝试使用等宽字体打印它,则“实际长度”将为5个字符,但所有UTF-8 strlen例程都会给我返回11个字符 - 这是完全正确的,但我需要知道当等宽字体打印时字符串将使用的“实际空间”,无论是在屏幕上还是在打印机上。
当然,一个简单的解决方案是列出所有可以放在单词顶部或底部的特殊字符,并从总计中删除它们。
由于我不确定是否能找到所有特殊字符,因此是否已经有任何语言中的例程可以让我将其翻译成Delphi?
谢谢。
此外,还有其他修饰符(4个声调标记、ga-ran、mai-tai-ku和其他修饰符)可以放在已有元音的上方!
例如:
ที่ดีที่สุด (the best)
如您所见,如果我尝试使用等宽字体打印它,则“实际长度”将为5个字符,但所有UTF-8 strlen例程都会给我返回11个字符 - 这是完全正确的,但我需要知道当等宽字体打印时字符串将使用的“实际空间”,无论是在屏幕上还是在打印机上。
当然,一个简单的解决方案是列出所有可以放在单词顶部或底部的特殊字符,并从总计中删除它们。
由于我不确定是否能找到所有特殊字符,因此是否已经有任何语言中的例程可以让我将其翻译成Delphi?
谢谢。
TCanvas.TextExtent()
或FMX的TCanvas.Text(Width|Height)()
方法一样的东西,并且需要在TCanvas.Font
中加载一个Unicode字体(或直接使用Win32GetTextExtentPoint32()
函数)。 - Remy LebeauGetTextExtentPoint32
给出了解决方案,该函数表示(使用您使用的大小为20的CordialUPC字体)字符串在默认96像素每英寸的窗体上的宽度为57像素,高度为37像素。将其缩放到打印机.Canvas尺寸只需要使用Printer.Canvas.Handle而不是窗体的Canvas.Handle作为HDC参数即可。 - Ken White