我想搞一个dbgrid,对它进行控制:鼠标移动到那一行,那行就边成绿色,每有行有这些字段:编号,状态(四种,每一钟用不通的颜色,颜色只针对这一个格子),办理情况(8种,和前面的一样),类型(三种,类型不同对整行设置不同的颜色)。就这些,急用,那位解决问题,马上给份。
    谢谢!

解决方案 »

  1.   

    begin
      if Odd(aqStore.RecNo + 1) then  {隔行变色}
      begin
        dgStore.Canvas.Brush.Color := clCream;
        dgStore.Canvas.Font.Color := clNavy;
      end;
      if aqStore.FieldByName('scount').asinteger > 80 then  {附合条件行变色}
        dgStore.Canvas.brush.Color := clLime;
      if Column.FieldName = 'onshow' then  {附合条件单元格变色}
        if Column.Field.AsBoolean = true then
          dgStore.Canvas.brush.Color := $00FFBB95;
      if State = [gdSelected, gdFocused] then  {当前所选单元格变色}
      begin
        dgStore.Canvas.Brush.Color := clSkyBlue;
        dgStore.Canvas.Font.Color := clBlack;
      end;  dgStore.DefaultDrawColumnCell(Rect, DataCol, Column, State);  {生效}
    这是一些具体实例,好好看看吧
      

  2.   

    添写mousemove事件,用rect定位cell!
      

  3.   

    如何使DBGRID网格的颜色随此格中的数据值的变化而变化。如<60的网格为红色?Delphi中数据控制构件DBGrid是用来反映数据表的最重要、也是最常用的构件。在应用程序中,如果以彩色的方式来显示DBGrid,将会增加其可视性,尤其在显示一些重要的或者是需要警示的数据时,可以改变这些数据所在的行或列的前景和背景的颜色。  DBGrid属性DefaultDrawing是用来控制Cell(网格)的绘制。若DefaultDrawing的缺省设置为True,意思是Delphi使用DBGrid的缺省绘制方法来制作网格和其中所包含的数据,数据是按与特定列相连接的Tfield构件的DisplayFormat或EditFormat特性来绘制的;若将DBGrid的DefaultDrawing特性设置成False,Delphi就不绘制网格或其内容,必须自行在TDBGrid的OnDrawDataCell事件中提供自己的绘制例程(自画功能)。  在这里将用到DBGrid的一个重要属性:画布Canvas,很多构件都有这一属性。Canvas代表了当前被显示DBGrid的表面,你如果把另行定义的显示内容和风格指定给DBGrid对象的Canvas,DBGrid对象会把Canvas属性值在屏幕上显示出来。具体应用时,涉及到Canvas的Brush属性和FillRect方法及TextOut方法。Brush属性规定了DBGrid.Canvas显示的图像、颜色、风格以及访问Windows GDI 对象句柄,FillRect方法使用当前Brush属性填充矩形区域,方法TextOut输出Canvas的文本内容。  以下用一个例子来详细地说明如何显示彩色的DBGrid。在例子中首先要有一个DBGrid构件,其次有一个用来产生彩色筛选条件的SpinEdit构件,另外还有ColorGrid构件供自由选择数据单元的前景和背景的颜色。  1.建立名为ColorDBGrid的Project,在其窗体Form1中依次放入所需构件,并设置属性为相应值,具体如下所列:   Table1 DatabaseName: DBDEMOSTableName: EMPLOYEE.DBActive: True;  DataSource1 DataSet: Table1  DBGrid1 DataSource1: DataSource1DefaultDrawing: False  SpinEdit1 Increment:200Value: 20000  ColorGrid1 GridOrdering: go16*1  2.为DBGrid1构件OnDrawDataCell事件编写响应程序:  procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;Field: TField; State: TGridDrawState);  begin   if Table1.Fieldbyname(′Salary′).value<=SpinEdit1.value then   DBGrid1.Canvas.Brush.Color:=ColorGrid1.ForeGroundColor   else   DBGrid1.Canvas.Brush.Color:=ColorGrid1.BackGroundColor;   DBGrid1.Canvas.FillRect(Rect);   DBGrid1.Canvas.TextOut(Rect.left+2,Rect.top+2,Field.AsString);  end;  这个过程的作用是当SpinEdit1给定的条件得以满足时,如′salary′变量低于或等于SpinEdit1.Value时,DBGrid1记录以ColorGrid1的前景颜色来显示,否则以ColorGrid1的背景颜色来显示。然后调用DBGrid的Canvas的填充过程FillRect和文本输出过程重新绘制DBGrid的画面。  3.为SpinEdit1构件的OnChange事件编写响应代码:  procedure TForm1.SpinEdit1Change(Sender: TObject);  begin   DBGrid1.refresh;  end;  当SpinEdit1构件的值有所改变时,重新刷新DBGrid1。  4.为ColorGrid1的OnChange事件编写响应代码:  procedure TForm1.ColorGrid1Change(Sender: TObject);  begin   DBGrid1.refresh; end;  当ColorGrid1的值有所改变时,即鼠标的右键或左键单击ColorGrid1重新刷新DBGrid1。  5.为Form1窗体(主窗体)的OnCreate事件编写响应代码:  procedure TForm1.FormCreate(Sender: TObject);  begin   ColorGrid1.ForeGroundIndex:=9;   ColorGrid1.BackGroundIndex:=15;  end;  在主窗创建时,将ColorGrid1的初值设定前景为灰色,背景为白色,也即DBGrid的字体颜色为灰色,背景颜色为白色。  6.现在,可以对ColorDBGrid程序进行编译和运行了。当用鼠标的左键或右键单击ColorGrid1时,DBGrid的字体和背景颜色将随之变化。  在本文中,只是简单展示了以彩色方式显示DBGrid的原理,当然,还可以增加程序的复杂性,使其实用化。同样道理,也可以将这个方法扩展到其他拥有Canvas属性的构件中,让应用程序的用户界面更加友好。
     
      

  4.   

    在Delphi中随意控制DBGrid 每一行的颜色简易方法 
    ---- 要改变DBGrid每一行的颜色,只要在ONDrawColumnCell事件中设定要改变颜色的行的条件,并指定DBGrid的Canvas.Brush.color属性并且把Canvas.pen.mode属性设成pmmask,再调用DBGrid的DefaultDrawColumnCell方法即可。注意在改变这两个属性前要先保护好原来的Canvas.Brush.color属性的值,调节器用完成 DefaultDrawColumnCell方法后要把原属性值改回,现以Delphi\demos\db\clientmd 目录下的演示程序clintproj.dpr 为例子,做简单说明,下面是对程序中的栅格MemberGrid的合条件的整行进行变色,变成黑体背景黄色的,其它不合条件的行的颜色为正常字体,白色背景,只在DrawColumnCelL 事件中设条件其它的不变,如下: procedure TClientForm.MemberGridDrawColumnCell(
    Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn;
     State: TGridDrawState);
        var 
            oldcolor:tcolor;
            oldpm:tpenmode;begin
      if DM.ProjectTEAM_LEADER.Value = 
    DM.Emp_ProjEMP_NO.Value then  {设定变色的行的条件}
         MemberGrid.Canvas.Font.Style := [fsBold];
         MemberGrid.DefaultDrawColumnCell
    (Rect, DataCol, Column, State);
         {上面是演示程序的原内容,以下是增加部分}
      if DM.ProjectTEAM_LEADER.Value = 
    DM.Emp_ProjEMP_NO.Value then {设定变色的行的条件}
        begin
           oldpm:= MemberGrid.Canvas.pen.mode;
           oldcolor:= MemberGrid.Canvas.Brush.color;
           MemberGrid.Canvas.Brush.color:=clyellow;
           MemberGrid.Canvas.pen.mode:=pmmask;
           MemberGrid.DefaultDrawColumnCell
    (Rect, DataCol, Column, State);
           MemberGrid.Canvas.Brush.color:=oldcolor;
           MemberGrid.Canvas.pen.mode:=oldpm;
        end;
     
    end;
      

  5.   

    我觉得用VC++要好一些,添加MOUSEMOVE控件,设置颜色边值,从MOUSEMOVE中添加是变颜色的条件。ADO中有DBGRID控件可以直接使用,试试看!