我有一个 TdxDBGrid,它显示了从数据库查询中检索到的一些信息。其中一列是备注列 (TdxDbGridMemoColumn,),这是必要的,因为它绑定到的字段中的数据以 TEXT 类型而不是 CHAR 或 VARCHAR 类型从数据库中出来。
问题是,备忘录栏喜欢显示整个单词,如果不能显示整个单词,它就不显示它的任何部分。正常的网格列显示了它们可以显示的所有内容,直到右边框并切断那里的显示,但备忘录列没有,这势必会让最终用户感到困惑。有什么办法可以让备忘录栏显示部分单词?
我有一个 TdxDBGrid,它显示了从数据库查询中检索到的一些信息。其中一列是备注列 (TdxDbGridMemoColumn,),这是必要的,因为它绑定到的字段中的数据以 TEXT 类型而不是 CHAR 或 VARCHAR 类型从数据库中出来。
问题是,备忘录栏喜欢显示整个单词,如果不能显示整个单词,它就不显示它的任何部分。正常的网格列显示了它们可以显示的所有内容,直到右边框并切断那里的显示,但备忘录列没有,这势必会让最终用户感到困惑。有什么办法可以让备忘录栏显示部分单词?
您可以所有者绘制列。然后,您可以使文本看起来像您想要的那样。调用DrawText
并使用dt_End_Ellipsis
标志在长文本的末尾画一个省略号,或者只是让长文本被剪切到绘图区域。
在 column 的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;