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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • sqlserver事务锁死_sql触发器格式

    sqlserver事务锁死_sql触发器格式一、触发器触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表 事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,当对一个表 进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务 规则等。 触发器可以从 DBA_TRIGGERS ,USER_TR…

    2022年8月18日
    6
  • Java 拦截器

    Java 拦截器一、引言  既然要用拦截器,首先先得简单了解一下什么是拦截器:  概念:java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action执行前阻止其执行,同时也提供了一种可以提取Action中可重用部分代码的方式。  作用域:动态拦截Action调用的对象(也就是我们的controller层)  我们日常开发中,经常会遇到这个场景:在访问系统功能前,需要用户登录,不登陆的话无法使用我们的系统,那么如果在每个方法

    2022年6月9日
    240
  • kong组件_Kong

    kong组件_Kong1、简介Kong是一个企业级服务网关,底层是使用lua语言,整合Nginx实现了强大的服务转发,路由,验证功能,1.2官方描述KongwasoriginallybuiltatMashapetosecure,manageandextendover15,000APIs&MicroservicesforitsAPIMarketplace,which…

    2022年6月26日
    30
  • android:layout_gravity和android:gravity的区别

    android:layout_gravity和android:gravity的区别1.首先来看看android:layout_gravity和android:gravity的使用区别。android:gravity:这个是针对控件里的元素来说的,用来控制元素在该控件里的显示位置。例如,在一个Button按钮控件中设置如下两个属性,android:gravity=”left”和android:text=”提交”,这时Button上的文字“提交”将会位于Button的左

    2022年7月26日
    5
  • vue的安装和使用_vue-element

    vue的安装和使用_vue-element前言Vue(读音/vjuː/,类似于view)是一套用于构建前后端分离的框架。刚开始是由国内优秀选手尤雨溪开发出来的,目前是全球“最”流行的前端框架。使用vue开发网页很简单,并且技术生态环境完善

    2022年7月29日
    8
  • Java 八大基本数据类型

    Java 八大基本数据类型1.bit就是位,也叫比特位,是计算机表示数据最小的单位2.byte就是字节3.1byte=8bit,00011100,一般用两个16进制来显示,所以我们经常看到1个字节显示为1c4.1byte就是1Bbyte[]bs={(byte)0xff,0x0F,0x1F,0x2F,0x3F,0x4F,0x5F,0x6F};for(inti=0;i<bs.le…

    2022年7月8日
    20

发表回复

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

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