2009-09-17 57 views
1

我有一个表中有一个RTF字段。如何在TDBGrid中显示富文本?

如何在TDBGrid中显示此内容,以便它实际显示丰富文本,而不仅仅是(FMTMEMO)列中的内容?我真的不想为此使用第三方组件。

谢谢!

回答

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文本当你点击在网格中的列。当你点击时,它隐藏了弹出窗口。

2

德尔福没有这样做的内置组件。

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

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

--jeroen

0

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

如果你想要所有的格式,那么这会变得有点棘手,因为除了TRichEdit和包含Microsoft控件的包装的后代,没有默认组件支持来呈现RTF数据。你将不得不自己做很多RTF解析,并使用OnDrawDataCell事件将文本绘制到单元格中。如果你采取这种方法,那么RTF specifications document将会很有帮助。

5

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

+1

我没有使用过这段代码,但是我使用了基于它的“无窗口丰富编辑控件”。我最终编写了一个像它一样的TRtfLabel控件,以及一个独立的PaintRTF函数,我对结果感到满意。这是所有者抽签情况的完美解决方案。 – 2009-09-17 17:42:32

相关问题