DLL为EXE的子窗体时(非MDI),Hint的显示等问题。。。高分!!! ( 积分: 200 )

  • 主题发起人 主题发起人 gyang
  • 开始时间 开始时间
G

gyang

Unregistered / Unconfirmed
GUEST, unregistred user!
一。谁能解决这两个问题????(&amp;gt;200分)<br><br>http://www.delphibbs.com/keylife/iblog_show.asp?xid=2438<br>问题1:<br>2003-10-27 18:21:34 &nbsp; &nbsp;Hint的问题(未解决)焦点在Dll中的窗体时,鼠标移动到控件上不会显示控件的Hint,而且Application.OnHint事件也不会发生,但是焦点在Exe窗体上时,把鼠标放在Dll窗体中的控件上却能显示Hint.原因还未找到:(<br>问题2:<br>2003-12-12 14:03:01 &nbsp; &nbsp;ALT+TAB解决了,但是那是键盘,鼠标操作还是有问题焦点在DLL中时,用鼠标点其它应用程序,失去焦点了,再按ALT+TAB,那个该死的应用程序图标又没了,焦虑中.... <br><br>二。收集一下DLL做EXE的子窗体时用到的 技巧 及 可能遇到问题的解决方案(&amp;gt;200分)
 
一。谁能解决这两个问题????(&amp;gt;200分)<br><br>http://www.delphibbs.com/keylife/iblog_show.asp?xid=2438<br>问题1:<br>2003-10-27 18:21:34 &nbsp; &nbsp;Hint的问题(未解决)焦点在Dll中的窗体时,鼠标移动到控件上不会显示控件的Hint,而且Application.OnHint事件也不会发生,但是焦点在Exe窗体上时,把鼠标放在Dll窗体中的控件上却能显示Hint.原因还未找到:(<br>问题2:<br>2003-12-12 14:03:01 &nbsp; &nbsp;ALT+TAB解决了,但是那是键盘,鼠标操作还是有问题焦点在DLL中时,用鼠标点其它应用程序,失去焦点了,再按ALT+TAB,那个该死的应用程序图标又没了,焦虑中.... <br><br>二。收集一下DLL做EXE的子窗体时用到的 技巧 及 可能遇到问题的解决方案(&amp;gt;200分)
 
&nbsp;可能我能解决这样的问题。 哈哈................
 
我想原因可能是下面这个:<br><br>VCL里面的代码判断一个object是否是某个class的子类创建的对象,用的是下面的方法:<br>object.InheritsFrom(class)<br>或者<br>object is class<br><br>而class在Delphi中,也是一种数据结构,每个class存在一个实际的数据。<br><br>在dll中的时候,相同的class有1份和主程序中完全一样的副本,而实际上,和主程序又完全不一样的。<br><br>比如,从dll中传过来的一个TControl类的实例到主程序,在主程序中,判断他是否TControl的实例时,总是会返回False。<br><br>我在我的程序里,当需要根据对象实例的类来区分对象的时候,我使用了重写的InheritsFrom函数:<br><br>var<br> &nbsp;ClassPtr: TClass;<br>begin<br> &nbsp;ClassPtr := AObject.ClassType;<br> &nbsp;Result := False;<br> &nbsp;while (ClassPtr &amp;lt;&amp;gt; nil) and (ClassPtr.ClassName &amp;lt;&amp;gt; AClass.ClassName) do begin<br> &nbsp; &nbsp;ClassPtr := ClassPtr.ClassParent;<br> &nbsp;end;<br> &nbsp;if Assigned(ClassPtr) then<br> &nbsp; &nbsp;Result := ClassPtr.ClassName = AClass.ClassName;<br>end;<br><br>而对于VCL来说,代码太过庞大,就没信心去尝试修改了。
 
to kk2000<br>请问你是怎么解决的呀?<br><br><br>伙子们,继续呀
 
&nbsp;请楼主: 留下QQ 我们聊聊. 如何?
 
QQ:17805552<br>一般非工作时间在,晚7:30后
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1558084<br>看看这个贴子能不能帮你一下?
 
恩,把VCL单独拎出来,那么我上面所说的那个问题就不存在了。<br>也就是对于主程序和DLL来说,所有VCL中定义的class是“真实”一样的,所以问题就得到解决。<br><br>把解决方法说下吧:<br>打开project的options窗口,<br>在Packages页面,把Build with runtime packages前面的勾打上,<br>下面的列表中只保留vcl<br>上面的设置对于主程序和dll都如此设置一下。<br><br>然后在你的软件发布的时候,将vcl这个包一起发布即可,比如,对于delphi7来讲<br>这个文件是vcl70.bpl<br>大小是1.3M多点,还是可以忍受的,<br>而且,主程序和dll的体积都会大大减小,减小的总量可能会大大超过这个vcl的体积。
 
把主程序的Application传进DLL可以解决这个问题,最好传<br>Application不要传Application.Handle<br><br>在DLL内ShowHin释放后关闭会出错,在释放DLL时得加上<br>这句代码以便安全释放<br>Application.ShowHint := False;
 
Packages可以完成解决这个问题,<br>如果,用Packages技术,那么,就要发部对应的bpl,<br>对以后软件的升级不是很方便,<br>如果用的delphi升级了,那么所有对应的DLL及EXE都要重新编译再发部,<br>所以不是很方便,如果没有找到解决方法,也只有用这Packages的方式了<br><br>to zzybbs:<br> &nbsp;还是不行,能说详细点吗?谢谢!!!
 
如果关于 相信很多使用Delphi的人都有想過將自己的應用系統分割成好幾個Package, 這樣的好處是可以只更新單一的Package (.BPL)就可以了, 而且.BPL還有一個.DLL沒有的好處, 所有的.BPL 可以有一份大家共用的記憶區塊(變數, function, procedure 等),使用上就很方便了, 但是事實上很多人都因為Package使用上的限制而放棄(我曾經就是一個), 現在我就來介紹Delphi Package的使用方法(不過實際處理方式請參考程式碼, 本說明不多作說明)<br><br>Package现在正被DLL所取代,程序员更加认可DLL方式来开方程序但Package也有他的优点,通过些集锦,你可以更加深入的了解这种开发方式.<br>http://www.2ccc.com/go.asp?url=http://downloads.2ccc.com/simples/os/Delphi.Package.rar
 
我今天刚编译通过一个,不过不好意思,在办公室,如果明天上网的话给你一个吧![8D]
 
to 丁满:<br>谢谢了,3 K U!!!<br>SharpExpress@tom.com
 
使用 Bpl+dll 处理 ,具体例子我发给你<br><br>
 
接受答案了.
 
后退
顶部