首 页 教育新闻课件中心论文中心教学教案试题中心语文专题综合下载技术教程公务员  
设为首页
加入收藏
联系我们
您当前的位置:中国教育资源网 -> 技术教程 -> 软件开发 -> Delphi -> 技术内容 退出登录 用户管理

Delphi中API编程--在Delphi中调用API函数Delphi教程

论文作者:佚名  论文来源:不详  论文发布时间:2006-6-19 22:24:02  论文发布人:chjchjchj

减小字体 增大字体

 

<-SSE WIDTH=100% SSE->  Delphi作为一种面向对象的可视化开发工具,以其开发程序的高速度和编译代码的高效率越来越受到广大编程人员的喜爱。尽管Delphi已经提供了非常强大的开发组件(VCL),但灵活使用API函数一定可以使你的程序增色不少。

  状态键的检查

  当今不少流行软件的编辑窗口(包括Delphi的代码编辑窗口)的底部都有一个状态条用来显示一些状态信息,比如当前光标的位置等。通常键盘的状态键包括[NumLock],[ScrollLock],[CapsLock]和[Insert]这四个键,在编辑窗口中显示状态键的状态可以使你的界面更友好,更有利于方便用户。

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

  也许有些读者要问:我可以使用delphi提供的OnKeyPress函数捕捉按键动作来完成这一功能,又有什么必要调用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状态,你可以使用delph i提供的Odd()函数来确定这一位的状态。为了使程序显示正确的状态键的状态,你需要定期调用GetKeyboardState()函数来不断的查询键盘状态,实现这一功能最简单的方法是使用Timer组件。

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

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

 AlignalBottom

 Height20

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

  procedureTForm1.Timer1Timer(Sender:TObject);

  varKeyStates:TKeyboardState;

  begin

  GetKeyboardState(KeyStates);

  begin

  if Odd(KeyStates[VK—NUMLOCK])then

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

  else

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

  end;

  end;

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

  改变提示框(hint)的特性

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

  把以下代码加入到主窗体的Oncreate事件中,加入代码后的主窗体的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),ΝBmp);

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

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

 
[] [返回上一页] [打 印] [收 藏]  
 ∷相关技术评论  (评论内容只代表网友观点,与本站立场无关!) [查看发表评论...]
 
 中国教育资源网免费技术教程下载中心-站内广告 站内广告 中国教育资源网免费技术教程下载中心-站内广告 
 中国教育资源网站内搜索 站内搜索 中国教育资源网站内搜索 
 

   
 中国教育资源网免费技术教程下载中心-栏目导航 栏目导航 中国教育资源网免费技术教程下载中心-栏目导航 
· C · Delphi
· Java · vb
 
中国教育资源网免费技术教程下载中心-相关教程  相关技术 中国教育资源网免费技术教程下载中心-相关教程
· 具有不同字体的列表
· Delphi中易混淆的概
· 在Delphi中巧改窗体
· Delphi 中自做动态显
· 利用Delphi编程发送
· Delphi中怎样监视PO
· DELPHI和注册表Delp
· Delphi参考手册Delp
· 用Delphi 3.0编制MP
· 用Delphi制作动态有
 中国教育资源网免费技术教程下载中心-本月热门教程 本月热门 中国教育资源网免费技术教程下载中心-本月热门教程 
 
 中国教育资源网免费技术教程下载中心-本日热门论文 本日热门 中国教育资源网免费技术教程下载中心-本日热门论文 
 
关于本站 - 网站帮助 - 免费课件 - 美容 - 绿色软件 - 软件下载 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 网站留言
浙ICP备06010405号 Email:cnkjz@163.com 技术支持:名流设计
版权所有 Copyright© 2002-2004 名流