如何让dbgrid中的指针指到哪条记录,该行的背景就变成另一颜色(突出显示)(0分)

  • 主题发起人 主题发起人 bryanliu
  • 开始时间 开始时间
B

bryanliu

Unregistered / Unconfirmed
GUEST, unregistred user!
如何让dbgrid中的指针指到哪条记录,该行的背景就变成另一颜色(突出显示)
 
在afterscroll事件中设置dbgrid中的canvas属性即可
注意:事件名和属性名我记得不太清楚
 
rowselected设为true.
 
在afterscroll事件中编程:
dbgrid.select记录.color:=''
 
Option中有设的。
 
在DBGRID中的OPTION中的ASrowselect设置为TRUE.
 
该选项设置为True后,Dbgrid不可直接修改了。
 
可以通过各种事件解决, 但有一个问题无法回避, 即记录移动时抖动将非常厉害.

1. DbGrid.DefaultDraw := False;
2. 相关DataSet.AfterScroll事件中写如下代码:
DbGrid.Invalidate;
3. 写DbGrid.OnDrawColumnCell事件
begin
if State = gdSelected then
with Dbgrid.Canvas do
begin
Brush.Color := clRed;
Brush.Style := bsSolid;
FillRect(Rect);
end;
DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
 
To Amother_eYes:不知道什么原因出现如下信息

[Error] Unit1.pas(38): Incompatible types
[Error] Unit1.pas(45): Undeclared identifier: 'DefaultDrawColumnCell'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
 
将 if State = gdSelected then
改为 if dbSelected in state then
将 DefaultDrawColumnCell(Rect, DataCol, Column, State);
改为 Dbgrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);

出错信息没有了,可只改变当前单元格的颜色。
 
问题解决后我出100分如何?
 
怎么没人愿意接招?
 
你用RXDBgrid,问题都解决了,
在OnDrawColumnCell事件中
if highlight then
AItem.backcolor = ...
AItem.font.Color = ...
大概是这样,我好久没用了,现在用VC
 
如果用InfoPower的TwwDBGrid

procedure TForm1.wwDBGrid1CalcCellColors(Sender: TObject;
Field: TField; State: TGridDrawState; Highlight: boolean;
AFont: TFont; ABrush: TBrush);
begin
//奇偶行
if ((Sender as TwwDBGrid).CalcCellRow mod 2) = 0 then
ABrush.Color := clWhite
else
ABrush.Color := clYellow;
//当前行
if (sender as twwdbgrid).GetActiveRow = (sender as twwdbgrid).calccellrow then
abrush.Color := clGreen;
//当前字段
if Highlight then ABrush.Color := clBlue;
end;

procedure TForm1.wwDBGrid1TopRowChanged(Sender: TObject);
begin
wwDBGrid1.Invalidate;
end;
 
如果用InfoPower的TwwDBGrid

procedure TForm1.wwDBGrid1CalcCellColors(Sender: TObject;
Field: TField; State: TGridDrawState; Highlight: boolean;
AFont: TFont; ABrush: TBrush);
begin
//奇偶行
if ((Sender as TwwDBGrid).CalcCellRow mod 2) = 0 then
ABrush.Color := clWhite
else
ABrush.Color := clYellow;
//当前行
if (sender as twwdbgrid).GetActiveRow = (sender as twwdbgrid).calccellrow then
abrush.Color := clGreen;
//当前字段
if Highlight then ABrush.Color := clBlue;
end;

procedure TForm1.wwDBGrid1TopRowChanged(Sender: TObject);
begin
wwDBGrid1.Invalidate;
end;
 
不知道bryanliu是什么意见,我不太愿意使用其他控件,首先它会给文件增肥。
还请各位多帮忙!
 
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
begin
if (Rect.Top = TStringGrid(DBGrid1).CellRect(TStringGrid(DBGrid1).col,TStringGrid(DBGrid1).row).top) and (not (gdFocused in State)) then
Dbgrid1.Canvas.Brush.Color := clRed;
DBGrid1.DefaultDrawDataCell(Rect, Field, State);
end;
凑合着使吧!
 
请liuly到http://www.delphibbs.com/delphibbs/DispQ.asp?LID=329702取分,谢谢!
 
接受答案了.
 
后退
顶部