【问题标题】:How to display rich text in a TDBGrid?如何在 TDBGrid 中显示富文本?
【发布时间】:2009-09-17 14:22:08
【问题描述】:

我有一个包含 RTF 字段的表格。

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

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

谢谢!

【问题讨论】:

    标签: delphi rtf


    【解决方案1】:

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

    【讨论】:

    • 我没有使用过该代码,但我使用了它所基于的“无窗口富编辑控件”。我最终编写了一个类似的 TRtfLabel 控件,以及一个独立的 PaintRTF 函数,我对结果感到满意。这是所有者绘制情况的完美解决方案。
    【解决方案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 文本。当您点击离开时,它会隐藏弹出窗口。

    【讨论】:

      【解决方案3】:

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

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

      一个简单的谷歌查询将list足够他们。

      --杰罗恩

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-02-08
          • 1970-01-01
          • 1970-01-01
          • 2018-06-21
          • 2020-08-19
          • 2012-06-26
          • 2015-02-09
          • 1970-01-01
          相关资源
          最近更新 更多