和操作系统对话其实很简单──即刻感受APL函数的应用
IT商界
编者按:你了解了一点编程知识,但还想进一步提高,想做出更灵活、更实用、更具效率的应用程序,那你一定要学习如何在程序中调用API函数。作为一个编程初学者来说,API函数可能很神秘,其复杂的语法看起来令人生畏。其实在掌握了调用API函数的规律之后,一切就变得简单起来,你只要通过API函数向操作系统说明来意,剩下的就交给操作系统了……
所用工具:Delphi5/6/7。
要求:Delphi刚上手,懂得Delphi的一些基本概念,想进一步了解用Delphi调用API函数的相关知识。
目的:大家都知道,通过双击Windows桌面右下角或者“控制面板”里的“日期/时间”小图标,可以实现对系统日期和时间的设置。现在就要向大家介绍如何通过程序调用API函数实现对计算机系统日期和时间的设定。
(以下程序在Windows2000专业版+Delphi5下调试通过)
第一步
启动Delphi,新建一工程,在Form上分别放几个Label控件,并把控件的Caption属性分别设置为:“用API函数设置时间”、“年:”、“月:”、“日:”、“时:”、“分:”、“秒”。然后再在Form下面放置两个Button控件,Caption分别设置为“确定”、“退出”,如图1所示:
由于我们要更改的是年、月、日、时、分、秒,所以对文本框内输入的内容有所要求:只能是数字。且有位数要求,这里我们选择使用MaskEdit控件。它在控件面板的Additional页(如图2),选中之后,分别放在6个Label控制之后,Name属性分别为“MaskEdit1”、“MaskEdit2”、“MaskEdit3”、“MaskEdit4”、“MaskEdit5”、“MaskEdit6”。
现在我们要对每个MaskEdit的EditMask属性做一个设定,以达到控制MaskEdit控件文本框内输入内容的目的。以“MaskEdit1为例,选中MaskEdit1,双击属性中的“EditMask”,弹出对话窗口“Input Mask Editor”,将“Input Mask”选项设为“!9999:1:_”,意为只能输入4位的数字用以表示将要更改的年份(如图3)。
按照上述方法依次设置其他几个MaskEdit的“EditMask”属性。
提示:MaskEdit控件主要用于一些有格式要求的数据的输入,如电话号、代号等。
第二步
接着双击Form打开程序的单元(Unit),在uses部分看到下列代码:
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls, Mask;
提示:单元是一些经常用到的程序的库。Delphi为程序员提供了大量的单元,只要引用相应的单元就可以使用其中的标准函数。我们即将使用的API函数SetLocalTime(),就是属于Windows单元,这个单元一般程序自动将它添加到uses部分,如果你使用的API函数不属于Windows单元,一般要在这里添加进去。初学者往往由于没有注意到这里,而导致程序调试通不过。
第三步
最后在Button1的OnClick事件中加入下列代码,实现对系统时间的修改:
procedure TForm1.Button1Click(Sender: TObject);
var Input_Time: TSystemTime;
begin
Input_Time.wYear:= strtoint(MaskEdit1.text); //年
Input_Time.wMonth:= strtoint(MaskEdit2.text); //月
Input_Time.wDay:= strtoint(MaskEdit3.text); //日
Input_Time.wHour:= strtoint(MaskEdit4.text); //时
Input_Time.wMinute:= strtoint(MaskEdit5.text); //分
Input_Time.wSecond:= strtoint(MaskEdit6.text); //秒
SetLocalTime(Input_Time); //设置新的日期、时间
end;
其中Input_Time是我们声明的一个TsystemTime类型的变量,我们通过把MaskEdit控件内输入的数据分别赋值给变量Input_Time相应的元素。然后再通过我们今天SetLocalTime更改系统日期和时间。变量Input_Time还有两个元素WDayOfWeek、 wMilliseconds,我们这里未做设定。
提示:Strtoint是把字符串转换成整型的函数。
第四步
就这样,一个设置计算机系统时间的程序就做好了,和操作系统直接“对话”是不是很爽?程序编写完,一定要通过文件菜单下的“Save all”进行保存。
提示:这个程序必须修改我们讲到的6种时间参数才会有效,那么如何编写一个只修改其中一种时间参数的程序呢?我们下期会告诉大家。
现在你或许会说:我才学会一个API函数呀,那么多的API函数怎么学呀?其实,API函数不用记,只要知道如何调用,需要用的时候去文档查资料就行了。随着你的编程知识的不断积累,编程经验的不断提高,你对API函数的了解会越来越深的,你的编程水平也会得到很大提高的。
小知识:认识API
API即Windows应用程序编程接口(Application Programming Interface),它由一系列的函数构成,这些函数是微软公司为了方便基于Windows平台上的开发而编写出来的,我们可以通过直接调用这些函数来执行一系列的操作。
API函数是构筑整个Windows框架的基石,只有充分理解和利用API函数,才能深入到Windows的内部,充分发挥各种32位平台的强大功能和灵活性。在Windows程序设计领域处于发展初期时,Windows程序员可使用的编程工具惟有API函数。现在的一些开发工具中提供了大量的类库和各种控件,它们部分地替代了API的神秘功能。事实上,这些类库和控件都是构筑在Windows API的基础上的,但它们使用方便,加速了Windows应用程序的开发,所以受到程序员的普遍采用。如果学好编程工具提供的类库和控件好比修炼“外功”,那么学好API函数好比修炼“内功”,只有内外功兼修,才可能成为编程高手。
首先了解我们将要使用的API函数SetLocalTime(),它的功能是设置本地计算机的日期和时间。该函数的输入参数是一个TsystemTime类型的变量,TsystemTime类型是从记录(record)类型继承而来的。其声明如下:
type
TSystemTime = record
wYear: Word;
wMonth: Word;
wDayOfWeek: Word;
wDay: Word;
wHour: Word;
wMinute: Word;
wSecond: Word;
wMilliseconds: Word;
end;
从上面的类声明中得知,TsystemTime类型共包含wYear、wMonth、wDayOfWeek、wDay、wHour、wMinute、wSecond、wMilliseconds8个元素,我们可以声明一个TsystemTime类的变量,然后更改其中的一个或多个元素,再通过函数SetLocalTime()以达到更改系统时间的目的。
其中,记录(record)类型是Delphi的一种数据类型,可以通过SystemTime.wYear来访问SystemTime的wYear元素。



