浅议Delphi中的Windows API调用-Delphi-优质IT资源分享社区

admin
管理员
管理员
  • UID1
  • 粉丝29
  • 关注4
  • 发帖数581
  • 社区居民
  • 忠实会员
  • 原创写手
阅读:154回复:0

浅议Delphi中的Windows API调用

楼主#
更多 发布于:2016-06-10 20:04



 为了能在Windows下
快捷开发
运用程序,Delphi对Windows的控件都进行了极好的封装,这么,咱们就
能够直接
运用Delphi的控件来编写程序,而不必
运用
格式、调用操作杂乱的API来进行开发,为咱们
节省了很多的开发
时间 。
可有时分这些控件处理不了咱们的疑问,这个时分咱们就只能
运用API了,也就是Windows的
运用程序接口 。这么,疑问也就随之而来了,API是用C++言语编写的,而Delphi的脚本言语是PASCAL,两者
运用的数据类型是不兼容了 。那么,怎么在Delphi中调用数据类型不兼容的API呢,这就是本文中我为咱们介绍的内容了 。
咱们在Delphi中最常用到的一个数据类型是String类型,可API并不
支持,那么当咱们需求从API中得到一个string类型的值时该怎么去做呢?看看下面的程序:
站长须知的查找引擎优化经历汇总轻松把握5个小窍门 把美女拍的更显瘦
漂浮的旋律 教你在海滨拍出唯美女神范电子商务网站成功的四大特色
function GetSysPath: string;
var
sTmp: string;
让新网站被查找引擎迅速录入的有用办法安卓整理内存空间
专业摄影师实战解说 影棚里的打光窍门邻家有女初长成 学拍温暖柔美人像写真
begin
result := ’’;
//调用WindowsApi得到Windows的体系途径
SetLength(sTmp,256);
GetSystemDirectory(PChar(sTmp),256); //这是一个API函数
SetLength(sTmp,StrLen(PChar(sTmp)));
result := sTmp + ’’;
end;
在该函数中,调用了API函数GetSystemDirectory,它的第一个参数是一个指向以NULL结束字符串的指针,在Delphi中,这种数据类型是PCHAR,所以这儿要进行数据类型变换,要写成PChar(sTmp)
。 咱们再看别的一个比如:
procedure TForm1.ChangeAppIcon;
var
icon: TIcon ;
begin
icon := TIcon.Create;
try
icon.Handle :=
ExtractIcon(application.Handle,pchar(’D:\WINNT\regedit.exe’),0); //这是一个API函数
if icon.Handle <> 0 then
application.Icon := icon;
finally
icon.Free;
end;
end;
该进程经过API函数得到一个
运用程序的图标,来动态改变现在程序的图标
。API函数ExtractIcon回来的是一个HICON类型,是一个指向图标的指针,假设写成application.Icon =
ExtractIcon(application.Handle, pchar(’D:\WINNT\regedit.exe’), 0); 编译
断定不经过,数据类型不
一致吗!application.Icon特点是Ticon类型的,咱们
能够
创造一个 Ticon,把API的回来值赋给Ticon.Handle,最终将ICON赋值给application.Icon,就处理了咱们的疑问

经过上面的比如,咱们
能够看到,Delphi并不直接
支持Windows中的数据类型,只能经过封装的
形式来
支持 。要娴熟地调用API函数,咱们
定然要
熟悉Delphi的封装机制,多看、多写,多去
实践,那么,咱们就

认随心所欲的调用API函数了 。
为了能在Windows下
快捷开发
运用程序,Delphi对Windows的控件都进行了极好的封装,这么,咱们就
能够直接
运用Delphi的控件来编写程序,而不必
运用
格式、调用操作杂乱的API来进行开发,为咱们
节省了很多的开发
时间 。
可有时分这些控件处理不了咱们的疑问,这个时分咱们就只能
运用API了,也就是Windows的
运用程序接口 。这么,疑问也就随之而来了,API是用C++言语编写的,而Delphi的脚本言语是PASCAL,两者
运用的数据类型是不兼容了 。那么,怎么在Delphi中调用数据类型不兼容的API呢,这就是本文中我为咱们介绍的内容了 。
咱们在Delphi中最常用到的一个数据类型是String类型,可API并不
支持,那么当咱们需求从API中得到一个string类型的值时该怎么去做呢?看看下面的程序:
function GetSysPath: string;
var
sTmp: string;
begin
result := ’’;
//调用WindowsApi得到Windows的体系途径
SetLength(sTmp,256);
GetSystemDirectory(PChar(sTmp),256); //这是一个API函数
SetLength(sTmp,StrLen(PChar(sTmp)));
result := sTmp + ’’;
end;
在该函数中,调用了API函数GetSystemDirectory,它的第一个参数是一个指向以NULL结束字符串的指针,在Delphi中,这种数据类型是PCHAR,所以这儿要进行数据类型变换,要写成PChar(sTmp)
。 咱们再看别的一个比如:
procedure TForm1.ChangeAppIcon;
var
icon: TIcon ;
begin
icon := TIcon.Create;
try
icon.Handle :=
ExtractIcon(application.Handle,pchar(’D:\WINNT\regedit.exe’),0); //这是一个API函数
if icon.Handle <> 0 then
application.Icon := icon;
finally
icon.Free;
end;
end;
该进程经过API函数得到一个
运用程序的图标,来动态改变现在程序的图标
。API函数ExtractIcon回来的是一个HICON类型,是一个指向图标的指针,假设写成application.Icon =
ExtractIcon(application.Handle, pchar(’D:\WINNT\regedit.exe’), 0); 编译
断定不经过,数据类型不
一致吗!application.Icon特点是Ticon类型的,咱们
能够
创造一个 Ticon,把API的回来值赋给Ticon.Handle,最终将ICON赋值给application.Icon,就处理了咱们的疑问

经过上面的比如,咱们
能够看到,Delphi并不直接
支持Windows中的数据类型,只能经过封装的
形式来
支持 。要娴熟地调用API函数,咱们
定然要
熟悉Delphi的封装机制,多看、多写,多去
实践,那么,咱们就

认随心所欲的调用API函数了 。








优质IT资源分享社区为你提供此文。
本站有大量优质Delphi教程视频,资料等资源,包含Delphi基础教程,高级进阶教程等等,教程视频资源涵盖传智播客,极客学院,达内,北大青鸟,猎豹网校等等IT职业培训机构的培训教学视频,价值巨大。欢迎点击下方链接查看。
Delphi教程视频
优质IT资源分享社区(www.itziyuan.top)
一个免费,自由,开放,共享,平等,互助的优质IT资源分享网站。
专注免费分享各大IT培训机构最新培训教学视频,为你的IT学习助力!

!!!回帖受限制请看点击这里!!!
!!!资源失效请在此版块发帖说明!!!

[PS:按 CTRL+D收藏本站网址~]

——“优质IT资源分享社区”管理员专用签名~

本版相似帖子

游客