RTF フィールドを含むテーブルがあります。
これを TDBGrid に表示して、列に (FMTMEMO) だけでなく、実際にリッチ テキストを表示するにはどうすればよいですか?
これにサードパーティのコンポーネントを使用したくありません。
ありがとう!
Delphi には、それを行う組み込みコンポーネントはありません。
それを行うことができる多くの外部コンポーネントがあります。
簡単な Google クエリで十分な数のリストが表示されます。
--jeroen
私はあなたのために非常に大まかな例を作りましたが、それはうまくいきます。必要に応じて、それを試して改善することができます。
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;
これにより、グリッド内の列をクリックすると、ポップアップ ウィンドウに書式設定された完全なリッチエディット テキストが表示されます。クリックして離すと、ポップアップ ウィンドウが非表示になります。
列にテキストが必要なだけの場合、最も簡単な方法は、計算フィールドを String 型のデータセットに妥当な長さ (たとえば 80) で追加し、データセットの onCalculate イベントで RTF からプレーン テキストをプルすることです。フィールドを文字列フィールドに。表示には、RTF フィールドではなく文字列フィールドを使用します。
すべての書式設定が必要な場合は、Microsoft コントロールのラッパーである TRichEdit と子孫以外に、RTF データをレンダリングするための既定のコンポーネント サポートがないため、少し複雑になります。多くの RTF 解析を自分で行う必要があり、OnDrawDataCell イベントを使用してセルにテキストを描画する必要があります。このアプローチを取る場合、RTF 仕様書が大いに役立ちます。