Delphi开发人员指南 第一部份快速开发的基础 第1章 Delphi下的Windows编程(三)

1.5 创建一个简单的应用程序

     如果从组件选项板上选择一个按钮放到表单上,Delphi会在表单对象的声明中加入下列代码:

  1. type
  2.     TForm1 = class(TForm)
  3.         Button1: TButton;
  4.      private
  5.         { Private declarations }
  6.      public
  7.          { Public declarations }
  8. end;

     该按钮是TForm1类的一个实例变量(Button1)。以后如果要在TForm1以外的地方引用Button1,必须加上对象限定符,即Form1.Button1。

     当在窗体设计器中选定了这个按钮时,可以通过Object Inspector来改变它的行为。假设要在设计期把按钮的宽度改为100个像素,并使它在运行时能够响应鼠标单击事件而使其高度扩大一倍。要改变按钮的宽度,可以到Object Inspector中找到width属性并把它的值设为100,然后按下Enter键或把输入焦点从width属性上移走,表单上的按钮宽度即改为100个像素。要使按钮能响应鼠标单击的事件,首先要翻到Object Insperctor的Events页,找到Onclick事件,然后双击它右边的一栏,Delphi将自动生成一个响应鼠标点击的过程的框架,在这里是TForm1.Button1click(),并把输入焦点移到这个事件响应方法的Begin和End之间。所要做的就是在Begin和End之间插入代码,以使按钮的高度扩大一倍:

  1. Button1.Height := Button1.Height * 2;

     要编译和运行这个程序,可以按下F9键。

     注意: 自动生成的过程与它所对应的组件之间的引用关系是由Delphi维护的。编译或保存源代码模块时,Delphi会自动检查源代码,凡是Begin与End之间没有任何输入代码的过程就认为是多余的,Delphi将把这个过程删掉。由此可见,不能随便删除一个Delphi生成的过程。即使要删除一个过程,也只需删掉你插入的代码,让Delphi去删除过程的框架。

     运行了上述程序后,可以退出程序回到Delphi的IDE中。其实,要使按钮能响应鼠标单击的事件,不必使用Object Inspector,而只要在表单上双击这个按钮即可。双击一个组件将自动调用与它相关的组件编辑器。对大多数组件来说,这将会生成处理Object Inspector中列出的该组件的第一个事件的处理程序。

1.6 事件机制的优势在哪里

     过去,如果用传统的方式开发Windows应用程序,将不得不手工捕捉Windows的消息,然后再分析这个消息,取出其中的窗口句柄、消息的ID、WParams参数和LParam参数。如果改用Delphi,毫无疑问就简单多了。

     事件通常是由Windows消息触发的。例如TButton组件的OnMouseDown事件,实际上是由Windows的WM_xBUTTONDOWN消息触发的。注意,OnMouseDown事件给出了诸如哪个按钮被按下、被按下时鼠标的位置等信息。一个表单的OnKeyDown事件提供了相似的有关键被按下的信息。例如下面是Delphi生成的处理OnKeyDown事件的处理程序:

  1.   procedure TForm1.FormKeyDown(Sender: TObject; var Key:Word; Shift: TShiftState);
  2.   begin
  3.   end;

     可以看出,所有需要知道的信息这里都提供了。如果你曾经用传统的方式写过Windows应用程序,就会惊喜地发现,再也不必为分析窗口句柄、WParams参数和LParam参数犯愁了。它不再是以你所知道的“消息流”方式,因为一个Delphi事件能够代表几种不同的Windows消息,就像它处理OnMouseDown(它处理了一系列鼠标消息),每一种消息参数都是以一种容易理解的方式传递的。

     无约定编程

     与传统的Windows消息机制相比,Delphi的事件处理机制的最大优势在于所有的事件都是无约定的。对程序员而言,无约定就是指可以在事件处理程序中什么都不干。而在传统的Windows消息机制中,就不得不调用基类的消息处理程序,还要把信息回传给Windows。

     当然,Delphi事件处理机制的无约定的编程方式可能无法对消息进行直接的灵活有效的处理,你要受制于谁引发了这一事件以及应用程序对这一事件要做出什么响应等。例如,可以在OnKeyPress处理程序中修改和取消击键,但OnResize事件处理程序却只能提供这一事件已发生的通知而无法进一步防止或控制尺寸的改变。

     不过,不必担心。Delphi仍然允许在事件处理程序中直接处理Windows消息。只是这就不像事件处理机制那么简单,因为消息处理需要程序员对要处理的消息有详细了解。可以通过message这个关键字处理所有Windows消息。

     使用Delphi开发应用程序的好处是,你既可以用高级的、易于理解的方式来编程,也可以在需要时直接访问低层的信息。

原文地址:https://www.cnblogs.com/heart4u/p/2070069.html