我有一個表中有一個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