procedure TErrMeForm.ErrListDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  TmpLoop: Integer;
  TmpStr: string;
begin
  ErrWinkTimes := ErrWinkTimes + 1;      //ErrWinkTimes:全局变量;实现闪烁的效果
  if ErrWinkTimes > 9 then
    ErrWinkTimes := 0;
  if ErrWinkTimes < 7 then
  for TmpLoop := 1 to ErrList.RowCount do
  begin
    TmpStr := ErrList.Cells[3,TmpLoop];
    if TmpStr = 'Yes' then
    begin
      if Arow = TmpLoop then
      begin
        with ErrList do
        begin
          Canvas.Font.Color := clRed;
          Canvas.Font.Size := 9;
          //Canvas.Font.Style := Canvas.Font.Style + [fsBold];
          Canvas.Textout(Rect.Left + 2,Rect.Top + 2,Cells[Acol,Arow]);
        end;
      end;
    end;
  end;
end;
上述代码是想在预定的地方闪烁StringGrid的某一行,测试的结果是除了单元格Cell[3,TmpLoop]闪烁,另外的不完整!
主要问题:如何实现改变某一行的字体颜色呢

解决方案 »

  1.   

    因为你只判断了TmpStr := ErrList.Cells[3,TmpLoop];其它格都被你忽略了
      

  2.   


    如果不加闪烁的话,上面已经是修改一行的字体颜色了.只是加了闪烁后,除了单元格Cell[3,TmpLoop]闪烁,另外的不完整! 
    如果有时间的话,ls兄弟可以测下,不费时间的!或者加上你说的其他的几个单元格逻辑判断,给你出你的逻辑.我试了是没效果的(或者我的逻辑有问题)!呵呵..