说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

在Delphi中调用API函数

HTML文档下载 WORD文档下载 PDF文档下载
在Delphi中调用API函数

一、概述

Delphi作为一种面向对象的可视化开发工具,以其开发程序的高速度和编译代码的高效率越来越受到广大编程人员的喜爱。Delphi本身提供了包括界面设计、数据库操作、报表打印和Internet等在内的数十个组件,开发者使用它们可以非常容易、快速地制作出所要的应用系统,同时所需要的编程量却非常地小。除此之外,delphi同时秉承了borland公司产品一贯的编译效率高,速度快特色。

Delphi2.0版本以上的产品完全支持32位应用程序的开发,完全支持windows95和windowsNT提供的所有API函数。应用程序接口(API)是windows提供的任何Windows应

用可以访问的函数的集合。尽管Delphi已经提供了非常强大的开发组件(VCL),但灵活使用API函数一定可以使你的程序增色不少。

二、状态键的检查

当今不少流行软件的编辑窗口(包括Delphi的代码编辑窗口)的底部都有一个状态条用来显示一些状态信息,比如当前光标的位置、页码消息和状态键的状态。什么是状态键呢?我们知道键盘上大多数按键只有在按下时才能为系统所识别,而状态键的共同特点就是他们好似一个开关,每按一次就切换到相反状态直至下一次按键为止。通常键盘的状态键包括[NumLock],[ScrollLock],[CapsLock]和[Insert]这四个键,在编辑窗口中显示状态键的状态可以使你的界面更友好,更有利于方便用户。

使用delphi强大的开发功能和API提供的GetKeyboardState()函数,你可以轻松地在你的程序中实现状态键检测这一功能。

也许有些读者要问:我可以使用delphi提供的OnKeyPress函数捕捉按键动作来完成这一功能,又有什么必要调用API函数呢?这就涉及到状态键的另一个特点:即它的状态与程序运行无关。比如说你在word中按下insert键后再切换到delphi中输入代码,这个键的状态仍然保持不的状态仍然保持不变。而如果只使用OnKeyPress函数,那么当你的程序在后台运行时就无法捕捉到在前台程序中发生的按键动作,所以当切换到你程序时也就无法正确反映状态键的状态。因此需要使用API的GetKeyboardState()函数来检查键盘状态。当调用GetKeyboardState()函数时,你需要在程序中开辟一个256字节的缓冲区用来存储键盘上各个键的状态(最简单的方法你可以声明一个TKeyboardState变量)你可以根据缓冲区中相应位置的值来判断键盘状态,下表显示了系统常量和其相应的按键。(你如果想查看所有

的键值列表可以在help菜单选择windowsAPI中输入关键字virtualkeycodes,然后按下Show键)

常量按键名称

VK—INSERT[Insert]键

VK—NUMLOCK[NumLock]键

VK—CAPITAL[CapsLock]键

VK—SCROLL[ScrollLock]键

键盘缓冲区每一位都有特定的格式,对于状态键来说,最低位是1时表示状态键处于ON状态,你可以使用delphi提供的Odd()函数来确定这一位的状态。为了使程序显示正确的状态键的状态,你需要定期调用GetKeyboardState()函数来不断的查询键盘状态,实现这一功能最简单的方法是使用Timer组件。

下面举一个小例子来说明如何具体实现这一调用功能,在这个例子中我们将检查[NumLock]键的状态并把它显示在屏幕底部的状态栏。

从Component模板Win95页中选择StatusBar组件,按如下所示设置它的属性

AlignalBottom

Height20

从system页中的选择Timer组件并把它放入窗体,双击Timer组件弹出OnTimer事件的代码编辑窗口,按如下所示添加代码:

procedureTForm1.Timer1Timer(Sender:TObject

);

varKeyStates:TKeyboardState;

begin

GetKeyboardState(KeyStates);

begin

ifOdd(KeyStates[VK—NUMLOCK])then

StatusBar1.Panels.Items[0].Text:Κ′NUM

else

StatusBar1.Panels.Items[0].Text:Κ″

end;

我们可以检验一下程序的运行结果。运行程序,可以看到状态条中正确显示了当前的状态,切换到另一个程序改变[numlock]键的状态再切换回运行程序,可以看到状态条的状态已经改变。一般说来,在程序中加入状态条显示相应信息对于用户来说是十分方便的。

三、改变提示框(hint)的特性

许多程序在特定的控件上都有提示框,当鼠标在这些控件上停一定时间以后就可以显示提示框。在Delphi中实现提示框是非常容易的,只要设定相应的属性即可,这里就不详细讨论了。但通常的提示框都是以黄色矩形框的形式显示在对应控件的左下角,以下这段代码说明了如何使用API改变delphi中提示属性的一些特性。有一点需要声明的是代码中使用到的GetIconInfo函数只适用win32(也就是说你只能在delphi2.0以上的版本中使用以下代码)

把以下代码加入到主窗体的Oncreate事件中,加入代码后的主窗体的formcreate过程的代码如下所示:

主窗体的formcreate过程的代码如下所示:

procedureTMainForm.FormCreate(Sender:TObjec

t);

begin

...

Application.OnShowHint.ΚGetHintInfo;

end;

然后把以下过程声明加入到主窗体的public段

procedureGetHintInfo(VarHintStr:sting;VarCanShow:boolean;varHintInfo:THintInfo);

最后,在主窗体的implementation部分加入过程的实现代码,加入完代码的过程如下所示:

procedureTMainForm.GetHintInfo(varHintStr:string;varCanShow:boolean;varHintInfo:THintInfo);

var

II:TlconInfo;

Bmp:Windows.TBitmap;

begin

withHintInfodobegin//应该保证有控件使用定义了Hint属性

ifHintControlΚNILthenexit;

HintPos:ΚHintControl.ClientToScreen(Cursor

Pos);

//把光标坐标系由相对于提示改为相对于屏幕

GetIconInto(Screen.Cursors[HintControl.Cursor],II);

//获得有关提示控制使用的有关光标的信息

GetObject(II.hbmMask,SizeOf(Windows.TBitmap);

//获得有关光标的位图(bitmap)信息

ifII.hbmColorΚ0then

inc(HintPos.Y,Bmp.bmHeightdiv2)

//如果光标不包括彩色位图,增加Y方向

else

inc(HintPos.Y,Bmp.bmHeight);

dec(HintPos.Y,II.yHotSpot);

//减掉y方向的热点位置

DeleteObject(II.hbmMask);

DeleteObject(II.hbmColor);

//清除位置句柄

end;

end;

通过改变HintPos.X和Y的值可以在任意位置显示提示框。Word7.0中滚动纵向滚动条时页码序号总是显示鼠标在左方,用以上代码实现这一功能可以说是易如反掌。

继乔布斯时间胶囊出土 其儿时的家或成历史遗迹 微软向7亿Windows 7用户发布Internet Explorer 11预览版 乐视腾讯深度合作 超级电视26日易迅网首发 开源jQuery插件推荐 帮你快速构建单页网站 实时数据追踪?Salutron发布LifeTrak API Infoworld Bossie Awards:最好的开源App锦集 除了乔布斯的鼠标 值得装入时间胶囊的十大科技产品 2013中国互联网安全大会:云环境带来的安全隐患和机遇 2013中国互联网安全大会:软件安全新挑战 专访Line大中华区总裁:即使卖萌,也能深入人心 iOS开发者必备:四款后端服务工具 市场研究公司:iPhone5C/5S成本分别是173、199美元 对软件开发有利的5个敏捷编程方法 移动端性能大比拼:CSS Sprites vs. Data URI 三大峰会七大论坛,2013移动开发者大会将于11月在京举行 黑莓47亿美元收购的背后 微软或成最大受益者 搜索大战升级:360搜狗相互起诉对方不正当竞争 诺基亚将于10月22日发布6款新产品 平板Lumia 2520等 从17美元到50美元 Facebook股价上涨背后的两大关键 12个理由:为什么我会认为Android比iOS 7好! AMD推 &amp;quot;Mantle&amp;quot; API 欲释放GPU全部潜能 Salesforce架构:日事务过13亿,2.4万TPS的数据库峰值 久违的iOS,新鲜的SDK,豌豆荚发布云相册 喜大普奔:谷歌15岁了,生日快乐! 传福特CEO Alan Mulally目前最有希望执掌微软 微软计划将WP8和Win8应用商店合并?太好了! 响应开发者要求:Kinect for Windows SDK 1.8发布 OpenStack基金会BD总监:希望有更多的中国公司加入 CTO如何避免决策失控(三):从CEO角度看CTO的应对能力 IT界需求最旺的16项技能 PMC发布8系列RAID卡 找准国内互联网企业需求 中国网通真TNND不是东西 在win2003下怎么使用VOS 请教:如何通过VB的宏对Excel进行排序? 青岛发生4级地震,做个调查 对不起,第一次想给给过自己帮助的人分。但都出现这样的提示,请帮忙解决。 驱动不在了,求助!! 建好表后,如何添加数据?不要导入的方法 用dbstart启动时出现Can't find init file ......请指点! 我用17"的顯示器設為1024*768顯示,但pb9開發工具的字體很小,怎麼設啊? 对于解决站点使用基本验证的自定义客户端验证界面的一篇有价值的文章 运行java3D后这样的提示,怎么回事????? 高分求 关于DLL程式异步通知,类示xmlhttp 组件的onreadystatechange事件 初学者请高手指点迷经? Form上没有缺省按钮,在控件上Enter按键时,喇叭老是响,怎样解决? 如何实现导入数据库中的数据--急,知道的请帮忙 有关dataset的问题?? 使用用户控件提示找不到许可证信息,刚才都是好好的 数据库问题:有什么好的解决办法。 请问如何避免client连接server端出现WSAENOTCONN的错误? 自动注册ODBC数据源问题 请大家注意:遇到有人骂你的时候请通知斑竹,不要回骂。 dbsrv7.exe为何长时间的占用我的CPU? 菜鸟问题,麻烦帮帮忙!!!!!!!!! 在delphi中如何做ocx,大家帮我介绍一下。最好是能放在浏览器中用的。 各位大哥,请教一个菜鸟问题!!! 我电脑里装的win2000使用的时候经常死机,就是突然鼠标,键盘都没反应,只能重起, 谁能帮我判断一下会是什么原因? 如何取得TextField的选择区域? 请问浙江有高程培训班吗? 昨天有人扎了我三针...... CallableStatement 问题 “ActiveX 不能创建对象, 错误号429”,请问谁这个问题,急切求助 为什么建立虚拟目录时这样不行? <Context path="/xuu27" debug="0" docBase="C:\jsp\xuu27" reloadable="true" crossContext="true"/> 问搞版主竞选的版主们: web服务服务器端设置 我的一个页面中有三个frame,请问如何在其中一个frame中点击连接,关闭窗口。然后整个页面就关闭了. 刚学sql语言,有点不懂 一个很弱的问题 有谁知道开书店的进书渠道吗? 我的一个页面中有三个frame,请问如何在其中一个frame中点击连接,关闭窗口。然后整个页面就关闭了. 动态链表。。。 VB,excel关于单元格的问题 谁能介绍一下mysql的数据表结构 急!急!有关Resource DLL的问题。 我想考程序员,请问该买些什么参考书看?哪个网站有这方面的资料? 用VB开发的软件,我想。。。。 寻求有关电子商务的英文文章$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 为什么该语句不正常了?? 我写的分页程序,很短,请教错误! 认为自己的【昵称】够个性的,欢迎进来。。。 想请高手指点一下! 你天看到一篇文章,感觉不错。贴上来供大家欣赏。 宇宙究竟存在的形式究竟是怎样的?3Q我觉得有没这么一种可能,宇宙的存在形式跟人脑一样,如果你真要问宇宙有多大我不知道,我只是做一种猜想.我们人脑的脑细胞相当于宇宙中各类物质.脑 已知一次函数y=kx+b的图像经过点(-1,2),且不经过第一象限,那么关于x的不等式kx+b<2的解集是 弧长等于直径的圆弧所对的圆周角为A .360°/π B.180°/π C.90°/π D.45°/π 双曲线Y=5/X在第一象限的一分支上有一点C(1.5),过点C的直线CA:Y=KX+B与X轴相交于点A(A.0),若直线与双曲线在第一象限的另一个交点D的横坐标是9,1.求直线Y=KX+B的解析式 冬天的太阳有辐射吗? 独坐敬亭山的中心思想帮个忙 五月端午,心随龙舟把诗魂追赶,八月中秋,借皎皎圆月遥寄思念.——有这句诗联想到的古诗句是 是不是没盐了 澎湃是什么意思? 烤箱中层烤蛋糕,一膨胀之后太接近顶部发热管,15分钟就焦了怎么办 冬天太阳下影子周围的薄雾状辐射~此时,背对着窗子晒着太阳看书,突然发现自己的影子周围有一圈圈象薄雾的投影一样的东西从影子周围向外以水波状向外辐射开来,这是热量的散发吗~是大 热情澎湃的意思 我刚弄了只小鳄龟,背甲25CM,大约5斤重,能值多少啊? 我家没盐了怎么办盐 澎湃是什么意思啊 函数y=-5^-x与y=log5(x)的图像关于_____对称.重谢! 为什么夏天的太阳那么强?而冬天的却那么弱?为什么相差那么大? “云麻一号”有毒吗? 如何简单的将5.0V的电压变成2.8V的电压?另外再说说电流的变化,是变大还是变小还是不变? CAD问题,想问下怎么样在一个圆弧上面取点,比如从一个已知点选取一段弧长,比如5M的弧长或十米的就是在一个画好的圆弧上面反他等分,但是不是全部等分,要从一边往为起始然后等发的长度你 彩虹云点播有毒吗? 电源电压为8V保持不变,S闭合,电压表的示数为4.5V,则R1的电压为( )电压表和谁并联? 人体的各种运动大都是在什么的支配下,骨骼肌牵动骨围绕什么运动而产生的 越南云脚蜘蛛有毒么? 怎么将-11V电压转变成8V电压? 尐 这个字的拼音是什么? 人类已知最大星球 人类早就向往着到月球居住 已知半径为10cm的圆上,有一条弧的长是40cm,则该弧所对的圆心角的弧度数是 慈禧太后是个怎样的人物.谈谈你对其历史人物的看法.觉得她是个怎样的领导人.她做的对与错?说出你的见解.如果你有渊博的知识和独特的历史见解,那请你用精辟的语言来形容她. 飞离月球为什么先写人类向往的内容 主板可能被雷击了,具体怎么检测是不是被雷击了啊? 若函数f(x)的定义域为[a,b],且b>-a>0,求函数g(x)=f(x)-f(-x)的定义域 麻烦说一下方法 人类早就向往着到月球居住,神话《嫦娥奔月》就表现了这种美好的愿望.请你结合本文内容和你所了解的月球短文的题目是:人类为何对月球“情有独钟”人类早就向往着到月球居住,神话 人被雷击后死亡 如何证明是雷击所致, 澎湃的意思 我的期望月薪是****/月 一次函数y=kx+b的图像平行于直线y=-2x+3,且图像不经过第三象限,当该图像过点(b,b的平方)时,求该函数解析式 澎湃是什么意思啊啊 a no hi do wa da i ki la i o o ba ga de si xi h de RO3比RO如何 描写山水原野的成语 英语翻译 Xi Ya Wa Xie Nie Wa Ga Li Ma Si Da A Li Ga Do Go Yi Zai Xi Ma Si 为什么下雨打雷时不能在树下躲雨? 一个关于欧姆定律的问题:电压和电阻成正比还是电阻和电压成正比还是两种都对?老师上课说了一遍记不清了 wa da si,a na da ga,skiness...说说. 一定条件下,RO3n-和氟气可发生如下反应:RO3n–+F2+2OH-=RO4–+2F-+H2O.从而可知在RO3n–中,元素 与“妹”有关的成语 wa ga da RO3-+F2+2OH-=RO4-+2F-+H2O反应中R是什么元素 哪位同志可以帮小妹找一些关于托物言志的句子和人物品质的成语,一定一定要是散文哦,随便写什么的都好!描写人物品质的成语一定要多一点! 潮声()(),一()无()括号里填什么啊, 为何打雷时不能站在树下?难道站在树下比站在空旷的地方更危险吗? 苏轼的 水喻的翻译 信号与系统初学, 为什么打雷的时候不能站在树下? 英语翻译南方多没人.皆北方之学没者也 没盐怎么办了 胸怀——宽大( ) 潮声——澎湃( ) 唱着——歌声( ) 读着——文章( ) 灵巧的——眼睛( )美丽的——大海( )做事——偷偷摸摸( ) 鼾声——断断续续( ) 阿根廷:监狱财政吃紧 多人“捡漏”越澳大利亚中国学者举行优秀论文报告会巴基斯坦全国高度警戒防巴塔袭击海军实兵演习执行导演:远海训练只会加中国以主宾国身份亮相伊斯坦布尔国际书甘肃甘南部分医用设备闲置曝光 卫生厅老挝失事客机黑匣子全部打捞出水美军无人机剿灭巴基斯坦塔利班头目 塔德国与巴西共同向联合国提交有关反监控美军无人机剿灭巴基斯坦塔利班头目 塔巴塔头目之死重挫和平进程印度南部安得拉邦发生两列火车相撞事故内蒙古乌兰察布:停建豪华办公楼 接受浙江组团赴沪招贤 舟山重磅“潜水挖才普陀山南海观音文化节开幕 传统佛教活“微力量”成中国农村草根进入电子商务浙江普陀山千手公益以佛之名传递慈善缅甸少数民族武装组织峰会达成和平共识泰警方密切关注反特赦条例示威活动 严阿根廷总统脑部手术后康复良好北京首尔共办“中国日”活动 庆祝20万科在地产界掀起巨浪 股东头席之争再《早安美国》也在聊HyperAdap【今日看盘】注意3000点还需要反复调查报告:投资者情绪保持中性 最期待Kanye West会上身DHL短TVR游戏《布鲁克海文实验》不只是射击杭州大妈借2000万炒期货 涉非法吸在春分这天,700Bike带来了一款华润担心话语权旁落 “呛声”万科管理把脉2016开年宏观经济 房产投资反保监会修订中短存续期产品监管规则汽车也能玩相扑 《GTA Onlin美国和中国到底谁更依赖中东石油?宝能赞成华润倒戈 王石:有一天一定会深圳发文严禁“众筹炒楼” 对于存量业日本男人列“老婆最伤人的话”,哪的男挑来挑去,这些品牌竟然都属一家公司[洞见]许巍不再苟且,于是变成了于丹iPhone7真机谍照曝光耳机孔取消在日常生活的不确定性中,开启你的历险红薯大爷绑定微信支付 践行互联网+
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘