精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● Delphi>>其他>>Delphi的Tips(七(转载)

主题:Delphi的Tips(七(转载)
发信人: 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]

[关闭][返回]