我想判断在stringgrid 的值,如果有两个值相同,则这两个单元格的颜色都变成黄色
 我的代码如下所写
 aa:=stringgrid1.CellRect(c,a );
 bb:=stringgrid1.CellRect(c,a );
 StringGrid1.Canvas.Brush.Color := clyellow;
 StringGrid1.Canvas.Font.Color:=clblue;
 StringGrid1.Canvas.FillRect(aa);
 StringGrid1.Canvas.FillRect( bb);
它的颜色是一闪而过。并没有保存下来。请问高手这如何解决

解决方案 »

  1.   

    procedure Tfrmso.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    var ARect:TRect;
    begin
      with stringgrid1.Canvas do
        begin
          Font.Name:='宋体';
          Font.Size:=9;
          ARect:=Rect;
          if(ARow=0)and((ACol=7)or(ACol=8))then
            begin
              ARect:=Rect;
              ARect.Right:=Rect.Right+2;
            end;
          if ((ARow >=1))and((ARow mod 2)=0) then
            Brush.Color:=RGB(231,247,242)
          else
            if ARow >=1 then
              Brush.Color:=RGB(183,235,219);      fillRect(ARect);      end;
      with stringgrid1 do
        canvas.TextOut(Rect.Left+2,Rect.top+2,stringgrid1.Cells[Acol,ARow]);
    end;
      

  2.   

    aa:=stringgrid1.CellRect(A,C );
      bb:=stringgrid1.CellRect(A,C );//stringgrid1???
      StringGrid1.Canvas.FillRect(aa);
      StringGrid1.Canvas.FillRect( bb);//Stringgrid1???看不懂
      

  3.   

    okiknow()谢谢你的回答,不过我有一点不明白 
     我是动态到数据库调用数据的,每个数据都要检查的,是一个一个单元格改变颜色的
    请问StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);这个事件是什么时候就执行的,是什么来触发的。能否说的明白一点啊
      

  4.   

    一闪而过是因为stringgrid又刷新了,你没有在Ondrawcell里自己定义输出画面就会用默认的方法画界面了
      

  5.   

    能不能把你的情况再说清楚点。
    把你向STRINGGRID填写TEXT 的代码看一下,
    是不是,比如,cell[0,1]=cell[2,3]则他们颜色一样,
    cell[5,1]=cell[6,3]则他们颜色一样但也不同于cell[0,1]?
                 
      

  6.   

    是button1.click 的事件  
    for jj:=1 to 20 do
        for kk:=1 to 10 do
        begin
         if not adoquery2.Eof then
            begin          
              cc:=stringgrid1.CellRect(jj,kk);
              stringgrid1.Cells[kk,jj]:=adoquery2.fieldbyname'f_ticketcode').AsString;
              if adoquery2.fieldbyname('bz').asinteger=1//表示这个值是重复的,这个单元格的颜色是红色。

           StringGrid1.Canvas.Brush.Color := clred;
          StringGrid1.Canvas.FillRect( cc);
    可是红色是一闪而过的,并没有保存下来
      

  7.   

    这个事件是当StringGrid创建的时候就执行的