如何以编程方式完全对齐文本( Delphi )?

xvw2m8pv  于 2023-06-22  发布在  其他
关注(0)|答案(5)|浏览(183)

我如何才能完全对齐一个文本块(像MS Word那样,不仅在右边,而且在左边,而且在两边)?
我想调整一些文本(主要是阿拉伯语文本)到一定的屏幕尺寸(一些手持设备屏幕上,实际上,它的文本查看器没有这个功能),并保存此文本为合理的。所以我可以重新加载并在其他地方再次使用它。
(The MS Word的问题是,如果你从MS Word复制对齐的文本并粘贴到另一个编辑器,它将复制它不对齐)。
更新:现在我想这样做:
1.得到一个词
1.获取字宽度

  1. add-word-to-total-Word和add-Word-width-to-total-word-width
    1.检查total-Word-width = myscreen-width,然后继续
    否则如果total-Word-width在myscree-wdith和(myscreen-width -3)之间,则
    add-spaces-To-total-word,直到它= myscreen-width
    这就是我现在的想法,但我提出这个问题,希望看看是否有更好的解决方案,或者其他人已经实现了它。
    PS:我希望我已经把我的问题说清楚了,如果有不好的表达,我很抱歉。
    edit 1:更改标题以使其更清晰。
j91ykkif

j91ykkif1#

如果要对齐纯文本,则只能在行中添加额外的空格以使行左右对齐。不幸的是,字符宽度在字体上不同;所以这样做只适用于特定的字体,除非您限制自己的等宽字体,所有字符具有相同的大小。
如果你想要像Word中那样的结果,添加空格不会削减它。Word不会添加空格,但会拉伸和收缩现有空格。此信息在您将其复制并粘贴到另一个应用程序时丢失。
无论哪种方式,证明是一个优化问题。如果您对一个好的解决方案及其实现感兴趣:看一下TeX。对于使用等宽字体的纯文本的实现,请查看par

brgchamk

brgchamk2#

有一些API调用可能会有所帮助:
ExtTextOutGetCharacterPlacement
查看GetCharacterPlacement的GCP_JUSTIFY标志
ExtTextOut由Canvas使用。TextRect

91zkwejq

91zkwejq3#

你要面对的问题总是字体呈现的差异。Word通过调整kerning以及调整几个字之间的像素数(两种方式中的任意一种)来处理完全对齐。最后的结果是两个边距对齐。这种像素调整是双向的,并且尽可能均匀。
要在便携式设备中正确处理此问题,您还必须对此处的文本显示执行相同的算法。
如果这是不可能的,那么唯一的方法,你甚至可以得到有点接近将是添加空格之间的话。

zpjtge22

zpjtge224#

正如在其他答案中所指出的那样,Word通过拉伸现有空间来进行充分的调整,通常是非常小的量。只有当你完全控制你的文本在屏幕上的绘制方式(哪个单词-或任何其他windows程序)时,这才是可能的。
在这方面,您唯一的真实的选择是在目标平台上实现自己的文本查看器。例如,你需要自己在屏幕上绘制文本(任何允许游戏的平台都应该允许你在屏幕上绘制)。然而,这似乎是一个可怕的很多麻烦,以获得合理的文本。
抱歉帮不上什么忙。

uyto3xhc

uyto3xhc5#

使用trichedittmemotdbrichedit时,如果使用TActionManager,则会出现不同的命令(应用标准字体操作)。按Ctrl+J组合键时,文本宽度对齐。

相关问题