我想问一下,是否有其他方法可以不使用TextOut()
来修改单元格文本?使用TextOut()
需要坐标,我不想混入其中。此外,我只想更改文本并保留其他一切,如颜色、字体、对齐方式等。
我的目的是改变文本在不同场景中的显示。例如:
- 我可能希望在不同的列中以不同的格式显示日期字段,例如在
MM/yyyy
中显示一列,在MM/dd/yyyy
中显示另一列。 - 我可能希望显示一些具有integer/float数据类型的行,如果数字高于或低于某个阈值,则用文本显示“too high”或“too low”。
- 我可能想交换布尔真/假与一些文本或数字,因为我认为合适。
- 或者在某些条件下只清空某些单元格。
我知道如果TDBGrid
是“可编辑的”,这将是一个坚韧做编辑的挑战。所以我打算在一个不可编辑的网格中使用任何解决方案。而且,我不想转移到TStringGrid
,因为我发现TDBGrid
很容易处理数据集。
顺便说一句,我用的是 Delphi 7。
对于在特定条件下将某个单元格留空的情况,是否可以发出“exit”命令跳过单元格值显示到单元格本身?
比如:
procedure Tform1.dbgrdDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if (Column.fieldname = 'total') and (column.field.value=0) then
exit
else
dbgrdsku.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
1条答案
按热度按时间4uqofj5v1#
如果您正在使用
TDBGrid
和数据源,则在直接选择在Grid
中进行更改之前,请检查在数据源(在TFields
上)中进行更改是否有用。使用
Datasource
并不需要花费太多的资源来绘制。当到达那个点(绘制)时,数据可能已经被更改了。您可以在
TDataset
的后代(TQuery、TADOQuery、TFDQuery ...)上创建TFields
,并使用OnGetText
事件来更改要绘制的文本。如果是这样的两个字段:
用这样一个简单的代码使用
OnGetText
的两个字段:您得到了以下结果: