想达到这样的效果(dbgrid): 当前记录移动那里,那一条记录的颜色就与周围不同(例如兰色),同时把当前记录中鼠标所在的那一个cell中的颜色设置为红色。 (

  • 主题发起人 主题发起人 ldaan3
  • 开始时间 开始时间
L

ldaan3

Unregistered / Unconfirmed
GUEST, unregistred user!
想达到这样的效果(dbgrid): 当前记录移动那里,那一条记录的颜色就与周围不同(例如兰色),同时把当前记录中鼠标所在的那一个cell中的颜色设置为红色。 (150分)<br />想达到这样的效果(dbgrid): 当前记录移动那里,那一条记录的颜色就与周围不同(例如兰色),
同时把当前记录中鼠标所在的那一个cell中的颜色设置为红色。
问题不算太难,但是
我查过离线资料,
有差不多的问题,但是没有相应的回答。
在这里我要的是完整的回答(代码),不是思路。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
其实第一个不难,只要把dbgrid的options下的dbrowselected 设置为true 就可以了。
真正想要的是第二个问题的答案(当前单元格颜色改变)。
up有分。

 
我也一直在找,UP
 
你好,刚才找东西的时候,检索到了你的问题,时间很久了,不知道你是否已经解决,我还是回答一下吧,希望对你有所帮助。
建议装个ehLib吧,现在许多人都用它代替普通的DBGrid, 体积小、使用简单、又功能强大:表头合并,可以将grid导出为多种格式(excel,xml,....),自带统计功能。。。。
下面我根据ehLib提供的例子中的有关代码,实现你的想法,不过有一点,DBGrid缺省的选中的格为蓝色暂时没法改。
但我想你需要的只是当前行突出显示,当先选中单元格也突出显示,应该不在乎两者具体各是什么颜色吧。
//1.先做一个公用过程
procedure TForm1.highlightRow(Sender: TObject;
Rect: TRect;
DataCol: Integer;
Column: TColumnEh;
State: TGridDrawState;
rowColor: TColor);
begin
if (Rect.Top = (Sender as TDBGridEh).CellRect((Sender as TDBGridEh).Col,
(Sender as TDBGridEh).Row).Top)
and ( not (gdFocused in State)
or not (Sender as TDBGridEh).Focused) then
(Sender as TDBGridEh).Canvas.Brush.Color := rowColor;
(Sender as TDBGridEh).DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;

//2.在DBGridEh的DrawColumnCell事件中调用上面的方法,你只需要替换修改下面红色的部分就可以了
procedure TForm1.DBGridEh1DrawColumnCell(Sender: TObject;
const Rect: TRect;
DataCol: Integer;
Column: TColumnEh;
State: TGridDrawState);
begin
//下面是黄Row蓝Cell效果(其实Cell的颜色我现在不会改,暂时只能是蓝的[:)])
highlightRow(Sender,Rect,DataCol,Column,State,[red]clYellow[/red]);
end;

 
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect;
DataCol: Integer;
Column: TColumn;
State: TGridDrawState);
begin
With DBGrid1 do
begin
if gdSelected in State then
begin
Canvas.Font.Color:=clred;
Canvas.Brush.Color :=clAqua;
end;
DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
end;
 
DBGridEh1.Canvas.Brush.Color := $00D2E4B8;
DBGridEh1.Canvas.Font.Color := $001D1616;
DBGridEh1.DefaultDrawColumnCell(RECT, DATACOL, COLUMN, STATE);
 
后退
顶部