2016Delphi程序设计教程第三版by杨长春

第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

  • UCS2Char.

  • 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:求余

正文完