⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 025.htm

📁 Delphi书籍--Delphi网上教程
💻 HTM
字号:
<HTML><HEAD><meta http-equiv="Content-Type" content="text/html; charset=GB2312"><TITLE>-->DELPHI专题--控件应用-->Delphi 3 图形VCL中Bug修改方案</TITLE>
<META NAME="keywords" CONTENT=" DELPHI专题--控件应用 Delphi 3 图形VCL中Bug修改方案">
<META NAME="description" CONTENT=" - DELPHI专题--控件应用 - Delphi 3 图形VCL中Bug修改方案">

<style>
<!--
#page {position:absolute; z-index:0; left:0px; top:0px}
.tt3 {font: 9pt/12pt "宋体"}
.tt2 {font: 12pt/15pt "宋体"}
a {text-decoration:none}
a:hover {color: blue;text-decoration:underline}
-->
</style>
</HEAD>
<a href="index.html">返回</a>



<body text="#000000" aLink=#9900ff link=#006699 vLink=#006699 bgcolor="#FFFFFF" leftmargin="3" topmargin="3" marginheight="3" marginwidth="3">
<TABLE WIDTH="100%" CELLPADDING=10 CELLSPACING=0 BORDER=0>
<TR>

<TD class="tt2" bgcolor="#F5F8F8" width="84%"><center><B><FONT style="FONT-SIZE: 16.5pt" COLOR="#FF6666" FACE="楷体_GB2312">Delphi 3 图形VCL中Bug修改方案</FONT></B></center> 
<hr color="#EE9B73" size="1" width="94%"> 
<p><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp; 所有用Delphi 3的TJpegImage开发过Web 
ISAPI程序的人都知道:刚开始程序运行是正确的,但是运行不出几次,程序就会出问题:Web 
Server产生页面错误! 
但是仔细检查自己的程序,发现还是没有问题,到底为什么? <br> 
&nbsp;&nbsp;&nbsp; 经仔细检查Delphi 3 VCL 
的源程序,发现实际上错误发生在Delphi 3的图形处理文件Graphics中,Borland公司的开发人员锁住了BitmapCanvasList但是未解锁,使得程序在多线程的程序中会产生错误。 
</span></p> 
<p><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp; 具体如下:(下面的程序在Delphi 
3\Source\VCL\Graphics.pas中) <br> 
<b>procedure</b> FreeMemoryContexts; <br> 
<b>var</b> <br> 
&nbsp;&nbsp;&nbsp; I: Integer; <br> 
<b>begin</b> <br> 
&nbsp;&nbsp;&nbsp; <b>with</b> <font color="#FF6600">BitmapCanvasList.LockList</font> <b>do</b> 
<br> 
<b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin</b> <br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b><font color="#FF0000">try</font></b> <br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>for</b> I := Count-1 <b>downto</b> 
0 <b>do</b> <br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>with</b> 
TBitmapCanvas(Items[I]) <b>do</b> <br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if TryLock then <br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>try</b> <br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
FreeContext; <br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>finally</b> <br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
Unlock; <br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>end</b>; <br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b><font color="#FF0000">finally</font></b> <br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#FF0000">BitmapCanvasList.UnLockList;</font> 
<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b><font color="#FF0000">end</font></b> <br> 
&nbsp;&nbsp;&nbsp; <b>end;</b> <br> 
<b>end;</b> </span></p> 
<p><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; ... </span></p> 
<p><span style="font-size: 9pt"><b>procedure</b> DeselectBitmap(AHandle: HBITMAP); <br> 
<b>var</b> <br> 
&nbsp;&nbsp;&nbsp; I: Integer; <br> 
<b>begin</b> <br> 
&nbsp;&nbsp;&nbsp; <b>if</b> AHandle = 0 <b>then</b> Exit; <br> 
&nbsp;&nbsp;&nbsp; <b>with</b> <font color="#FF6600">BitmapCanvasList.LockList</font> <b>do</b> 
<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b><font color="#FF0000">try</font></b> <br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>for</b> I := Count - 1 <b>downto</b> 0 
<b>do</b> <br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>with</b> 
TBitmapCanvas(Items[I]) <b>do</b> <br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>if</b> 
(FBitmap &lt;&gt; nil) <b>and</b> <br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
(FBitmap.FImage.FHandle = AHandle) <b>then</b> <br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
FreeContext; <br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b><font color="#FF0000">finally</font></b> <br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#FF0000">BitmapCanvasList.UnLockList;</font> 
<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b><font color="#FF0000">end</font></b> <br> 
<b>end;</b> <br> 
&nbsp; <br> 
&nbsp;&nbsp;&nbsp; 
在以上的程序中红色为补充的程序,桔红色为发生错误的程序。 </span></p> 
<p><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp; 
修改的方法为修改以上的程序,然后编译生成DCU文件,覆盖在Lib中的DCU文件,重新编译你所有用到图形的程序。 
<br> 
&nbsp; </span></p> 
<hr color="#EE9B73" size="1" width="94%"> 
 
</TD> 
 
</TR> 
</table> 
</BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -