type Tint=0..255; tmyint=set of Tint; private { Private declarations } mynums:tmyint; procedure TArrangeTask.db_arrangetaskCellClick(Column: TColumn); var ls:integer; begin //显示套料任务的零件明细信息 ls := qry_arrangetask.RecNo; //如果存在就移除,否则添加 if ls in mynums then Exclude(mynums,ls) else Include(mynums,ls); //重新刷新下绑定是为了能触发重绘,实时绘 qry_arrangetask.close; qry_arrangetask.open; qry_arrangetask.RecNo:=ls; end;procedure TArrangeTask.db_arrangetaskDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if qry_arrangetask.RecNo in mynums then begin db_arrangetask.Canvas.Brush.Color := clSkyBlue; db_arrangetask.Canvas.Font.Color := clBlack; end; db_arrangetask.DefaultDrawColumnCell(Rect, DataCol, Column, State); end;
其中有一个参数State: TGridDrawState,可以判断状态TGridDrawState = set of (gdSelected, gdFocused, gdFixed);
这样的话好像只能到达一行颜色变化的效果
我想按住ctrl键后,选中多行,每选中一行,那行的颜色就变化,结果多行的颜色都变
Tint=0..255;
tmyint=set of Tint; private
{ Private declarations }
mynums:tmyint; procedure TArrangeTask.db_arrangetaskCellClick(Column: TColumn);
var
ls:integer;
begin
//显示套料任务的零件明细信息 ls := qry_arrangetask.RecNo; //如果存在就移除,否则添加
if ls in mynums then
Exclude(mynums,ls)
else
Include(mynums,ls); //重新刷新下绑定是为了能触发重绘,实时绘
qry_arrangetask.close;
qry_arrangetask.open;
qry_arrangetask.RecNo:=ls;
end;procedure TArrangeTask.db_arrangetaskDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
if qry_arrangetask.RecNo in mynums then
begin
db_arrangetask.Canvas.Brush.Color := clSkyBlue;
db_arrangetask.Canvas.Font.Color := clBlack;
end;
db_arrangetask.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;