StringGrid1DrawCell事件中修改数据设置行高度会引起闪烁
怎样才能禁止闪烁?

解决方案 »

  1.   

    在绘制的时候用以下函数将屏幕锁住,阻止它闪动:
      LockWindowUpdate(FormName.Handle);
      

  2.   

    这样不行 CPU使用率 100% 画100行需要很长时间。
      

  3.   

    //写的太乱了 
    procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
     const
      hjianju=5;   //,行间距
     var
        c,yushu:integer;
        Rcount:integer; //行数
        Gaodu,wCount,ckuan:integer;  //单行高度 ,字符串宽 ,单元宽度
        i,j,h:integer;
        s,s1,s2:string;
        sl,htop,hleft,ss:integer;
        XY:tpoint;    //画文字起始坐标
    begin
        drawgrid1.Font.Size:=12;    s:=C_String[id];
        sl:=length(widestring(s+'  '+Tel_String[id]);
      if acol=1 then
      begin
        ckuan:=drawgrid1.ColWidths[1];    wcount:=drawgrid1.Canvas.TextWidth(s+'  '+Tel_String[id]);
        gaodu:=drawgrid1.Canvas.TextHeight(s);
        Rcount:=wcount div ckuan;
        yushu:=wcount mod ckuan;
        if yushu>0 then
        Rcount:=Rcount+1;
        drawgrid1.RowHeights[arow]:=(Rcount*(gaodu+hjianju))+hjianju;
        //设置单元格的高度    xy.Y:=rect.Top+hjianju; //第一行Y坐标
        xy.x:=rect.Left+2;     //第一行的X坐标    xy:=Chonghua(xy.X,xy.Y,ckuan,gaodu,s,drawgrid1);
        drawgrid1.Canvas.font.Color:=clred;  //变颜色为红色
        xy:=Chonghua(xy.X,xy.Y,ckuan,gaodu,' '+citystring[cityid][c][1],drawgrid1);  end;//acol
    end;
    function Chonghua(Xstart,Ystart,Ckuan,Gaodu:integer;s:string;state:Tdrawgrid):tpoint;
      const
        hjianju=5;
      var
        s2,s3:string;
        s1,i:integer;
        C1,C2,ss:integer;
      begin
        ckuan:=ckuan+40;
        s1:=length(widestring(s));
        for i:=1 to s1 do
          begin
            s2:=midstr(s,i,1);
            ss:=state.Canvas.TextWidth(s2);
            if  Xstart+ss <= ckuan then
              begin            state.Canvas.TextOut(Xstart,Ystart,s2);
                Xstart:=Xstart+ss;
              end//if
            else
              begin
                Ystart:=Ystart+hjianju+gaodu;
                Xstart:=42;
                state.Canvas.TextOut(Xstart,Ystart,s2);
                Xstart:=Xstart+ss;
              end;
          end;//for
        Chonghua.X:=xstart;
        chonghua.Y:=ystart;
    end;//chonghua
      

  4.   

    改成 drawgrid 了 这个占资源小点
      

  5.   

    我也遇到同样的问题,不知如何解决!
    有没有人用回调方式在grid中显示数据啊?
      

  6.   


    CSDN论坛浏览器:浏览、发帖、回复、结贴自动平均给分,下载地址:http://CoolSlob.ys168.com
      

  7.   

    在画的时候清除DrawCell事件,画完之后再挂回去, 不然每次修改宽度高度都会触发String Grid的重画事件,然后就不停的画亚画...