发信人: liudq() 
整理人: windfire(2000-12-05 20:06:27), 站内信件
 | 
 
 
发信人: icefh (冰原)
 信  区: RAD
 标  题: Delphi的Tips(七)
 发信站: '紫金飞鸿' (Fri May  1 13:38:01 1998) , 转信
 
 Delphi 3 图形VCL中Bug修改方案:
 
    所有用Delphi 3的TJpegImage开发过Web ISAPI程序的人都知道:刚开始程序 运行是正
 确的,但是运行不出几次,程序就会出问题:Web Server产生页面错误! 但是仔 细检查自
 己的程序,发现还是没有问题,到底为什么? 
    经仔细检查Delphi 3 VCL 的源程序,发现实际上错误发生在Delphi 3的图形 处理文件
 Graphics中,Borland公司的开发人员锁住了BitmapCanvasList但是未解锁,使得 程序在多线
 程的程序中会产生错误。 
 
    具体如下:(下面的程序在Delphi 3\Source\VCL\Graphics.pas中) 
 procedure FreeMemoryContexts; 
 var 
    I: Integer; 
 begin 
    with BitmapCanvasList.LockList do 
      begin 
      try 
       for I := Count-1 downto 0 do 
       with TBitmapCanvas(Items[I]) do 
        if TryLock then 
        try 
         FreeContext; 
        finally 
         Unlock; 
        end; 
     finally 
       BitmapCanvasList.UnLockList; 
     end 
    end; 
 end; 
 
    ... 
 
 procedure DeselectBitmap(AHandle: HBITMAP); 
 var 
    I: Integer; 
 begin 
    if AHandle = 0 then Exit; 
    with BitmapCanvasList.LockList do 
     try 
      for I := Count - 1 downto 0 do 
       with TBitmapCanvas(Items[I]) do 
        if (FBitmap <> nil) and 
          (FBitmap.FImage.FHandle = AHandle) then 
         FreeContext; 
     finally 
      BitmapCanvasList.UnLockList; 
     end 
 end; 
   
    在以上的程序中红色为补充的程序,桔红色为发生错误的程序。 
 
    修改的方法为修改以上的程序,然后编译生成DCU文件,覆盖在Lib中的DCU文 件,重
 新编译你所有用到图形的程序。 
   
 
 傅贵
 
 --
 
                           /\           
   我在冰雪原中         // /\  \\       
        跋涉         / / /  |  \ \ \    
      远方的路啊    /^^^^--冰原--^^^^\  
       在哪里?    /__________________\ 
 
 ※ 修改:·icefh 於 May  1 13:39:08 修改本文·[FROM: 202.119.236.104]
 ※ 来源:·紫金飞鸿 bbs.njupt.edu.cn·[FROM: 202.119.236.104]
 
 
 ---------------------------------------------------------------------- ----------
 
 [返回首页] [分类讨论区] [全部讨论区]
  -- ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.167.200]
  | 
 
 
 |