0

我有一个定义页面设置的 RTF 文档:

(...}\paperw16840\paperh11907\margl794\margt709\margr794\margb983\viewkind4\\uc1\trowd\....)

在我的应用程序中,我使用 aTRichEdit来显示文档。

TRichEdit有 aTPanel作为它的,Parent并且正在使用Align=alClientand AlignWithMargins=True

我将面板设置Width16840 * PixelsPerInch/1440(1123 像素),我看到它等于页面的宽度,如 MSWord 中所示(比例 = 100%)。

将 RichEdit 的值设置Margins794 * PixelsPerInch/1440(53 像素),WidthRichEdit 的值小于它必须的值,或者边距大于它们必须的值(与 MSWord 相比)。

没有边框,没有其他边距,除了我在代码中设置的:

function pixelsOf(prop : string) : integer;
var
  i,j,l : integer;
begin
  result := -1;
  l := length(prop);
  i := pos(prop,s);
  if i > 0 then begin
    j := i+l;
    while s[j] in ['0'..'9'] do inc(j);
    result := round(strToIntDef(copy(s,i+l,j-i-l),-1)*PixelsPerInch/1440);
  end;
end;

paperW := pixelsOf('\paperw'); // pixelsOf() calcs twips*pixelsPerInch/1440
PanelPreview.Width := paperW; 
Lm := pixelsOf('\margl'); 
RichEdit1.Margins.Left := Lm; 
Rm := pixelsOf('\margr'); 
RichEdit1.Margins.Right := Rm; 
Tm := pixelsOf('\margt');   
RichEdit1.Margins.Top := Tm;

的值paperW给出了正确的面板宽度(与 MSWord 相比),但 和 的值Lm给出了Rm更大的边距,因此 RichEdit 变得更窄。

如何计算正确的边距以使 RichEdit 具有与 MSWord 相同的布局?

这可能会有所帮助。我注意到:

  1. TRichedit在左侧留出大约 10 像素的空间(在此空间之后开始渲染)。除了 margins.left 之外,是否有可以解决此问题的参数?
  2. TRichedit不会呈现任何比其宽度更宽的表格(MSword 这样做会调整边距)。因此,TRichedit 翻译了其边缘之外的所有内容。

上面的结果是左边距看起来比必须的要宽,如果它是卷绕器,它会截断表格的右侧。

看图片在此处输入图像描述

4

0 回答 0