当前位置:首页 » 软件开发
开发技术指南» 文章正文
    引言: 1.1 此份文件的目的为何? 这份文件的目的是为了解答有关撰写 Delphi组件时常见或文件上找不到的问题。
 

 

 ·第5部分 编译文件(第12页)    »显示摘要«
    摘要: 第5部分 编译文件(第12页) 第5部分 编译文件(第12页)我们的下一个例子是一个在ide中用vcl(可视化组件库)编写的程序。这个程序自动的形成框架窗口和资源文件,所以你不能从单一的源文件编译。但是他说明了delphi语言的一个重要的特性。除了多单元外,可以使用类和对象。 这个程序包括一个工程文件,和2个新的单元文件。首先,工程文件如下: program greeting; u......
 ·crc算法的实现。。。    »显示摘要«
    摘要: unit crc32; interface uses windows,sysutils,classes; const //crc32表 table:array[0..255] of dword= ( $00000000, $77073096, $ee0e612c, $990951ba, $076dc419, $706af48f, $e963a535, $9e6495a3, $0edb883......


Delphi 组件撰写常问问题

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』的错误?


...   下一页
 ·delphi编写你的第一个com程序    »显示摘要«
    摘要: delphi菜单:file\new\other… 按确定[ok]按钮点击file\save菜单保存: 输入工程名mycom 按保存按钮 再打开菜单file\new\other… 按[ok}按钮; 在coclassname打入myobject 按ok 在imyobject上按mouse右键 imyobject\new\method 在nam......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE