【问题标题】:Using Delphi to fill out a table template made using a rich text (rtf) file使用 Delphi 填写使用富文本 (rtf) 文件制作的表格模板
【发布时间】:2011-07-25 19:48:08
【问题描述】:

我有一个 rtf(富文本格式)文件格式的表格。

我想知道是否可以在运行时将不同的内容放入单元格中。

这是一个屏幕截图。一些空白字段需要填写一个值。

【问题讨论】:

  • 我不太明白。您可能需要详细说明一下。您还可以提供屏幕截图、示例 RTF 文件等。
  • 编辑和打印 RTF 文件?只需使用 TRichEdit。但这个问题几乎无法回答,除非得到显着改善,否则会吸引密切的投票。
  • 您想制作一个具有所有表格编辑和格式化功能的 Microsoft Word 的微型版本吗?你最好再具体一点。
  • 那么如何使用 TRichEdit 创建表格?
  • @user859104:然后手动绘制到Printer.Canvas!这非常容易!

标签: delphi delphi-2010


【解决方案1】:

您写了“需要编辑一些空白字段” - 如果这意味着 RTF 是某种模板,需要以编程方式填写空白字段,我会这样做:

  • 使用文本编辑器打开 RTF 文档(例如 OpenOffice 或 MS Word)
  • 在空字段中插入特殊的占位符字符串,例如 $field1$、$field2$ ...
  • 保存文档
  • 在您的 Delphi 应用程序中,将 RTF 加载到字符串中(例如使用 TStringlist)
  • 使用 Delphi 字符串函数查找特殊占位符字符串并将其替换为实际值

【讨论】:

  • 好主意,如果这就是 OP 想要的。但是 OP 似乎确实很难清楚地解释任何事情。
  • 您需要对插入的文本进行转义
  • 我希望我对用户问题的编辑使其至少符合他接受的答案。
【解决方案2】:

要在一张纸上打印表格,只需在打印机的画布​​上绘图!

procedure TForm1.Button1Click(Sender: TObject);
var
  y, Margin, Col2: integer;
  LineHeight: integer;
begin
  with TPrintDialog.Create(nil) do
    try
      if not Execute then
        Exit;
    finally
      Free;
    end;

  Printer.BeginDoc;

  Printer.Title := 'Sample Form';
  Printer.Canvas.Font.Name := 'Arial';
  Printer.Canvas.Font.Size := 11;

  Margin := 5*Printer.Canvas.TextWidth('M');
  Col2 := 35*Printer.Canvas.TextWidth('M');
  LineHeight := 3 * Printer.Canvas.TextHeight('M') div 2;

  y := Margin;

  Printer.Canvas.Font.Style := [fsBold];
  Printer.Canvas.TextOut(MARGIN, y, 'Name: ');
  Printer.Canvas.Font.Style := [];
  Printer.Canvas.TextOut(Col2, y, 'Andreas Rejbrand');

  inc(y, LineHeight);

  Printer.Canvas.Font.Style := [fsBold];
  Printer.Canvas.TextOut(MARGIN, y, 'Age: ');
  Printer.Canvas.Font.Style := [];
  Printer.Canvas.TextOut(Col2, y, '23');

  inc(y, LineHeight);

  Printer.Canvas.Font.Style := [fsBold];
  Printer.Canvas.TextOut(MARGIN, y, 'Nationality: ');
  Printer.Canvas.Font.Style := [];
  Printer.Canvas.TextOut(Col2, y, 'Swedish');

  Printer.EndDoc;

end;

结果:http://privat.rejbrand.se/sampledrawing.pdf

【讨论】:

  • OP 对我来说似乎非常困惑。他们是否有一个编辑框或一个包含由包含文本的单元格组成的表格的丰富编辑?谁能说...
  • @Warren P:是的。不过,我的猜测是他想要的。
  • 这对后来寻求打印帮助的人很有用,因此 +1!
【解决方案3】:

要在 TRichEdit 中使用现有的 RTF 内容,请将其加载到组件的 Text 或 Lines 属性中:

RichEdit1.Lines.LoadFromFile(rtfFilename);

-或-

RichEdit1.Text := StringILoadedFromAnRtfFileOnDisk;

我不确定您想要做什么(以编程方式根据一些现有的未指定 RTF 内容创建或修改表格、打印表格等)。通过询问富编辑和常规编辑,很难理解。

您在评论中询问如何在 TRichEdit 中创建表格:

procedure TForm1.PutTableIntoRichEdit;
begin
  RichEdit1.Text := '{\rtf1\ansi\deff0'#13#10+
'\trowd'#13#10+
'\cellx1000'#13#10+
'\cellx2000'#13#10+
'\cellx3000'#13#10+
'cell 1\intbl\cell'#13#10+
'cell 2\intbl\cell'#13#10+
'cell 3\intbl\cell'#13#10+
'\row'#13#10+
'}' ;
end;

如果您想在上面显示的屏幕截图中使用该 RTF 内容,请在您的 delphi 程序中加载它并尝试一些东西,然后问一个特定的问题。向我们展示 microsoft word 的屏幕截图并不能帮助您明确问题。

【讨论】:

  • +1 用于手动编码 RTF。但是,我怀疑这对 OP 没有帮助。
  • -1 "我希望我的程序编辑和打印一个现有的 rtf 文件。"
  • 修改后的答案。用户还在评论中询问了如何创建表格。
  • 好的,这种方法适用于对问题的最新理解
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-04
  • 1970-01-01
相关资源
最近更新 更多