Procedure TFormi. MyFirstButtonMouseMove (Sender: TObj ect ;
Shift: TShiftState; X, Y: Integer); begin
end;
He будем пока вдаваться в подробности передаваемых параметров. Просто напишите здесь код, показанный в листинге 7.1.
Procedure TFormi.MyFirstButtonMouseMove(Sender: TObj ect;
Shift: TShiftState; X, Y: Integer); var
index:integer; begin index: =random (4) ; case index of
0: MyFirstButton.Left:=MyFirstButton.Left+MyFirstButton.Width;
1: MyFirstButton.Left:=MyFirstButton.Left-MyFirstButton.Width;
2: MyFirstButton.Top:=MyFirstButton.Top+MyFirstButton.Height;
3: MyFirstButton.Top:=MyFirstButton.Top-MyFirstButton.Height;
end;
if MyFirstButton.LeftcO then MyFirstButton.Left: =0;
if (MyFirstButton.Left+MyFirstButton.Width)> MainForm.Width then MyFirstButton.Left:= MainForm.Width-MyFirstButton.Width;
if MyFirstButton.Top<0 then MyFirstButton.Top:=0;
if (MyFirstButton.Top+MyFirstButton.Height)> MainForm.Height then MyFirstButton.Top:= MainForm.Height-MyFirstButton.Height;
end;
Пока просто перепишите содержимое этого листинга. Скоро мы подробно рассмотрим, что тут написано. Запустите программу и попробуйте нажать на кнопку. Как только попытаетесь навести на нее указатель мыши, кнопка будет убегать от вас.
Обязательно сначала посмотрите, как работает пример. Когда поймете принцип действия программы, возвращайтесь к чтению книги, и мы рассмотрим исходный код.
В разделе var объявлена одна переменная index типа целое число. В первой строке этой переменной присваивается случайное число с помощью функции
random:
index:=random(4);
Функция random возвращает случайное число. В качестве единственного параметра ей нужно передать число, которое будет означать максимально возможное случайное значение. В операторе передается цифра 4. Это значит, что функция вернет число от нуля до четырех (0 < X < 4). Само число 4 в диапазон возможных значений не входит, все случайные числа будут меньше него.
После этого проверяется, какое число сгенерировала функция random с помощью конструкции case:
case Переменная of
Значение1: Действие1;
Значение2: Действие2;
end;
Конструкция case сравнивает переменную с перечисленными между ключевыми словами of и end значениями, и если одно из них совпадает, то выполняет соответствующее действие. Например, допустим, что наша переменная равна числу И3начение2м. В ЭТОМ случае будет выполнено пДействие2и. При ЭТОМ "Действие1" и другие выполняться не будут.
Если вам нужно, чтобы при равенстве значений выполнялось несколько действий, то необходимо заключить их в логические кавычки begin ... end, как это
показано в листинге
case Переменная of
Значение1:
begin
Действие1_1;
Действие1_2;
end;
Значение2:
begin
Действие2_1;
Действие2_2;
end;
end;
Теперь вернемся к нашему примеру. В нем используется следующий оператор case:
0: MyFirstButton.Left:=MyFirstButton.Left+MyFirstButton.Width;
1: MyFirstButton.Left:=MyFirstButton.Left-MyFirstButton.Width;
2: MyFirstButton.Top:=MyFirstButton.Top+MyFirstButton.Height;
3: MyFirstButton.Top:=MyFirstButton.Top-MyFirstButton.Height; end;
Если переменнаяindexравна 0, то выполнится действие:
Что ЭТО? Здесь свойству Left (левая ПОЗИЦИЯ) КНОПКИ MyFirstButton присваивается значение левой позиции этой же кнопки плюс ее ширина. Это значит, если вы попытались навести мышкой на кнопку, и функция Random сгенерировала 0, то левое значение кнопки будет увеличено на ширину кнопки. А это уже значит, что кнопка сдвинется от вас вправо. Если вы уже запускали пример, то поняли это.
Если значение переменной index равно 1, то наоборот, уменьшается левая позиция кнопки на ее ширину, т. е. кнопка убежит влево. Если значение переменной index равно 2, то увеличивается верхняя позиция кнопки на ее высоту, а кнопка убежит вниз. Надеюсь, что смысл понятен. Давайте двигаться дальше.
После конструкции case ... of ... end идет проверка: "Не убежала ли кнопка за пределы окна?" Сначала проверяется левая позиция кнопки.
Здесь идет проверка, если левая позиция кнопки MyFirstButton.Left меньше нуля, то установить ее в ноль.
В следующей строке проверяется, если левая позиция кнопки плюс ее ширина больше ширины окна, то левой позиции присвоить значение "ширина окна" минус "ширина кнопки":
Точно так же проверяем и верхнюю позицию, чтобы она не вышла за пределы окна.
С оператором if, который здесь используется, мы уже немного познакомились в разд. 5.3.4. Конструкция if ... then выглядит следующим образом:
Если условие выполнено, то будет выполнено и действие. Если вы хотите выполнить два действия, то должны заключить их в логические скобки begin ... end. Например:
If Условие then begin
Действие1; Действие2; Действие3;
end;
В этом случае все действия верно. Таким образом, begin в одно, между begin и end будут выполнены, если условие ... end группирует последовательность действий