У меня есть таблица с полем RTF.
Как я могу отобразить это в TDBGrid, чтобы он действительно отображал форматированный текст, а не только (FMTMEMO) в столбце?
Я действительно не хочу использовать сторонний компонент для этого.
Спасибо!
У меня есть таблица с полем RTF.
Как я могу отобразить это в 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 во всплывающем окне, когда вы нажмете на столбец в сетке. Когда вы щелкаете, он скрывает всплывающее окно.
Я не знаю, применимо ли это к вашей ситуации, но однажды я использовал OwnerDrawing для получения форматированного текста. Если это вариант, проверьте DrawRtfText в блоке DrawRichText.
В Delphi нет встроенного компонента для этого.
Есть много внешних компонентов, которые могут это сделать.
Простой запрос в Google выведет их достаточное количество.
--jeroen
Если вам просто нужен текст в столбце, то самым простым способом было бы добавить вычисляемое поле в ваш набор данных типа String разумной длины (скажем, 80) и в событии onCalculate для набора данных вытащить простой текст из RTF поле в строковое поле. Используйте поле строки для отображения, а не поле RTF.
Если вам нужно все форматирование, то это становится немного сложнее, поскольку нет поддержки компонентов по умолчанию для рендеринга данных RTF, кроме TRichEdit и потомков, которые являются обертками вокруг элемента управления Microsoft. Вам придется самостоятельно выполнять большую часть синтаксического анализа RTF и использовать событие OnDrawDataCell для рисования текста в ячейке. Если вы выберете этот подход, то документ со спецификациями RTF будет очень полезен.