动就提 不存在, 如果此 不存在 示错误,并终止程序的运行。 示错误,并终止程序的运行。
2. 动态引入 不必在应用程序启动时立即静态引入DLL, 不必在应用程序启动时立即静态引入 , 可在程序运行的必要时刻,动态引入DLL。 可在程序运行的必要时刻,动态引入 。 动态方式不仅灵活,而且较为安全。 动态方式不仅灵活,而且较为安全。缺陷 文件较大, 是:若DLL文件较大,且引入时为首次引 文件较大 导加载,则影响运行速度。 导加载,则影响运行速度。
7.2 Windows API及其函数
一、Windows API函数分类 函数分类 二、API函数调用 函数调用
一、Windows API函数分类
Windows API由其定义的数据结构、常量 由其定义的数据结构、 由其定义的数据结构 和数百个函数组成,它们分布于Windows 和数百个函数组成,它们分布于 提供的众多动态链接库中。根据API函数 提供的众多动态链接库中。根据 函数 的来源以及Delphi所定义的相对应单元, 所定义的相对应单元, 的来源以及 所定义的相对应单元 可将API函数做出如表 的划分 。 函数做出如表7-3的划分 可将 函数做出如表
二、API函数调用
Delphi中已经定义了相应的单元,给出了 中已经定义了相应的单元, 中已经定义了相应的单元 所有Windows API函数的编程接口,因此 函数的编程接口, 所有 函数的编程接口 可以在Delphi程序中直接调用
程序中直接调用API
函数。 函数。 可以在 程序中直接调用 函数 虽然API函数调用就是 函数调用就是DLL调用,但在 调用, 虽然 函数调用就是 调用
Delphi中调用 中调用API函数非常简单,不需要 函数非常简单, 中调用 函数非常简单 声明外部引入,只需在Uses保留字后声明 声明外部引入,只需在 保留字后声明 相应的单元即可。 相应的单元即可。DLL引入的操作定义已 引入的操作定义已 预先定义的单元完成。 由Delphi预先定义的单元完成。 预先定义的单元完成
7.3 消息处理
一、Windows的消息机制 的消息机制 二、Delphi的消息处理 的消息处理 三、发送消息 四、响应消息
一、Windows的消息机制
Windows并不通知应用程序应该完成什么
工作, 而是通 并不通知应用程序应该完成什么工作, 并不通知应用程序应该完成什么工作 知应用程序发生了什么事情,这便是所谓的消息,然后, 知应用程序发生了什么事情,这便是所谓的消息,然后, 由截获消息的应用程序自己决定如何去处理这些事件。 由截获消息的应用程序自己决定如何去处理这些事件。 一个应用程序一旦启动,Windows便为该应用程序建立 一个应用程序一旦启动, 便为该应用程序建立 一个消息队列( 一个消息队列(message queue),开始且陆续地将与该 ) 应用程序有关的消息加入它的队尾。 应用程序有关的消息加入它的队尾。应用程序则要逐个 地将其消息队列中的队头消息取出,筛选出有用的消息, 地将其消息队列中的队头消息取出,筛选出有用的消息, 再指派给某个窗口过程, 再指派给某个窗口过程,由其对消息进行处理和做出响 从某种意义上讲, 应。从某种意义上讲,Windows的应用程序不过是一个 的应用程序不过是一个 消息处理器。事件就是被消息所驱动的。 消息处理器。事件就是被消息所驱动的。每个应用程序 内部必定有一段循环程序,负责检索其消息队列, 内部必定有一段循环程序,负责检索其消息队列,这段 特殊的程序称为消息循环( 特殊的程序称为消息循环(message loop)。 )
消息的数据结构在Windows中被定义为如下 中被定义为如下 消息的数据结构在 的记录类型: 的记录类型: TMessage = record Msg: Cardinal; WParam: Word; LParam: Longint; Result: Longint; end;
消息定义为如下的TMsg记录类型: 记录类型: 消息定义为如下的 记录类型 TMsg = packed record hwnd: HWND; message: UINT; wParam: WPARAM; lParam: LPARAM