Как сделать, чтобы в столбце памятки на сетке DX отображались отдельные слова? - PullRequest
1 голос
/ 18 сентября 2009

У меня есть TdxDBGrid, который отображает некоторую информацию, полученную из запроса к базе данных. Один из столбцов - это столбец Memo (TdxDbGridMemoColumn), который необходим, поскольку данные в поле, к которому они привязаны, поступают из базы данных как тип TEXT, а не CHAR или VARCHAR.

Проблема в том, что столбец памятки любит отображать целые слова, и если он не может отображать целое слово, он не отображает какую-либо его часть. Обычные столбцы сетки показывают все, что могут, вплоть до правой границы и там обрезают изображение, но столбец памятки - нет, и это может запутать конечных пользователей. Можно ли как-нибудь заставить столбец memo отображать отдельные слова?

Ответы [ 2 ]

1 голос
/ 18 сентября 2009

в событии onGetText столбца , вы можете изменить отображаемый текст в соответствии с доступным размером:

// the TTextFormats flags are defined in Graphics, add it to your uses clause
procedure TMyForm.gridMyColGetText(Sender: TObject; ANode: TdxTreeListNode;
  var AText: string);
var
  R: TRect;
begin
  // Calculate actual displayable text (with ellipsis) depending on cell size
  R := (Sender as TdxDBGridColumn).TreeList.CellRect(ANode, (Sender as TdxDBGridColumn).ColIndex);  // get the cell rectangle
  Windows.InflateRect(R, -2, 0); // shrink a bit for grid lines
  grid.Canvas.TextRect(R, AText, [tfModifyString, tfEndEllipsis]); // shorten the text ...
end;
1 голос
/ 18 сентября 2009

Вы можете нарисовать столбец владельцем. Тогда вы можете сделать текст, как вы хотите. Вызовите DrawText и используйте флаг dt_End_Ellipsis, чтобы нарисовать многоточие на конце длинного текста, или просто добавьте длинный текст в область рисования.

...