【delphi】基础知识
<p>本文参考自《delphi2010语法手册》</p><p>转至 https://www.cnblogs.com/thingk/p/3747541.html</p>
<p>1. 工程文件结构</p>
<p>源文件联系着unit单元,delphi主模块源文件格式为.dpr,其他模块为.pas,一个完整程序由一个.dpr和若干.pas组成。</p>
<p>2..dpr 程序结构</p>
<p>一个.dpr由程序头、、主程序块组成。一个典型工程文件如下:</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
<pre>1 program Project;
2 {$APPTYPE CONSOLE}
3 uses
4 SysUnits;
5 begin
6
7 end.</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
</div>
<p>程序头指示所编写程序名称,良好的程序,.dpr代码尽量少,尽量将代码分布在.pas中然后再在.dpr里调用。</p>
<p>在程序主文件使用到的所有.pas文件必须列在uses从句里。</p>
<p>用begin和end包围的一段代码称为一个代码块。工程文件含有一个主程序块用于存放主程序代码,工程文件中的全局标识符必须声明于begin之前。</p>
<p>3. 单元文件结构</p>
<p>程序的每个子模块称为一个单元,每个单元存储在一个.pas文件中,一个文件对应一个单元。单元文件后缀名.pas,每个.pas文件依次包括:单元名称、Interface关键字、implementation、、、关键字end。一个完整的.pas文件如下:</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
<pre> 1 unit Unit1; //单元名称
2
3 interface //interfae起始部分
4 uses ...
5
6 implementation//implementation起始处
7 uses.....
8
9 initialization //initialization部分起始处
10 .....
11
12 finalization //finalization部分起始处
13 .....
14
15 end. //单元文件结尾(end后必须以句号结尾)</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
</div>
<p>unit名称与.pas文件名称一致,一个.dpr中不能应用两个名称相同的.pas.</p>
<p>interface至implementation之间的部分称为interface部分。该部分可定义变量、常量、例程等。并非只有此处才可以定义标识符,但只有此处定义的标识符才能被其他文件访问(全局标识符)。此部分定义的例程只是一个原型,具体的实现部分则放在implementation中。uses关键字紧接着interface之后,两者间不允许有任何其他代码。</p>
<p>implementation至initialization之间的部分可书写例程的体代码,此处定义的比变量、常量、例程等,只能在本implementation单元使用,interface部分和其他单元无法使用。</p>
<p>initialization至finalization之间的部分可选,此部分的代码在程序启动时运行,若多个单元中都包含该部分,则按照工程文件uses顺序执行。</p>
<p>finalization部分可有可无,仅当initialization存在时才可使用此部分。程序退出时使用此部分代码,除非程序由Halt强行退出。当多个单元都存在此部分,运行顺序与initialization相反。</p>
<p>4. 单元语法与uses从句</p>
<p> </p>
<p> 5. delphi的数据类型</p>
<p><img src="https://images0.cnblogs.com/i/433790/201405/280959178696235.jpg" alt=""></p>
<p>简单类型包括:整形、字符型、布尔型、枚举、子界类型、实型。除实型以外,都是有序类型,即每个值在值域中都有一个序数。</p>
<p>6. 整形:</p>
<p><img src="https://images0.cnblogs.com/i/433790/201405/281006071038044.jpg" alt=""></p>
<p>7. 实型:</p>
<p><img src="https://images0.cnblogs.com/i/433790/201405/281007203068946.jpg" alt=""></p>
<p>8. 字符类型:包括ansiChar和WideChar,ansiChar使用一个字节表示一个字符,WideChar则用两个字节表示一个字符。二者之间不能相互赋值。</p>
<p>9. 布尔型:用于判断真假,只有true和false两种值。delphi内置4中布尔类型:Boolean/ByteBool/WordBoolLongBool,内存中分别占1、1、2、4个字节。</p>
<p>10. 枚举类型:</p>
<div class="cnblogs_code">
<pre>type
名 = (标识符1,标识符2,标识符3.。。。);</pre>
</div>
<p>11. 子界类型:</p>
<div class="cnblogs_code">
<pre>type
子界类型名 = 下界..上界</pre>
</div>
<p>结构类型包括:集合、数组、记录</p>
<p>12. 集合:</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
<pre>type
set1 = set of 有序值得集合
例子:
type
set1 = set of 0..10;
type
set2 = set of (red,green,blue);
type
set3 = set of byte;</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
</div>
<p>13. 数组:</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
<pre>静态:
一维:
type
myarr = Array of integer//序号是3、4、5值为integer类型
多维:
type
myarr = Array of Array of integer;
或
type
myarr = Array of integer;
动态:
type
dmyarr = array of char;
var
dal:dmyarr;</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
</div>
<p>14. 记录类型:</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
<pre>type
trec = record
mem1:char;
mem2:integer;
...
end;</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
</div>
<p>15. 字符串类型:</p>
<p><img src="https://images0.cnblogs.com/i/433790/201405/281035354475072.jpg" alt=""></p>
<p>16. 指针类型:</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
<pre>指针的声明:
var ansiStr :^AnsiString;
或先声明类型在声明变量:
type pansiStr = ^AnsiString;
var ansiStr:pansiStr;
指针的赋值:
方式有二,即将另一指针变量值赋给该指针变量,此两个变量指向同一个地址;或者将某个变量的地址赋给该变量。
@取址符 如@ansiStr
^取值符 如ansiStr^</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
</div>
<p>17. 变体类型:</p>
<p>variant</p>
<p>18.运算符</p>
<p>有序类型运算符:</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
<pre>ord:返回有序值在值域中的序数
如:ord('A') = 65
pred:返回指定值的前一个值
pred('B') = A
succ:返回指定值的下一个值
succ('A') = B
high:返回变量能够表示的最大值或某类型的上界
high(byte) = 255
low:与high相反</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
</div>
<p>数学运算符:</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
<pre>+
-
*
/
div 整除
mod求余</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
</div>
<p>逻辑运算符:</p>
<div class="cnblogs_code">
<pre>not 反
and 且
or 或
xor 异或</pre>
</div>
<p>位运算符:</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
<pre>not 按位取反
and 按位取且
or 按位取或
xor 按位取异或
shl 左移
shr 右移</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
</div>
<p>字符串运算符:</p>
<div class="cnblogs_code">
<pre>+将字符串连接</pre>
</div>
<p>集合运算符:</p>
<p><img src="https://images0.cnblogs.com/i/433790/201405/281059599473926.jpg" alt=""></p>
<p>指针运算符:</p>
<p><img src="https://images0.cnblogs.com/i/433790/201405/281101507445344.jpg" alt=""></p>
<p>关系运算符:</p>
<p><img src="https://images0.cnblogs.com/i/433790/201405/281102196032393.jpg" alt=""></p>
<p> </p>
<p>19. 条件语句</p>
<p> if语句</p>
<div class="cnblogs_code">
<pre>1 if <条件表达式> then
2 <语句1>
3 else
4 <语句2>;</pre>
</div>
<p> </p>
<p>20. 选择语句</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
<pre>1 Case 选择表达式 of
2 常量1:语句1;
3 ...
4 常量n:语句n;
5 Else
6 ...
7 End;</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
</div>
<p>21. 循环语句</p>
<p> 1》while</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
<pre>1 While 条件表达式 do
2 循环语句;<br><br>例:<br>while i < n do<br>begin<br>sum := sum+i;<br>i := i+1;<br>end;</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
</div>
<p> 2》Repeat</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
<pre>repeat 循环体
until 条件表达式
例:
repeat
i := i+1;
sum := sum+i;
until i = n;</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
</div>
<p><br> 3》for</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
<pre>for 计数器 := 初值 to/downto 终值 do
循环体
例:
for i := 1 to/downto n do
writeln('hello delphi');</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
</div>
<p>4》for...in</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
<pre>for v in set do
循环体
例:
var
myset :set of AnsiChar;
ch : AnsiChar;
begin
myset := ['1','2'];
for ch in myset do
writeln(ch);
end.</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
</div>
<p>for in还可以遍历数组、字符串、类、接口、记录。</p>
<p>22. continue和break语句</p>
<p> </p>
<p>23. 程序终止</p>
<p> exit:退出当前正在执行的程序块,不会退出整个程序,除非将其用在了主程序块(.dpr文件中)中。</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
<pre>procedure Mi;
begin
exit;
end;
或返回一个参数,该参数类型和函数返回类型一致
function Mi:string
begin
exit('str');
end;</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
</div>
<p> Halt:引发异常中断并通过中断直接退出整个程序。</p>
<div class="cnblogs_code">
<pre>procedure Mi;
begin
Halt;
end;</pre>
</div>
<p> terminate:delphi窗体程序中含有一个全局程序对象(一般是application),其中的terminate方法可在窗体程序的任何地方使程序正常中断并退出。</p>
<div class="cnblogs_code">
<pre>procedure TForm1.Button1Click(sender:TObject);
begin
Application.terminate;
end;</pre>
</div><br><br>
来源:https://www.cnblogs.com/fzzf5/p/14848237.html
頁:
[1]