Delphi 教程

Delphi 教程1.点击Project->View Source 可以看到工程的代码program Project1;uses  Forms,  Unit1 in ‘Unit1.pas’ {Form1};{$R *.res}begin  Application.Initialize;  Application.CreateForm(TForm1, Form1);

大家好,又见面了,我是你们的朋友全栈君。

1.点击Project->View Source 可以看到工程的代码
program Project1;

uses
  Forms,
  Unit1 in ‘Unit1.pas’ {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end. 

其中的application就是最基本的对象 
它代表一个工程,可以全局的操作整个程序,application是定义在forms单元里的,你在用之前先引用forms.
虽然delphi是面向对象的,但是application是面向过程的,这是因为在程序刚建立的时候,是按顺序从上到下执行,此时还没有创建任何的对象,application是一个全局的过程变量.
它的重要方法有以下几个:
Initialize:对全局程序进行初始化.就比如说你有2个窗体,form1和form2,里面分别有1个全局变量,一般在人们的理解上,这些全局变量在form创建时才拥有实例 ,但是实际上在application.initializel的时候就有了 
第二个重要的方法是run:
它表明程序可以启动,注意不是“启动”,而是“可以启动”.这个地方是delphi命名不规范的地方 .
如果按规范写,应当是Application.CanRun:=True; 但是delphi是简写成了run.
接下来重要的方法是CreateForm:创建窗体.这个方法在使用dll内的窗体时更重要,因为只有它才能主动的修复dll入口,不然的话程序容易内存泄漏.
还有一个是ProcessMessages:这个方法可以让程序进入一个单独的线程,从而使占用的cpu减少,并且可以跟据需要建立其他的线程.对于一些像浏览器之类的程序,需要同时打开多个页面,或是其他的事情同时进行,这时就需要用ProcessMessages,不然程序将变得非常消息慢(换言之,消息就是线程的组成部分 )

在使用数据模块时 ,如果连接的数据库是access,则必须加入forms,activex单元,不然access接口会报错,不然access接口会报错,oracle也没有.在数据模块上一般放四种东西 (…,加密算法控件,这个控件在web service面板上 (SOP DOM),用于将xml文件进行dom加密 ).

第二个要讲的是unit:如果你的程序中有许多全局的函数,那么应当将它们放入一个新的unit中,并使用///进行注释.对于button.click等控件的事件可以不写注释,但是自定义的函数必须照///注释书写。你在函数名的上方输入 ///f ,它就会自动生成这个注释框架 ,你只要把内容填进去就行了 。

第三个要讲的是thread object,几乎所有的程序都不可能只有一个线程。对于一些需要在后台进行 ,并且不能打断前台工作的程序,必须进入线程。
unit Unit2;

interface

uses
  
Classes;

type
 
 abc = class(TThread)
 
 private
 
 protected
   
 procedure Execute; override;
 
 end;

implementation

procedure abc.Execute;

begin

end;

end.
必须要注意,Execute方法是抽象的,必须覆盖。但是如果你想给它加上参数,比如说Execute(i:Integer),就不能使用override,而是必须写在public下:procedure Execute(i:integer);reintroduce;方法后缀使用重发布。
在一个程序里,可以拥有多个线程,但是在线程冲突的情况下,必须使用synchronize方法来防止冲突,这个方法是定义在classes单元内的公共方法,你在任何情况下都能使用它。
(技巧:有些时候你可能会在窗体上放满控件,这样就选不中窗体了,这个时候可以点任何一个控件,然后不断的按ESC,这样它就会按父类的顺序一级一级向上跳转,最后会跳到窗体上 。)

第四个要讲的是dll 
这个技术基本上所有程序都会用到,因为你永远都不可能把所有的功能都写在一个exe里,如果功能太多,写在一起就无法维护,所以必须分开写。
结构:
library Project2;

uses
  
SysUtils,
  
Classes;

{$R *.res}

begin

end.

这个只是系统生成的,一般来说,还必须加入windows,messages,forms单元。如果你开发的dll给其他语言调用,还必须加上sharemem单元 。编写dll的方法和编写exe的方法完全一样。

控件类:
第一个重要的是actionlist。一般的编程语言,它的控件只有三个关键,属性,方法和事件,但是delphi还有一个动作 ,这就意味着它能更方便的处理复杂的事情。基本上所有的控件都有动作,它们被列在actionlist里面 ,根据你的需要可以调用它们。

第二个讲的是HTTPRIO,这个东西是用来操作webService的。webService是当前世界上最先进和有效的网络服务方式 。delphi通过httprio控件,可以调用一切存在的webService。 

第三个讲的是TCPServer和UDPServer。TCP用于点对点的传输,可以传文件,但是速度慢;UDP用于点对面的传输,不能传文件,但是速度快 。一般的网络通信程序中,将这2种协议放在一起用。单纯的发送信息用UDP,发送文件用TCP。它们的发送和接收方法都一样:通过SendBuffer进行发送 ,Adata.ReadBuffer进行接收。

再下一个,AntiFreeze。这个控件在开发网络应用时是必需的,在很多情况下,比如说QQ,可能会有多个用户同时向你发消息的情况,但是这些消息如果同时到达,就会引起阻塞。用antiFreeze控件可以将同时到达的消息放入一个线程,再按顺序读取,这样就避免了因消息的同时到达而引起的程序故障。

下面我给你讲解一整个单元
unit Unit1;

interface

implementation

end.
这是一个最简单的单元,它拥有单元名,接口部分,实现部分,最后用end.来结束。
接口部分用于进行定义,比如说类的定义,常量,变量定义,单元的引用,都能放在接口部分。
实现部分用于实现接口部分的类,也可以声明常量,变量或是引用单元,接口处引用和实现处引用的区别,就是接口引用没有类实例,而实现引用有类实例,并且接口处声明的常量,变量可被其他单元使用。对于一个单元,有时候需要initialization和finalization标识符,它们用于在单元载入前进行一定的操作,最常用的是

initialization

  ActiveX.CoInitialize(nil); 
finalization

  ActiveX.CoUninitialize;
finalization在单元被释放后执行,一般进行的操作是将单元内的残留对象清空。比如说单元内定义了form1,并且没有手动的进行free,则可以在finalization中写FreeAndNil(form1);

  ActiveX.CoUninitialize;
但是对变量的赋值不允许放在initialization部分,因为initialization是在单元载入前执行的,那个时候单元内的变量还未被创建。finalization在单元被释放后执行,一般进行的操作是将单元内的残留对象清空,比如说单元内定义了form1,并且没有手动的进行free 。
则可以在finalization中写FreeAndNil(form1); 在end.后面的代码,编译时被忽略。
也就是说end.后面写的代码,编译器不会检查,但是要注意一点,那些代码也会被编译到程序内。有很多人喜欢在end.后面加一些乱写的东西,这样编译后的程序在反编译器面前就显得非常混乱,使别人不容易激活成功教程,这是一种保护自己程序的手段 。 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/148392.html原文链接:https://javaforall.net

(1)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • navicate premium15 激活码(注册激活)[通俗易懂]

    (navicate premium15 激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlS32PGH0SQB-eyJsaWN…

    2022年3月26日
    461
  • 虚拟机安装centos7网络配置

    虚拟机安装centos7网络配置    在exsi主机上新安装了一台centos7,以下进行配置连接网络。    VmwarevSphere环境下网络标签一定要选择虚拟交换机类型,要不然即使是配置好网卡也连接不到网络如图1所示。如果是平时搭建在本地电脑实验使用的普通VMware软件,注意设置网络桥接,本地电脑网络使用的是无线则选择无线桥接,有线网络则。                …

    2022年5月18日
    33
  • 二叉树前序遍历、中序遍历、后序遍历、层序遍历的直观理解

    二叉树前序遍历、中序遍历、后序遍历、层序遍历的直观理解0.写在最前面希望大家收藏:本文持续更新地址:https://haoqchen.site/2018/05/23/go-through-binary-tree/    复习到二叉树,看到网上诸多博客文章各种绕,记得头晕。个人觉得数学、算法这些东西都是可以更直观简洁地表示,然后被记住的,并不需要靠死记硬背。本文的程序基本来源于《大话数据结构》,个人感觉是一本非常好的书,推荐去看。…

    2022年6月12日
    27
  • iOS10 iPhone5 10.3.3每次越狱后要做的事「建议收藏」

    iOS10 iPhone5 10.3.3每次越狱后要做的事「建议收藏」由于经常没电关机,越狱失效,就需要经常再越狱。越狱后要:1.越狱设备安装“AFC2”补丁。https://www.i4.cn/news_detail_1623.html2.安装AppSynchttps://www.i4.cn/news_detail_13094.html3.openssh安装完不管用需要重启,再越狱,afc2更改—从新安装4.电脑命令行连接设备sshroot@192.168.199.110alpine5.Clutc…

    2022年6月12日
    41
  • VMM TEST「建议收藏」

    VMM TEST「建议收藏」vmm_testisintroducedinvmm1.1.Toknowthevmmversionwhichyouareusing,usethiscommandvcs-R-sverilog-ntb_optsdtm        +incdir+$VMM_HOME/sv$VMM_HOME/sv/vmm_versions.svv

    2022年9月22日
    0
  • 路由器5g启用视频网络_聚合路由器是什么

    路由器5g启用视频网络_聚合路由器是什么5G版聚合路由器加速释放超高清视频传输应用随着物联网5G商用步伐的加速和5G网络建设的突飞猛进,2022年无疑成为5G向千行百业拓展落地的关键之年。作为“新基建”的领头羊,5G已凝聚产业链力量,蓄势待发为行业的智能化和数字化转型赋能,为新一轮经济增长提速。作为5G技术在超高清视频传输领域应用的领先代表,推出了最新一代5G高速物联网QYT-X1S聚合路由器,可支持构建点对点安全传输链路,支持移动/联通/电信混用,实现多达7条2G/3G/4G/5G/卫星、有线聚合,成为5G应用落地的重点项目之一。5G要

    2022年10月4日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号