| 网站首页 | JAVA文章 | AppServers | Web开发 | 应用开发 | 资源下载 | 论坛
    想学好编程,学好外语很重要  [enadd  2006年12月25日]        
设为首页 加入收藏 联系站长
您现在的位置: 编程笔记网 >> 应用开发 >> delphi >> API应用 >> 文章正文
充分利用WindowsAPI扩展Delphi函数            【字体:
充分利用WindowsAPI扩展Delphi函数
作者:不祥    文章来源:-    点击数:    更新时间:2006-12-12

width="84%">
充分利用WindowsAPI扩展Delphi函数

 Borland Delphi是与Visual Basic相似的可视化开发工具,但其功能比VB更加强大。例如,Delphi支持汇编语言和指针操作、全面支持Windows API函数及外部DLL的使用,使得它具有更广泛的应用范围。即使用于编制一些较小的应用程序,Delphi与VB相比看来不相上下,但由于Delphi是编译型的语言,其编译后的EXE文件可以真正脱离Delphi的环境独立运行,而VB 生成的EXE文件离开了VB软件包的一大堆DLL、VBX等文件可能会无法执行。而更重要的是,一般用户往往并不真正知道自己开发的VB程序到底使用了哪些DLL一类的文件,为了保证程序的正常运行,可能在最后的安装盘中包含了不少其实并不需要的文件。所以,一般用户用VB很难开发出真正实用的软件,难怪有人说VB是"先甜后苦"。Delphi实际上可以看作是VP(Visual Pascal),所以它的易学性也可与VB媲美。今年发布的Delphi2.0可以为Windows 95、Window s NT开发32位程序,使得VB 4.0的优势也不复存在。看来,在今后一段时间内,将会有更多的人使用Delphi开发Windows应用程序。在DOS下开发过软件的人都知道int 2lh的重要。与此类似,Windows应用程序也是离不开Windows API的,许多较底层的操作必须通过API函数来实现。为此,无论是C++、VB还是Delp hi都无一例外地支持API函数的调用,只是VB由于自身的特点所限制,仅支持部分API函数,而C++、Delphi则全面地支持API函数。相比之下,Delphi对API函数的调用最简捷,达到了与自身的内部函数几乎不分彼此的程度(只要求在interfaces中的user段中加上Windows即可,而这一步Delphi会自动为您做到),VB则相当繁琐。以调用获得Windows系统子目录的API函数为例,我们来看一下二者有什么不同:API函数格式的描述:

WORD GetSystemDirectory(lpBuffer,nSize)

VB 4.0调用时首先要做如下申明:
Declare Function GetSystemDirectory Lib"kernel32"(ByVal
lpBuffer As String, ByValnSize As Long)As Long

然后才能使用:
Dim lpBuffer As String *255
Size&=GetSystemDirectory(lpBuffer,255)

而Delphi只需像调用内部函数那样:
var lpBuffer:PChar;{API函数必须使用null结尾的字符串}
Size:WORD;{返回的系统子目录字符串实际长度}
begin lpBuffer:=StrAlloc(255);{预留字符串长度}
Size:=GetSystemDirectory(lpBuffer,255);end;

    由此可见,Delphi是可以充分利用Windows API来扩展其自身功能的。当然,在大多数情况下,Delphi本身的函数功能已经足够使用了。但是,在有些情况下,需要使用API函数来实现一些特殊的功能或完善Delphi的一些功能。下面提供两个实例来说明这一点。

    一、信息框函数MsgBox
    信息框是Windows应用程序中使用得较多的一种对话机制,它被广泛地用于提示、选择程序走向,是一个重要的程序控制手段。Delphi提供的信息框函数MessageDlg功能比较强,其最大优点是可以任意设定信息框的按钮(使用了集合类型),但其缺点也是很明显的,主要表现在标题字符串不能由用户自己设置;窗口弹出时寂静无声;按钮不能随着Windows的不同语言的版本显示不同的文字(例如无论在哪种语言版本下都只能显示"OK"、"Yes"等英文字符)。这些优点和缺点都是由于它是Delphi自己实现的,而不是通过调用系统API函数实现的,故不能使用系统的语言环境、多媒体等资源。这样,所开发的程序在中文版中显示信息框时与周围的窗口显得
极不协调。而VB在这方面却做得较好,所以我们按照VB的格式自定义一个信息框函数MsgBox。下面的函数都假定是在TForml中定义的。为了使用方便,我们首先在Interfaces段中定义一些符号常量:

    const
      {第一组:按钮内容选择}
    OKOnly=0;{仅显示"确定"按钮}
    OKCancel=1;{显示"确定"和"取消"按钮}
    AbortRetryIgnore=2;{"中止""重试""放弃"}
    YesNoCancel=3;{"是""否""取消"}
    YesNo=4;{"是"和"否"}
    RetryCancel=5;{"重试""取消"}
    {第二组:显示图标选择}
    Critical=16;{"STOP"图标}
    Question=32;{"?"图标}
    Excalamation=48;{"!"图标}

[1] [2] [3] 下一页  

文章录入:enadd    责任编辑:enadd 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
  • 在Delphi中使用动态图标

  • 应用程序敏感键的实现

  • 闪动标题栏

  • Delphi下编程实现中文输入法

  • 得到WINDOWS的SYSTEM路径

  • 快速将某一区域的颜色取反

  • 控制窗体

  • 限制FORM的大小

  • 动态修改显示器分辨率

  • 模拟按下某键

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 管理登录 |