贴那段出来 Delphi 6应用开发指南》
……………………………………………………………………………………
在实现部分实际上包含了一个声明,指出了对前述过程的实现。
function SendMessage
external user32 name 'SendMessageA';
external 子句表明了包含该过程的库的名字。子句external user32 意味着所用的库是user32.dll。如果在
Windows.pas 中查找user32,可以发现user32 被定义为常数‘user32.dll’。由于Delphi 已经声明了该过程,
如果您要使用,只需将Windows 单元加入到uses 子句中并调用该过程。试一试下面的例子。
1.创建新的工程(将创建空白的窗体)。
2.从组件面板的Standard 属性页双击TEdit 控件和TButton 控件。这样,在Form1 上将出现这些控件。
3. 在Object Inspector 中选定Button1 的Caption 特性。键入Toggle Selection 作为Button1 的标题。
4.在窗体上,双击Button1 以生成Button1 的OnClick 处理程序。向事件处理程序添加如下代码:
1. procedure TForm1.Button1Click(Sender: TObject);
第2 章学好面向对象的Pascal 42
2. const
3. StartPosition : Integer = 0;
4. EndPosition : Integer = -1;
5. begin
6. Edit1.SetFocus;
7. StartPosition := Not StartPosition;
8. EndPosition := Not EndPosition;
9. SendMessage(Edit1.Handle, EM_SETSEL, StartPosition,EndPosition);
10. end;
第1 行和第10 行代码是由Delphi 添加的。第3 行和第4 行定义了类型化常数。它们的行为特性与C++
的静态变量相似,在对该过程的调用之间其值保持不变。Edit1.SetFocus 将焦点设置到编辑控件,因为按钮
在单击时获得了当前焦点。第6 行和第7 行将StartPosition 和EndPosition 在0 和-1 之间切换。第9 行调
用了在Windows.pas 单元中声明的Windows API 函数SendMessage。前面提到过TWinControl 的每个后继
都含有一个Windows 句柄,它可以作为SendMessage 的第一个参数。EM_SETSEL 是预定义的Windows
消息。如果StartPosition 为-1 而EndPosition 为0,则文字被取消选定。如果值反过来,则文字被选定。
仅Windows.pas 单元中,就有大约30000 行的声明代码。Windows API 非常巨大,并且正越来越大。
必须使用参考资料,才能找到可用的东西。在实现新的过程之前,请花费一些时间在API 中查找。如果
Delphi 中没有,那它可能在其他地方的API 中。