第1章 Delphi XE8基础知识
Delphi支持:动态数组,方法覆盖
BDS: Borland Developer Studio
Getit Package Manager: 简易的管理代码和组件
菜单栏: Refactor(重构)
非可视组件:如TTimer,TOpenDialog等
每个Form都对应要给 Unit文件,但是每个Unit文件不一定对应一个窗体。
implementation
{$R *.dfm}
-
$R
用于加载一个外部资源文件 -
第二行代码表示把
*.dfm
(代表Delphi窗体)文件链接到可执行文件中,*.dfm
为窗口设计器创建的表单的二进制代码,*
不代表通配符,而是与当前单元文件同名的dfm文件,如 Unit1.pas 文件中 *.dfm 表示 Unit1.dfm
VCL:可视化组件库
默认事件处理过程名是组件名 + 事件名 – ‘ on’ 组成的,如:Button1Click
关闭窗体:Close
窗口创建事件: oncreate
习题源代码:
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
Vcl.StdCtrls, Math;
type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Edit2: TEdit;
Label3: TLabel;
Edit3: TEdit;
Button1: TButton;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
Edit8: TEdit;
Edit9: TEdit;
Label7: TLabel;
lbl1: TLabel;
Button2: TButton;
lbl_sum: TLabel;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
r, bc_inside, bc_outside: real; // 圆的半径,内接正方形边长,外切正方形边长
p1, p2, p3, s1, s2, s3, s: real; // 价格,数量,总金额
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
// 初始化半径r
try
r := StrToFloat(Edit1.Text);
except
r := 0;
Edit1.Text := '0';
end;
// 内切正方形:对角线=直径,根据勾股定理,(2*r)^2 = 2* bc_inside^2
// 需要引入Math模块
// div, / 整数、实数除法
bc_inside := Math.Power(Math.Power(2 * r, 2) / 2.0, 0.5);
bc_outside := 2 * r;
Edit2.Text := FloatToStr(bc_inside * bc_inside);
Edit3.Text := FloatToStr(bc_outside * bc_outside);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
// 价格输入
try
p1 := StrToFloat(Edit4.Text);
except
p1 := 0;
Edit4.Text := '0';
end;
try
p2 := StrToFloat(Edit5.Text);
except
p2 := 0;
Edit5.Text := '0';
end;
try
p3 := StrToFloat(Edit6.Text);
except
p3 := 0;
Edit6.Text := '0';
end;
// 数量
try
s1 := StrToFloat(Edit7.Text);
except
s1 := 0;
Edit7.Text := '0';
end;
try
s2 := StrToFloat(Edit8.Text);
except
s2 := 0;
Edit8.Text := '0';
end;
try
s3 := StrToFloat(Edit9.Text);
except
s3 := 0;
Edit9.Text := '0';
end;
// 总金额
s := p1 * s1 + p2 * s2 + p3 * s3;
lbl_sum.Caption := '总计金额(元):' + FloatToStr(s);
end;
procedure TForm1.FormCreate(Sender: TObject);
var
i: Integer;
begin
// 窗口初始化
// Edit1.Text := '';
// Edit2.Text := '';
// Edit3.Text := '';
// Edit4.Text := '';
// Edit5.Text := '';
// Edit6.Text := '';
// Edit7.Text := '';
// Edit8.Text := '';
// Edit9.Text := '';
// 批量修改组件属性
for i := ComponentCount - 1 downto 0 do
begin
if Components[i] is TEdit then
TEdit(Components[i]).Text := '';
end;
Form1.Caption := '第1章习题';
Form1.Position := poDesktopCenter; // 窗口居中
Form1.BorderStyle := bsDialog; // 窗口大小固定
end;
end.
第2章 Delphi语法基础
Object Pascal不区分大小写…
注释:
- { }, (* *) 两种注释不支持嵌套。中间为注释, 如果这种注释内的第一个字符是 $, 表示是编译器指令
- // ,改行之后是注释
数据类型
-
数值类型(两类)
-
整型 integer
-
实型 real
-
-
字符型 character
-
字符串型 string
-
布尔型 boolean
-
枚举型 enumerated
-
子界型:subrange
-
集合类型set
-
数组类型 array
-
记录类型 record
-
文件类型File
-
类类型class
-
类引用类型 class reference
-
接口类型interface
-
指针类型pointer
-
过程类型procedural
-
可变类型variant
整型
平台无关的整数类型,常用下面四个类型
-
integer: 正负21亿的样子,超过21亿还是得用 int64
-
cardinal:0 到 42亿的有符号数,再大就得用Uint64
Type | Range | Format | Alias |
---|---|---|---|
ShortInt | |||
SmallInt | |||
FixedInt | |||
**Integer | |||
Int64 | -9223372036854775808..9223372036854775807 -263..263-1 |
Signed 64-bit | |
Byte | |||
Word | |||
FixedUInt | |||
**Cardinal | |||
**UInt64` | Unsigned 64-bit |
实数类型
- real 与 double 完全等价
- extended 兼容性比较差,尽量少使用
- currency: 至少有4位有效的小数位
Type | Platform | Approximate Positive Range | Significant decimal digits | Size in bytes |
---|---|---|---|---|
Real48 | all | 2.94e-39 .. 1.70e+38 |
11-12 | 6 |
Single | all | 1.18e-38 .. 3.40e+38 |
7-8 | 4 |
Double | all | 2.23e-308 .. 1.79e+308 |
15-16 | 8 |
Real | all | 2.23e-308 .. 1.79e+308 |
15-16 | 8 |
Extended | 32-bit Intel Windows | 3.37e-4932 .. 1.18e+4932 |
10-20 | 10 |
Extended | 64-bit Intel Linux 64-bit Intel macOS | 3.37e-4932 .. 1.18e+4932 |
10-20 | 16 |
Extended | 2.23e-308 .. 1.79e+308 |
15-16 | 8 | |
Comp` | 10-20 | 8 | ||
**Currency` | 10-20 | 8 |
字符类型
The character types are Char:
-
WideChar. The first 256 Unicode characters correspond to the ANSI characters. 16个bit,前 256 个字符对应 ANSI 字符
-
AnsiChar characters ordered according to the locale character set, which is possibly multibyte. 8比特
-
Char rather than a hard-coded constant when writing programs that may need to handle characters of different sizes. char 目前等价于 widechar
-
UCS4Char is used for working with 4–byte Unicode characters.
字符串类型
用string类型就够了
Type | Maximum length | Memory required | Used for |
---|---|---|---|
ShortString | 255 characters | 2 to 256 bytes | Backward compatibility. |
AnsiString characters, DBCS ANSI, MBCS ANSI, Unicode characters, etc. | |||
UnicodeString characters, multiuser servers and multilanguage applications UnicodeString is the default string type. | |||
WideString is preferred to WideString. |
布尔类型
- boolean 只能为 0 或 1, 取值为符号常量True 或 False
- 其他三种类型为 0 和非零
- 布尔常量只有两个值:True 和 False
Boolean | ByteBool, WordBool, LongBool |
---|---|
False < True |
False <> True |
Ord(False) = 0 |
Ord(False) = 0 |
Ord(True) = 1 |
Ord(True) <> 0 |
Succ(False) = True |
Succ(False) = True |
Pred(True) = False |
Pred(False) = True |
符号常量
符号常量是纯常量,不能改变
const
pi=3.14;
myname='BillyJerry';
类型常量
const
pi:real=3.14;
myname:string[10]='BillyJerry';
- 默认编译器状态下,类型常量的值是可以该表的,所以不算是真的常量,实际是初始化了的变量
运算符与表达式
- div :整数除法,结果符号为被除数的符号,小数被舍去
- mod:求余