Как отобразить форматированный текст в TDBGrid? - PullRequest
1 голос
/ 17 сентября 2009

У меня есть таблица с полем RTF.

Как я могу отобразить это в TDBGrid, чтобы он отображал форматированный текст, а не только (FMTMEMO) в столбце?

Я действительно не хочу использовать для этого сторонний компонент.

Спасибо!

Ответы [ 4 ]

5 голосов
/ 17 сентября 2009

Я не знаю, можно ли это перенести в вашу ситуацию, но однажды я использовал OwnerDrawing для получения расширенного текста. Если это опция, проверьте DrawRtfText в единицах DrawRichText .

2 голосов
/ 17 сентября 2009

Я сделал очень грубый пример для вас, который работает, и вы можете взять его, чтобы попытаться улучшить его по мере необходимости.

Перетащите элемент управления 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 голосов
/ 17 сентября 2009

Delphi не имеет встроенного компонента, который делает это.

Есть много внешних компонентов, которые могут это сделать.

Простой запрос Google список их достаточно.

- Йерун

0 голосов
/ 17 сентября 2009

Если вы просто хотите получить текст в столбце, то самым простым способом было бы добавить вычисляемое поле к вашему набору данных типа String разумной длины (скажем, 80), а в событии onCalculate для набора данных вытащить простой текст из поля RTF в поле строки. Используйте строковое поле для отображения, а не поле RTF.

Если вам нужно все форматирование, то это становится немного сложнее, так как отсутствует поддержка компонентов по умолчанию для рендеринга данных RTF, кроме TRichEdit и потомков, которые являются обертками вокруг элемента управления Microsoft. Вы должны будете выполнить большую часть анализа RTF самостоятельно и использовать событие OnDrawDataCell для рисования текста в ячейке. Если вы воспользуетесь этим подходом, то документ RTF будет очень полезен.

...