首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 网络编程-> 移动开发教程
delphi背后---初学者参考之二(1)_delphi教程
作者:网友供稿 点击:0
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 

计算机语言一代一代地从机器语言发展到高级语言,从复杂到简单(其实也不简单),体现了计算机科学技术的发展。计算机语言越高级,就越抽象越人性化,与低层硬件的关系就越少,使用起来就越方便。但无论计算机语言如何高级,都是对操作系统层的抽象,因此我们总可以找出理解高级语言背后的规律,那就是:高级语言写的代码只是为了描述人们的需求,而这些代码要通过“翻译器”翻译成机器语言形式才能被机算机识别执行。所谓的翻译有两种方式:一是编译方式,代码事先通过编译器生成机器语言代码,再由操作系统调度执行,如Delphi语言、C++语言等;二是解释方式,该方式在计算内是边解释边执行,并不事先生目标程序,如Basic语言、脚本语言等。解释方式的特点运行速度慢,对计算机硬件要求比较高。

计算机语言定义描述人们需求的规则,在语言的背后是编译器或解释器。编译器或解释器的主要工作就是翻译代码,成为人与计算机交流的主要通道。这样在操作系统不变的情况下,各种开发工具各显神通,但最终都要生成计算机可执行的代码。所以无论用哪种计算机语言写的程序要判断其好与坏很大程度上依赖于该语言的编译器或解释器。Delphi的编译器仍然是目前世界上最先进最优秀效率最高的编译器。

从高级语言的特点来看,它们基本上都是对操作系统提供的服务接口封装,在此基础上加入自己的语言特性,如OOP、指针、内存管理模式等。

Delphi语言的整个架构来,我们写程序要么是直接使用VCL,要么是调用操作系统提供的API,要么是使用Com服务,又或是直接使用汇编语言完成我们的工作。

1. VCL

Delphi最核心最伟大的就是可视化组件库(VCL——Visual Component Library)和跨平台组件库存(CLX——aComponent Library for Cross-Platform),类似于Microsoft MFC,但其架构比MFC至少要先进两到三代。用Delphi编程你可以选择VCL也可以不用VCL一切从头开始。假设写一个建窗口并显示“Hello world”的程序,如果不用VCL,那么你得从调用APICreateWindow开始,这是一件多么麻烦的事,不过这还得看你的要求。这里只是说明用Delphi编程离开VCL并不是不行,如控制台程序。

VCL是一个功能强大的类库,它是Delphi语言面向对象特性的精华与结晶,类图结构如下:

这是一个缩略的类图结构,但很具有代表性,从类图中我们可以看出,VCL只有一个根——TObjct,它的每一个派生类只有一个祖先。这正是Delphi语言的面向对象的特点,所有类的最原始祖先是TObjcet,继承方式是单一继承。需要说明的是:

l         虽然VCL设计很经典也很庞大,但不要被这些所吓倒。说白了他就是一个类库,是很多有一定关系的类放在一起完成一定功能的类库,而这些类要么是封装WindowsAPI,要么是调用WindwsCOM服务,又或是使用汇编直接操作内存。前面说过,我们写程序可以用VCL也可以不用VCL,说明VCL并不是必须的。如果有必要,我们可以继承扩展其中任何一个类使之成为符合自己要求的类。如我们要扩展TPanal类,使鼠标进入和离开时能触发相应的事件(OnMouseEnter\OnMouseLeave),如QQ面板的功能。

u       从【File->New->Unit】新建一个单元。

u       写代码如下,然后保存该单元为MyPanelUnit

unit MyPanelUnit;

 

interface

  uses Classes, ExtCtrls, Messages, Controls;

  type

    TMouseActionEvent = procedure(Sender: TObject) of object;

    TMyPanel = class(TPanel)

      private

                             FOnMouseEnter, FOnMouseLeave:

                                  FouseActionEvent;

        //截获鼠标进入消息

        procedure WMMouseEnter (var Message:   

            TMessage); message CM_MOUSEENTER;

        //截获鼠标移开消息

        procedure WMMouseLeave (var Message:        

          TMessage); message CM_MOUSELEAVE;

      published

        property OnMouseEnter: TMouseActionEvent read

           FOnMouseEnter write FOnMouseEnter;

        property OnMouseLeave: TMouseActionEvent read

           FOnMouseLeave write FOnMouseLeave;

    end;

//注意"Register"中的"R"一定要大写,这是Delphi语言中唯一要注意大小的地方

procedure Register;

 

implementation

 

{ TMyPanel }

 

procedure Register;

begin

  //DelphiIDE中注册组件,显示在面板"MyControl"

  RegisterComponents(MyControl, [TMyPanel]);

end;

 

procedure TMyPanel.WMMouseEnter(var Message: TMessage);

begin

  //确定鼠标进入中是否有代码,如果有执行

  if Assigned(FOnMouseEnter) then

    FOnMouseEnter(Self);

end;

 

procedure TMyPanel.WMMouseLeave(var Message: TMessage);

begin

  //确定鼠标进入中是否有代码,如果有执行

  if Assigned(FOnMouseLeave) then

    FOnMouseLeave(Self);

end;

 

end.

u       然后点击【Component->Install Component…】,如下图:

   

在“Unit file name”中选中我们刚才的单元MyPanelUnit.pas,其他选项默认。然后点击“OK”, 在“Package dclusr.bpk will be build then install, Continue?”选择“Yes”,待编译安装完后保存,这样TmyPanel控件就被安装到Delphi中了。滚动Delphi的控件面板到最后,将会看到如下图的控件页MyControl

u       然后再新建一个工程,单击【File->New->Application】,把MyControl页中的MyPanel拖到Form上,按F11键,切换到Events页,如下:

TPanel比较一下,看是不是多了OnMouseEnterOnMouseLeave事件。双击OnMouseEnter,写代码如下:

procedure TForm1.MyPanel1MouseEnter(Sender: TObject);

begin

  ShowMessage(鼠标进入MyPanel1);

end;

然后按F9运行,移动鼠标到MyPanel1上,看一下结果如何。

就这么简单,我们扩展了TPanel,使其具有处理鼠标进入和移开事件的能力,所以VCL并不神秘,任何人都可以重写里面的组件(类),使之成为自己所要的东西。

l         Delphi支持接口继承,从某种意义上说实现了多重继承,如TComponent的定义如下:

TComponent = class(TPersistent, IInterface,

IInterfaceComponentReference)

l         不要拿抽象类创建实例。类中只要有一个方法是抽象方法,那么这个类就是抽象类。如TStrings定义如下:

    TStream = class(TObject)

  private

   

  protected

   

  public

    function Read(var Buffer; Count: Longint): Longint; virtual; abstract;

    function Write(const Buffer; Count: Longint): Longint; virtual; abstract;

   

  end;

一个方法的定义中只要有abstract关键字就是抽象方法。用抽象类来创建实例没有任何意义,因为ReadWrite并没有实现,如果调用则会出现为例。

 

(未完,请参看Delphi背后---初学者参考之二(2) )

(如需要转载,请注明出处及作者http://haitian.myrice.com)


文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·ems图片格式转换(java)程序
·使用hashtable实现的购物车-ASP教程,ASP应用
·Java中数据库事务处理的实现-JSP教程,Java技巧及代码
·Oracle数据库操作类(c#)-.NET教程,C#语言
·移动短消息技术演进与业务发展浅析
·ASP生成静态网页,学习CASE的用法,以及“权限”的一种控制方法-ASP教程,组件开发
·中国电信发展移动通信的制式与频段选择
·ASP中access数据库的路径问题-ASP教程,数据库相关
·td-scdma系统移动台接入过程浅析
·JAVA与数据库连接方法(三)-JSP教程,数据库相关
最新文章
·fireworks表现vista毛玻璃朦胧效果_fireworks教程
·google adsense哪些情况会被k号_网赚技巧
·减少google adsense展示单元并不能提高收入_网赚技巧
·google adsense“允许域名”新功能很有用_网赚技巧
·于源:办南京人“淘宝”的大三学生_站长访谈
·谈谈网站策划和网站运营方面的点滴经验_站长心得
·美国网站兵败中国的10大思路性执行错误_站长心得
·付款流程中的电话确认_google推广
·google adsense的部分规则的背面_google推广
·googleadsense富翁排行榜最猛每月赚30万美元_google推广
相关主题
  • delphi命令行参数_delphi教程
  • delphi多线程程序示例(与.net一样简单)_delphi教程
  • delphi面向对象支持特点--保护级类成员的应用_delphi教程
  • delphi中的包(三):bpl和dll_delphi教程
  • delphi中的包(一):关于exe的编译、连接和执行_delphi教程
  • 西部数码虚拟主机

    友情链接
    CNNIC 西部数码
    万网 自助建站
    虚拟主机 asp空间
    域名注册 域名
    域名申请 主页空间
    论坛空间 网站空间
    国际域名 虚拟空间
    空间租用 DDOS防火墙
    成都主机托管 四川主机托管
    主机租用 服务器租用
    网站目录 自助建站
    虚拟主机 网址大全
    软件下载
    自助链接
    虚拟主机资讯 特价虚拟主机
    版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
    关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
    发表评论 打印  刷新     关闭