<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_edrp.cn的Blog</title><subtitle type="text">学习，需要交流，欢迎大家和我共同来学习C#，ASP.NET，MS SQL Server开发Web项目，欢迎大家和我交流</subtitle><id>http://feed.cnblogs.com/blog/u/24698/rss</id><updated>2012-05-27T12:39:50Z</updated><author><name>edrp.cn</name><uri>http://www.cnblogs.com/edrp/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/edrp/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/24698/rss"/><entry><id>http://www.cnblogs.com/edrp/archive/2012/05/27/2520423.html</id><title type="text">五款流行的PDF阅读器以及资源占用的对比</title><summary type="text">首先是第一款PDF阅读器，很多网友都以为Foxit Reader是一款国外的PDF阅读器软件，其实不是的，它是一款是地地道道的国产货哦，同时它也是目前唯一一款国人研发的，具有自主知识产权的PDF阅读器 ，它具有非常小巧、速度比较快，功能也比较丰富等几个特点。 第二款是PDF-X Change Viewer阅读器，这款软件属于后起之秀，在国外是比较流行的，因为这款阅读器软件的更新迅速非常快，功能也非常丰富，近年来逐渐在国内正流行开来。 第三款是eXPert PDF Reader阅读器：这款软件虽然在国内的认知度是一般，但是相对而言，也是国外的一款相当流行的PDF阅读器。 另一款是Sumatra.</summary><published>2012-05-27T11:07:00Z</published><updated>2012-05-27T11:07:00Z</updated><author><name>edrp.cn</name><uri>http://www.cnblogs.com/edrp/</uri></author><link rel="alternate" href="http://www.cnblogs.com/edrp/archive/2012/05/27/2520423.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/edrp/archive/2012/05/27/2520423.html"/><content type="html"> &lt;div&gt;首先是第一款PDF阅读器，很多网友都以为Foxit Reader是一款国外的PDF阅读器软件，其实不是的，它是一款是地地道道的国产货哦，同时它也是目前唯一一款国人研发的，具有自主知识产权的PDF阅读器 ，它具有非常小巧、速度比较快，功能也比较丰富等几个特点。 &lt;/div&gt;&lt;div&gt;第二款是PDF-X Change Viewer阅读器，这款软件属于后起之秀，在国外是比较流行的，因为这款阅读器软件的更新迅速非常快，功能也非常丰富，近年来逐渐在国内正流行开来。 &lt;/div&gt;&lt;div&gt;第三款是eXPert PDF Reader阅读器：这款软件虽然在国内的认知度是一般，但是相对而言，也是国外的一款相当流行的PDF阅读器。&amp;nbsp; &lt;/div&gt;&lt;div&gt;另一款是Sumatra PDF阅读器：他是唯一的一款开源PDF阅读器，这款PDF阅读器的特点是绿色小巧，功能非常简单，而且实用。 &lt;/div&gt;&lt;div&gt;最后一款是Cool PDF Reader：这款PDF阅读器号称是目前最小巧的一款阅读器，它支持PDF文件阅读浏览。 &lt;/div&gt;&lt;div&gt;我们来看下这几款阅读器的资源占用的对比：在资源消耗这方面，我们主要是观察静态的和动态的两种情况，静态指的是在启动阅读器以后，不执PDF的文档来浏览操作，而动态则是指加载文档以后所占用的资源情况，文档是选用纯图片的文档，并且执行浏览的操作，页面比例是100%显示的，而且在统一浏览10页后，可以观察到各自的内存占用。为了使数据可以更为可靠，所以每款阅读器的测试都已经进行了三次，最后再取这三次数据的平均值。 &lt;/div&gt;&lt;div&gt;对比显示，Foxit 和 Cool PDF阅读器消耗的内存资源最为节省，两项的测试数据都是比较理想的。而对于动态测试方面，这五款阅读器是有共性的，拿就是随着阅读页数的增加，内存的消耗量也会逐渐攀升，从整体来说，其实就是上升多少的问题而已。&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;此文章来源网络，若有侵权，请告知，转发只是为了方便学习。&lt;/div&gt;&lt;img src="http://www.cnblogs.com/edrp/aggbug/2520423.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/edrp/archive/2012/05/27/2520423.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/edrp/archive/2012/04/27/2473058.html</id><title type="text">RealThinClient LinkedObjects Demo解析</title><summary type="text">RealThinClient LinkedObjects Demo解析 作者：不详，搜索自网络，如有侵权，请告知 从成功学得少，从失败学得多这个Demo源码实现斗劲怪，有点拗脑，原因估是作者想把控件的应用做得简单，而封装太多。恋情是友情的精华，手札是恋情的妙药这里说是解析，其实是粗析，俺没有耐烦每个实现点都查实清楚，看源码一般也就连读带猜的。这个Demo表达出的意义，在于在HTTP接见体式格式下，很便利的实现了客户端和办事端彼此的主动通信才能，这在须要及时消息交互，把握交互，数据互传上很是有意义，很是给力。一、Demo工作过程1. 实现功能：实现了上传文件到HTTP办事端的才能，大文件上...</summary><published>2012-04-27T02:01:00Z</published><updated>2012-04-27T02:01:00Z</updated><author><name>edrp.cn</name><uri>http://www.cnblogs.com/edrp/</uri></author><link rel="alternate" href="http://www.cnblogs.com/edrp/archive/2012/04/27/2473058.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/edrp/archive/2012/04/27/2473058.html"/><content type="html"> &lt;h1 id="articletitle"&gt;RealThinClient LinkedObjects Demo解析&lt;/strong&gt;&lt;/p&gt;&lt;p id="articleinfo"&gt; 作者：不详，搜索自网络，如有侵权，请告知&lt;/p&gt;&lt;div id="articlebody"&gt;&lt;p&gt;从成功学得少，从失败学得多这个Demo源码实现斗劲怪，有点拗脑，原因估是作者想把控件的应用做得简单，而封装太多。&lt;/p&gt;&lt;p&gt;恋情是友情的精华，手札是恋情的妙药这里说是解析，其实是粗析，俺没有耐烦每个实现点都查实清楚，看源码一般也就连读带猜的。&lt;/p&gt;&lt;p&gt;&lt;span&gt;这个Demo表达出的意义，在于在HTTP接见体式格式下，很便利的实现了客户端和办事端&lt;strong&gt;彼此的主动通信才能&lt;/strong&gt;，这在须要及时消息交互，把握交互，数据互传上很是有意义，很是给力。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;一、Demo工作过程&lt;/p&gt;&lt;p&gt;1. 实现功能：实现了上传文件到HTTP办事端的才能，大文件上传成功率极高，并且始终对峙很是少的内存占用量。&lt;/p&gt;&lt;p&gt;2. 工作过程：客户端和办事端的TRtcLinkedModule控件需建树通信连接，在Demo中有两种体式格式，客户端先创建TRtcLinkedModule对象和办事端先创建TRtcLinkedModule对象，但无论哪一端先创建，都邑激发对端也创建对象，从而使两对象的通信连接建树。完成建树后，办事端把文件存储路径推送给客户端，客户端选择文件后，调用办事端Upload处理惩罚流程（这儿只能说是处理惩罚流程，而不是函数，因为TRtcLinkedModule对象的长途调用老是只触发对端的OnCallMethod事务，经由过程在Param中应用字符串标识，如&amp;#8220;Upload&amp;#8221;告诉办事端应用哪一个处理惩罚流程）开端上传，办事端在Upload中先断定是否文件已存在，不存在的话，直接调用客户端的&amp;#8220;Get&amp;#8221;流程让其上传数据，且每次&amp;#8220;Get&amp;#8221;调用只请求客户端发送10K数据，客户端筹办好数据后调用办事端的&amp;#8220;Put&amp;#8221;把数据送到办事端并写入文件，&amp;#8220;Put&amp;#8221;过程又再调用&amp;#8220;Get&amp;#8221;，如此来去，直至完成全部数据上传。&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;二、实现道理和关键函数&lt;/p&gt;&lt;p&gt;1. TRtcLinkedModule控件&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; （1）此控件可放置在Form、DataModule、Frame这类容器上，一个容器只能有一个该控件！放置了该控件的模块即成为通信模块，可以在通信须要时由远端创议实例创建恳求而创建（除了放控件外，当然还有几行代码的工作要做，下面讲述）。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; （2）控件的字符串属性RemoteClass设置为远端的模块名字，如许当要远端创建Link模块进行通信时，RTC会把此名字作为标识发送创建恳求到远端，远端则按照名字创建正确的模块。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; （3）成员函数CallMethod（const xMethodName: string）直接触发对端的OnCallMethod事务，事务中按照xMethodName断定处理惩罚体式格式，看起来一般用于数据块或错杂把握上。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; （4）成员函数SetProp（const xPropName: string; xNow: boolean）、SetEvent（const xEventName: string）直接触发对端的OnSetProp和OnSetEvent事务，用于简单的短消息交互或把握交互。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; （5）成员函数Broadcast（const xChannel， xMethodName: string）在本地模块内群播消息，xChannel为群播管道，管道由成员函数Subscribe（const xChannel: String）建树。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; （6）控件应用相当简单，以上属性设置后就完成，不消管如何和http通信控件啊或ClientModule等远调控件进行连接，扔上就可用了（这也是让人斗劲困惑的处所，后面有解析它是如何和http通信控件接洽关系的）。&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;2. 函数RegisterRtcObjectConstructor（const xClassName:String; xProc:TRtcObjectConstructor）：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; （1）必须在initialization块履行，必须和UnregisterRtcObjectConstructor配对应用&lt;br /&gt;&amp;nbsp;&amp;nbsp; （2）这个函数用于指定一个能被远端调用的机关函数，用于能让远端在须要时创建TRtcLinkedModule对象及模块&lt;br /&gt;&amp;nbsp;&amp;nbsp; （3）函数的xClassName在TRtcLinkedModule控件中的RemoteClass中指定，xProc为一个procedure MakeObject（Sender:TObject; Param:TRtcObjectCall）;类型的静态函数，这个函数就是为什么在须要时就能创建远端Link模块的关键了，发明需求到来时，按照RegisterRtcObjectConstructor函数的注册信息，找到xProc函数调用，OK，Link模块对象生成了，道理很简单吧。&lt;br /&gt;&amp;nbsp;&amp;nbsp; （4）另一个调换规划为可以在TRtcClientModule或TRtcServerModule控件中的OnObjectCreate事务中进行创建工作，但这须要两端应用此Module控件进行通信。&lt;/p&gt;&lt;p&gt;函数意义：远端发送创建LinkObject通迅对象号令，本地端按照远端发来的xClassName字串在ObjectManager中找到注册的指定机关函数并调用。所以法度须要应用ActivateObjectManager创建好对象经管器。&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;3. 函数ActivateObjectManager（xCreate:boolean=True），TRtcDataServer和TRtcClientModule成员函数。&lt;/p&gt;&lt;p&gt;&amp;nbsp; （1）在应用TRtcLinkedModule控件进行通信前必须调用该函数，不然不克不及和远端通信，也不克不及正常创议远端模块创建恳求。&lt;/p&gt;&lt;p&gt;&amp;nbsp; （2）RtcClientModule1.ObjectLinks为&amp;#8220;ol_Manual&amp;#8221;必须手动调用，设置为&amp;#8220;ol_AutoClient&amp;#8221;或&amp;#8220;ol_AutoBoth&amp;#8221;则RTC会在后台主动调用。&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;不由得插句对于长途函数调用架构的一点见地：&lt;/p&gt;&lt;p&gt;RemObject套件用的是看起来很合适常规懂得的函数调用，让你感触感染不到这是长途函数，为实现如许一个应用感触感染，RO用了斗劲错杂的技巧来实现，不成否定，如许相当有含金量，不是谁都可以写得出来的，这种技巧曾如此让我赞服并进修。而RTC的长途调用全部用字符串标识体式格式，如此的简单，实现起来不须要错杂的技巧，大多有点经验的法度员基于TCP之类底层都可以做出来，而但多年后的如今，我才发明这种简单的美和高效，字符串可以描述从简单到极其错杂的机关，网页啊，xml啊这不都是如许描述的么，因而其灵活度可以说没有羁绊，要实现什么能实现什么如何实现只在乎用者同心专心。RTC的作者在编程思惟境界上必然已是十分的修为深厚了。&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;三、新鲜的处所&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 按事理，TRtcLinkedModule控件要能进行通信，必然要有设置通信体式格式的处所，但找完TRtcLinkedModule的属性和Demo的源码，都没有发明有设置的处所，那它是怎么完成通信的呢？&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; 先看看TRtcLinkedModule的机关函数里都干了什么：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span&gt; 1&lt;/span&gt; &lt;span&gt;constructor&lt;/span&gt; TRtcLinkedModule.Create（AOwner: TComponent）;&lt;br /&gt;&lt;span&gt; 2&lt;/span&gt;   &lt;span&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span&gt; 3&lt;/span&gt;   &lt;span&gt;inherited&lt;/span&gt; Create（AOwner）;&lt;br /&gt;&lt;span&gt; 4&lt;/span&gt;   &lt;span&gt;if&lt;/span&gt; &lt;span&gt;not&lt;/span&gt; （csDesigning &lt;span&gt;in&lt;/span&gt; ComponentState） &lt;span&gt;then&lt;/span&gt;&lt;br /&gt;&lt;span&gt; 5&lt;/span&gt;     &lt;span&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span&gt; 6&lt;/span&gt;     &lt;span&gt;// This will only work if there is an active Object Manager for the current thread&lt;/span&gt;&lt;br /&gt;&lt;span&gt; 7&lt;/span&gt;     FParam:=TRtcObjectCall.Create（GetRtcObjectManager）; &lt;br /&gt;&lt;span&gt; 8&lt;/span&gt;     &lt;span&gt;if&lt;/span&gt; assigned（AOwner） &lt;span&gt;then&lt;/span&gt;&lt;br /&gt;&lt;span&gt; 9&lt;/span&gt;       FOLink:=TRtcBasicObjectLink.Create（AOwner，FParam.Manager）&lt;br /&gt;&lt;span&gt;10&lt;/span&gt;     &lt;span&gt;else&lt;/span&gt; &lt;span&gt;// If no Owner， we are the Object container&lt;/span&gt;&lt;br /&gt;&lt;span&gt;11&lt;/span&gt;       FOLink:=TRtcBasicObjectLink.Create（self，FParam.Manager）;&lt;/div&gt;&lt;p&gt;看到了GetRtcObjectManager，这是个全局函数，按照线程ID获取对象经管器，ObjectManager估计是个全局的、独一的单例模式的对象，懒得看代码了，猜的，哈哈。&lt;/p&gt;&lt;p&gt;ObjectManager估计是个LinkObject的经管器，用于Link控件发送的恳求到来时找到正确的模块及正确的Link控件，然后调用对应的函数，如今的疑问是，ObjectManager怎么知道把恳求发送到对应的Form和Link去呢？上方代码中FOLink:=TRtcBasicObjectLink.Create（AOwner，FParam.Manager），看到传入AOwner了！还有Manager，干啥呢？持续跟下去看看TRtcObjectLink.Create是什么：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span&gt; 1&lt;/span&gt; &lt;span&gt;constructor&lt;/span&gt; TRtcObjectLink.Create（xOwner:TObject;xManager:TRtcObjectManager）;&lt;br /&gt;&lt;span&gt; 2&lt;/span&gt;   &lt;span&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span&gt; 3&lt;/span&gt;   &lt;span&gt;inherited&lt;/span&gt; Create;&lt;br /&gt;&lt;span&gt; 4&lt;/span&gt;   &lt;span&gt;if&lt;/span&gt; xOwner=&lt;span&gt;nil&lt;/span&gt; &lt;span&gt;then&lt;/span&gt;&lt;br /&gt;&lt;span&gt; 5&lt;/span&gt;     &lt;span&gt;raise&lt;/span&gt; ERtcObjectLinks.Create（&lt;span&gt;""&lt;/span&gt;&lt;span&gt;TRtcObjectLink.Create called with xOwner=nil&lt;/span&gt;&lt;span&gt;""&lt;/span&gt;）;&lt;br /&gt;&lt;span&gt; 6&lt;/span&gt;   &lt;span&gt;if&lt;/span&gt; xManager=&lt;span&gt;nil&lt;/span&gt; &lt;span&gt;then&lt;/span&gt;&lt;br /&gt;&lt;span&gt; 7&lt;/span&gt;     &lt;span&gt;raise&lt;/span&gt; ERtcObjectLinks.Create（&lt;span&gt;""&lt;/span&gt;&lt;span&gt;TRtcObjectLink.Create called with xManager=nil&lt;/span&gt;&lt;span&gt;""&lt;/span&gt;）;&lt;br /&gt;&lt;span&gt; 8&lt;/span&gt;   FSubs:=&lt;span&gt;nil&lt;/span&gt;;&lt;br /&gt;&lt;span&gt; 9&lt;/span&gt;   FOwner:=xOwner;&lt;br /&gt;&lt;span&gt;10&lt;/span&gt;   FManager:=xManager;&lt;br /&gt;&lt;span&gt;11&lt;/span&gt;   &lt;span&gt;if&lt;/span&gt; FManager.CreatingObjectID&amp;lt;&amp;gt;&lt;span&gt;0&lt;/span&gt; &lt;span&gt;then&lt;/span&gt; &lt;span&gt;// remote constructor&lt;/span&gt;&lt;br /&gt;&lt;span&gt;12&lt;/span&gt;     &lt;span&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span&gt;13&lt;/span&gt;     FOID:=FManager.CreatingObjectID;&lt;br /&gt;&lt;span&gt;14&lt;/span&gt;     FManager.CreatingObjectID:=&lt;span&gt;0&lt;/span&gt;;&lt;br /&gt;&lt;span&gt;15&lt;/span&gt;     FCreator:=False;&lt;br /&gt;&lt;span&gt;16&lt;/span&gt;     &lt;span&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span&gt;17&lt;/span&gt;   &lt;span&gt;else&lt;/span&gt;&lt;br /&gt;&lt;span&gt;18&lt;/span&gt;     &lt;span&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span&gt;19&lt;/span&gt;     FOID:=FManager.GetNextObjectID;&lt;br /&gt;&lt;span&gt;20&lt;/span&gt;     FCreator:=True;&lt;br /&gt;&lt;span&gt;21&lt;/span&gt;     &lt;span&gt;end&lt;/span&gt;;&lt;br /&gt;&lt;span&gt;22&lt;/span&gt;   FRemoteDestroyed:=False;&lt;br /&gt;&lt;span&gt;23&lt;/span&gt;   FManager.AddObject（FOID，self，FOwner）;&lt;br /&gt;&lt;span&gt;24&lt;/span&gt;   &lt;span&gt;end&lt;/span&gt;;&lt;/div&gt;&lt;p&gt;最后一句：FManager.AddObject（FOID，self，FOwner）;很明显了，这儿TRtcObjectLink的对象标识FOID和自身对象指针Self及地点的窗口FOwner被传入，三个的对应关系都有了，ObjectManager要找到正确的模块那是很轻易的事。而TRtcObjectLink对象内嵌于TRtcLinkedModule控件对象中，是组合关系，具体函数和事务调用是TRtcObjectLink的实现。&lt;/p&gt;&lt;p&gt;如今还有个题目是，Link对象是怎么获得通信才能的？&lt;/p&gt;&lt;p&gt;重视到，RtcClientModule1.ActivateObjectManager（True）;这个调用，RtcClientModule1是连接到TRtcHttpClient对象的，是以具备http通信才能，再看看RtcClientModule1和ObjectManager是什么关系：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span&gt; 1&lt;/span&gt; &lt;span&gt;procedure&lt;/span&gt; TRtcClientModule.ActivateObjectManager（xCreate:boolean=True）;&lt;br /&gt;&lt;span&gt; 2&lt;/span&gt;   &lt;span&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span&gt; 3&lt;/span&gt;   &lt;span&gt;if&lt;/span&gt; FRelease &lt;span&gt;then&lt;/span&gt; Exit;&lt;br /&gt;&lt;span&gt; 4&lt;/span&gt; &lt;br /&gt;&lt;span&gt; 5&lt;/span&gt;   &lt;span&gt;if&lt;/span&gt; ObjectLinks=ol_None &lt;span&gt;then&lt;/span&gt;&lt;br /&gt;&lt;span&gt; 6&lt;/span&gt;     &lt;span&gt;raise&lt;/span&gt; ERtcObjectLinks.Create（&lt;span&gt;""&lt;/span&gt;&lt;span&gt;ActivateObjectManager: ObjectLinks = ol_None&lt;/span&gt;&lt;span&gt;""&lt;/span&gt;）&lt;br /&gt;&lt;span&gt; 7&lt;/span&gt;   &lt;span&gt;else&lt;/span&gt; &lt;span&gt;if&lt;/span&gt; &lt;span&gt;not&lt;/span&gt; assigned（FObjectManager） &lt;span&gt;then&lt;/span&gt;&lt;br /&gt;&lt;span&gt; 8&lt;/span&gt;     &lt;span&gt;if&lt;/span&gt; xCreate &lt;span&gt;then&lt;/span&gt;&lt;br /&gt;&lt;span&gt; 9&lt;/span&gt;       &lt;span&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span&gt;10&lt;/span&gt;       FObjectManager:=TRtcClientObjectManager.Create（False）;&lt;br /&gt;&lt;span&gt;11&lt;/span&gt;       FObjectManager.BroadcastGroup:=String（FObjManSesName）;&lt;br /&gt;&lt;span&gt;12&lt;/span&gt;       FObjectManager.OnDataReady:=DoObjectManagerDataReady;&lt;br /&gt;&lt;span&gt;13&lt;/span&gt;       &lt;span&gt;end&lt;/span&gt;;&lt;br /&gt;&lt;span&gt;14&lt;/span&gt; &lt;br /&gt;&lt;span&gt;15&lt;/span&gt;   &lt;span&gt;if&lt;/span&gt; &lt;span&gt;not&lt;/span&gt; assigned（FObjectManager） &lt;span&gt;then&lt;/span&gt;&lt;br /&gt;&lt;span&gt;16&lt;/span&gt;     &lt;span&gt;raise&lt;/span&gt; ERtcObjectLinks.Create（&lt;span&gt;""&lt;/span&gt;&lt;span&gt;ActivateObjectManager failed&lt;/span&gt;&lt;span&gt;""&lt;/span&gt;）&lt;br /&gt;&lt;span&gt;17&lt;/span&gt;   &lt;span&gt;else&lt;/span&gt;&lt;br /&gt;&lt;span&gt;18&lt;/span&gt;     &lt;span&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span&gt;19&lt;/span&gt;     SetRtcObjectManager（FObjectManager）;&lt;br /&gt;&lt;span&gt;20&lt;/span&gt;     FObjectManager.uteBroadcast（&lt;span&gt;nil&lt;/span&gt;）;&lt;br /&gt;&lt;span&gt;21&lt;/span&gt;     &lt;span&gt;end&lt;/span&gt;;&lt;br /&gt;&lt;span&gt;22&lt;/span&gt;   &lt;span&gt;end&lt;/span&gt;;&lt;/div&gt;&lt;p&gt;噢，本来这家伙发明没有ObjectManager的话就创建一个并持有，并且用SetRtcObjectManager送到一个全局对象fObjManagers中，这个对象是个列表，而GetRtcObjectManager恰是从这个fObjManagers中获取，如今本相大白了，本来就是TRtcHttpClient控件收到恳求转给TRtcClientModule对象，TRtcClientModule对象的私有成员FObjectManager保存着ObjectManager的对象引用，ObjectManager对象按照保存的Owner、Link对象关系找到正确的模块，调用Link对象相干函数。嗯，不过具体代码没有细看，以上本相有较大猜测成份，不过我信赖事理上应对的，本质性实现上，请看到这篇文章的有心网友指出，批驳斧正，共同进步。MRMY&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/edrp/aggbug/2473058.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/edrp/archive/2012/04/27/2473058.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/edrp/archive/2012/04/23/2465801.html</id><title type="text">DLL封装ReportMachine/FastReport报表</title><summary type="text">DLL封装ReportMachine/FastReport报表如果有报表文件兼容性问题，可以参考下面的方法来将某版本的报表封装到DLL中来使用。首先建立一个DLL工厂，然后建立一个主窗体，在窗体中放入报表相关的控件。为了传入变量，我们简单定义一个变量名称/值对应用的对象：Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--&gt;//变量对应，可以用于变量和对象 RMVariants=class VarName:string; VarValue:stri</summary><published>2012-04-22T16:07:00Z</published><updated>2012-04-22T16:07:00Z</updated><author><name>edrp.cn</name><uri>http://www.cnblogs.com/edrp/</uri></author><link rel="alternate" href="http://www.cnblogs.com/edrp/archive/2012/04/23/2465801.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/edrp/archive/2012/04/23/2465801.html"/><content type="html"> &lt;p&gt;&lt;strong&gt;DLL封装ReportMachine/FastReport报表&lt;/strong&gt;&lt;/p&gt;&lt;img src="http://www.byywee.com/images/Img_line.gif" width="750" height="1"  alt="" /&gt;&lt;br /&gt;&lt;div style="color: rgb(0, 0, 0);" id="Content"&gt;&lt;p&gt;如果有报表文件兼容性问题，可以参考下面的方法来将某版本的报表封装到DLL中来使用。&lt;br /&gt;首先建立一个DLL工厂，然后建立一个主窗体，在窗体中放入报表相关的控件。&lt;/p&gt;&lt;br /&gt;&lt;p&gt;为了传入变量，我们简单定义一个变量名称/值对应用的对象：&lt;/p&gt;&lt;br /&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;br /&gt;&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;变量对应，可以用于变量和对象&lt;br /&gt;&amp;nbsp; RMVariants&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; VarName:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; VarValue:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;end&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;然后定义一个输出函数：&lt;/p&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;br /&gt;&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;procedure&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; ShowReport(vFile:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;vDSList:TList;vVarValueList:TList&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;nil&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;stdcall&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;var&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&amp;nbsp; i:Integer;&lt;br /&gt;&amp;nbsp; aDataSet:TADODataSet;&lt;br /&gt;&amp;nbsp; aRMDBDataSet:TRMDBDataSet;&lt;br /&gt;&amp;nbsp; aRMVariants:RMVariants;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;begin&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;try&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; frmReport:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;TfrmReport.Create(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;nil&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;with&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; frmReport &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;do&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;begin&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RMReport1.LoadFromFile(vFile);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;创建结果集列表&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; vDSList&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;nil&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;then&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;for&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; I :&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;to&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; vDSList.Count &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;-&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;do&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;begin&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; aDataSet:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;TADODataSet.Create(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;nil&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; aDataSet.Clone(TADODataSet(vDSList[i]));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; aDataSet.Name:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;TDataSet(vDSList[i]).Name;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; aRMDBDataSet:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;TRMDBDataSet.Create(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;nil&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; aRMDBDataSet.DataSet:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;aDataSet;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; aRMDBDataSet.Name:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;RMDB&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;+&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;aDataSet.Name;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; InsertComponent(aDataSet);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; InsertComponent(aRMDBDataSet);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;end&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;对变量进行赋值&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; vVarValueList&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;nil&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;then&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;for&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; I :&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;to&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; vVarValueList.Count &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;-&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;do&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;begin&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; aRMVariants:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;RMVariants(vVarValueList[i]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RMReport1.Dictionary.Variables[aRMVariants.VarName] :&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;aRMVariants.VarValue;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;end&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RMReport1.ShowReport&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;end&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;finally&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; frmReport.Free;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;end&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;end&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;然后在需要的时候调用该DLL即可。&lt;/p&gt;&lt;br /&gt;&lt;p&gt;上面代码使用了ADO,为了更通用，可以使用ClientDataSet来处理数据，在窗体中放在TDataSetProvider和TClientDataSet来处理结果集，如果不想发布Midas.dll，可以引用单元&lt;font color="#0000ff"&gt;MidasLib&lt;/font&gt;。&lt;/p&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;注：以上示例使用了ReportMachine，同样适用于FastReport.&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/edrp/aggbug/2465801.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/edrp/archive/2012/04/23/2465801.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/edrp/archive/2012/04/14/2446607.html</id><title type="text">客户找了一个网络公司做了一个网站，结果发布后出现：未能加载文件或程序集“AjaxPro.2”或它的某一个依赖项 的错误</title><summary type="text">“/”应用程序中的服务器错误。--------------------------------------------------------------------------------配置错误 说明: 在处理向该请求提供服务所需的配置文件时出错。请检查下面的特定错误详细信息并适当地修改配置文件。 分析器错误消息: 未能加载文件或程序集“AjaxPro.2”或它的某一个依赖项。系统找不到指定的文件。源错误: 行 18: 行 29: &lt;httpHandlers&gt;行 20: &lt;add verb="POST,GET" path="ajaxpro/*</summary><published>2012-04-13T16:31:00Z</published><updated>2012-04-13T16:31:00Z</updated><author><name>edrp.cn</name><uri>http://www.cnblogs.com/edrp/</uri></author><link rel="alternate" href="http://www.cnblogs.com/edrp/archive/2012/04/14/2446607.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/edrp/archive/2012/04/14/2446607.html"/><content type="html">&lt;p&gt;&amp;#8220;/&amp;#8221;应用程序中的服务器错误。&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;配置错误 &lt;br /&gt;说明: 在处理向该请求提供服务所需的配置文件时出错。请检查下面的特定错误详细信息并适当地修改配置文件。 &lt;br /&gt;&lt;br /&gt;分析器错误消息: 未能加载文件或程序集&amp;#8220;AjaxPro.2&amp;#8221;或它的某一个依赖项。系统找不到指定的文件。&lt;br /&gt;&lt;br /&gt;源错误: &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;行 18:&amp;nbsp;&amp;nbsp; &lt;br /&gt;行 29:&amp;nbsp;&amp;nbsp; &amp;lt;httpHandlers&amp;gt;&lt;br /&gt;行 20:&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add verb="POST,GET" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro.2"/&amp;gt;&lt;br /&gt;行 21:&amp;nbsp;&amp;nbsp; &amp;lt;/httpHandlers&amp;gt;&lt;br /&gt;行 22:&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;源文件: c:/inetpub/wwwroot/webmethod/web.config&amp;nbsp;&amp;nbsp;&amp;nbsp; 行: 20 &lt;br /&gt;&lt;br /&gt;程序集加载跟踪: 下列信息有助于确定程序集&amp;#8220;AjaxPro.2&amp;#8221;无法加载的原因。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;警告: 程序集绑定日志记录被关闭。&lt;br /&gt;要启用程序集绑定失败日志记录，请将注册表值 [HKLM/Software/Microsoft/Fusion!EnableLog] (DWORD)设置为 1。&lt;br /&gt;注意: 会有一些与程序集绑定失败日志记录关联的性能损失。&lt;br /&gt;要关闭此功能，请移除注册表值 [HKLM/Software/Microsoft/Fusion!EnableLog]。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;解决方法：&lt;/p&gt;&lt;p&gt;把网站在IIS中配置成独立网站，不能使用虚拟目录，否则即会出现如上错误。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/edrp/aggbug/2446607.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/edrp/archive/2012/04/14/2446607.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/edrp/archive/2012/04/12/2444522.html</id><title type="text">不同服务器数据库之间的数据操作</title><summary type="text">1.直接用SSIS导入导出即可.2.也可在一个库生成脚本,到另外一个库创建脚本内容.然后再把数据从一个库导入另外一个库.3.也可参考如下的代码操作.--创建链接服务器 exec sp_addlinkedserver 'ITSV' , '' , 'SQLOLEDB' , '远程服务器名或ip地址' exec sp_addlinkedsrvlogin 'ITSV' , 'false' , null , '用户名' , '密码' --查询示例 select * from I</summary><published>2012-04-12T11:55:00Z</published><updated>2012-04-12T11:55:00Z</updated><author><name>edrp.cn</name><uri>http://www.cnblogs.com/edrp/</uri></author><link rel="alternate" href="http://www.cnblogs.com/edrp/archive/2012/04/12/2444522.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/edrp/archive/2012/04/12/2444522.html"/><content type="html">&lt;p&gt;1.&lt;span style="font-family: 宋体"&gt;直接用&lt;/span&gt;SSIS&lt;span style="font-family: 宋体"&gt;导入导出即可&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;2.&lt;span style="font-family: 宋体"&gt;也可在一个库生成脚本&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;到另外一个库创建脚本内容&lt;/span&gt;.&lt;span style="font-family: 宋体"&gt;然后再把数据从一个库导入另外一个库&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;3.&lt;span style="font-family: 宋体"&gt;也可参考如下的代码操作&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;--&lt;span style="font-family: 宋体"&gt;创建链接服务器&lt;/span&gt; &lt;/p&gt;&lt;p&gt;exec sp_addlinkedserver 'ITSV' , '' , 'SQLOLEDB' , '&lt;span style="font-family: 宋体"&gt;远程服务器名或&lt;/span&gt;ip&lt;span style="font-family: 宋体"&gt;地址&lt;/span&gt;' &lt;/p&gt;&lt;p&gt;exec sp_addlinkedsrvlogin 'ITSV' , 'false' , null , '&lt;span style="font-family: 宋体"&gt;用户名&lt;/span&gt;' , '&lt;span style="font-family: 宋体"&gt;密码&lt;/span&gt;' &lt;/p&gt;&lt;p&gt;--&lt;span style="font-family: 宋体"&gt;查询示例&lt;/span&gt; select * from ITSV.&lt;span style="font-family: 宋体"&gt;数据库名&lt;/span&gt;.dbo.&lt;span style="font-family: 宋体"&gt;表名&lt;/span&gt; &lt;/p&gt;&lt;p&gt;--&lt;span style="font-family: 宋体"&gt;导入示例&lt;/span&gt; select * into &lt;span style="font-family: 宋体"&gt;表&lt;/span&gt; from ITSV.&lt;span style="font-family: 宋体"&gt;数据库名&lt;/span&gt;.dbo.&lt;span style="font-family: 宋体"&gt;表名&lt;/span&gt; &lt;/p&gt;&lt;p&gt;--&lt;span style="font-family: 宋体"&gt;以后不再使用时删除链接服务器&lt;/span&gt; exec sp_dropserver 'ITSV' , 'droplogins' &lt;/p&gt;&lt;p&gt;--&lt;span style="font-family: 宋体"&gt;连接远程&lt;/span&gt;/&lt;span style="font-family: 宋体"&gt;局域网数据&lt;/span&gt;(openrowset/openquery/opendatasource) &lt;/p&gt;&lt;p&gt;--1&lt;span style="font-family: 宋体"&gt;、&lt;/span&gt;openrowset &lt;/p&gt;&lt;p&gt;--&lt;span style="font-family: 宋体"&gt;查询示例&lt;/span&gt; select * from openrowset('SQLOLEDB' , 'sql&lt;span style="font-family: 宋体"&gt;服务器名&lt;/span&gt;' ; '&lt;span style="font-family: 宋体"&gt;用户名&lt;/span&gt;' ; '&lt;span style="font-family: 宋体"&gt;密码&lt;/span&gt;' , &lt;span style="font-family: 宋体"&gt;数据库名&lt;/span&gt;.dbo.&lt;span style="font-family: 宋体"&gt;表名&lt;/span&gt;) &lt;/p&gt;&lt;p&gt;--&lt;span style="font-family: 宋体"&gt;生成本地表&lt;/span&gt; select * into &lt;span style="font-family: 宋体"&gt;表&lt;/span&gt; from openrowset('SQLOLEDB' , 'sql&lt;span style="font-family: 宋体"&gt;服务器名&lt;/span&gt;' ; '&lt;span style="font-family: 宋体"&gt;用户名&lt;/span&gt;' ; '&lt;span style="font-family: 宋体"&gt;密码&lt;/span&gt;' , &lt;span style="font-family: 宋体"&gt;数据库名&lt;/span&gt;.dbo.&lt;span style="font-family: 宋体"&gt;表名&lt;/span&gt;) &lt;/p&gt;&lt;p&gt;--&lt;span style="font-family: 宋体"&gt;把本地表导入远程表&lt;/span&gt; insert openrowset( 'SQLOLEDB' , 'sql&lt;span style="font-family: 宋体"&gt;服务器名&lt;/span&gt;' ; '&lt;span style="font-family: 宋体"&gt;用户名&lt;/span&gt;' ; '&lt;span style="font-family: 宋体"&gt;密码&lt;/span&gt;' , &lt;span style="font-family: 宋体"&gt;数据库名&lt;/span&gt;.dbo.&lt;span style="font-family: 宋体"&gt;表名&lt;/span&gt;) select *from &lt;span style="font-family: 宋体"&gt;本地表&lt;/span&gt; &lt;/p&gt;&lt;p&gt;--&lt;span style="font-family: 宋体"&gt;更新本地表&lt;/span&gt; update b set b.&lt;span style="font-family: 宋体"&gt;列&lt;/span&gt;A=a.&lt;span style="font-family: 宋体"&gt;列&lt;/span&gt;A from openrowset('SQLOLEDB' , 'sql&lt;span style="font-family: 宋体"&gt;服务器名&lt;/span&gt;' ; '&lt;span style="font-family: 宋体"&gt;用户名&lt;/span&gt;' ; '&lt;span style="font-family: 宋体"&gt;密码&lt;/span&gt;' , &lt;span style="font-family: 宋体"&gt;数据库名&lt;/span&gt;.dbo.&lt;span style="font-family: 宋体"&gt;表名&lt;/span&gt;) as a inner join &lt;span style="font-family: 宋体"&gt;本地表&lt;/span&gt; b on a.column1 = b.column1 --openquery&lt;span style="font-family: 宋体"&gt;用法需要创建一个连接&lt;/span&gt; &lt;/p&gt;&lt;p&gt;--&lt;span style="font-family: 宋体"&gt;首先创建一个连接创建链接服务器&lt;/span&gt; exec sp_addlinkedserver 'ITSV' , '' , 'SQLOLEDB' , '&lt;span style="font-family: 宋体"&gt;远程服务器名或&lt;/span&gt;ip&lt;span style="font-family: 宋体"&gt;地址&lt;/span&gt;' &lt;/p&gt;&lt;p&gt;--&lt;span style="font-family: 宋体"&gt;查询&lt;/span&gt; select * FROM openquery(ITSV , 'SELECT * FROM &lt;span style="font-family: 宋体"&gt;数据库&lt;/span&gt;.dbo.&lt;span style="font-family: 宋体"&gt;表名&lt;/span&gt;') &lt;/p&gt;&lt;p&gt;--&lt;span style="font-family: 宋体"&gt;把本地表导入远程表&lt;/span&gt; insert openquery(ITSV , 'SELECT * FROM &lt;span style="font-family: 宋体"&gt;数据库&lt;/span&gt;.dbo.&lt;span style="font-family: 宋体"&gt;表名&lt;/span&gt;') select * from &lt;span style="font-family: 宋体"&gt;本地表&lt;/span&gt; &lt;/p&gt;&lt;p&gt;--&lt;span style="font-family: 宋体"&gt;更新本地表&lt;/span&gt; update b set b.&lt;span style="font-family: 宋体"&gt;列&lt;/span&gt;B=a.&lt;span style="font-family: 宋体"&gt;列&lt;/span&gt;B FROM openquery(ITSV , 'SELECT * FROM &lt;span style="font-family: 宋体"&gt;数据库&lt;/span&gt;.dbo.&lt;span style="font-family: 宋体"&gt;表名&lt;/span&gt;') as a inner join &lt;span style="font-family: 宋体"&gt;本地表&lt;/span&gt; b on a.&lt;span style="font-family: 宋体"&gt;列&lt;/span&gt;A=b.&lt;span style="font-family: 宋体"&gt;列&lt;/span&gt;A &lt;/p&gt;&lt;p&gt;--3&lt;span style="font-family: 宋体"&gt;、&lt;/span&gt;opendatasource/openrowset SELECT * FROM opendatasource('SQLOLEDB' , 'Data Source=ip/ServerName ; User ID=&lt;span style="font-family: 宋体"&gt;登陆名&lt;/span&gt; ; Password=&lt;span style="font-family: 宋体"&gt;密码&lt;/span&gt;').test.dbo.roy_ta &lt;/p&gt;&lt;p&gt;--&lt;span style="font-family: 宋体"&gt;把本地表导入远程表&lt;/span&gt; insert opendatasource('SQLOLEDB' , 'Data Source=ip/ServerName ; User ID=&lt;span style="font-family: 宋体"&gt;登陆名&lt;/span&gt; ; Password=&lt;span style="font-family: 宋体"&gt;密码&lt;/span&gt;').&lt;span style="font-family: 宋体"&gt;数据库&lt;/span&gt;.dbo.&lt;span style="font-family: 宋体"&gt;表名&lt;/span&gt; select * from &lt;span style="font-family: 宋体"&gt;本地表&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/edrp/aggbug/2444522.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/edrp/archive/2012/04/12/2444522.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/edrp/archive/2012/04/08/2437992.html</id><title type="text">dll 问题 (转)</title><summary type="text">最近在公司写一个外壳程序,调用DLL插件把FORM嵌入到EXE中的一个PANEL中,其中遇到了不少的问题,大部分已经解决,还有几个至今没有找到解决方法,有待研究,也希望知道解决方法的富翁共享一下研究成果. 以下列出的问题及解决方法仅针对我写的程序(DLL插件把FORM嵌入到EXE中的一个PANEL中),和自己的解决方法. 从遇到的问题看出,DELPHI封装了太多的东西,有时候直接使用API会有意想不到的效果. 经验:DLL与EXE之间的通讯应该全部使用消息． 第一个问题:Tab键和Enter键在DLL的FORM中无效 原始程序://frmDll为DLL中的FORM,frmEXE为EXE主...</summary><published>2012-04-08T13:04:00Z</published><updated>2012-04-08T13:04:00Z</updated><author><name>edrp.cn</name><uri>http://www.cnblogs.com/edrp/</uri></author><link rel="alternate" href="http://www.cnblogs.com/edrp/archive/2012/04/08/2437992.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/edrp/archive/2012/04/08/2437992.html"/><content type="html">&lt;div id="cnblogs_post_body"&gt;最近在公司写一个外壳程序,调用DLL插件把FORM嵌入到EXE中的一个PANEL中,其中遇到了不少的问题,大部分已经解决,还有几个至今没有找到解决方法,有待研究,也希望知道解决方法的富翁共享一下研究成果.&lt;br /&gt;&lt;br /&gt;以下列出的问题及解决方法仅针对我写的程序(DLL插件把FORM嵌入到EXE中的一个PANEL中),和自己的解决方法.&lt;br /&gt;&lt;br /&gt;从遇到的问题看出,DELPHI封装了太多的东西,有时候直接使用API会有意想不到的效果.&lt;br /&gt;经验:DLL与EXE之间的通讯应该全部使用消息． &lt;br /&gt;第一个问题:Tab键和Enter键在DLL的FORM中无效 &lt;div style="margin: 4px 2px 0px"&gt;原始程序:&lt;br /&gt;//frmDll为DLL中的FORM,frmEXE为EXE主窗体,下同&lt;br /&gt;//下面的代码为什么直接引用Exe中的Form又引用Dll中的Form?只是为了方便阅读,实际只是传递一个句柄,下同&lt;br /&gt;//panWorkSpace为Exe中的一个TPanel,DLL中的窗体要嵌入其中&lt;br /&gt;&amp;nbsp; &amp;nbsp; frmDll.WindowState := &amp;nbsp;wsMaximized;&lt;br /&gt;&amp;nbsp; &amp;nbsp; frmDll.BorderStyle := &amp;nbsp;bsNone;&lt;br /&gt;&amp;nbsp; &amp;nbsp; windows.SetParent(frmDll.Handle,frmExe.panWorkSpace.Handle);&lt;br /&gt;&lt;br /&gt;发现Tab及Enter键在嵌入的FORM中无效,去掉&lt;br /&gt;&amp;nbsp; &amp;nbsp; frmDll.BorderStyle := &amp;nbsp;bsNone;&lt;br /&gt;后正常,但我不需要标题,就用API解决&lt;br /&gt;&amp;nbsp; &amp;nbsp; frmDll.WindowState := &amp;nbsp;wsMaximized;&lt;br /&gt;&amp;nbsp; &amp;nbsp; SetWindowLong(frmDll.Handle,GWL_STYLE,GetWindowLong(frmDll.Handle,GWL_STYLE) and not (WS_CAPTION or WS_THICKFRAME));&lt;br /&gt;&amp;nbsp; &amp;nbsp; windows.SetParent(frmDll.Handle,frmExe.panWorkSpace.Handle);&lt;br /&gt;其中WS_CAPTION和WS_THICKFRAME分别表示标题栏和边框,问题解决. &lt;/div&gt;&lt;div style="margin: 4px 2px 0px"&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="margin: 4px 2px 0px"&gt;第二个问题:DLL窗体的Resize&lt;/div&gt;&lt;div style="margin: 4px 2px 0px"&gt;EXE主窗体改变尺寸时,窗体中的Panel也会跟着变(Panel.Align设为了alClient),但其中嵌入的DLL窗体不会跟着变,解决方法:&lt;br /&gt;//exe窗口接收消息并改变子窗体大小&lt;br /&gt;//FChildWindowList为TList,子窗体的结构信息列表&lt;br /&gt;Type&lt;br /&gt;&amp;nbsp; //子窗体一些信息的结构体&lt;br /&gt;&amp;nbsp; PFormInfo &amp;nbsp; &amp;nbsp; = ^TFormInfo;&lt;br /&gt;&amp;nbsp; TFormInfo &amp;nbsp; &amp;nbsp; = record&lt;br /&gt;&amp;nbsp; &amp;nbsp; Handle &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: HWND;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Parent &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: HWND;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Style &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : HWND;&lt;br /&gt;&amp;nbsp; end;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; TfrmExe = class(TForm)&lt;br /&gt;&amp;nbsp; private&lt;br /&gt;&amp;nbsp; &amp;nbsp; procedure WMSize(var Message:TWMSize);message WM_Size;&lt;br /&gt;&amp;nbsp; end;&lt;br /&gt;&lt;br /&gt;procedure TfrmExe.WMSize(var Message: TWMSize);&lt;br /&gt;//ReSize消息&lt;br /&gt;var&lt;br /&gt;&amp;nbsp; i &amp;nbsp; : Integer;&lt;br /&gt;&amp;nbsp; rc &amp;nbsp;: TRect;&lt;br /&gt;begin&lt;br /&gt;&amp;nbsp; inherited;&lt;br /&gt;&amp;nbsp; if GetWindowRect(panWorkSpace.Handle,rc) then&lt;br /&gt;&amp;nbsp; &amp;nbsp; if Assigned(FChildWindowList) then&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; for i := &amp;nbsp;0 to FChildWindowList.Count - 1 do&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SetWindowPos(PFormInfo(FChildWindowList[i]).Handle, 0,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0, 0, rc.Right - rc.Left, rc.Bottom - rc.Top,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SWP_NOACTIVATE);&lt;br /&gt;end; &lt;/div&gt;&lt;div style="margin: 4px 2px 0px"&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="margin: 4px 2px 0px"&gt;第三个问题:焦点在DLL中的窗体时,切换到其它应用程序,再点击任务栏上Application对象的按钮,不能切换过来&lt;/div&gt;&lt;div style="margin: 4px 2px 0px"&gt;焦点在DLL中的窗体时,切换到其它应用程序, 再点击任务栏上Application对象的按钮,不能切换过来,EXE主窗体不最小化,切换到其它程序,直接点嵌入的DLL窗体,DLL窗体获得焦点, 发现Application对象在任务栏上的按钮是被按下去了,但是EXE窗体并没有被提到最前,还有,DLL窗体得到焦点时,EXE窗体的标题栏变为灰 色,这些都是不符合使用习惯的,虽然不影响使用,但我觉得还是要解决.&lt;br /&gt;&lt;br /&gt;1.DLL窗体得到焦点时,EXE窗体的标题栏变为灰色的解决方法.&lt;br /&gt;DLL窗体&lt;br /&gt;&amp;nbsp; TfrmDll=class(TForm)&lt;br /&gt;&amp;nbsp; private&lt;br /&gt;&amp;nbsp; &amp;nbsp; procedure WMActivate(var Message : TMessage);message WM_ACTIVATE;&lt;br /&gt;&amp;nbsp; end;&lt;br /&gt;&lt;br /&gt;procedure TfrmDll.WMActivate(var Message: TMessage);&lt;br /&gt;begin&lt;br /&gt;&amp;nbsp; inherited;&lt;br /&gt;&amp;nbsp; SendMessage(frmEXE.Handle, WM_NCACTIVATE, Integer(True), 0);&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;2.焦点的问题解决方法&lt;br /&gt;把下面这个单元加入工程&lt;br /&gt;//==============================================================================&lt;br /&gt;// Unit Name: AppHandler&lt;br /&gt;// Author &amp;nbsp; : ysai&lt;br /&gt;// Date &amp;nbsp; &amp;nbsp; : 2003-06-05&lt;br /&gt;// Purpose &amp;nbsp;: 处理焦点问题&lt;br /&gt;// History &amp;nbsp;:&lt;br /&gt;//==============================================================================&lt;br /&gt;&lt;br /&gt;unit AppHandler;&lt;br /&gt;&lt;br /&gt;interface&lt;br /&gt;&lt;br /&gt;uses&lt;br /&gt;&amp;nbsp; Windows, Messages, SysUtils,Forms;&lt;br /&gt;&lt;br /&gt;implementation&lt;br /&gt;&lt;br /&gt;var&lt;br /&gt;&amp;nbsp; OldWProc &amp;nbsp; &amp;nbsp; &amp;nbsp;: TFNWndProc;&lt;br /&gt;&lt;br /&gt;function NewWndProc(&lt;br /&gt;&amp;nbsp; &amp;nbsp; Handle &amp;nbsp;: HWND;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Msg &amp;nbsp; &amp;nbsp; : Integer;&lt;br /&gt;&amp;nbsp; &amp;nbsp; wParam &amp;nbsp;: Longint;&lt;br /&gt;&amp;nbsp; &amp;nbsp; lParam &amp;nbsp;: Longint&lt;br /&gt;&amp;nbsp; &amp;nbsp; ):Longint; stdcall;&lt;br /&gt;begin&lt;br /&gt;&amp;nbsp; Result &amp;nbsp;:= &amp;nbsp;0;&lt;br /&gt;&amp;nbsp; case Msg of&lt;br /&gt;&amp;nbsp; &amp;nbsp; WM_ACTIVATEAPP &amp;nbsp;: //嵌入到主窗口的DLL中的窗口得到焦点不会把程序提前&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; begin&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case wParam of&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0 : //应用程序失去焦点&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; begin&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if Assigned(Application.MainForm)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; and (GetWindowLong(Application.Handle, GWL_EXSTYLE)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; and WS_EX_TOOLWINDOW = 0) then&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SendMessage(&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Application.MainForm.Handle,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; WM_NCACTIVATE,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Integer(False),&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0);//失去焦点把标题栏变灰&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; end;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1 : //应用程序得到焦点&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; begin&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if Assigned(Application.MainForm)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; and (GetWindowLong(Application.Handle, GWL_EXSTYLE)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; and WS_EX_TOOLWINDOW = 0) then&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SendMessage(&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Application.MainForm.Handle,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; WM_ACTIVATE,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; WA_ACTIVE,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1);//注意,这里设为1,后面会用到&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; end; &amp;nbsp;//case wParam&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; end;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Result := CallWindowProc(OldWProc, Handle, Msg, wParam, lParam);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; end; &amp;nbsp;//msg : WM_ACTIVATEAPP&lt;br /&gt;&amp;nbsp; &amp;nbsp; else&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Result := CallWindowProc(OldWProc, Handle, Msg, wParam, lParam);&lt;br /&gt;&amp;nbsp; end; &amp;nbsp;//case msg&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;initialization&lt;br /&gt;&amp;nbsp; //取代应用程序的消息处理&lt;br /&gt;&amp;nbsp; OldWProc &amp;nbsp; &amp;nbsp;:= TFNWndProc(SetWindowLong(Application.Handle, GWL_WNDPROC,&lt;br /&gt;&amp;nbsp; &amp;nbsp; Longint(@NewWndProc)));&lt;br /&gt;&lt;br /&gt;finalization&lt;br /&gt;&amp;nbsp; //还原消息处理过程&lt;br /&gt;&amp;nbsp; if OldWProc &amp;lt;&amp;gt; nil then&lt;br /&gt;&amp;nbsp; &amp;nbsp; SetWindowLong(Application.Handle, GWL_WNDPROC, LongInt(OldWProc));&lt;br /&gt;&lt;br /&gt;end.&lt;br /&gt;//单元结束&lt;br /&gt;&lt;br /&gt;//EXE程序主窗口&lt;br /&gt;&amp;nbsp; TfrmEXE = class(TForm)&lt;br /&gt;&amp;nbsp; private&lt;br /&gt;&amp;nbsp; &amp;nbsp; procedure WMActivate(var Message : TMessage);message WM_ACTIVATE;&lt;br /&gt;&amp;nbsp; end;&lt;br /&gt;&lt;br /&gt;procedure TfrmExe.WMActivate(var Message: TMessage);&lt;br /&gt;//激话消息,Message.lParam=1时是OAAppHandler单元发来的,激活子窗口&lt;br /&gt;var&lt;br /&gt;&amp;nbsp; hWindow : HWND;&lt;br /&gt;begin&lt;br /&gt;&amp;nbsp; inherited;&lt;br /&gt;&amp;nbsp; if Message.lParam = 1 then //如果是1就是AppHander发出的消息,将焦点设到活动子窗体&lt;br /&gt;&amp;nbsp; begin&lt;br /&gt;&amp;nbsp; &amp;nbsp; hWindow := &amp;nbsp;GetActiveChildWindowHandle;//这个函数得到活动子窗体&lt;br /&gt;&amp;nbsp; &amp;nbsp; //如果有子窗口而且不存在模态显示的窗体则把焦点移到子窗体上&lt;br /&gt;&amp;nbsp; &amp;nbsp; if (hWindow &amp;gt; 0) and IsWindowEnabled(Application.Handle) then&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; windows.SetForegroundWindow(hWindow);&lt;br /&gt;&amp;nbsp; end;&lt;br /&gt;end; &lt;/div&gt;&lt;div style="margin: 4px 2px 0px"&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="margin: 4px 2px 0px"&gt;第四个问题:SpeedButton在DLL中鼠标离开不会恢复平面(ShowModal时不会出现)(未解决)&lt;/div&gt;&lt;div style="margin: 4px 2px 0px"&gt;SpeedButton.Flat设为真时,在DLL中鼠标离开不会恢复平面状态,而ShowModal时不会出现,不知道原因,应该是消息处理得不好,不知道有没有人解决过 &lt;/div&gt;&lt;div style="margin: 4px 2px 0px"&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="margin: 4px 2px 0px"&gt;又一个焦点问题:焦点在DLL窗体时,按Alt+Tab,对话框里出来的程序中竟然没有EXE程序!&lt;/div&gt;&lt;div style="margin: 4px 2px 0px"&gt;焦点在EXE窗体上时没问题,焦点在DLL窗体上时,用Alt+Tab不会出现EXE应用程序的图标,切换到其它任务后,也不能用Alt+Tab切换回来!这是个比较大的BUG,还未找到原因&lt;/div&gt;&lt;div style="margin: 4px 2px 0px"&gt;用spy++看了一下,按下Alt+Tab键,窗体收到了一个WM_CANCELMODE消息,我想,既然焦点在exe窗体上时可以看到图标,而在dll上看不到,那么我在收到这个消息时把焦点给设到exe上不就可以了?&lt;br /&gt;事实证明这点是可行的,代码如下:&lt;br /&gt;&amp;nbsp; TDllForm = class(TForm)&lt;br /&gt;&amp;nbsp; private&lt;br /&gt;&amp;nbsp; &amp;nbsp; procedure WMCancelMode(var Message : TMessage);message WM_CANCELMODE;&lt;br /&gt;&amp;nbsp; end;&lt;br /&gt;&lt;br /&gt;procedure TDllForm.WMCancelMode(var Message: TMessage);&lt;br /&gt;//处理Alt+Tab键弹出的对话框中没有应用程序图标问题&lt;br /&gt;begin&lt;br /&gt;&amp;nbsp; SetForegroundWindow(exeForm.Handle); &amp;nbsp;//把exe窗体设为当前有焦点的窗体&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;　 　现在不论焦点在exe的窗体上还是dll的窗体上,按Alt+Tab出现的对话框中都有应用程序的图标,但不同的是,焦点在exe的窗体上时按 Alt+Tab,默认激活的是下一个应用程序,而焦点在dll窗体上时按Alt+Tab,默认激活的是第一个,也就是应用程序本身,实际激活的是exe窗 体.&lt;br /&gt;虽然还是不怎么习惯,但总算把它给弄出来了,以后有好的解决方法再贴上来. &lt;/div&gt;&lt;div style="margin: 4px 2px 0px"&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="margin: 4px 2px 0px"&gt;Hint的问题(未解决)&lt;/div&gt;&lt;div style="margin: 4px 2px 0px"&gt;焦点在Dll中的窗体时,鼠标移动到控件上不会显示控件的Hint,而且Application.OnHint事件也不会发生,但是焦点在Exe窗体上时,把鼠标放在Dll窗体中的控件上却能显示Hint.原因还未找到:( &lt;/div&gt;&lt;div style="margin: 4px 2px 0px"&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="margin: 4px 2px 0px"&gt;ALT+TAB解决了,但是那是键盘,鼠标操作还是有问题&lt;/div&gt;&lt;div style="margin: 4px 2px 0px"&gt;焦点在DLL中时,用鼠标点其它应用程序,失去焦点了,再按ALT+TAB,那个该死的应用程序图标又没了,焦虑中.... &lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/edrp/aggbug/2437992.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/edrp/archive/2012/04/08/2437992.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/edrp/archive/2012/04/08/2437983.html</id><title type="text">使用DLL封装窗体和业务类</title><summary type="text">软件开发的一种架构思路：使用DLL封装一组窗体和业务类，真正的模块化编程，方便工作组进行开发的分工与合作。打个比方：经常开发进销存软件，那么我们把“入库单、返厂单、盘点单。。。”等单据的界面窗口以及业务类封装进一个DLL中。而将“计量单位、供应商档案、商品档案。。。”等基本信息的界面窗口以及业务类也封装进一个DLL中。窗口类可使用“可视化窗体继承或框架继承”，比如“入库单同返厂单。。。”等单据可共享一个单据祖先类。谈Delphi编程中资源文件的应用一、初级应用篇资源文件一般为扩展名为res的文件，在VC中资源文件用得非常普遍，但Delphi在其联机帮助中对资源文件没作什么介绍。其实利用其自带的</summary><published>2012-04-08T12:56:00Z</published><updated>2012-04-08T12:56:00Z</updated><author><name>edrp.cn</name><uri>http://www.cnblogs.com/edrp/</uri></author><link rel="alternate" href="http://www.cnblogs.com/edrp/archive/2012/04/08/2437983.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/edrp/archive/2012/04/08/2437983.html"/><content type="html">软件开发的一种架构思路：&lt;br /&gt;使用DLL封装一组窗体和业务类，真正的模块化编程，方便工作组进行开发的分工与合作。&lt;br /&gt;&lt;br /&gt;打个比方：&lt;br /&gt;经常开发进销存软件，那么我们把&amp;#8220;入库单、返厂单、盘点单。。。&amp;#8221;等单据的界面窗口以及业务类封装进一个DLL中。而将&amp;#8220;计量单位、供应商档案、商品档案。。。&amp;#8221;等基本信息的界面窗口以及业务类也封装进一个DLL中。窗口类可使用&amp;#8220;可视化窗体继承或框架继承&amp;#8221;，比如&amp;#8220;入库单同返厂单。。。&amp;#8221;等单据可共享一个单据祖先类。&lt;br /&gt;谈Delphi编程中资源文件的应用&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;一、初级应用篇&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;资源文件一般为扩展名为res的文件，在VC中资源文件用得非常普遍，但Delphi在其联机帮助中对资源文件没作什么介绍。其实利用其自带的资源编译工具BRCC32.EXE(一般位于DelphiBIN目录下）,我们完全可以做出跟VC一样效果的文件来。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;资源文件最大的好处是能将一些在必要时才调用的文件跟可执行文件一起编译，生成一个文件。这样做最大的好处就是使外部文件免遭破坏。例如在一个程序中你要临时调用一幅图片，一般作法是把图片放在某一路径下（通常是主程序所在路径）,但如果用户路径误删你的图片文件则可能使程序找不到相应文件而出错崩溃。另外，如果你想自己的程序界面美观，想用一些自定义光标，也要用到资源文件。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;资源文件的使用步骤为：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1.编写rc脚本文本&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;用记事本或其它文本编辑器编写一个扩展名为rc的文件。例如：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mycur&amp;nbsp;cursor&amp;nbsp;move.cur&amp;nbsp;//加入光标&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mypic&amp;nbsp;Bitmap&amp;nbsp;Water.BMP&amp;nbsp;//加入位图&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mywav&amp;nbsp;WAVE&amp;nbsp;happy.wav&amp;nbsp;//加入声音&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myAVI&amp;nbsp;AVI&amp;nbsp;EPOEN.AVI&amp;nbsp;//加入视频&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myIco&amp;nbsp;ICON&amp;nbsp;CJT.ICO&amp;nbsp;//加入图标&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;格式分别为在资源文件中的名称-&amp;gt;类型-&amp;gt;实际文件名称，例如上面第一行定义一个名为mycur的光标，实际名称为加入光标move.cur。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.将rc文件编译成res资源文件&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;将脚本文件和实际文件拷到Brcc32.EXE所在目录，执行DOS命令。格式为：Brcc32&amp;nbsp;脚本文件(回车)，例如有一名为myfirst.rc的脚本文件，则执行Brcc32&amp;nbsp;myfirst.rc(回车)即可。如果你是懒人，也可新建一批处理文件，内容只有一行：Brcc32&amp;nbsp;mufist.rc。(因为Delphi安装后一般会在自动批处理文件中指明搜索路径的)如果编译成功，则会生成一个结尾为res的文件，这个文件就是我们需要的资源文件。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3.在Delphi单元中加入资源文件&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;将生成的res资源文件拷贝到你所编程序的路径下，在单元文件{$R&amp;nbsp;*DFM}后加上一句{$R&amp;nbsp;mufirst.res}，则将res文件加入去，编译后资&amp;nbsp;源文件即已包含在可执行文件中了。若你有多个资源文件，也按上法依次加入。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4.在Delphi程序中调用资源文件&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;资源文件在Delphi中的关键字为hinstance，下面给出具体用法。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;1&amp;gt;光标的调用&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;首先在程序中定义一个值大于0的常量，因为Delphi本身用0到负16来索引默认的光标，所以我们制定的光标应从表面上1开始索引。然后在窗口的Oncreat事件中添加以下代码：screen.cursor[35]:=Loadcursor(hinstance,'mycur');其中35为大于1的常量，mycur为光标在资源文件中的名字。如果希望在其他控件上使用定制光标，例如Panel控件，只需在程序的适当处加入以下代码：Panel1.cursor:=35;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;2&amp;gt;位图的调用&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;新建一项工程，添加一Timage控件，在需要显示的地方写以下代码（其中"mypic"为位图资源文件中的名称）：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Var&amp;nbsp;mymap:Hbitmap;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;begin&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mymap:=LoadBitmap(hinstance,'mypic');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Image1.picture.Bitmap.Handle:=mymap；&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;〈3〉AVI文件的调用&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;新建一工程，添加一Animate控件，在需要的地方加入（其中myAVI为视频文件在资源文件中的名称）：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;animater1.resname:='myAVI';&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;animater1.Active:=true;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;〈4〉调用WAV文件&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;在uses中加入mmsystm单元，以便在程序中播放WAV文件。播放时Playsound(pchar('mywav'),hinstance,sndsync&amp;nbsp;or&amp;nbsp;snd_resource);其中mywav为声音文件在资源中的名称。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;〈5〉加入光标&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;加入光标比较容易，只要将res文件加入单元文件中即可。但需注意,名称最好取"W"."WW"等，使第一个字母尽量靠后，以免与主程序的图标顺序颠倒。这样一来，别人在使用你的程序时如果想选择其它图标就有很多选择了。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;补充：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1.资源类型除上述类型外，还可以字体文件，字符串文件等；&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.资源文件不但可以在标准图形界面下使用还可在控制台下使用。下面我们来试验一下：新建一工程，将唯一的一个Form删除，然后修改工程文件。增加一句{$Apptype&amp;nbsp;console},在uses子句中加入mmsystem,并将其它引用单元删掉。将Begin和end之间语句删掉。至此，我们就可和Turbo&amp;nbsp;PASCAL下编程序一样，且还可以调用windows的API和资源。将资源文件----{$R&amp;nbsp;myfist.res}加入。在Begin和end之间写下：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;writeln('演示程序，按任意键开始！');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;readln;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;playsound(pchar('mywav'),hinstance,snd_sync&amp;nbsp;or&amp;nbsp;snd_resource);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;writeln('演示结束！');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;运行程序，将弹出一个标准DOS窗口，按任意键播放声音文件。是不是很COOL呢？我曾下载过一个播放器，在其安装目录下我发现有一&amp;#8220;DOS程序&amp;#8221;，用鼠标双击它便弹出一个DOS窗口，显示DOS时代特有的画图，并有背景音乐！可能就是用这个方法做的。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3.Delphi本身自带了一个叫Image&amp;nbsp;Editor的工具，同样可以编辑资源文本，但和本文的方法比较，可得出下表：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Image&amp;nbsp;Editor&amp;nbsp;Brcc32&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BMP&amp;nbsp;只支持16位色&amp;nbsp;任意色&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;光标&amp;nbsp;黑白两色&amp;nbsp;任意色&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ICO&amp;nbsp;只支持16位色&amp;nbsp;任意色&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AVI&amp;nbsp;不支持&amp;nbsp;支持&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WAV&amp;nbsp;不支持&amp;nbsp;支持&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;字体&amp;nbsp;不支持&amp;nbsp;支持&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;字符串&amp;nbsp;不支持&amp;nbsp;支持&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;上面说的是直接在程序本身的调用。其实资源文件还有其它用法。比如说在你的程序携带其它文件，要用的时候释放出来。例如：myexe&amp;nbsp;exefile&amp;nbsp;'ha1.exe'//脚本文件&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;下面是自定义释放函数ExtractRes，本例中使用如下：ExtractRes('exefile','myexe','c:new.exe');就把ha1.exe以new.exe为名字保存到C盘根目录下了。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function&amp;nbsp;TForm1.ExtractRes(ResType,&amp;nbsp;ResName,&amp;nbsp;ResNewName:&amp;nbsp;string):&amp;nbsp;boolean;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Res:&amp;nbsp;TResourceStream;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;begin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Res&amp;nbsp;:=&amp;nbsp;TResourceStream.Create(Hinstance,&amp;nbsp;Resname,&amp;nbsp;Pchar(ResType));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Res.SavetoFile(ResNewName);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Result&amp;nbsp;:=&amp;nbsp;true;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;finally&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Res.Free;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;except&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Result&amp;nbsp;:=&amp;nbsp;false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;二、中级应用篇:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;上面我们已经知道如何把一副BMP图像从资源文件里面读出来，但是BMP文件太大了，JPG文件应用的相对较多。那么如何把JPG图像读出来呢？用资源文件加流方式即可。具体方法如下:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(1)MyJpg&amp;nbsp;JPEG　My.JPG&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(2)Var&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;　Stream:TStream;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;　MyJpg:TJpegImage;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Begin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;　Stream：＝TResourceStream.Cceat(HINSTANCE,'MyJpg','JPEG');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;　Try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;　MyJpg:=TJpegImage.Create;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MyJpg.LoadfromStream(Stream);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Image1.Picture.Assignc(MyJpg);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Finally&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MyJpg.Free;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;　Finally&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stream.Free;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;　end;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;读取其它图片文件也是一样的。比如说gif动画文件，当然前提是你有一个gif.pas，这个单元很多站点都有的，可以自己去找找。实际应用中我还发现用上面的代码可以直接显示资源文件中的ICON和BMP。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;说到图形处理，实际上还可以用Delphi创建、调用纯图标资源的DLL。比如说你可以看看超级解霸目录下的Dll,很多就是纯图标资源而已。具体方法如下：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(1)创建一个Hicon.RES文件,这里不再重复；&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(2)新建一文本文件Icon.dpr,内容如下：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;library&amp;nbsp;Icon;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{$R&amp;nbsp;Icon.RES}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;begin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;用Delphi打开编译即可得到Icon.dll。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(3)实际调用方法如下:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;......&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;　Private&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Hinst:THANDLE;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;......&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;　Var　Hicon:THANDLE;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;begin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;　Hinst:=Loadlibrary('Icon.dll');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;　If　Hinst=0　Then　Exit；&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;　Hicon:=Loadicon(Hinst,Pchar(Edit1.Text));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If　Hicon&amp;lt;&amp;gt;0　Then　Image1.Picture.Icon.Handle:=Hicon;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;　FreeLibrary(Hinst);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;如果你的程序想在国际上供使用不同语言的人使用的话，用Dll来存放字符资源将是一个好方法。因为Dll不象ini文件那样可以被人随便修改，特别是有时侯如果想保存一些版权信息的话用Dll就再好不过了。比如说你准备开发一个&amp;#8220;汉字简繁体翻译器&amp;#8221;软件，准备提供Gb32、Big5码和英文三种语言菜单给用户，那么你可以试试用Dll&lt;br /&gt;来保存字符资源。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;我们需要建立三个Dll。第一步当然是写Rc文件，举Gb32码为例，内容如下：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/*MySc.rc*/&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#define&amp;nbsp;IDS_MainForm_Caption&amp;nbsp;&amp;nbsp;1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#define&amp;nbsp;IDS_BtnOpen_Caption&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#define&amp;nbsp;IDS_BtnSave_Caption&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#define&amp;nbsp;IDS_BtnBig5_Caption&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#define&amp;nbsp;IDS_BtnGb32_Caption&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#define&amp;nbsp;IDS_BtnHelp_Caption&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#define&amp;nbsp;IDS_Help_Shelp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stringtable&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IDS_MainForm_Caption,"汉字简繁体翻译器"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IDS_BtnOpen_Caption,"打开文件"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IDS_BtnSave_Caption,"保存文件"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IDS_BtnBig5_Caption,"转换成Big5"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IDS_BtnGb32_Caption,"转换成Gb32"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IDS_BtnHelp_Caption,"帮助"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IDS_Help_Shelp,"输入文字或打开文件后按需要点击按钮即可转换!"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;另外两个Dll用同样的方法生成。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;第二步是Brcc32编译为Res文件后用上面的方法得到Dll文件。下面来应用一下：新建一个工程，放上五个Button：BtnOpen、BtnSave、BtnBig5、BtnGb32和BtnHelp，还有一个TComboBox:CbSelect用来选择语言种类的。&lt;br /&gt;具体代码如下：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unit&amp;nbsp;Unit1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;interface&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;......&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SHelp:&amp;nbsp;string;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function&amp;nbsp;SearchLanguagePack:&amp;nbsp;TStrings;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;procedure&amp;nbsp;SetActiveLanguage(LanguageName:&amp;nbsp;string);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;Private&amp;nbsp;declarations&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;......&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;implementation&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;procedure&amp;nbsp;TForm1.CbSelectChange(Sender:&amp;nbsp;TObject);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;begin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SetActiveLanguage(CbSelect.Text);//调用相应Dll文件读取相应字符.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;procedure&amp;nbsp;TForm1.FormCreate(Sender:&amp;nbsp;TObject);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;begin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CbSelect.Items.AddStrings(SearchLanguagePack);//搜索当前目录下所有的Dll文件名称&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function&amp;nbsp;TForm1.SearchLanguagePack:&amp;nbsp;TStrings;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ResultStrings:&amp;nbsp;TStrings;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DosError:&amp;nbsp;integer;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SearchRec:&amp;nbsp;TsearchRec;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;begin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ResultStrings&amp;nbsp;:=&amp;nbsp;TStringList.Create;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DosError&amp;nbsp;:=&amp;nbsp;FindFirst(ExtractFilePath(ParamStr(0))&amp;nbsp;+&amp;nbsp;'*.dll',&amp;nbsp;faAnyFile,&amp;nbsp;SearchRec);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;while&amp;nbsp;DosError&amp;nbsp;=&amp;nbsp;0&amp;nbsp;do&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;begin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ResultStrings.Add(ChangeFileExt(SearchRec.Name,&amp;nbsp;''));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DosError&amp;nbsp;:=&amp;nbsp;FindNext(SearchRec);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FindClose(SearchRec);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Result&amp;nbsp;:=&amp;nbsp;ResultStrings;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;procedure&amp;nbsp;TForm1.SetActiveLanguage(LanguageName:&amp;nbsp;string);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Hdll:&amp;nbsp;Hmodule;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MyChar:&amp;nbsp;array[0..254]&amp;nbsp;of&amp;nbsp;char;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DllFileName:&amp;nbsp;string;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;begin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DllFileName&amp;nbsp;:=&amp;nbsp;ExtractFilePath(ParamStr(0))&amp;nbsp;+&amp;nbsp;LanguageName&amp;nbsp;+&amp;nbsp;'.dll';&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;not&amp;nbsp;FileExists(DllFileName)&amp;nbsp;then&amp;nbsp;Exit;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Hdll&amp;nbsp;:=&amp;nbsp;loadlibrary(Pchar(DllFileName));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Loadstring(hdll,&amp;nbsp;1,&amp;nbsp;MyChar,&amp;nbsp;254);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Self.Caption&amp;nbsp;:=&amp;nbsp;MyChar;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//读取字符资源，1表示资源文件中定义的1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Loadstring(hdll,&amp;nbsp;1,&amp;nbsp;MyChar,&amp;nbsp;254);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Self.Caption&amp;nbsp;:=&amp;nbsp;MyChar;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Loadstring(hdll,&amp;nbsp;2,&amp;nbsp;MyChar,&amp;nbsp;254);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BtnOpen.Caption&amp;nbsp;:=&amp;nbsp;MyChar;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Loadstring(hdll,&amp;nbsp;3,&amp;nbsp;MyChar,&amp;nbsp;254);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BtnSave.Caption&amp;nbsp;:=&amp;nbsp;MyChar;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Loadstring(hdll,&amp;nbsp;4,&amp;nbsp;MyChar,&amp;nbsp;254);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BtnBig5.Caption&amp;nbsp;:=&amp;nbsp;MyChar;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Loadstring(hdll,&amp;nbsp;5,&amp;nbsp;MyChar,&amp;nbsp;254);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BtnGb32.Caption&amp;nbsp;:=&amp;nbsp;MyChar;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Loadstring(hdll,&amp;nbsp;6,&amp;nbsp;MyChar,&amp;nbsp;254);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BtnHelp.Caption&amp;nbsp;:=&amp;nbsp;MyChar;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Loadstring(hdll,&amp;nbsp;7,&amp;nbsp;MyChar,&amp;nbsp;254);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SHelp&amp;nbsp;:=&amp;nbsp;MyChar;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Freelibrary(hdll);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Application.Title&amp;nbsp;:=&amp;nbsp;Self.Caption;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BtnOpen.Visible&amp;nbsp;:=&amp;nbsp;True;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BtnSave.Visible&amp;nbsp;:=&amp;nbsp;True;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BtnBig5.Visible&amp;nbsp;:=&amp;nbsp;True;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BtnGb32.Visible&amp;nbsp;:=&amp;nbsp;True;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BtnHelp.Visible&amp;nbsp;:=&amp;nbsp;True;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;procedure&amp;nbsp;TForm1.BtnHelpClick(Sender:&amp;nbsp;TObject);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;begin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Application.MessageBox(Pchar(SHelp),&amp;nbsp;'Http://lovejingtao.126.com',&amp;nbsp;MB_ICONINFORMATION);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;可能你会说，这种方法还不如我自己在程序中直接定义三种具体的值来的方便。甚至我自己自定义一个结构好了，用不着用DLL那么麻烦的。但是如果你的程序要用的字符很多呢？比如说Windows操作系统，本身就有简体中文、繁体中文、英文等版本，用Dll的话只要直接替换DLL即可，而不用每发行一个版本就打开代码来修改一次。这样一来可以大大减少工作量和出错的机会。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;说到这里，再多说一句：Windows系统本身很多Dll带有了图片等资源，我们可以在程序中直接调用,这样一来我们的EXE也可以减少不少！当然最小的方法是实时生成技术。老外曾经写了一个67KB的程序就是利用了这个方法，感兴趣的朋友可以到http://go4.163.com/lovejingtao/ha1.exe下载。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;三、高级应用篇&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Delphi是个很有效率的开发工具，但是它有一个缺点就是生成的EXE文件太大。一个程序就算只有一个空窗口体积也有286KB。如果直接用API来写的话程序体积是小了，但是又太繁琐，无法立即看到界面效果，根本谈不上是可视化开发。其实并非&amp;#8220;鱼与熊掌不可兼得&amp;#8221;，利用资源文件我们就可以轻松达到这个目的。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;在开始之前，我们需要一个可以编辑资源文件的工具。这类工具很多，比如说Resource&amp;nbsp;WorkShop就是非常好的一个。如果一时找不到，利用VC的编辑器来也是可以的。下面我们就以VC的为例示范如何创建一个窗口资源文件。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;运行VC，打开菜单&amp;#8220;File/New&amp;#8221;，将出现一个多项选择页。我们选择&amp;#8220;Files/Resource&amp;nbsp;Template&amp;#8221;，在右边的File填上Demo，Location选择保存路径，然后点击按钮OK返回VC开发环境。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;选择菜单&amp;#8220;Insert/Resource&amp;#8221;,将出现一个资源类型选择框。我们把鼠标移到Dialog上面，不用展开，点击右边的New即可，这时候返回VC开发环境并出现一个只有关闭按钮和两个Button的窗体。将鼠标选定窗体，击右键选择最后一项Properties，将出现一个设置窗口，将ID改为&amp;#8220;MAINFORM&amp;#8221;(注意：跟下面添加的其它控件的属性设置方法不同，主窗口的ID必须把双引号写上去，而且名称必须为大写。否则程序将找不到资源。程序会一运行就退出了。）Caption改为&amp;#8220;安装程序&amp;#8221;，这时候可以立刻看到窗口的标题变成了&amp;#8220;安装程序&amp;#8221;，把Styles的Minimize&amp;nbsp;box选上，More&amp;nbsp;Styles的Center勾上使程序运行时的位置居中。当然你也可以设置它的坐标，其它保留默认值即可。回到开发环境，在控件框里面分别选择一个Static&amp;nbsp;Text，一个Edit&amp;nbsp;Box，一个Button和一个Group&amp;nbsp;Box添加到窗体上面，把它们按照自己的爱好排列整齐，然后逐个修改它们的属性。方法就是按照上面说的选定控件后击右键选择最后一项Properties，在出现的属性框里面修改。其中属性如下：Group&amp;nbsp;Box的Caption属性清空，Static&amp;nbsp;Text的Caption属性改为&amp;#8220;请选择安装目录：&amp;#8221;，Edit&amp;nbsp;Box的ID改为10001，第一个Button的ID为10002，Caption属性为&amp;#8220;选择&amp;#8221;，第二个Button的ID为10003，Caption属性为&amp;#8220;安装&amp;#8221;，第三个Button的ID为10004，Caption属性为&amp;#8220;退出&amp;#8221;。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;为了使程序更加完美，我们为它再添加一个菜单IDR_MENU1。选择&amp;#8220;Insert/Resource/Menu&amp;#8221;,我们这里只简单添加一项&amp;#8220;文件/退出&amp;#8221;，其中&amp;#8220;退出&amp;#8221;的ID为10005。然后在主窗口的属性Menu设定为IDR_MENU1即可。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;为了使程序更加美观，我们再添加一个小图标，同时这也将是我们程序的图标。选择&amp;#8220;Insert/Resource/Iconv/Import&amp;#8221;，选择一个图标文件，并将它的ID设置为"MAINICON"(注意：必须把双引号写上而且字母为大写)，为窗口添加一个Picture控件并设置它的属性Type:Icon，Image下拉选择刚才的图标MainIcon即可。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;如果你想为程序在鼠标添加一些信息也是可以的。选择&amp;#8220;Insert/Resource/Version&amp;#8221;即可。到这里我们已经完成了一个简单的&amp;#8220;安装程序&amp;#8221;的窗体设计，实际上我们现在就可以在Delphi中调用它了。我们先把&amp;#8220;劳动成果&amp;#8221;保存起来，选择&amp;#8220;File/Save&amp;nbsp;As&amp;#8221;，在文件类型里选择&amp;#8220;32-bit&amp;nbsp;Resource&amp;nbsp;File(.res)&amp;#8221;保存为&amp;#8220;Demo.res&amp;#8221;,文件大小大约为2.65KB。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;新建一个扩展名为dpr的文本文件MyDemo.Dpr，键入如下代码：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Uses&amp;nbsp;Windows,Messages;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{$R&amp;nbsp;Demo.Res}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function&amp;nbsp;MainDialogProc(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DlgWin:&amp;nbsp;hWnd;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DlgMessage:&amp;nbsp;UINT;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DlgWParam:&amp;nbsp;WPARAM;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DlgLParam:&amp;nbsp;LPARAM&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;integer;&amp;nbsp;stdcall;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;begin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Result&amp;nbsp;:=&amp;nbsp;0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case&amp;nbsp;DlgMessage&amp;nbsp;of&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WM_Close:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;begin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PostQuitMessage(0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Exit;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;begin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DialogBox(hInstance,&amp;nbsp;'MAINFORM',&amp;nbsp;0,&amp;nbsp;@MainDialogProc);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;用Delphi打开它编译一次即可产生一个大小为19KB的EXE。是不是很小？！实际上，你甚至只用一行代码就把它Show出来，不过程序无法关闭而已：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Uses&amp;nbsp;Windows;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{$R&amp;nbsp;Demo.Res}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function&amp;nbsp;MainDialogProc:&amp;nbsp;integer;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;begin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Result&amp;nbsp;:=&amp;nbsp;0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;begin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DialogBox(hInstance,&amp;nbsp;'MAINFORM',&amp;nbsp;0,&amp;nbsp;@MainDialogProc);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;上面的程序只不过是一个空窗口而已,现在我们来写代码响应按下相应按钮响应的事件。完整代码如下:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;program&amp;nbsp;MyDemo;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;uses&amp;nbsp;Windows,&amp;nbsp;Messages,&amp;nbsp;shlobj;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ID_Edit&amp;nbsp;=&amp;nbsp;10001;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ID_Selet&amp;nbsp;=&amp;nbsp;10002;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ID_Setup&amp;nbsp;=&amp;nbsp;10003;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ID_Quit&amp;nbsp;=&amp;nbsp;10004;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ID_Exit&amp;nbsp;=&amp;nbsp;10005;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{$R&amp;nbsp;Demo.Res}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MainWin:&amp;nbsp;HWND;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function&amp;nbsp;My_Gettext:&amp;nbsp;string;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Textlength:&amp;nbsp;Integer;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Text:&amp;nbsp;PChar;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s:&amp;nbsp;string;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;begin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TextLength&amp;nbsp;:=&amp;nbsp;GetWindowTextLength(GetDlgItem(MainWin,&amp;nbsp;ID_Edit));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GetMem(Text,&amp;nbsp;TextLength&amp;nbsp;+&amp;nbsp;1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GetWindowText(GetDlgItem(MainWin,&amp;nbsp;ID_Edit),&amp;nbsp;Text,&amp;nbsp;TextLength&amp;nbsp;+&amp;nbsp;1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s&amp;nbsp;:=&amp;nbsp;text;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FreeMem(Text,&amp;nbsp;TextLength&amp;nbsp;+&amp;nbsp;1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Result&amp;nbsp;:=&amp;nbsp;s;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function&amp;nbsp;Getmyname:&amp;nbsp;string;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i,&amp;nbsp;j:&amp;nbsp;integer;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;begin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;J&amp;nbsp;:=&amp;nbsp;3;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;i&amp;nbsp;:=&amp;nbsp;1&amp;nbsp;to&amp;nbsp;length(ParamStr(0))&amp;nbsp;do&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;ParamStr(0)[i]&amp;nbsp;=&amp;nbsp;''&amp;nbsp;then&amp;nbsp;J&amp;nbsp;:=&amp;nbsp;I;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Result&amp;nbsp;:=&amp;nbsp;copy(ParamStr(0),&amp;nbsp;J&amp;nbsp;+&amp;nbsp;1,&amp;nbsp;length(ParamStr(0))&amp;nbsp;-&amp;nbsp;J);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function&amp;nbsp;SelectDirectory(handle:&amp;nbsp;hwnd;&amp;nbsp;const&amp;nbsp;Caption:&amp;nbsp;string;&amp;nbsp;const&amp;nbsp;Root:&amp;nbsp;WideString;&amp;nbsp;out&amp;nbsp;Directory:&amp;nbsp;string):&amp;nbsp;Boolean;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lpbi:&amp;nbsp;_browseinfo;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;buf:&amp;nbsp;array[0..MAX_PATH]&amp;nbsp;of&amp;nbsp;char;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;id:&amp;nbsp;ishellfolder;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;eaten,&amp;nbsp;att:&amp;nbsp;cardinal;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rt:&amp;nbsp;pitemidlist;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;initdir:&amp;nbsp;pwidechar;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;begin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result&amp;nbsp;:=&amp;nbsp;false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lpbi.hwndOwner&amp;nbsp;:=&amp;nbsp;handle;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lpbi.lpfn&amp;nbsp;:=&amp;nbsp;nil;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lpbi.lpszTitle&amp;nbsp;:=&amp;nbsp;pchar(caption);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lpbi.ulFlags&amp;nbsp;:=&amp;nbsp;BIF_RETURNONLYFSDIRS&amp;nbsp;+&amp;nbsp;BIF_EDITBOX;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SHGetDesktopFolder(id);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;initdir&amp;nbsp;:=&amp;nbsp;pwchar(root);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;id.ParseDisplayName(0,&amp;nbsp;nil,&amp;nbsp;initdir,&amp;nbsp;eaten,&amp;nbsp;rt,&amp;nbsp;att);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lpbi.pidlRoot&amp;nbsp;:=&amp;nbsp;rt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;getmem(lpbi.pszDisplayName,&amp;nbsp;MAX_PATH);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result&amp;nbsp;:=&amp;nbsp;shgetpathfromidlist(shbrowseforfolder(lpbi),&amp;nbsp;buf);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;except&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;freemem(lpbi.pszDisplayName);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;result&amp;nbsp;then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;begin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;directory&amp;nbsp;:=&amp;nbsp;buf;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;length(directory)&amp;nbsp;&amp;lt;&amp;gt;&amp;nbsp;3&amp;nbsp;then&amp;nbsp;directory&amp;nbsp;:=&amp;nbsp;directory&amp;nbsp;+&amp;nbsp;'';&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function&amp;nbsp;MainDialogProc(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DlgWin:&amp;nbsp;hWnd;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DlgMessage:&amp;nbsp;UINT;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DlgWParam:&amp;nbsp;WPARAM;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DlgLParam:&amp;nbsp;LPARAM&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;integer;&amp;nbsp;stdcall;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MyIcon:&amp;nbsp;HICON;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Sdir:&amp;nbsp;string;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;begin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Result&amp;nbsp;:=&amp;nbsp;0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case&amp;nbsp;DlgMessage&amp;nbsp;of&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WM_INITDIALOG:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;begin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MyIcon&amp;nbsp;:=&amp;nbsp;LoadIcon(hInstance,&amp;nbsp;'MainIcon');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SetClassLONG(DlgWin,&amp;nbsp;GCL_HICON,&amp;nbsp;MyIcon);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MainWin&amp;nbsp;:=&amp;nbsp;DlgWin;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WM_Close:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;begin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PostQuitMessage(0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Exit;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WM_COMMAND:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case&amp;nbsp;LOWORD(DlgWParam)&amp;nbsp;of&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ID_Selet:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;begin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;SelectDirectory(DlgWin,&amp;nbsp;'请选择安装目录',&amp;nbsp;'',&amp;nbsp;Sdir)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;then&amp;nbsp;SendMessage(GetDlgItem(DlgWin,&amp;nbsp;ID_Edit),&amp;nbsp;WM_SETTEXT,&amp;nbsp;0,&amp;nbsp;lParam(pChar(Sdir)));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ID_Setup:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;begin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;My_Gettext&amp;nbsp;=&amp;nbsp;''&amp;nbsp;then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;begin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MessageBox(DlgWin,&amp;nbsp;'请先选择安装文件夹!',&amp;nbsp;'信息',&amp;nbsp;MB_ICONINFORMATION&amp;nbsp;+&amp;nbsp;MB_OK);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Exit;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CopyFile(pchar(ParamStr(0)),&amp;nbsp;pchar(My_Gettext&amp;nbsp;+&amp;nbsp;Getmyname),&amp;nbsp;false);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MessageBox(DlgWin,&amp;nbsp;'安装完毕!',&amp;nbsp;'信息',&amp;nbsp;MB_ICONINFORMATION&amp;nbsp;+&amp;nbsp;MB_OK);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PostQuitMessage(0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Exit;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ID_Quit:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;begin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PostQuitMessage(0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EXIT;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ID_Exit:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;begin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;MessageBox(DlgWin,&amp;nbsp;'你点击了菜单&amp;#8220;退出&amp;#8221;，你确定退出程序吗?',&amp;nbsp;'信息',&amp;nbsp;MB_ICONQUESTION&amp;nbsp;+&amp;nbsp;MB_OKCANCEL)&amp;nbsp;=&amp;nbsp;IDOK&amp;nbsp;then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PostQuitMessage(0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Exit;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;begin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DialogBox(hInstance,&amp;nbsp;'MAINFORM',&amp;nbsp;0,&amp;nbsp;@MainDialogProc);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end.&lt;img src="http://www.cnblogs.com/edrp/aggbug/2437983.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/edrp/archive/2012/04/08/2437983.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/edrp/archive/2012/04/05/2433902.html</id><title type="text">安装DCU组件出错的解决方法</title><summary type="text">没有bpl照样也可以安装dcu文件！刚才我实验了一下，选择component-&gt;Install component-&gt;然后选择*.dcu，选中需要的文件，这是Delphi会提示“One or more lines were too long and have to be truncated”不去理会，直接关闭*.dcu出来的那些乱码，当然是不保存，剩下那个dpk的直接编译，Install就可以了。想来这也许算Delphi的一个Bug，不应该这样打开dcu文件了。</summary><published>2012-04-05T15:03:00Z</published><updated>2012-04-05T15:03:00Z</updated><author><name>edrp.cn</name><uri>http://www.cnblogs.com/edrp/</uri></author><link rel="alternate" href="http://www.cnblogs.com/edrp/archive/2012/04/05/2433902.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/edrp/archive/2012/04/05/2433902.html"/><content type="html">没有bpl照样也可以安装dcu文件！刚才我实验了一下，选择component-&amp;gt;Install component-&amp;gt;&lt;br /&gt;然后选择*.dcu，选中需要的文件，这是Delphi会提示&amp;#8220;One or more lines were too long and have to be truncated&amp;#8221;&lt;br /&gt;不去理会，直接关闭*.dcu出来的那些乱码，当然是不保存，剩下那个dpk的直接编译，Install就可以了。&lt;br /&gt;想来这也许算Delphi的一个Bug，不应该这样打开dcu文件了。&lt;br /&gt;&lt;img src="http://www.cnblogs.com/edrp/aggbug/2433902.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/edrp/archive/2012/04/05/2433902.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/edrp/archive/2012/04/05/2433735.html</id><title type="text">delphi 软件5企业版KEY</title><summary type="text">1.delphi 软件5企业版 sn:ski-hd3-c139 key:92x0-92x1 Update Pack #1: ski-hd3-c139-92x0-91x0 2.100-000-7350 24x1-91x0</summary><published>2012-04-05T13:19:00Z</published><updated>2012-04-05T13:19:00Z</updated><author><name>edrp.cn</name><uri>http://www.cnblogs.com/edrp/</uri></author><link rel="alternate" href="http://www.cnblogs.com/edrp/archive/2012/04/05/2433735.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/edrp/archive/2012/04/05/2433735.html"/><content type="html">1.&lt;br /&gt;delphi 软件5企业版&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sn:ski-hd3-c139&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; key:92x0-92x1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; Update&amp;nbsp;&amp;nbsp; Pack&amp;nbsp;&amp;nbsp; #1:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ski-hd3-c139-92x0-91x0&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;2.&lt;br /&gt;100-000-7350&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; 24x1-91x0&lt;img src="http://www.cnblogs.com/edrp/aggbug/2433735.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/edrp/archive/2012/04/05/2433735.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/edrp/archive/2011/07/20/2111950.html</id><title type="text">远程桌面连接已断开</title><summary type="text">---------------------------远程桌面连接已断开---------------------------客户端无法连接。您已连接到这台计算机的控制台。无法建立新的控制台会话。---------------------------确定 帮助 ---------------------------</summary><published>2011-07-20T10:00:00Z</published><updated>2011-07-20T10:00:00Z</updated><author><name>edrp.cn</name><uri>http://www.cnblogs.com/edrp/</uri></author><link rel="alternate" href="http://www.cnblogs.com/edrp/archive/2011/07/20/2111950.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/edrp/archive/2011/07/20/2111950.html"/><content type="html">---------------------------&lt;br /&gt;远程桌面连接已断开&lt;br /&gt;---------------------------&lt;br /&gt;客户端无法连接。您已连接到这台计算机的控制台。无法建立新的控制台会话。&lt;br /&gt;---------------------------&lt;br /&gt;确定&amp;nbsp;&amp;nbsp; 帮助&amp;nbsp;&amp;nbsp; &lt;br /&gt;---------------------------&lt;br /&gt;&lt;img src="http://www.cnblogs.com/edrp/aggbug/2111950.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/edrp/archive/2011/07/20/2111950.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
