在win2000,xp中程序都很正常.但在win98中运行过一段时间后就会不断出现以上问题.最后关都关不了.
测试过是如下代码(用于分色显示)引起的:
procedure Tmbdm_frm.DBGridEh1GetCellParams(Sender: TObject;
  Column: TColumnEh; AFont: TFont; var Background: TColor;
  State: TGridDrawState);
begin
    if (Sender as TDBGridEH).SumList.RecNo mod 2 = 1 then
      Background := dm.gridsingelcolor 
    else
      Background := dm.griddoublecolor;
end;
我改用以下代码实现,也是同样的错误.
procedure Tmbdm_frm.DBGridEh1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumnEh;
  State: TGridDrawState);
begin
 if gdSelected in State then Exit;
 if ((Sender as TDBGridEH).DataSource.DataSet).RecNo mod 2 = 0 then
   (Sender as TDBGridEH).Canvas.Brush.Color := clInfoBk //定义背景颜色
 else
   (Sender as TDBGridEH).Canvas.Brush.Color := RGB(191, 255, 223); //定义背景色
 (Sender as TDBGridEH).DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
不加入以上代码便没如上问题,代码是子窗体中用于grid分色显示的,多次打开子窗体就会出现

解决方案 »

  1.   

    2000中编辑.2000和XP都没问题.应该是内存问题.TDBGridEH比较吃内存.
    不加入以上代码便没如上问题,代码是子窗体中用于grid分色显示的,多次打开子窗体就会出现.
    多次打开子窗体就会出现.
    不关编译的事中吧
      

  2.   

    98中的HDC是不能自动出力多线程绘图的,而2K、XP可以,这就是问题所在,你用PV操作(也就是CriticalSection)就可以解决,我以前碰到过类似的问题,只不过是StatusBar的。
      

  3.   

    huanzhugege(还猪哥哥):可不可以提供范例.你用什么方法来实现记录分色显示
      

  4.   

    目前还不是很确定问题是否是记录分色引起的.仍在测试中.我还用了TdxBarManager控件
      

  5.   

    procedure TFormMain.ClearTitleBar;
    其实就是线程的互斥
    var
      cr:  TCriticalSection;
    begin
      cr := TCriticalSection.Create;
      cr.Enter;
      //这里写入对CAnvas的操作 
      cr.Leave;
      cr.Free;
    end;