就是一个表格中,根据每个单元格的显示数值,控制其颜色。

解决方案 »

  1.   

    http://hi.baidu.com/zuideyuanfen/album/item/924315eb828ba61ecd14f99c4134970a314e5915.html#
    这个程序的图片链接,发不出来,麻烦各位点链接看下
      

  2.   

    http://hi.baidu.com/zuideyuanfen/album/item/745a37cea9ec8a13bf216453f703918fa1ecc0d5.html#
    这是我做的,不过效果不太好,用了8个dbgrid,求指教
      

  3.   

    DBGrid, StringGrid 都可以做到,不知你要什么样的效果。
      

  4.   

    用StringGrid,或者用第三方的控件如AdvStringGrid
      

  5.   

    根据每个单元格的显示数值,控制其颜色,这个用dbgrid,stringgrid都可以,只要在它们的OnDrawColumnCell中刷新底色即可。类似这样在单元格重绘事件中处理:
    procedure Tform1.DBGrid1DrawColumnCell;
    begin
      with (Sender as TDBGrid) do
      begin
        if xxxx then
        begin
          Canvas.Font.Color := clHighlightText;
          Canvas.Brush.Color := clHighlight;
        end
        else
        begin
          Canvas.Font.Color := clBlack;
          Canvas.brush.Color := clWhite;
        end;
        DefaultDrawColumnCell(Rect, DataCol, Column, State);
      end;
    end;
      

  6.   

    我是用的dbgrid。.DBGrid1DrawColumnCell重新做的,不过每次刷新都会出现刷屏,屏幕会一闪一下,一次要刷8个dbgrid,效果就不好了,能不能不让屏幕每次点击都闪呢,谢谢各位,还有一个问题,我再dbgrid中用onclick事件获取当前点击的值(edit1.Text :=dbgrid1.SelectedField.AsString;),可是第一行单击鼠标就变成修改了,也不明原因,请大家指教,重画代码大概就是楼上stall123说的那样谢谢各位热心解答
      

  7.   

    procedure Tjkcpcs.DBGrid8DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
      var
      str1:tadoquery;
      str2:tdbgrid;
    begin
      str1:=adoquery8;
      str2:=dbgrid8;
     if str1.FieldByName('Storage_Flg').AsInteger=1 then   begin
         str2.Canvas.Brush.color:=clwhite;
         str2.Canvas.Font.Color:=clwindowtext;
       end;
        if str1.FieldByName('Storage_Flg').AsInteger=2 then   begin
         str2.Canvas.Brush.color:=clyellow;
         str2.Canvas.Font.Color:=clwindowtext;
       end;
       if str1.FieldByName('Storage_Flg').AsInteger=3 then   begin
         str2.Canvas.Brush.color:=clred;
         str2.Canvas.Font.Color:=clwindowtext;
       end;
       if str1.FieldByName('Storage_Flg').AsInteger=4 then
       begin
         str2.Canvas.Brush.color:=clFuchsia;
         str2.Canvas.Font.Color:=clwindowtext;
       end;
       if str1.FieldByName('Storage_Flg').AsInteger=5 then
       begin
         str2.Canvas.Brush.color:=clAqua;
         str2.Canvas.Font.Color:=clwindowtext;
       end;
       if str1.FieldByName('Storage_Flg').AsInteger=6 then
       begin
         str2.Canvas.Brush.color:=clBlue;
         str2.Canvas.Font.Color:=clwindowtext;
       end;
       if str1.FieldByName('Storage_Flg').AsInteger=7 then
       begin
         str2.Canvas.Brush.color:=clGray;
         str2.Canvas.Font.Color:=clwindowtext;
       end;
       if str1.FieldByName('Storage_Flg').AsInteger=8 then
       begin
         str2.Canvas.Brush.color:=clLime;
         str2.Canvas.Font.Color:=clwindowtext;
       end;
        str2.Canvas.pen.mode:=pmmask;
        str2.DefaultDrawColumnCell(rect,datacol,column,state);
    end;
      

  8.   

    const
      Mycolor : Array[1..8] of Tcolor = (clWhite,clBlack,clred,clFuchsia,clAqua,clBlue,clGray,clLime);
    procedure Tjkcpcs.DBGrid8DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
      var
      i : integer;
    begin
      i := adoquery8.FieldByName('Storage_Flg').AsInteger;
      if (i >=1) and (i <= 8) then
      dbgrid8.Canvas.Brush.color:= MyColor[str1.FieldByName('Storage_Flg').AsInteger];
      dbgrid8.Canvas.Font.Color:=clwindowtext;  dbgrid8.Canvas.pen.mode:=pmmask;
      dbgrid8.DefaultDrawColumnCell(rect,datacol,column,state);
    end;
      

  9.   


    const
      Mycolor : Array[1..8] of Tcolor = (clWhite,clBlack,clred,clFuchsia,clAqua,clBlue,clGray,clLime);
    procedure Tjkcpcs.DBGrid8DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
      var
      i : integer;
    begin
      i := adoquery8.FieldByName('Storage_Flg').AsInteger;
      if (i >=1) and (i <= 8) then
      dbgrid8.Canvas.Brush.color:= MyColor[i];
      dbgrid8.Canvas.Font.Color:=clwindowtext;  dbgrid8.Canvas.pen.mode:=pmmask;
      dbgrid8.DefaultDrawColumnCell(rect,datacol,column,state);
    end;
      

  10.   

    双福说的就是把我的代码简化了,可是每次刷新闪屏还是会出现的,这个问题才是我现在最大的问题,代码优化我现在不考虑,要的是界面效果啊,不过还是很感谢继续求教
     try
        jkcpcs.ADOQuery3.DisableControls;
        finally
        jkcpcs.ADOQuery3.EnableControls
        end;
    这个也用了,还是没效果,求助中。
      

  11.   

    主要有8个dbgrid,我要鼠标每次点击变颜色(蓝色),点过之后恢复原来的颜色,而且8个dbgrid都连一张表,我根据仓库里面的storage_flg判断其颜色,然后做刷新的,可是每次点都会闪屏一次,这肯定不好的,求高手指教
      

  12.   


    你换成advstringgrid,然后用
    advGrid.BeginUpdate ;advGrid.EndUpdate;
      

  13.   

    用Tstringgrid就可以,如果连接数据库就用TDBstringgrid,至于控制颜色,各个论坛里有不少源代码
      

  14.   


    procedure TForm1.FormCreate(Sender: TObject);
    begin
      DoubleBuffered := True;
    end;