问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

利用API函数开发DELPHI程序

发布网友 发布时间:2023-06-08 11:37

我来回答

1个回答

热心网友 时间:2024-10-31 03:05


Windows的API函数是应用程序开发的有力辅助工具,对它们的恰当使用,可大大增强和改进应用程序与系统打交道的能力,使自己的程序 真正具有底层操作功能。作为RAD工具的基础代表,BORLANDDELPHI虽然本身也已提供了大 量强有力的函数和过程,但在某些场合、要求下,使用API函数将使你的程序进一步得到改 善,并可拓宽范围,简化程序代码。
在DELPHI中引用API函数,和使用DELPHI本身的函 数、过程几乎没有区别。在DELPHI目录下有一个WINDOWS.PAS文件,凡是在其中声明过的API 函数,都可在编程时直接引用而无须另加说明。只是要注意,标准API函数都是以C或C++为 标准进行数据结构定义的,而DELPHI使用的是OBJECTPASCAL语言,因此在引用时应特别注 意参数和函数本身的数据类型。如一个API函数若为布尔值,则在DELPHI中就应以TRUE、FALSE 而不能用0、非0来对返回值进行判断。
下面以三个小例子来说明API函数在DELPHI中的 使用。
一、本地化消息框
想让自己的消息框显示“OK”、“Cancel”还是“确定”、“ 取消”?如果想使程序彻底本地化,那么还是放弃MessageDlg和ShowMessage吧——都怪DELPHI 没有。用MessageBox这个API函数照样方便。
使用语法为:
MessageBox(HWND:hWND,lpMessage:
PChar,lpCaption:PChar,uType:Cardinal);
各参数中,第一个为消息框所属的窗口句柄,第二 个为要显示的消息,第三个为消息框的标题,第四个为消息框的类型,函数返回值为整型数。
为使消息框有所归属,第一个参数设为当前窗口, 获取其句柄的方法是使用另一个API函数:GetActiveWindows(),且不需任何参数。
例1)Messagebox示例:
1.主要构件及属性的设置:
form1:caption:messagebox示例
bordericons:biMaximize和biHelp设为false
panel1:caption:文字部分Alignment:taLeftJustify
panel2:caption:图象部分Alignment:taLeftJustify
button1~button12:caption分别为:确定、确定取消、
确定帮助取消、是否、重试取消、终止重试取消、
信息、提问、系统图标、警告、停止、组合方式
bitbtn1:kind:bkClose
如图一所示:
2.事件说明:(详见源程序,下仅举两例)
{文字部分以button2click()为例}
procereTForm1.Button2Click(Sender:TObject);
begin
casemessagebox(getactivewindow(),
显示确定、取消框,例子,
okcancel)
ofidok:messagebox(getactivewindow(),
您按下的是“确定”按钮,
结果,mb_ok);
idcancel:messagebox(getactivewindow(),
您按下的是“取消”按钮,
结果,mb_ok);
end;
end;
{图象部分以button8click()为例}
procereTForm1.Button8Click(Sender:TObject);
begin
messagebox(getactivewindow(),显示警告图标,例子,
mb_iconwarning)
end;
二、改进Windows9x的系统登录的安全性:
Win9x的“用户登录”窗口可谓来者不拒,密码不 对照样可以“登堂入室”,系统为用户保留的个人设置等信息也就毫无保密性可言,通过查 看Profiles目录,可轻松地将其复制或删除。虽然Win95、Win98的应用对象是个人用户,但 在某些场合下,还是让登录窗口起点作用的好。
要使系统登录具有安全性,对非法使用者真正能 拒之门外,不妨用两个API函数来实现此目的。
例二)系统登录检查
1.主要构件及属性设置:
form1:caption:CheckUser
height、width:设为最小值
2.事件说明:
//定义变量
private
size:cardinal;
name:pchar;
entry:boolean;{Privatedeclarations}
procereTCheckUser.FormShow(Sender:TObject);
begin
size:=64;
name:=StrAlloc(64);
{检查用户名,判断是按了“取消”按钮还是键入了新用户名}
ifGetUsername(name,size)
thenifname=’wj’//‘wj’为笔者机器的登录用户名
{在此,若允许的合法使用者不止一个,还可利用关系运算指定
一个以上的用户进入。
如:if(name=’computer1’)or(name=’computer2’)
}
thenentry:=true;
close;
end;
procereTCheckUser.FormClose
(Sender:TObject;varAction:TCloseAction);
begin
ifnotentry
thenExitWindowsEx(EWX_REBOOT,32);
//若用户名不对,则重新启动Windows
end;
procereTCheckUser.FormCreate(Sender:TObject);
begin
entry:=false;//设定初始值
end;
编译完毕后,生成EXE文件,然后打开注册表—— 使用Regedit,找到HKEY_LOCAL_MACHINESOFTWAREMicrWindowsCurrentVersionRUN 行,添加键值名(如:CheckUser)及键值(EXE文件所在的完整路径)。如图所示:
好了,重新启动一次,没有正确的密码还能进入吗 ?
三.没有“媒体播放器”的声音播放
日前做了一个小程序,想在“关于”窗口加上一段 声音说明,但小小的“关于”FORM放上一个长长的、Visible属性需为False的MediaPlayer构 件实在别扭。东查西找之下,还是靠API函数SNDPLAYSOUND()解决了问题——从而摆脱了MediaPlayer 的“束缚”。例三)使用API函数控制声音文件的播放:(部分代码)
procereTaboutBox.FormShow(Sender:TObject);
begin
//播放当前目录下的welcome.wav文件
sndplaysound(‘welcome.wav’,snd_async)
end;
procereTAboutBox.FormClick(Sender:TObject);
begin
//停止播放
sndplaysound(‘’,snd_async);
end;
别忘了,在USES子句中加入mmsystem单元。如果只 需要播放声音,那么一条API函数就能实现功能的还用得着MediaPlayer来大动干戈吗?
总之,使用DELPHI的“聪明的程序员”们应该充分 发挥DELPHI调用API函数方便快捷的优势,好好利用API函数以更好地为自己程序服务。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
景德镇书香蔓城多少钱一平方? 银盛泰书香蔓城基本信息 景德镇书香蔓城是什么装修? 卫生间风水和健康的关系是什么? 卫生间窗户风水大忌 8种危害健康可怕浴室风水 易惹祸的八种卫生间格局,快来看看吧! 我最好朋友的婚礼 演员表 我最好朋友的婚礼职员表 浙大夏令营是干什么的 如何开发api接口? 修图买air还是mini 开发api需要做哪些准备工作 镀锌层破坏后喷复合漆修补后还会生锈吗 ...镀一层锌,再刷漆)放在户外,时间久了会不会生锈? 请问铸钢可以热镀锌吗?如果不可以的话,该怎么做防锈? 镀锌板烤漆会生锈吗 资产负债表中的应收,预收,应付,预付科目怎么填写 vivoy31怎么清除回音 阳中求阴的治法用于治疗( )。 阳中之阴的脏是什么 阳中社区属于哪里 阳中属于哪里 阳中是什么意思 婚内妻子和他人同居怎么判定 遭遇家庭暴力后,受害者该怎么做? 宣城附近一日游景点自驾游 宣城旌德文庙文昌塔介绍? 敢为天下先是什么意思? 租赁合同电子版要页码吗 用英语介绍Mickle Jackson WHO IS MICKLE JECKSON? ps2wwe2010怎么打人物?(别给我说下存档) 美国职业摔角联盟2010问题 为什么好多摇滚歌手他们的衣服或者身边的一些东西都是骷髅什么的!_百 ... 2019年中考英语写作范文:动物与人 经济环境包括 经济环境包括哪些因素 大家好!我想问一下,行政能力具体指的是哪些方面的能力呢? 淄博吃烧烤怎样才不被骗? 如何看待淄博的烧烤? 为什么说淄博烧烤是一种“神”的存在? 你真的了解淄博的烧烤吗? 全自动智能马桶的功能好吗 智能座便器品牌推荐智能座便器价格 电话号码尾号什么好 财富上升的招财手机号? 5万港币现汇取现钞要手续费吗 做孩子坏情绪的终结者 大肠煮多长时间 大肠煮多长时间才会烂 完全垄断行业价格歧视的原则