我有一个TdxDBGrid,它显示从数据库查询中检索到的一些信息。其中一列是备注列(TdxDbGridMemoColumn),这是必要的,因为它所绑定的字段中的数据来自数据库,类型为TEXT,而不是CHAR或VARCHAR。
问题是,备忘录栏喜欢显示整个单词,如果它不能显示整个单词,则它不显示任何部分。正常的网格列显示了它们可以到达右边界的所有内容并切断了那里的显示,但备忘录栏没有,这必然会混淆最终用户。有什么方法可以让备忘录栏显示部分单词吗?
答案 0 :(得分:1)
您可以拥有 - 绘制列。然后,您可以根据需要使文本显示。调用DrawText
并使用dt_End_Ellipsis
标志在长文本的末尾绘制省略号,否则只需将长文本剪切到绘图区域。
答案 1 :(得分:1)
在列的 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;