我有一个表中有一个RTF字段。如何在TDBGrid中显示富文本?
如何在TDBGrid中显示此内容,以便它实际显示丰富文本,而不仅仅是(FMTMEMO)列中的内容?我真的不想为此使用第三方组件。
谢谢!
我有一个表中有一个RTF字段。如何在TDBGrid中显示富文本?
如何在TDBGrid中显示此内容,以便它实际显示丰富文本,而不仅仅是(FMTMEMO)列中的内容?我真的不想为此使用第三方组件。
谢谢!
我已经为你做了一个非常粗略的例子,你可以根据需要尝试和改进。
将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文本当你点击在网格中的列。当你点击时,它隐藏了弹出窗口。
如果你只是想在列中的文本,那么最简单的方法是将计算字段添加到您的String类型的数据集中到一个合理的长度(比如80)和onCalculate数据集事件将RTF字段中的纯文本拖入字符串字段中。使用字符串字段进行显示而不是RTF字段。
如果你想要所有的格式,那么这会变得有点棘手,因为除了TRichEdit和包含Microsoft控件的包装的后代,没有默认组件支持来呈现RTF数据。你将不得不自己做很多RTF解析,并使用OnDrawDataCell事件将文本绘制到单元格中。如果你采取这种方法,那么RTF specifications document将会很有帮助。
我不知道这是否可以转移到您的情况,但我曾经使用OwnerDrawing获取富文本。如果这是一个选项,请在单元DrawRichText中查看DrawRtfText。
我没有使用过这段代码,但是我使用了基于它的“无窗口丰富编辑控件”。我最终编写了一个像它一样的TRtfLabel控件,以及一个独立的PaintRTF函数,我对结果感到满意。这是所有者抽签情况的完美解决方案。 – 2009-09-17 17:42:32