如何以编程方式完全证明文本(Delphi)?

时间:2009-10-30 08:46:13

标签: delphi text alignment

我如何完全证明一个文本块(就像MS Word一样,不仅在右边而且在左边但在两边)?

我想证明某些文本(主要是阿拉伯语文本)调整到某个屏幕大小(实际上是某些手持设备屏幕,并且其文本查看器没有此功能)并将此文本保存为合理。所以我可以在其他地方重新加载并重复使用它。

(MS字的问题在于,如果您从MS Word复制对齐文本并将其粘贴到另一个编辑器,则会将其复制为无理由)。

更新:现在我想这样做:

  1. GET-一个字

  2. GET-字宽

  3. add-word-to-total-Word和add-Word-width-to-total-word-width

  4. 检查total-Word-width = myscreen-width是否继续

  5. 否则,如果总字宽在myscree-wdith和(myscreen-width -3)之间,那么

    add-spaces-To-total-word,直到它= myscreen-width

    这就是我现在的想法,但我提出这个问题并希望看看是否有更好的解决方案,或者其他人已经实现了它。

    PS:我希望我的问题清楚,如果有的话,我很抱歉表达不好。

    edit1:更改标题以使其更清晰。

4 个答案:

答案 0 :(得分:3)

如果要对纯文本进行对齐,则只能在线条上添加额外的空格,以使它们在左右对齐。不幸的是,字体宽度因字体而异;所以这样做只会对某种字体起作用,除非你把自己局限于所有字符都相同的等宽字体。

如果你想要像Word一样的结果,添加空格不会削减它。 Word不会添加空格,而是拉伸和缩小现有空间。将此信息复制并粘贴到另一个应用程序时,此信息将丢失。

无论哪种方式,证明是一个优化问题。如果您对一个好的解决方案及其实现感兴趣:看看TeX。对于使用等宽字体处理纯文本的实现,请查看par

答案 1 :(得分:1)

有一些API调用可能有所帮助:

ExtTextOutGetCharacterPlacement

查看GetCharacterPlacement的GCP_JUSTIFY标志

Canvas.TextRect

使用ExtTextOut

答案 2 :(得分:0)

您将面临的问题始终是字体渲染的差异。 Word通过调整kerning以及将单词之间的像素数量调整为几个(任一方式)来处理完全对齐。最终的结果是两个边缘。这种像素调整是以两种方式完成的,并且尽可能均匀。

要在便携式设备中正确处理此问题,您还必须执行相同的算法来显示文本。

如果这是不可能的,那么你甚至可以稍微接近的唯一方法就是在单词之间添加空格。

答案 3 :(得分:0)

正如在其他答案中所指出的,Word通过非常小的数量拉伸现有空间来做充分的理由。只有在您完全控制在屏幕上绘制文本的方式(哪个词 - 或任何其他Windows程序具有)时,才可以执行此操作。

在这方面,您唯一真正的选择是在您定位的平台上实现自己的文本查看器。例如,您需要自己在屏幕上绘制文本(允许游戏的任何平台都允许您在屏幕上绘图)。然而,这对于获得合理的文本来说似乎是一个非常麻烦的事情。

抱歉没有更多的帮助。