Delphi背后---初学者参考之二(2)

2016-02-19 12:38 10 1 收藏

在这个颜值当道,屌丝闪边的时代,拼不过颜值拼内涵,只有知识丰富才能提升一个人的内在气质和修养,所谓人丑就要多学习,今天图老师给大家分享Delphi背后---初学者参考之二(2),希望可以对大家能有小小的帮助。

【 tulaoshi.com - 编程语言 】

(续Delphi背后---初学者参考之二(1) )2 Windows API

API(Application Programming Interface)应用编程接口,所有的计算机语言都要用到它。API是什么?API是程序使用操作系统提供的服务的一个途径,我们大多数的编程都不直接操作硬件,而是调用这些API,再由操作系统直接操作硬件,这样的好处是我们编程时不必考滤与硬件兼容的问题,更重要的是从操作系统层实现了代码共享。所以,在编程时如果能用API实现的功能,我们尽量用它。

l         Delphi如何使用Windows API?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

在日常开发工作中,我们经常要使用Windows API函数,那么API函存在在哪里呢?我们可以这样理解,API函数就是封装在Windows系统提供的DLL系统文件中。如我们经常使用的Beep过程(响铃),就是调用Windwos系统目录下的user32.dll中的MessageBeep实现的;SendMessage(发消息)就是直接调用user32.dll的SendMessageA。Delphi使用频率最多的Dll是:advapi32.dll、kernel32.dll、mpr.dll、version.dll、comctl32.dll、gdi32.dll、opengl32.dll、user32.dll、wintrust.dll、msimg32.dll。

那么Delphi是如何使用这API函数的呢?既然API函数存在于系统的DLL中,那么我们就可以像调用自己写的DLL一样调用API函数啦。调用DLL函数有两种方式,一种是静态方式,一种是动态方式。调用Windows的API都是采用静态方式,为什么呢?这是因为这些DLL是操作系统提供的最基本服务,操作系统在启动时就已经加载到内存中了,并且操作系统也大量的使用他们。

 

l         API与日常编程

Delphi封装了Windows的大部分API函数(主要在Windows.pas单元中),应该说可以完成我们的大部分工作,我们一般不直接调用API函数。但有时有特别要求时,我们可能就要调用一些Delphi没封装过的API,有时甚至会调用Windows没公布的API函数。那么如何调用这些API函数呢?就像前面说的,使用静态方法调用就好了。更详细的调用请参看相关的资料。

调用这些Delphi没封装的API函数关键是要知道参数。可以查阅看最新的MSDN或相关的资料。

l         API与VCL

Microsoft的MFC大量的封装地Windows API,VCL也不例外。VCL功能的实现大部分都离不开Windows API,要么是直接调用,要么是经过简单的封装再调用。如TControl的Repaint的实现(Control单元中):

procedure TControl.Repaint;

var

  DC: HDC;

begin

  if (Visible or (csDesigning in ComponentState) and not (

csNoDesignVisible in ControlStyle)) and (Parent nil) and

    Parent.HandleAllocated then

    if csOpaque in ControlStyle then

    begin

//直接调用user32.Dll的GetDC

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

      DC := GetDC(Parent.Handle);

      Try

        //直接调用gdi32.Dll的IntersectClipRect

        IntersectClipRect(DC, Left, Top, Left + Width, Top +

Height);

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

                // Parent.PaintControls调用大量的API

        Parent.PaintControls(DC, Self);

      Finally

// 直接调用user32.Dll的ReleaseDC

        ReleaseDC(Parent.Handle, DC);

      end;

    end else

    begin

      //以下两个经过封装调用

      Invalidate;

      Update;

    end;

end;

可见VCL中处处都有API,我们从另外一个面来理解VCL就是:VCL就是大量封装API函数的类库,这样的结果就是使我们更容易使用API,不必关心那些烦人的API参数。

 

3 Delphi与Windwos COM服务

COM是什么东西?COM(Component Object Model),组件对象模型,它是基于Windows平台的让不同的独立对象能相互通讯的不受任何计算语言约束的软件组件模型,它定义一组API和一个二进制标准。这个定义比较抽象,首先它是一种组件模型,定义了一种组件对象规范,实现这个COM模型的对象就是COM对象。COM对象是通过接口(Interface)来实现访问的,一个COM对象可以包含一个或多个接口,这些接口构成了COM对象的功能,你可以像访问VCL对象方法一样访问COM对象的接口方法。COM对象的目的是实现资源共享,它在二进制代码级别实现了共享,所以它可以用不同的编程语言来实现,也可以由不同的编程语言来调用,这类似于DLL(其实COM的思想

来源:https://www.tulaoshi.com/n/20160219/1601342.html

延伸阅读
标签: ASP
  可以使用 @ENABLESESSIONSTATE 指令关闭网页会话跟踪。会话跟踪维护由单个客户端发布的一组请求信息。如果您的网页不依赖 会话信息,则关闭会话跟踪可减少 IIS 处理脚本的时间。 语法 <%@ ENABLESESSIONSSTATE=True|False %  
标签: 化妆
化妆,不管是爱美的女生还是喜欢随意的女生,都需学会的技巧。每个女人都想学会化妆,化妆其实并不难,关键是要学会使用 化妆技巧 。只要学会了这些技巧,化妆就变得很容易,让你在大众的面前呈现一幅好妆容。那今天小编为你揭秘几大 化妆小技巧 ,让你日后可以轻松“妆”扮自己。 不可低估褐色系眼影的神奇力量 在整个眼皮都...
标签: Web开发
    差不多每天都有人问“什么是 XML”,“XML 能做什么”,“XML 能不能替我做这个”,“XML 会取代什么” 等等诸如此类的问题。由于最近一段时间稍微对 xml 使用了一下,我来谈谈自己的感觉。这些经验都很浅显,任何一个用过 xml 的人都有,并且见仁见智,只不过我算刚刚走过这段路,对自己一开始的困惑,误解还记得清,所以...
标签: 化妆
对于很多新手来说,化妆本来就是难事,如果化妆时搞砸了,上班、约会要迟到了,没时间重画怎么办?那初学者如何化妆呢?下面教你简单快捷的4招技巧,解决常见的化妆问题。 初学者如何化妆 初学者如何化妆一、牙齿沾到唇膏 涂完唇膏后,用纸巾按在唇上吸干唇膏,用手指放到纸巾上尽量往嘴里压,然后慢慢拉出来,这样就可以把沾到嘴唇内侧...
本文是创建HTML文件的初级读物。HTML 是 WWW(World Wide Web )中使用的超文本标记语言。本指南的目的是介绍如何使用HTML和创建 web 文件。本文中的链接指向一些附加的信息。你还可以到你本地的书店查看一下,那里可能会有很多有价值的关于 Web 和 HTML 的资料。 前言 术语 WWW World Wide Web Web World Wide Web SGML Standard Generali...

经验教程

803

收藏

89
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部