﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-Welcome to ErranLi's Blog!-随笔分类-Delphi</title><link>http://www.cppblog.com/erran/category/5351.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 22 May 2008 06:33:34 GMT</lastBuildDate><pubDate>Thu, 22 May 2008 06:33:34 GMT</pubDate><ttl>60</ttl><item><title>Delphi取整函数</title><link>http://www.cppblog.com/erran/archive/2007/10/13/34152.html</link><dc:creator>erran</dc:creator><author>erran</author><pubDate>Sat, 13 Oct 2007 13:34:00 GMT</pubDate><guid>http://www.cppblog.com/erran/archive/2007/10/13/34152.html</guid><wfw:comment>http://www.cppblog.com/erran/comments/34152.html</wfw:comment><comments>http://www.cppblog.com/erran/archive/2007/10/13/34152.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/erran/comments/commentRss/34152.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/erran/services/trackbacks/34152.html</trackback:ping><description><![CDATA[
		<font face="Arial">floor 和 ceil 是 math unit 里的函数，使用前要先 Uses Math。<br />trunc 和 round 是 system unit 里的函数，缺省就可以用。<br />floor 直接往小的取，比如 floor(-123.55)=-124，floor(123.55)=123<br />trunc 直接切下整数，比如 trunc(-123.55)=-123, floor(123.55)=123<br />ceil 直接往大的取，比如 ceil(-123.55)=-123， ceil(123.55)=124<br />round 计算四舍五入，比如 round(-123.55)=-124，round(123.55)=124</font>
<img src ="http://www.cppblog.com/erran/aggbug/34152.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/erran/" target="_blank">erran</a> 2007-10-13 21:34 <a href="http://www.cppblog.com/erran/archive/2007/10/13/34152.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>delphi : 相当与sscanf的函数ReadStrValues</title><link>http://www.cppblog.com/erran/archive/2006/12/07/16103.html</link><dc:creator>erran</dc:creator><author>erran</author><pubDate>Thu, 07 Dec 2006 12:17:00 GMT</pubDate><guid>http://www.cppblog.com/erran/archive/2006/12/07/16103.html</guid><wfw:comment>http://www.cppblog.com/erran/comments/16103.html</wfw:comment><comments>http://www.cppblog.com/erran/archive/2006/12/07/16103.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/erran/comments/commentRss/16103.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/erran/services/trackbacks/16103.html</trackback:ping><description><![CDATA[<p>（引用）<br><br><br>{------------------------------------------------------------------------------}<br>{ procedure ReadStrValues&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>{ 功能说明: 根据指定的分隔符将一个字符串分解为若干个子串&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果传递的子串数量超过源串可以解析的字串数, 则多传的子串将置为空串 }<br>{ 参&nbsp;&nbsp;&nbsp; 数:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>{&nbsp;&nbsp; Str&nbsp;&nbsp; : 待分解的字符串&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>{&nbsp;&nbsp; StrArr: 存放分解后的子串的数组, 以字符串指针数组传递&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>{&nbsp;&nbsp; Ch&nbsp;&nbsp;&nbsp; : 分隔符定义, 缺省为 ";"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>{------------------------------------------------------------------------------}<br>procedure ReadStrValues(Str: string; StrArr: array of PString; Ch: Char = ';');<br>var<br>&nbsp; I, StrLen, StrPos, ArrLen, ArrIndex: Integer;<br>begin<br>&nbsp; StrLen := Length(Str);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 字符串长<br>&nbsp; ArrLen := Length(StrArr);&nbsp;&nbsp; // 待取出的字符串个数<br>&nbsp; if ArrLen = 0 then Exit;&nbsp;&nbsp;&nbsp; // 如果字符串指针数组中无元素，则直接退出</p>
<p>&nbsp; StrPos := 1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 当前读到的字符串位置<br>&nbsp; ArrIndex := 0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 当前字符串指针数组位置</p>
<p>&nbsp; // 此处将 Str 长度加1，用于后面判断是否已读完整个字串<br>&nbsp; for I := 1 to StrLen + 1 do<br>&nbsp; begin<br>&nbsp;&nbsp;&nbsp; // 注意此处条件位置不可倒置(骤死式判断)<br>&nbsp;&nbsp;&nbsp; if (I = StrLen + 1) or (Str[I] = Ch) then<br>&nbsp;&nbsp;&nbsp; begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 拷贝读到的字符串<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StrArr[ArrIndex]^ := Copy(Str, StrPos, I - StrPos);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StrPos := I + 1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 如果需要读的字符串指针数组已完成，则退出<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Inc(ArrIndex);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ArrIndex &gt;= ArrLen then Exit;<br>&nbsp;&nbsp;&nbsp; end;<br>&nbsp; end;</p>
<p>&nbsp; // 检查是否所有的字符串指针都读到了，如果没有读到，将被设置为空串<br>&nbsp; for I := ArrIndex to ArrLen - 1 do<br>&nbsp;&nbsp;&nbsp; StrArr[I]^ := '';<br>end;<br><br><br>{------------------------------------------------------------------------------}<br>{ 测试该函数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>{------------------------------------------------------------------------------}</p>
<p>procedure TForm1.FormCreate(Sender: TObject);<br>const<br>&nbsp; SampleStr = '张三;男;41';<br>var<br>&nbsp; S1, S2, S3, S4: string;<br>begin<br>&nbsp; // 正常字串解析<br>&nbsp; S1 := 'S1';&nbsp; S2 := 'S2';&nbsp; S3 := 'S3';&nbsp; S4 := 'S4';<br>&nbsp; ReadStrValues(SampleStr, [@S1, @S2, @S3]);<br>&nbsp; ShowMessage(Format('"%s", "%s", "%s", "%s"', [S1, S2, S3, S4]));</p>
<p>&nbsp; // 待读字串少于源串内容测试<br>&nbsp; S1 := 'S1';&nbsp; S2 := 'S2';&nbsp; S3 := 'S3';&nbsp; S4 := 'S4';<br>&nbsp; ReadStrValues(SampleStr, [@S1, @S2]);<br>&nbsp; ShowMessage(Format('"%s", "%s", "%s", "%s"', [S1, S2, S3, S4]));</p>
<p>&nbsp; // 待读字串多于源串内容测试<br>&nbsp; S1 := 'S1';&nbsp; S2 := 'S2';&nbsp; S3 := 'S3';&nbsp; S4 := 'S4';<br>&nbsp; ReadStrValues(SampleStr, [@S1, @S2, @S3, @S4]);<br>&nbsp; ShowMessage(Format('"%s", "%s", "%s", "%s"', [S1, S2, S3, S4]));</p>
<p>&nbsp; // 待读字串为空测试<br>&nbsp; S1 := 'S1';&nbsp; S2 := 'S2';&nbsp; S3 := 'S3';&nbsp; S4 := 'S4';<br>&nbsp; ReadStrValues(SampleStr, []);<br>&nbsp; ShowMessage(Format('"%s", "%s", "%s", "%s"', [S1, S2, S3, S4]));</p>
<p>&nbsp; // 源串为空测试<br>&nbsp; S1 := 'S1';&nbsp; S2 := 'S2';&nbsp; S3 := 'S3';&nbsp; S4 := 'S4';<br>&nbsp; ReadStrValues('', [@S1, @S2, @S3]);<br>&nbsp; ShowMessage(Format('"%s", "%s", "%s", "%s"', [S1, S2, S3, S4]));<br>end; </p>
<img src ="http://www.cppblog.com/erran/aggbug/16103.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/erran/" target="_blank">erran</a> 2006-12-07 20:17 <a href="http://www.cppblog.com/erran/archive/2006/12/07/16103.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Delphi : 隐藏MDI子窗口带来的问题</title><link>http://www.cppblog.com/erran/archive/2006/12/07/16102.html</link><dc:creator>erran</dc:creator><author>erran</author><pubDate>Thu, 07 Dec 2006 12:13:00 GMT</pubDate><guid>http://www.cppblog.com/erran/archive/2006/12/07/16102.html</guid><wfw:comment>http://www.cppblog.com/erran/comments/16102.html</wfw:comment><comments>http://www.cppblog.com/erran/archive/2006/12/07/16102.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/erran/comments/commentRss/16102.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/erran/services/trackbacks/16102.html</trackback:ping><description><![CDATA[<p>在delphi中隐藏MDI子窗口有两种方法：<br><br>1）发消息及调用ShowWindow函数：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;showwindow(childform.handle, sw_hide);　　// 隐藏子窗口<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;showwindow(childform.handle, sw_restore);&nbsp; &nbsp;// 显示子窗口<br><br>缺点：使用windows api直接隐藏子窗口，其子窗口的visible属性和其显示状态是不一至的。当子窗口不可见时，其visible属性可能仍然是true。<br><br><br>2）重载子窗口的visiblechanging方法:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;procedure visiblechanging; override;//重载&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; procedure tchildform.visiblechanging;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;使用组件属性隐藏子窗口时，需要重载此过程，并且不执行任何继承代码，否则将报错&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //inherited; 不能执行此语句！<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 此后就可以直接设置visible属性了：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;childform.visible:=false;//隐藏子窗口<br>　 childform.visible:=true; //显示子窗口<br><br>缺点：当子窗口隐藏了后，有些控件的数据没有办法取到，如 TListView,&nbsp; 为这个问题曾经郁闷了很久，不知道是什么原因。例如：子窗口上listview已经有了10行数据，当利用方法2）把使得子窗口不可见了后，调用childform.listview.items.count结果总是0，但是显示此子窗口后10行数据还是在此listview中。<br><br>所以使用1），在程序中不要调用visible属性。<br>使用2），在子窗口隐藏了后不要去取该子窗口的数据。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<img src ="http://www.cppblog.com/erran/aggbug/16102.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/erran/" target="_blank">erran</a> 2006-12-07 20:13 <a href="http://www.cppblog.com/erran/archive/2006/12/07/16102.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>标记:回车换焦点</title><link>http://www.cppblog.com/erran/archive/2006/12/01/15840.html</link><dc:creator>erran</dc:creator><author>erran</author><pubDate>Fri, 01 Dec 2006 05:34:00 GMT</pubDate><guid>http://www.cppblog.com/erran/archive/2006/12/01/15840.html</guid><wfw:comment>http://www.cppblog.com/erran/comments/15840.html</wfw:comment><comments>http://www.cppblog.com/erran/archive/2006/12/01/15840.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/erran/comments/commentRss/15840.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/erran/services/trackbacks/15840.html</trackback:ping><description><![CDATA[回车换焦点<br>if Key = VK_Return then<br>&nbsp;&nbsp;&nbsp; begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OnEditExit(Sender);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Perform(WM_NEXTDLGCTL, 0, 0);<br>&nbsp;&nbsp;&nbsp; end; 
<img src ="http://www.cppblog.com/erran/aggbug/15840.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/erran/" target="_blank">erran</a> 2006-12-01 13:34 <a href="http://www.cppblog.com/erran/archive/2006/12/01/15840.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>双缓冲绘图</title><link>http://www.cppblog.com/erran/archive/2006/11/25/15650.html</link><dc:creator>erran</dc:creator><author>erran</author><pubDate>Sat, 25 Nov 2006 01:23:00 GMT</pubDate><guid>http://www.cppblog.com/erran/archive/2006/11/25/15650.html</guid><wfw:comment>http://www.cppblog.com/erran/comments/15650.html</wfw:comment><comments>http://www.cppblog.com/erran/archive/2006/11/25/15650.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/erran/comments/commentRss/15650.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/erran/services/trackbacks/15650.html</trackback:ping><description><![CDATA[<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>&nbsp;<o:p></o:p></span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>VC</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">双缓冲绘图</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>&nbsp;<o:p></o:p></span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>BOOL CGraphDlg::OnDraw(CDC* pDC)</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>{</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>CRect rc;</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>GetClientRect(&amp;rc);<span style="mso-tab-count: 1">&nbsp; </span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>CDC<span style="mso-spacerun: yes">&nbsp; </span>MemDC; </span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>CBitmap<span style="mso-spacerun: yes">&nbsp; </span>MemBitmap;<span style="mso-tab-count: 1">&nbsp;&nbsp; </span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>MemDC.CreateCompatibleDC(NULL);<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>MemBitmap.CreateCompatibleBitmap(pDC, rc.Size().cx,rc.Size().cy);</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>CBitmap *pOldBit=MemDC.SelectObject(&amp;MemBitmap);<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>MemDC.BitBlt(0,0,rc.width, rc.height, pDC,0,0,SRCCOPY);</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>m_pGraph-&gt;SetGraphDC(&amp;MemDC);</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>m_pGraph-&gt;DoGraphShowEvent();<span style="mso-tab-count: 1">&nbsp;&nbsp; </span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>pDC-&gt;BitBlt(0,0, rc.Size().cx,rc.Size().cy,&amp;MemDC,0,0,SRCCOPY);<span style="mso-tab-count: 1">&nbsp;&nbsp; </span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>&nbsp;<o:p></o:p></span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>MemDC.SelectObject(pOldBit);</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>MemBitmap.DeleteObject();</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>MemDC.DeleteDC();</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>}</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>&nbsp;<o:p></o:p></span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>Delphi </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">双缓冲绘图：</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>procedure TBkCoordi.Draw(Canvas : TCanvas);</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>var</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>_bmp : TBitmap;</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>_width, _height : integer;</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>_top, _left : integer;</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>begin</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>_width := Round(m_width);</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>_height := Round(m_height);</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>_left := Round(m_topleft.x);</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>_top := Round(m_topleft.y);</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>&nbsp;<o:p></o:p></span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>_bmp := Tbitmap.Create;</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>_bmp.Handle := CreateCompatibleDC(Canvas.Handle);</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>_bmp.Width :=<span style="mso-spacerun: yes">&nbsp; </span>_width;</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>_bmp.Height :=<span style="mso-spacerun: yes">&nbsp; </span>_height;</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>&nbsp;<o:p></o:p></span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>BitBlt(_bmp.Canvas.Handle,0,0,_width,_height, Canvas.Handle,_left,_top,SRCCOPY);</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-spacerun: yes">&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;</span>if m_showcross then m_cross.Draw(_bmp.Canvas);</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>if @OnDrawing &lt;&gt; nil then OnDrawing(_bmp.Canvas);</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>&nbsp;<o:p></o:p></span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>BitBlt(Canvas.Handle,_left,_top,_width,_height, _bmp.Canvas.Handle,0,0,SRCCOPY);</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>&nbsp;<o:p></o:p></span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>_bmp.Free;</span> </p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>end;</span> </p>
<img src ="http://www.cppblog.com/erran/aggbug/15650.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/erran/" target="_blank">erran</a> 2006-11-25 09:23 <a href="http://www.cppblog.com/erran/archive/2006/11/25/15650.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>