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)
上一篇 2022年6月29日 上午8:46
下一篇 2022年6月29日 上午8:46


相关推荐

  • java map 线程安全_Map线程安全的四种实现方法

    java map 线程安全_Map线程安全的四种实现方法Map 线程安全四种方法 1 使用 synchronized 关键字 代码如下 synchronized anObject value map get key 2 使用 JDK1 5 提供的锁 java util concurrent locks Lock lock lock value map get key lock unlock 3 使用 JDK1 5 提供的读写锁 java

    2026年3月16日
    2
  • VSCode自动保存文件设置

    VSCode自动保存文件设置很多时候敲了一大堆代码 结果手贱或者电脑没电或者电脑突然崩溃 如果没有保存 只能说 GG 好在 VSCode 有自动保存代码的功能 而且有好几种自动保存的模式选择 设置方法如下 进入 gt 文件 gt 首选项 gt 设置 之后你可以搜索关键字 save 找到如下可以看到一共有 4 种选择 off 关闭自动保存 这是默认选项 afterDelay 会每隔若干秒保存一次 OnFocusChang 编辑器是去焦点时自动保存文件 比如说你打开了多个文件 你编辑好了 A 然后切换到 B 文件 那么此时 A 文

    2026年3月18日
    2
  • 一个perl线程使用方法的简单演示

    一个perl线程使用方法的简单演示

    2021年8月10日
    59
  • java和javac编译运行java程序

    java和javac编译运行java程序目录目录前言编译命令介绍javacjava代码编译与运行java类发现规则分离class和java文件参考链接前言给自己定了一个月学习JVM虚拟机的计划,不管有没有卵用,学点新东西总是好的。但是在学习过程中,我想在命令行测试一些JVM参数的时候,发现自己脱离了IDE,竟然无法直接编译java程序!!我的原则不能抱怨太多,像个Loser,不会的就花时间补回来。下面,主要是总结一些如何在

    2022年5月24日
    46
  • 《这是全网最硬核redis总结,谁赞成,谁反对?》六万字大合集

    后端需要知道的关于redis的事,基本都在这里了。此文后续会改为粉丝可见,所以喜欢的请提前关注。你的点赞和评论是我创作的最大动力,谢谢。《三天给你聊清楚redis》第1天先唠唠redis是个啥(18629字)一、入门Redis是一款基于键值对的NoSQL数据库,它的值支持多种数据结构:字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、有序集合(sortedsets)等。•Redis将所有的数据都存放在内存中,所以它的读写性能十分惊人,.

    2022年4月9日
    46
  • 腾讯元宝怎么导入excel

    腾讯元宝怎么导入excel

    2026年3月13日
    2

发表回复

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

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