DELPHI使用15问

1.运行Delphi需要多少磁盘空间、内存,我的机器可以运行Delphi 吗?

  对于Delphi 1.0 而言,安装Delphi 的最小磁盘空间是30MB,完全安装是80MB。如要使其很好地运行,需要最少8MB内存的486机器。我在家使用486/66,工作用Pentium-90,老实说,二者之间没有太大的区别:Delphi 的编译器太快了,CPU其实不是瓶颈。

  现在最常见的Delphi 3需要微软的Windows 95、Windows NT 或与其100%兼容的操作系统;80486或更好的处理器;8M内存(建议12M)跑Windows 95,16M内存上WINDOWS NT;VGA或更好的显示器,CD-ROM驱动器,鼠标或其他点击设备。第3版本是为Windows 95和Windows NT优化的,但如果有Service Pack 5,Windows NT3.51也可以。

  以下列出了不同版本的Delphi3占用的磁盘空间,安装时还要再加10MB的磁盘空间,安装完后会自动释放。

要想少占用磁盘空间,可选择Custom的自选安装模式,只选择你需要的程序,如果要安装Delphi 4,则要对系统有更高的要求,最好是奔腾200,32MB内存以上。


2.Delphi与VB、VC、PowerBuilder 有何区别,我学其他语言是否更好?

  Delphi 的源程序比VB和VC++简洁、高效。对初学Windows编程的人来说,VB使用比较简单,但它不太适合复杂的应用,否则会感到很繁琐。而Delphi 不会这样。VB强调结果,不强调程序的规范,能实现就行,所以入门极易;而Delphi 可能更强调方式,它解决问题的方式比较严谨—这在复杂的应用中是必需的。所以有人说:“VB是先甜后苦,而Delphi 是先苦后甜”。用过Delphi 的程序员回顾一下VB,就仿佛小孩的玩具一般。

  用Delphi 写一行代码就可生成一个Windows标准的对话框窗口,而使用标准的VC编程,可能需要70多行的C语言代码。使用C语言的好处是它的速度快。但是Delphi 拥有世界上最快的编译器,可以3.5万行/秒的速度编译。编译后的可执行程序也是真正的二进制机器代码,它的速度是C语言的70%,已经非常接近了,区别不大。在当今机器档次不断升级的情况下,正如一个Delphi 程序员在网上说的那样“谁还在乎速度!”。

  用VB写的程序最终的执行程序是P-Code伪代码,要解释执行,速度与Delphi 自然不可比了;VB的程序不是独立的,它需要一些DLL动态链接库文件的支持,很繁琐。而Delphi 制作的是一个独立的完整的.EXE文件。而且Delphi 的源程序极类似于自然语言,所以易读易懂。

  当然由于Windows系统中的资源都是以C语言的结构进行描述的,使用Delphi 可能有一些不便,要想深入WindowsS底层编程,使用C语言还是比较好的。

  Delphi 面向不同的应用,包括系统工具软件(如网络上知名的FOXMAIL就是它开发的)、应用程序、丰富的数据库支持等等几乎无所不包,被公众评为最有前途的开发系统。说起PowerBuilder,它是专门的数据库开发工具,这一点是无可比拟的,在其他方面可能要弱于Delphi,所以有人也说PowerBuilder是最有“钱”途的开发工具。

“真正的程序员用C,聪明的程序员用Delphi ”,这句话是很有道理的。所以,还是做个聪明的程序员吧。

3.Delphi带有帮助我安装应用程序的工具吗?

  Delphi 自己没有,但是市面上有很多的第三方的工具可以支持Delphi 开发出来的程序。如InstallSHIELD 、EDI INSTALL PRO等。前者的市场占有率高达80%以上,它还可以制作用VB、VC,POWERBUILDER、J Builder、 Lotus Notes、VJ、MS-SQL、Visual Cafe等20多个开发工具开发出来的应用程序。更令人兴奋的是,从Delphi 3开始,已经包含了一个InstallSHIELD的专为Delphi 系统开发的简化版本ISEXPRESS,附带Delphi 一同发行。它可以更方便快速地生成一个完全符合WIN95 Logo规范的应用软件安装程序。由于Delphi 的复杂性,如果即使不使用ISEXPRESS,也应该使用BORLAND认可的安装工具。


4. 为什么用Delphi 编译的一个简单的.EXE文件竟然那么大(一个窗体和一个命令按钮大约200kB)?

  Delphi 的VCL基于RTTI(Run-Time Type Information),这要求大约120kB的脚本代码(“Footprint”)用于一个即使是空的应用程序。得到200kB大小的可执行文件里面包含了调试信息或没有优化的代码。注意如果再加入一个窗体单元和一个命令按钮时,程序不会变为400kB大小,而可能仅是201kB。在“Footprint”代码以外,每个控件仅为程序添加需要的一点代码大小。

大的程序可以以不需要任何附加的DLL库文件而独立运行,如果采取另一种方式:在编译时选择加入动态链接库支持的配置,则生成的可执行文件的体积可能仅为10kB。Delphi 3使用扩展名为.DPL的文件作为它开发程序的专用支持库文件,这些文件总共约需要3.6MB左右的磁盘空间。在Delphi 4中改用.BPL文件支持,它们应该在Windows的System目录中。使用支持库文件的方式进行编译对同时开发多个可执行程序的情况可以节省磁盘空间,是比较合适的。


5.如何加快应用程序的启动时间?

  如果程序的规模较大,有几十个窗体单元,那么最终编译好的程序的启动时间是较长的。可以使用两个办法来处理。

第一个方法是在程序启动时对于一般不用的模块不进行建立。在程序需要调用时再自动生成,这样就加快了启动速度。修改方法是在Delphi环境下选择菜单Project、Options,在Forms舌标内将暂时不用的窗体从左侧移到右侧即可。当然在程序运行到需要调用时不能只用SHOW方法,而要有创建窗体的语句如:Application.CreateForm(Tfrmprint, frmprint); //其中frmprint是一个打印模块例子。

这时可能会慢一点—启动的模块分散了。但是它也有一个好处:就是减少了系统资源的占用,因为不用的窗体不进行建立,窗体调用完毕自动释放。

第二个方法是加入一个启动窗体,SPLASHFORM。在程序运行前显示,让用户不会有太长的等待的感觉,就像字处理软件WORD的启动一样。方法是在主启动模块.DPR文件中进行如下设置(在DELPHI环境下按ALT+V,J即可见到。这个文件一般是不必用户进行干预的,DELPHI会自动进行调整维护),其中SplashForm是启动窗体,它包含一些与程序有关的简单信息。

Application.Initialize;

SplashForm := TSplashForm.Create(Application);//建立启动窗体

splashform.Show; //显示启动窗体

splashform.Update ; //刷新启动窗体

Application.CreateForm(Tfrmall, frmall);//开始建立其他程序窗体,这些窗体如使用频率不多,可不必在此处建立

Application.CreateForm(Twaitwin, waitwin);

Application.CreateForm(Tfrmempty, frmempty);

(其他必要窗体的建立代码)

Application.CreateForm(Tappendrequer, appendrequer);

splashform.hide; //关闭启动窗体

splashform.free; //释放内存,因为它在启动后将不再被使用。

Application.Run; //显示主运行程序的窗体。


6.有一些在Delphi 的IDE编程环境下的技巧吗,比如如何用键盘加快程序的调试速度?

Delphi编程环境已为程序员考虑了支持键盘的操作,这样可以避免经常交换鼠标和键盘而降低开发效率。许多功能键和组合键在Delphi菜单中都可看到。但一些觉得非用鼠标不可的操作,其实也有键盘实现的途径。这里举几个实用的例子:

选择控件,可按ALT+V,L,再翻页或击控件前而的字母而渐进找到。

移动控件,可用CTRL加箭头键,如果嫌慢,可辅以SHIFT键。改变它的大小,使用SHIFT加箭头键即可。

改变某控件属性,按回车即可转入Object Inspector设置窗口(如果属性有下级,可按CTRL+回车进入设置),再按回车即可返回窗体设计环境。

在Object Inspector窗口中改变属性与事件舌标,可按CTRL+TAB组合键,激活某个事件进行代码编辑,按CTRL加回车。

F12键可以在窗体设计和代码设计窗口中转换;ALT键加F12键可以在窗体的可视形式和代码形式之间进行转换。

如果要求程序运行时进行控件的属性设置,即要用代码实现时,可激活DELPHI编程环境的自动功能,只要键入控件名称加一个点,随后屏幕会显示出其所有可能的属性,进行选择即可,这样既快又准。


7. 我可以在Delphi 环境下使用由C或C++开发的DLL动态链接库吗?反过来,我可以在C或C++环境中调用Delphi 的代码吗?

Delphi 有制作调用或用反调用任何的Windows DLL的能力。而且还说可能(这样说挺狡猾)让Delphi 访问C++DLL中的类。Borland的WWW服务介绍了使用的方法。我没能让这生效,但我想那是因为我的DLL有些太怪异的缘故吧。随着Delphi 的不断升级,这个问题应该解决得很好了。

Delphi 也可以生成DLLs, 这些DLLs可以从C、 C++、 Visual Basic、Powerbuilder或其它任何可以调用Windows的DLL动态链接库的系统中调用。


8. 我怎样让CPU同时从事其他工作,就如在VB中的“DoEvents”一样?

Delphi 中的等价语句是Application.ProcessMessages。

同样有称做Yield的API函数调用看起来可以做同样事情,但它在Delphi 应用程序中可能不安全。


9. Delphi 使用Pascal类型的字符串 还是使用C语言类型的字符串?

都有。Delphi 使用两种不同的的字串处理方式。一种是C语言方式的空结尾字串(null-terminated strings),一种是Pascal风格的字串。你会慢慢地发现这二者的区别。通常,Delphi 的函数调用包含了Windows的API函数功能,例如对话框MessageBox,是一个Windows的API调用,需要Pchar类型的字串,但在Delphi 中也同样有MessageDlg,可以接收Pascal类型的字串。

如果你有一个Pascal类型的文本字串,而处理函数中却需要一个PChar 类型的字串,Delphi 中有专门对它们进行转换的函数StrPas和StrPcopy。


10. 我要建立一个工具条,但我只有icons图标文件,却没有bitmaps位图文件,帮帮我!

最好能有一些像HiJaak这样的图像文件格式直接转换工具。但假设除了Windows和Delphi 外没有其它工具也不要紧。首先显示ICON,使用ALT+PRINT键将当前窗体拷贝下来,在Windows的画图工具中设置工作区域为32x32点,使用粘贴命令并存盘即可生成BMP文件。

有时Delphi 对不同类型的图片文件可以混用,这时就不必劳神转换了。


11. 我怎样让MDI应用程序中的子窗体隐含?

不能隐藏MDI的子窗体。如果隐藏它,Windows会有一些异常的情况出现,因此你会看到,Delphi 的VCL不允许它这样做。


12. 怎样写一个全程的错误捕获?

  使用Application.OnException 事件。查看"application events" 中的帮助,可以得到怎样附加到application变量处理异常事件的详细说明。


13. 我已经有了一个保护异常错误的处理代码,为什么运行时还有异常错误信息出现?

  通常情况下,在Delphi编程环境下调试程序运行时,它的调试器在遇到任何异常时都会挂起,即使是程序已经有了异常保护代码—这对调试工作是有帮助的。如果这对你有影响,可以考虑将它关闭。方法是选择菜单Project,第一项Environment Options,选择Debugging面板中的Break on exception项,将其他选择项去掉。


14. 可以让程序的菜单包含位图信息吗?

  含有图标的菜单是很吸引人的,这也是以后软件界面的发展趋势(Windows98就已经体现了这些变化)。但是1997年出品的DELPHI3.0本身是不提供这种位图菜单功能的,而最近DELPHI4已经出来了,试一试它的新的MAINMENU控件,就会发现它的属性多了不少,直接支持位图菜单;它也可以通过和Imagelist组合生成可能与Toolbar一致的位图菜单。没有几分钟,你就会在DELPHI4环境下制作标准的位图菜单了。

  如果没有Delphi4,也可借用第三方提供的Delphi开发工具。丰富的第三方开发控件可以提高软件的设计速度和质量。如COOLMENU就是一个很不错的菜单开发工具包,可从网易的站点找一找,只是它的速度较慢。还有如用过LOTUS DOMINO系统的用户就知道它的鼠标盘旋显示的信息很迷人。使用第三方开发工具LMD TOOLS就可实现。它不但可以多行显示,而且可以设置提示信息文字的任意格式。用箭头指定的提示比Windows 95本身的死板(比Windows 3.X的没有当然是强多了)提示更有说服力。好的界面开发工具可以帮助程序员增加程序对用户的亲切感。


15. Delphi4与以前的版本一致吗,用Delphi 4开发系统是否更好?

  当然,如果你幸运地得到了Delphi4,就可以更容易地开发功能更加强大的应用程序,特别是从一开始就使用Delphi4进行工作。

  但是它与3.0版在某些地方有一些区别,在3.0环境下开发的早期软件有时需要进行调整方能在4.0编程环境下适应。同样,将它再返回3.0中调试,就有许多的属性不能被认识了(3.0版也算旧?真是—这世界变化快!)。

  为支持原3.0版本下开发的软件,在调入4.0版本中时,应用软件被自动调整了一些东西,如加入了窗体建立(FROMONCREATE)事件的响应顺序设置的旧版本兼容代码,因为新版本对这个响应顺序进行了调整。

  新版本中的QuickReport控件是3.0的升级版,虽然它的功能有所增强,但某些时候还不如旧版本。如在老版本中设计的打印控件如果不在BAND内,仍可正确打印,而新版却规范得要求所有打印信息必须包含在BAND中,否则什么效果也不显示,当然不能正确打印了。所以将QRLabel,QRDBText这样的控件直接放入QuickRep报表控件中进行打印是行不通了。这一点在用不同版本的DELPHI开发时就要注意了。

旧版本中的TeeChart控件中的某些控件属性的常量值,在新版本中也不能认识,可能需要首先进行声明。如语句:DBChartnumber.Gradient.Direction:= gdRightLeft中,颜色渐进方式:gdRightLeft等常量在代码方式下就不能被DELPHI4认识。

如前面所讲,Delphi4当然增了许多新功能,简单的如位图菜单等,但它的运行速度也是个问题,在奔腾166档次以下的机器中,还是用3.0好。

在早期3.0版中做的工作如果升级到4.0中继续的话可能会重头开始,甚至行不通。如许多第三方的控件支持工具,可以安装到3.0中运行(提供了1/2/3各版的支持),由于3.0版的支持库文件.DPL已经变为4.0的.BPL,所以这些第三方开发工具就已经无效了,除非有这些工具的源代码,重新编译一遍—这是极不现实的。

我们现在得到的Delphi 4可能是它的Beta版,看看它附带的ISEXPRESS安装工具名(InstallShield For Delphi 4 Beta)就知道了。