1

RTF フィールドを含むテーブルがあります。

これを TDBGrid に表示して、列に (FMTMEMO) だけでなく、実際にリッチ テキストを表示するにはどうすればよいですか?

これにサードパーティのコンポーネントを使用したくありません。

ありがとう!

4

4 に答える 4

2

Delphi には、それを行う組み込みコンポーネントはありません。

それを行うことができる多くの外部コンポーネントがあります。

簡単な Google クエリで十分な数のリストが表示されます。

--jeroen

于 2009-09-17T14:38:19.040 に答える
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;

これにより、グリッド内の列をクリックすると、ポップアップ ウィンドウに書式設定された完全なリッチエディット テキストが表示されます。クリックして離すと、ポップアップ ウィンドウが非表示になります。

于 2009-09-17T15:52:24.407 に答える
0

列にテキストが必要なだけの場合、最も簡単な方法は、計算フィールドを String 型のデータセットに妥当な長さ (たとえば 80) で追加し、データセットの onCalculate イベントで RTF からプレーン テキストをプルすることです。フィールドを文字列フィールドに。表示には、RTF フィールドではなく文字列フィールドを使用します。

すべての書式設定が必要な場合は、Microsoft コントロールのラッパーである TRichEdit と子孫以外に、RTF データをレンダリングするための既定のコンポーネント サポートがないため、少し複雑になります。多くの RTF 解析を自分で行う必要があり、OnDrawDataCell イベントを使用してセルにテキストを描画する必要があります。このアプローチを取る場合、RTF 仕様書が大いに役立ちます。

于 2009-09-17T15:18:02.773 に答える