1.1 此份文件的目的为何?
这份文件的目的是为了解答有关撰写 delphi组件时常见或文件上找不到的问题.我曾经花了一段很长的时间来了解探索 tdatalink 类别,这让我觉得应该将撰写组件时常遇到的问题及经验心得写下来,分享给大家.不过我并不能保证写在这份文件里头的解答完全正确.如果你对其中的任何问题有更好的解决方法,或认为有什么信息适合放在这份文件里的话,请告知作者.有任何错误或缺漏也欢迎指正. 【程序编程相关:多层数据库开发一:设计数据库应用程序】 【推荐阅读:多层数据库开发九:查询数据库】除了再加上更多的问题及解答外,我试着再补充两个部分: 【扩展信息:ado异步查询的解决方案】 进阶java/j2me/code/ target=_blank>程序设计师喜爱的工具:这也许跟组件设计没有直接的关系但至少它们跟 delphi有关系. 值得参考的文件刊物:由于空间的关系,这份文件不能放置太多的范例程序,因此参考其它文件是十分需要的.这不是一份教材式的文件,我不会做太多条理式的说明,但会试着将最具有参考价值的文献列出. 如果你有任何意见或建议,欢迎来信告诉我. -------------------------------------------------------------------------------- 第二部份 整合环境 2.1 在整合环境中如何找出组件所产生的问题? 我发现唯一能找出问题的方法只有: 在 delphi 整合环境的 tools|options 对话框的 library 页中将『compile with debug info』选项打勾. 选 component|rebuild library 重新编译组件库. 从 turbo debugger 中执行 delphi. 选file|change dir移至包含组件程序代码的目录下. 如果你的组件发生gpf时就可以检视堆栈然后得知到底是哪些发生问题了. 2.2 如何检视 delphi 所产生的汇编语言码? glen boyd 的回答: 开启登录编辑程序(regedit.exe),接着到『hkey_current_user\software\borland\delphi\2.0\debugging』下新增一个字符串机码『enablecpu』,将它的字符串值设为『1』.此后delphi整合环境的view选单下就会多一个『cpu』选项,它会开启一个窗口来检视目前程序指令的内存及汇编语言.你可以在侦错时利用单步追踪或其它方法来观察它. 2.3 我可以在执行时期动态建立组件,但在设计时期就会发生错误.为什么? 你的组件必须继承自tcomponent类别或其衍生类别. 你的组件建构函式及灭构函式宣告必须看起来像这样: constructor create(aowner: tcomponent); override; destructor destroy; override ; 所有在published区段宣告的字段型态必须是ordinal.single.double.extended .comp.currency.string.small set(译注:指元素编号不超过0..31这个范围的集合;平常的集合可容许的范围为0..255).method pointer或class其中一种.如果你宣告了其它型态的字段,delphi编译器并不会检查出错误.然而当你使用这个组件时依然会得到一个gpf. 如果你想让tmycomponent组件可以在设计时期操作,注意下面的宣告会引发十分严重的问题: type tcomplex = record realpart: double; complexpart: double; end; class tmycomponent = class(tcomponent) private f1: tcomplex; published property p1: tcomplex read f1 write f1; end; 2.4 如何撰写一个无法放置到表格上的组件? ray lischner 的回答: 如果你不想让使用者将组件拉曳至表格上的话,使用 registernoicon 及 registerclass 程序来注册组件. 2.5 在程序代码编辑器中快速切换程序区段最简单的方法是什么? ray konopka 的回答: 在探索 vcl 原始程序代码时,强烈建议你最好熟悉程序代码编辑器里的书签功能.使用方法很简单:ctrl-shift-n,n 是从 0 至 9 的数字,用来设定一个书签.此后就可以使用 ctrl-n 来跳跃至书签处.(译注:使用这项功能真的可以节省你许多来回卷动程序及找寻函式的时间,别迟疑了,快学吧!) 2.6 如何使我的组件在按下鼠标右键时出现快速功能选单? 你必须要建立一个组件编辑器.组件编辑器决定了组件在设计时期时对鼠标键的反应及动作,你可以为组件定义它自己的快速功能选单. 建立组件编辑器的步骤大致如下: 从 tcomponenteditor 类别继承一个新的类别. 改写类别的 getverbcount.getverb及 executeverb方法. 在 register 程序中使用 registercomponenteditor 程序来注册此组件编辑器. 有关组件编辑器这个主题在『developing delphi components』这本书中有详尽的解说及信息. 2.7 为什么组件在设计时期会出现『i/o 103』的错误? ... 下一页