2009-09-17 115 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