|
发表于 2007-9-18 11:39:46
|
显示全部楼层
怪了,帖子上已经很明白了,怎么还不对呢? if (ASelected or AFocused) then 是点中的数据才会变色,如果不是这样,取消这层的判断就可以了。我这里都实现ok了,你那边怎么还是不行呢,你设置断点跟踪了吗?是根据你的意愿在执行呢
附件是效果图
代码,参考如下
procedure TMainForm.DataGrid1CustomDrawCell(Sender: TObject; ACanvas: TCanvas; ARect: TRect; ANode: TTreeListNode; AColumn: TTreeListColumn; ASelected, AFocused, ANewItemRow: Boolean; var AText: string; var AColor: Integer; AFont: TFont; var AAlignment: TAlignment; var ADone: Boolean);
var
I: Integer;
begin
//if ASelected or AFocused then
// exit ;
//ACanvas.Font.Color := clBlack;
//原来根据某个字段值来设定颜色的方法,在分组后由于界面刷新机制的问题,就会乱套。所以改为判断Grid的某列的值来设定
for I := 0 to DataGrid1.ColumnCount - 1 do
begin
//循环取列找到相应的项(由于列允许移动位置和分组,所以不能固定),并判断其值
if (DataGrid1.Columns[I].FieldName = 'parent') and
(SysUtils.trim(ANode.Strings[I]) = '01') then
begin
AColor := Graphics.clRed;
Break;
end;
end;
end;
|
|