ccidnet????

出版日期:1998-10-26 总期号:771 本年期号:81

本期导读
综合消息
硬件
软件
电脑工作室
delphi驿站

马建国

  让应用程序带参数运行

  如果您的应用程序需要运行参数(比如一个文本编辑器),或者您在开始菜单建立的程序组中有多个程序项,但又想共用一个程序来完成不同的任务,那么您的应用程序必须具备识别运行参数的能力。delphi中提供两个函数让您实现这个目的:paramstr与paramcount。paramcount用来获取运行参数的个数,参数项间需以空格或tab隔开;paramstr用来获取每项参数,一项参数内不能含有空格。下例是一个文本编辑器的例子,它将打开您指定的txt文件,程序的执行要在开始菜单中“运行”项内人工键入全路径程序名及txt文件名。

  procedure tform1.formactivate

  (sender:tobject);

  begin

  if paramstr(2)=′a′ then memol.font.color:=clmaroon else memol.font.color:=clblue;

   {判断第二个参数项若为字符a,则memo文字以综红色显示,否则以蓝色}

  memol.lines.loadfromfile(paramstr(1));

  {memo载入第一个参数项作为将打开的文件名}

  end;

  说明:我曾把自己的一个应用程序中主程序、反安装程序、参数设定程序等等全部融合在一个程序内。在开始菜单内生成的程序组中,每一项都用不同的参数指向该程序,这样在程序目录中就只有一个执行文件了。

  在应用程序中嵌入和激活在线帮助信息

  对于较为大型和复杂的应用程序,在线帮助是必不可少的。实现这一目标分为两步骤:

  1.编制应用程序的hlp文件。

  目前暂时还没有一个轻松而又省钱的工具帮助我们完成这步工作,用户首先要在诸如word这样的文字处理软件中编辑一个rtf(rich-text-format)文件,然后对应它写一个hpj(help project)文件,最后再由微软公司的帮助文件编译器hc31、hc51、hcw之类的工具生成出hlp文件。具体过程请参看有关的专题文章或delphi 10所带的专题帮助。本人在此仅玩笑一句:造成这种情况的原因是微软公司至今尚未公布hlp文件格式的有关详细资料,只是提供了如何编制帮助文件的方法及帮助文件编译器,使得其他软件开发者无从着手改进。(这样用户就不得不买word或hc31了。)

  2.在应用程序中的调用。

  delphi有三个封装和一个事件用以提供应用程序在运行时调用帮助信息:.helpfile属性、.helpcontext属性、.helpcontext方法和application.onhelp事件。下例中当button1或editl拥有焦点时按下f1键将激活所对应的帮助信息,button2按下时将打开帮助文件并显示其第一页的内容:

  …

  procedure tform1.formcreate(sender:tobject);

  begin

  application.helpfile:=′myapplication.hlp′;

  button1.helpcontext:=6; //button1将敏感于帮助文件第6索引页

  editl.helpcontext:=7; //editl将敏感于帮助文件第7索引页

  end;

  procedure tforml.button2click(sender:tobject);

  begin

  application.helpfile:=′myapplication.hlp′;

  application.helpcontext(1);

  end;

  …

  说明:.helpfile属性为tapplication所有,其值应是帮助文件名,若该文件与应用程序同在一处可以不带路径名;.helpcontext属性为可视控件所有,一经赋值,就使得控件获有焦点时对f1键敏感(context-sensitive),并指向帮助文件中所赋索引页号的内容;helpcontext方法为tapplication所有,其后所跟参数为打开帮助文件时显示出该索引页号中的帮助内容。注意:对于delphi 10,上述方法不适用。

  让sender充分发挥作用

  用好sender将会提供应用程序代码的重用性,使程序精简而又高效。在此仅举一例来说明它的作用:做一个可视的电话号码输入窗,通过按下caption为0~9的10个按钮,使得editl显示完整的电话号码。

  常规的做法需要对10个按钮的click事件进行重复的编程,使用sender则省事许多:

  1.对这10个按钮的tag属性赋值,所赋的值同于其caption属性(0~9);

  2.仅对一个按钮进行如下的click事件编程:

  procedure tforml.

  buttonlclick(sender:tobject);

  begin

  editl.text:=editl.text+inttostr(tbutton(sender).tag);

  end;

  3.将其余按钮的click事件在物体属性栏中选择为buttonlclick。

  说明:tbutton(sender)一句可用(sender as tbutton)替换,其含义为sender须是tbutton或是其子类;tag为所有可视控件都有的一个属性,为integer类型,其作用类似于我们每个人的身份证号码,起标记的作用,所不同的是若干控件可以有相同值的tag属性。在delphi帮助中也明确提到:该属性可使控件“携带”一个整型参数记号,如果再结合指针的编程,还可实现控件“携带”一个字符串常数或位图等。