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

在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中滚动纵向滚动条时页码序号总是显示鼠标在左方,用以上代码实现这一功能可以说是易如反掌。

LambdaNet:纯Haskell实现的人工神经网络库 专注模式识别,易道博识为海量信息输入提供便捷之门 【问底】Michael G. Noll:整合Kafka到Spark Streaming——代码示例和挑战 2014年手游和社交游戏行业重要趋势解读 腾讯副总裁罗道锋:共建全国最大安全云库 5分钟内数据精准共享 Connected Cycle 一举两得的智能自行车踏板 CES可穿戴产品前瞻:汽车厂商入局智能手表领域 果断Mark!国外程序员收集整理的PHP资源大全 Google 2015项目前瞻:智能隐形眼镜、Google X、Ara Swift的坑:如何实现enum的多选? Swift,其实没那么任性 如何利用单台服务器实现10万多个Git仓库托管 Swift的初始化方法 TIOBE 2015年1月编程语言排行榜:JavaScript成大赢家 为什么iOS开发不需要Storyboard? 仅有纽扣大小的开发板 Intel Curie “撒娇”的豌豆荚?被百度手机助手屏蔽太糟心! 【工具推荐】Pgcli—自动完成和语法高亮的Postgres命令行工具 CES 2015:挑一款机器人带回家? 夜行、睡眠与健康:CES 2015十款酷炫的可穿戴产品 Java 9中新的货币API 唯“简”不破,Apple Watch App的设计之道 Google Glass从X labs“毕业”,更换项目负责人 不进化,则消亡——互联网时代企业管理的十项实践 RedMonk 2015年1月编程语言排行榜:进击的Swift! 微信开放JS SDK,这场web巨变意味着什么? 盘点一些iOS开发技巧:Swift和Objective-C 2014年,那些“颜值”爆表的UI动画 《近匠》爱加密:谁说iOS应用不需要保护? SwiftColorArt:开源易用的Swift图片类库 人气爆棚 干货满满 中国电信天翼开放平台开放日圆满落幕 我在多文档的statusBar最右边显示了一个字符串.但是当new的时候,显示的字符串就消失了,要把子窗口全关掉才看得到,怎么办? 【vcmfc进来!】 请问那里错?????????? 如何把状态栏放大,里边的字也随之放大! 关于foxpro 的问题 谁能告诉我, TReportDBGrid是什么控件在哪有下载? 关于outlook的一个问题 怎么让TOpenDialog.execute打开的对话框显示小点? 如何把状态栏放大,里边的字也随之放大! 单文档程序中的视图类的OnUpdate函数是什么用途? 怎么安装 .tar.gz的包 大家看看我的几个软件 ibm下载的db2 8.1企业版或者个人版的有时间限制吗? 如何想把状态栏放大,里边的字也随之放大! 爱一个有这么痛苦吗? FLOAT如何表示为十六进制格式? IAP(在应用编程)请教? win2000 pro 安装中出现的怪问题,谁帮帮我?? 获取游览器端的操作系统和游览器信息?现等! 在dw中,怎样才能使用vs.net编写的网页正常显示??在线等待 请教关于VBA在WORD工具栏中的问题 win2000服务器启动输入密码后不久自动重新启动?怎么修复?系统还没有完全启动完。 C++builder精确到二位有效小数用什么函数????在线等候!!!! 急急急!现在想把状态栏放大,里边的字也随之放大! 我做了一个用户控件始终找不到不知道是什么问题,请大家帮忙帮忙. 寻找HUST计算机系大三.大四或研究生,有一事相求! linux下有什么好的java IDE吗? 如何组建电脑部!!!! Java如何Debug? 谁有关于Microsoft.XMLHTTP的详细使用手册 !!!急急!现在想把状态栏放大,里边的字也随之放大 请推荐几本学习sql-server的好书!!! 求助:sybase central 3.2 for ASE12.5 的问题?? 关于第二个硬盘的问题 请问我要开发一楼房的三维动画展示(象游戏一样) 哪位大哥知道哪儿可以下载四级模拟题或书籍 Bjarne Stroustrup 怎么念?有高手能给出音标吗?100分在线等待! 神秘的芭蕾舞鞋……《非人勿进!!!》¥%……·%·¥%·#¥%#·¥#@$%$#^%^%$$#@ 怎样做一个自己的DBNavigator? =====关于CDialog的一个简单问题===== 急救!子窗体问题!在线等待 如何把程序窗口显示在其他所有程序的前边 dbengine error: invalid blob length? 数据集打开问题 严重的问题???? 一个问题: 一个小问题,在线求助! 神秘的芭蕾舞鞋……¥%……·%·¥%·#¥%#·¥#@$%$#^% 无法进入系统,救救我吧 菜鸟问题,送分了!!! 得分小问题 I can see some apples in the picture.改为否定句 I really don't like volleyball.变一般疑问句 怎么变这是个填空题 是这样的 Do you ( ) ( ) like volleyball it does not matter who____i am talking to.A.who it is B who it is that C.it is who D.it is whom I can see some apples 否定句用怎么说 “乍临人生,你在哭,爱你的人在笑;生命终结,你在笑,爱你的人在哭 奶奶买回12个鸡蛋,过了一段时间后,吃掉的个数是还剩的3倍,还剩多少个鸡蛋 Put the milk into the blender.改为否定句 平行宇宙理论若是不可能存在,那是违背了什么定律?英国天文学家称找到了支持平行宇宙论的证据.通过对宇宙微波背景辐射图的研究,他们发现了四个由“宇宙摩擦”形成的圆形图案,这表明 余捉蟋蟀 汝奋臂出其间的意思 有一笔钱,可以买A种衬衣8件或B种衬衣12件.1件A种衬衣比1件B种衬衣贵20元.求单价多少元? 乍临人世,你在哭,爱你的人在笑; 生命终结,你在笑,爱你的人在哭有什么含义? candy的单复数区别 刚才我买了一件很贵的衬衫,但我忘拿走了翻译 小王从报社以每份0.4元的价格购进了a份报纸,以每份0.5元的价格售出了b份报纸,剩余的以每份0.2元的价格退报社,则小王卖报收入( )元. wloud you like some candy这为什么用some? 一件衬衫的价格是a元,一件西装比衬衫贵b元,买一件衬衫和一件西装要几元 曾经有人问我,你是真的爱她吗?然而,我笑了.说出看见这段话的 感觉 M1=死 M2=活 M1+M2=多少 Did you visit the m_____?there are a lot of old things. 谁能用力学的原理或者其他原理解释人为什么永远不可能提起自己 m1、m2在建筑图纸里代表什么意思? she used to be short(作肯定回答) 张大伯从报社以每份0.5元的价格购进了800份报纸,以每份0.8元的价格售出了一部分,剩余部分以每份0.2元的价格退还给报社,在这个买卖中,张大伯赚了60元,张大伯退还给报社多少份报纸?(用方 货币的M1, 春节的由来100字 there are [ ] fruits on the table.A.lots of B.lot of C.a lot D.on 英译汉在线翻译I allowed you to walk into my world,but does not allow you in my walked around the w Li Ming has some interesting books改为一般疑问句 There are a lot of vegetables and fruits on the table.这个句子有问题,答案上说把fruits 改成fruit,因为fruit是物质名词,不可数但是vegetables 貌似也是不可数的啊,怎么不改vegetables 求歌词里有`奥嘞哟嘞哟嘞`发音的英文歌曲好像是一首足球歌曲 饭店英语a pattyof broiled chopped 春节的由来(做手抄报用的)100字左右字少些!我说,字要少些!做手抄报! There are a lot of vegetables and fruits on the table.改错 求作文【我与好友共成长】.600-1000字,描写与同伴、好友交往过程中难忘的点点滴滴、酸甜苦辣.还要描述出友谊的美好、朋友的可贵,以及自己与同伴交往过程中成长的收获以及对友情的感悟 There are lot of things you should do.哪里有错 一个好的作息规律是怎样的?用餐、睡觉、工作. the babies ___ are very healthyafter whom the nurses lookwhom the nurses look after whom the nurses look whom the nurses looks after 爱死你啊嘞 以奥啊骂利利弄恩载 急 there are lot of tomatoes on the table(改病句)英语大神来 羽毛变成金红色的灰椋鸟在枝头蹦来蹦去 .树林内外,百鸟争鸣,呼朋引伴,叽叽啾啾.例:棕红色的水杉落叶厚厚的.棕红色的水杉落叶像给大地铺上了一层华贵的绒地毯. 两个名字组词、比如张杰、谢娜:娜就杰婚吧.娜样纯洁.等.鹏飞、霄雨 They are from the UK 改为一般疑问句,否定句,肯定回答和否定回答 Turn on the blender 的中文意思 Does she like the poein?改为复数句 余捉蟋蟀,汝奋臂出其间;岁寒虫僵,同临其穴.今予殓汝葬汝,而当日之情形,憬然赴目.予九岁憩书斋汝.虽为陈迹,然我一日为死,则一日不能忘的意思最好在一小时内回答我翻倍 一水平放置的容器内盛有水,当向该容器内放入一个重为5牛的木块时,水对容器底部的压力F1和容器对桌面的压力F2与放入木块前相比,其变化情况是A F1和F2的增加量都=5B F1的增加量<5,F2的增加 she walks in the same way that an ape does句中为什么用does? 余捉蟋蟀 汝奋臂出其间后面是什么? 容器内盛有水,若在容器内放进一个重5牛的木块,它浮在水面上.这时容器底部增大的压力是?A,5牛 B,大于5牛 C,小于5牛 D,无法判定没有溢出 MY mother (wash) the plates in the litchen every day 翻译:1.余捉蟋蟀,汝奋臂出其间.2.闻两童子音琅琅然,不觉莞尔,连呼则则. healthy food可数吗,后面写is 还是are 写《爱的教育》的人是哪国的? 被动是啥米意思嘞? there are a lot of things you can do.的意思 聊斋志异 翻译 余捉蟋蟀,汝奋臂出其间……这首文言文的大意是什么?请补充一下难懂字、词的释义. There are a lot of things you can do.是一个复合句.那么它的句子结构是如何划分的呢?最好能说明主句的主语,谓语,以及从句的主谓宾. i like baseball and volleyball变一般疑问句do you like baseball and volleyball?do you like baseball or volleyball?哪个对 简述《聊斋志异 席方平》一文反应了作者怎样的思想意识 嫦娥三号任务运载火箭启程 预计11月解放军用实战对抗提升战力 预想剧本出经济观察:中国化解产能过剩并非简单“打造两岸经贸合作升级版 ECFA后续美媒:失业者重找工作需要做的五件事外媒曝查尔斯不想当国王 王位或将越代美媒:中国能成为生物技术领域领导者吗美霸主地位逐渐丧失 “去美国化”引争港媒:华人强烈抗议“杀光中国人”言论俄外长与联合国叙问题特使讨论筹备叙问联合国-阿盟叙特使称伊朗应参加叙问题法国正式要求美国停止监听行为 希望低中国养老困局难解 老人:不知十几万够求同存异破壁垒 两岸携手打造中华文化日本欲解禁武器出口 妄图“一箭三雕”美媒:中美日竞争转向拼经济 争亚洲“日媒:美国家安全局曾请求日本协助监听美国海军基地发生枪击案 两人受伤凶手聚焦去美国化:是否为世界多极化发展必联合国-阿盟叙特使称伊朗应参加叙问题“绿色和平”成员登埃菲尔铁塔 悬空表ABC世贸,Anyone But C当我们变理智,我们如何谈爱情一刻钟就能从QQ借到钱 微众银行与新车车主,你是否被诱导,过度保养?细节见精巧:Ryan Schude摄【重磅】PPP模式来了!财政部、发改强力推荐6款减肥瘦身食醋妙方!千万别我们才不叫「xx段子集锦」这么庸俗的演艺圈大咖假面夫妻拼演技丨人前恩爱,中国男篮精妙配合取连胜 鹏金所助你轻简单几步 袜子穿出时髦感流媒体服务Wuaki.tv登陆奥地利【趣味】女星没有PS的高清图,不慎外汉王:不成苹果便牵手苹果一起推翻有关性虐的7大谣言Xperia Z4即将到来?索尼CE一个四十岁的人给你提个醒 难得好文精锐教育布局K12 千万投资一米辅导招商银行法规专家支招P2P网贷业务国产手机出货量同比大跌25%工作邮件,你真的知道该怎么写吗?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘