不要改变复选框和按钮的名字,双击按钮为其OnClick 事件添加响应程序。下面是第一个按钮事件代码中一条简单的if语句:
procedure TForm1.Button1Click(Sender: TObject); begin
// simple if statement
if CheckBox1.Checked then
ShowMessage ('CheckBox1 is checked') end;
当点击button1,如果第一个复选框中有复选标记,那么这个程序将显示一条消息(见图5.1)。我用了ShowMessage 函数,因为它是Delphi中最简单的短信息显示函数。
图 5.1: 例IfTest显示的信息
如果点击按钮后没有反应,表明复选框未被选中。对于这种情况,最好能交代得更清楚些,为此在第二个按钮的代码中,我用了if-then-else 语句: procedure TForm1.Button2Click(Sender: TObject); begin
// if-then-else statement if CheckBox2.Checked then
ShowMessage ('CheckBox2 is checked') else
ShowMessage ('CheckBox2 is NOT checked'); end;
要注意的是,不能在第一句之后、else 关键词之前加分号,否则编译器将告知语法错误。实际上,if-then-else 语句是单纯的一条语句,因此不能在语句中间加分号。
26
if 语句可以很复杂,句子中的条件部分可以是一系列条件(用and、 or 、 not等布尔操作符联接起来),if语句又可以嵌套另一个if语句,见例IfTest中其它两个按钮的示范代码: procedure TForm1.Button3Click(Sender: TObject); begin
// statement with a double condition
if CheckBox1.Checked and CheckBox2.Checked then ShowMessage ('Both check boxes are checked') end;
procedure TForm1.Button4Click(Sender: TObject); begin
// compound if statement if CheckBox1.Checked then if CheckBox2.Checked then
ShowMessage ('CheckBox1 and 2 are checked') else
ShowMessage ('Only CheckBox1 is checked') else
ShowMessage (
'Checkbox1 is not checked, who cares for Checkbox2?') end;
仔细阅读代码并执行程序,看看能不能理解整个程序。当搞不清某种编程结构时,可以先写一个简单程序,这样可以帮你学习许多东西。你可以再加几个复选框,增加这个简例的复杂程度,并进行各种测试。
Case语句
如果你的if语句变得非常复杂,有时可以用case语句代替它。case语句包括用来选值的表达式、可能值序列或一个取值范围。这些值应该是常量,并且它们必须唯一,而且应属于有序类型。Case语句最后可以带一个else 语句,当没有一个标签与选择器的值一致时,执行else语句。下面是两个简单的例子: case Number of 1: Text := 'One'; 2: Text := 'Two'; 3: Text := 'Three'; end;
case MyChar of
'+' : Text := 'Plus sign'; '-' : Text := 'Minus sign';
'*', '/': Text := 'Multiplication or division';
27
'0'..'9': Text := 'Number';
'a'..'z': Text := 'Lowercase character'; 'A'..'Z': Text := 'Uppercase character'; else
Text := 'Unknown character'; end;
Pascal语言中的循环
其它编程语言中使用的循环语句,Pascal语言中都有,它们包括 for、 while 和 repeat 语句。如果你用过其他编程语言,你会发现Pascal中的循环语句没什么特别的,因此这里只作简要的说明。
For循环
Pascal 中的for循环严格地建立在计数器基础上,循环每执行一次,计数器不是增加一个值就是减小一个值。下面是一个for语句的简例,用来将前十个数加起来: var
K, I: Integer; begin K := 0;
for I := 1 to 10 do K := K + I;
同样的for语句可以用正好相反的计数器来写: var
K, I: Integer; begin K := 0;
for I := 10 downto 1 do K := K + I;
Pascal 中的for循环语句其灵活性比其他语言小(它不能指定1之外的步长),不过简单也容易理解。如果需判断的条件比较复杂,或想自定义计数器,你可以用while语句或 repeat 语句,而不是for循环语句。
注意:for循环计数器不必非是数字,它可以是任何有序类型的值,例如一个字符或一个枚举类型值。 while语句和repeat语句
28
while-do 循环语句和 repeat-until 语句的不同点在于repeat 循环语句的代码至少要执行
一次。从下面的简例很容易理解这一点: while (I <= 100) and (J <= 100) do begin
// use I and J to compute something... I := I + 1; J := J + 1; end; repeat
// use I and J to compute something... I := I + 1; J := J + 1;
until (I > 100) or (J > 100);
从上可见即使 I 或 J 的初始值大于100,repeat-until循环中的代码也仍会执行一次。 注意:两种循环另一个关键的不同点是,repeat-until 循环的条件是反向的条件,只要不满足这个条件,循环就执行;当条件满足时,循环终止。这正好与while-do 循环相反,while-do 循环当条件是真值时才执行。 一个循环语句例子
为了探究循环的细节,让我们看一个Delphi 简例,这个循环例子表现了固定计数器循环和随机计数器循环之间的差别。建一个新的工程,在主窗体上放一个listbox和两个button,通过设置Object Inspector中的name属性分别命名button为BtnFor 和BtnWhile。你还可以把Caption 属性中的Btn 去掉,或甚至加上 & ,让跟在 & 后面的字母成为快捷键。下面是该窗体文本描述:
object Form1: TForm1 Caption = 'Loops'
object ListBox1: TListBox ... object BtnFor: TButton Caption = '&For' OnClick = BtnForClick end
object BtnWhile: TButton Caption = '&While' OnClick = BtnWhileClick end end
29
图 5.2: 单击For按钮后显示的结果
现在,我们分别给两个button 添加OnClick 事件代码。第一个button用一个简单的for循环来显示一列数字,结果如图5.2。这个循环向listbox中的Items 属性添加一系列字符串。在执行循环之前,需要清除listbox 中的内容。程序如下: procedure TForm1.BtnForClick(Sender: TObject); var
I: Integer; begin
ListBox1.Items.Clear; for I := 1 to 20 do
Listbox1.Items.Add ('String ' + IntToStr (I)); end;
第二个button的事件代码稍微复杂点。本例中让while 循环基于一个随机增长的计数器。为实现它,我调用了Randomize 过程, 用它来重置随机数发生器,还调用了Random 函数, 其取值范围为100, 即函数返回0至99之间的随机数,随机数序列控制while 循环的执行次数。 procedure TForm1.BtnWhileClick(Sender: TObject); var
I: Integer; begin
ListBox1.Items.Clear; Randomize; I := 0;
while I < 1000 do begin
I := I + Random (100);
30