...... var Form1: TForm1;implementationvar iRow:integer;{$R *.dfm}procedure TForm1.ADOQuery1BeforeScroll(DataSet: TDataSet); begin iRow:=ADOQuery1.RecNo; DBGrid1.Refresh; end;procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState); begin if iRow<0 then exit; if ADOQuery1.RecNo=iRow then DBGrid1.Canvas.Brush.Color:=clSkyBlue;//原焦点记录用clSkyBlue颜色显示 DBGrid1.Canvas.FillRect(Rect); DBGrid1.DefaultDrawDataCell(Rect,Field,State); end; ......
有这样一种方式不知道能不能满足你的需求 1.定义private 变量 rowid:integer;或其他类型用于标示一条记录; 2.在执行adoquery.next的事件中写如下代码 rowid:=adoquery.fieldbyname('rowid').value; dbgrid.refesh;对dbgrid的ondrawcolumncell事件做如下处理, if (sender as TDBGrideh).DataSource.DataSet.FieldByName ('rowid').Value=rowid then (sender as TDBGrideh).Canvas.Brush.Color:=clyellow else (sender as TDBGrideh).Canvas.Brush.Style:=bsClear; //如果在用其它样式,可以在此处做适当修改sender as TDBGrideh).DefaultDrawColumnCell(rect,datacol,column,state);
To:gzzai 你这个可以实现,但指向过的数据怎么才能一直保持这种样式呢
var i:Integer; var s:TStrings;procedure TForm1.ADOQuery1BeforeScroll(DataSet: TDataSet); begin i:=ADOQuery1.RecNo; if s.IndexOf(IntToStr(i))=-1 then s.Add(IntToStr(i)); //ShowMessage(s.Text); end;procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState); var i_:Integer; begin for i_:=0 to s.Count-1 do if StrToInt(s[i_]) >0 then if ADOQuery1.RecNo=StrToInt(s[i_]) then DBGrid1.Canvas.Brush.Color:=clSkyBlue; DBGrid1.Canvas.FillRect(Rect); DBGrid1.DefaultDrawDataCell(Rect,Field,State); end;procedure TForm1.FormCreate(Sender: TObject); begin s:=TStringList.Create; end;procedure TForm1.FormDestroy(Sender: TObject); begin s.Free; end;
var
Form1: TForm1;implementationvar iRow:integer;{$R *.dfm}procedure TForm1.ADOQuery1BeforeScroll(DataSet: TDataSet);
begin
iRow:=ADOQuery1.RecNo;
DBGrid1.Refresh;
end;procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
begin
if iRow<0 then exit;
if ADOQuery1.RecNo=iRow then DBGrid1.Canvas.Brush.Color:=clSkyBlue;//原焦点记录用clSkyBlue颜色显示
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.DefaultDrawDataCell(Rect,Field,State);
end;
......
1.定义private 变量
rowid:integer;或其他类型用于标示一条记录;
2.在执行adoquery.next的事件中写如下代码
rowid:=adoquery.fieldbyname('rowid').value;
dbgrid.refesh;对dbgrid的ondrawcolumncell事件做如下处理,
if (sender as TDBGrideh).DataSource.DataSet.FieldByName ('rowid').Value=rowid then (sender as TDBGrideh).Canvas.Brush.Color:=clyellow
else
(sender as TDBGrideh).Canvas.Brush.Style:=bsClear; //如果在用其它样式,可以在此处做适当修改sender as TDBGrideh).DefaultDrawColumnCell(rect,datacol,column,state);
你这个可以实现,但指向过的数据怎么才能一直保持这种样式呢
var i:Integer;
var s:TStrings;procedure TForm1.ADOQuery1BeforeScroll(DataSet: TDataSet);
begin
i:=ADOQuery1.RecNo;
if s.IndexOf(IntToStr(i))=-1 then s.Add(IntToStr(i));
//ShowMessage(s.Text);
end;procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
var
i_:Integer;
begin
for i_:=0 to s.Count-1 do
if StrToInt(s[i_]) >0 then
if ADOQuery1.RecNo=StrToInt(s[i_]) then DBGrid1.Canvas.Brush.Color:=clSkyBlue; DBGrid1.Canvas.FillRect(Rect);
DBGrid1.DefaultDrawDataCell(Rect,Field,State);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
s:=TStringList.Create;
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
s.Free;
end;