Delphi中API编程-编译实现

转载 2012年02月01日 02:27:02

======================================================
注:本文源代码点此下载
======================================================

delphi作为一种面向对象的可视化开发工具以其开发程序的高速度和编译代码的高效率受到广大编程人员的青睐。尽管delphi已经提供了非常强大的开发组件(vcl),但灵活使用api函数一定可以使你的程序增色不少。

一、状态键的检查

不少流行软件的编辑窗口(包括delphi的代码编辑窗口)的底部都有一个状态条用来显示一些状态信息,比如当前光标的位置等。

通常键盘的状态键包括[numlock],[scrolllock],[capslock]和[insert]这四个键,在编辑窗口中显示状态键的状态可使你的界面更友好,更有利于方便用户。

要实现状态键检测这一功能,你可以使用微软提供的api函数:getkeyboardstate().对于这个函数,建议大家自己动手查具体含义,不过认识些英语的朋友硬是从字面理解也能知道其大致含义吧。当我们调用getkeyboardstate()函数时,你需要在程序中开辟一个256字节的缓冲区用来存储键盘上各个键的状态(最简单的方法你可以声明一个tkeyboardstate变量)你可以根据缓冲区中相应位置的值来判断键盘状态,下表显示了系统常量和其相应的按键。(你如果想查看所有的键值列表可以在help菜单选择windowsapi中输入关键字virtualkeycodes,然后按下show键)

常量按键名称

vk_insert[insert]键

vk_numlock[numlock]键

vk_capital[capslock]键

vk_scroll[scrolllock]键

键盘缓冲区每一位都有特定的格式,对于状态键来说,最低位是1时表示状态键处于 on状态,你可以使用delph i提供的odd()函数来确定这一位的状态。为了使程序显示正确的状态键的状态,你需要定期调用getkeyboardstate()函数来不断的查询键盘状态,而实现这一功能最简单的方法是使用timer组件。下面举一个小例子来说明如何具体实现这一调用功能,在这个例子中我们将检查[numlock]键的状态并把它显示在屏幕底部的状态栏。

下面就是具体的操作方法:新建个工程并分别托放statusbar和timer控件在主窗体上双击timer控件,在弹出的代码编辑窗口处添加以下代码

procedure tform1.timer1timer(sender: tobject);

var

keystates: tkeyboardstate;

begin

getkeyboardstate(keystates);

if odd(keystates[vk_numlock])then

statusbar1.panels[0].text := '开'

else

statusbar1.panels[0].text := '关';

end;

运行查看结果并人为改变numlock状态测试。同理其它键盘状态你可以如法炮制

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

许多程序在特定的控件上都有提示框,当鼠标在这些控件上停一定时间以后就可以显示提示框。在delphi中实现提示框是非常容易的,只要设定相应的属性即可。但通常的提示框都是以黄色矩形框的形式显示在对应控件的右下角,以下这段代码说明了如何使用api改变delphi中提示属性的一些特性。

把下面这句代码加入到主窗体的oncreate事件中,加入代码后的主窗体的formcreate过程的代码如下所示:

procedure tform1.formcreate(sender: tobject);

begin

……

application.onshowhint := gethintinfo;

end;

然后自己编写gethintinfo过程:

procedure gethintinfo(var hintstr: string; var canshow: boolean; var hintinfo: thintinfo);

下面是该过程的实现部分:

procedure tform1.gethintinfo(var hintstr: string; var canshow: boolean; var hintinfo: thintinfo);

var

ii:ticoninfo;

bmp: windows.tbitmap;

begin

with hintinfo do

begin

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

flashwindow(form1.handle,true);

if hintcontrol=nil then exit;

hintpos := hintcontrol.clienttoscreen(cursorpos);

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

geticoninfo(screen.cursors[hintcontrol.cursor],ii);

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

getobject(ii.hbmmask,sizeof(windows.tbitmap),@bmp);

if ii.hbmcolor=0 then

//这里注意下,想要改变hint提示框的位置。试着改变hingpos的值(效果验证)

inc(hintpos.y,bmp.bmheight div 2) //如果光标不包括彩色位图,增加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中滚动纵向滚动条时页码序号总是显示鼠标在左方,用以上代码实现这一功能可以说是易如反掌。

注:本人也是个windows编程的新手,对于上面的这些代码是我在百度上搜索到后自己重新编译后修改的,希望能给新手朋友们提供些方便。


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/

Delphi 实现 图灵机器人API(IDHTTP POST )

此功能所需的 Key及接口文档,都可以在图灵机器人的官网下载, 小伙伴们需要申请自己的图灵机器人账号。       申请方法请自行百度“图灵机器人”  。       登录账号后,在左侧的[机器人...

用API函数在DELPHI中实现“非典型”窗体

====================================================== 注:本文源代码点此下载 =============================...

在DELPHI中利用API实现网格内组件的嵌入

====================================================== 注:本文源代码点此下载 =============================...

Delphi 利用API实现网格内组件的嵌入

在DELPHI中利用API实现网格内组件的嵌入        Delphi中向TDBGrid添加组件是一件十分麻烦的事情。笔者在这里向大家介绍一种利用WIN32   API函数在TDBGRID中嵌入...

纯Delphi实现,Hook API实现进程隐藏代码!

标 题: 纯Delphi实现,Hook API实现进程隐藏代码! 作 者: lovenuo 时 间: 2006-09-03,10:19 链 接: http://bbs.pediy.com/sho...

delphi API实现socket通信示例

  • 2011年07月29日 10:10
  • 6KB
  • 下载

Delphi编程实现SQL Server挂起清除

当我们在重新安装Microsoft SQL Server 2000数据库的时候会发生错误,导致无法继续安装, 这样就必须重新启动电脑之后才可以继续安装,很麻烦, 其实只需要删除注册表中的一个名为P...

判断指定日期是星期几(delphi编程实现)

{ 作用:闰年指定日期是星期几。可以从公元1年1月1日算起。 完成时间:0:49 2011-3-9 环境:delphi7+winxp3 测试通过 思路:从公元1年1月1日(为星期一)算起, 将...
  • hl3464
  • hl3464
  • 2011年03月09日 19:52
  • 1318

Delphi实现串口编程收发短信

Delphi实现串口编程收发短信 分类: delphi 2008-03-28 15:21 890人阅读 评论(0) 收藏 举报 现 在网上有很多软件可以实现短信息服务,不外...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Delphi中API编程-编译实现
举报原因:
原因补充:

(最多只允许输入30个字)