1

我有一个带有 RTF 字段的表。

如何在 TDBGrid 中显示它,以便它实际显示富文本,而不仅仅是列中的 (FMTMEMO)?

我真的不想为此使用第三方组件。

谢谢!

4

4 回答 4

5

我不知道这是否可以转移到您的情况,但我曾经使用 OwnerDrawing 来获取富文本。如果这是一个选项,请查看单元 DrawRichText 中的DrawRtfText

于 2009-09-17T15:59:23.293 回答
2

Delphi 没有这样做的内置组件。

有很多外部组件可以做到这一点。

一个简单的谷歌查询将列出足够的它们。

——杰伦

于 2009-09-17T14:38:19.040 回答
2

我为你做了一个非常粗略的例子,你可以根据需要尝试和改进。

将 TDBrichEdit 控件拖放到窗体上并将其 Visible 属性设置为 False。设置 DataSource 和 DataField 属性以选择适当的字段。

假设包含 RTF 文本的字段名称称为“RTF”:

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  DrawState: Integer;
  DrawRect: TRect;
begin
  if (gdFocused in State) then
  begin
    if (Column.Field.FieldName = 'RTF') then
    with DBRichEdit1 do
    begin
      Left := Rect.Left + DBGrid1.Left + 1;
      Top := Rect.Top + DBGrid1.Top + 1;

      Visible := True;
    end;
  end;
end;

procedure TForm1.DBGrid1ColExit(Sender: TObject);
begin
  if DBGrid1.SelectedField.FieldName = 'RTF' then
   DBRichEdit1.Visible := False;
end;

当您单击网格中的列时,这将在弹出窗口中显示完整的格式化 Richedit 文本。当您单击离开时,它会隐藏弹出窗口。

于 2009-09-17T15:52:24.407 回答
0

如果您只想要列中的文本,那么最简单的方法是将计算字段添加到 String 类型的数据集到合理的长度(比如 80),然后在数据集的 onCalculate 事件中从 RTF 中提取纯文本字段转换为字符串字段。使用字符串字段而不是 RTF 字段进行显示。

如果您想要所有格式,那么这会有点棘手,因为除了 TRichEdit 和作为 Microsoft 控件包装器的后代之外,没有默认组件支持渲染 RTF 数据。您将不得不自己进行大量的 RTF 解析,并使用 OnDrawDataCell 事件将文本绘制到单元格中。如果您采用这种方法,那么RTF 规范文档将有很大帮助。

于 2009-09-17T15:18:02.773 回答