在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分色显示的,多次打开子窗体就会出现
测试过是如下代码(用于分色显示)引起的:
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分色显示的,多次打开子窗体就会出现
不加入以上代码便没如上问题,代码是子窗体中用于grid分色显示的,多次打开子窗体就会出现.
多次打开子窗体就会出现.
不关编译的事中吧
其实就是线程的互斥
var
cr: TCriticalSection;
begin
cr := TCriticalSection.Create;
cr.Enter;
//这里写入对CAnvas的操作
cr.Leave;
cr.Free;
end;