- •Понятие алгоритма. Правила построения блок-схем алгоритмов. Линейный алгоритм (пример).
- •Способы организации циклов в языке Object Pascal.
- •Оператор case of и его использование.
- •Процедуры. Формальные, фактические параметры, параметры-значения, параметры-переменные.
- •Функции в Object Pascal.
- •Var // начало раздела объявлению переменных
- •Структура Delphi-программы: структура программы; структура модуля. Разделы области описания (интерфейсной области), комментарии.
- •Типы данных Delphi. Простые типы (целый, вещественный, символьный, строковый, логический). Объявление констант и переменных в разделе описания.
- •Оператор присваивания Delphi. Арифметические (регулярные) выражения. Основные математические и логические функции, их приоритет.
- •Сложные типы данных Delphi. Производные типы: перечислимый, интервальный.
- •Сложные типы данных Delphi. Структурированные типы. Статические и динамические массивы.
- •Index type, где Index целое число, обычно Byte или Word. Диапазон этого типа определяет диапазон измерения. Например, Byte дает дипазон 0..255.
- •Сложные типы данных Delphi. Файлы. Текстовые файлы. Считывание и запись данных.
- •Операторы управления Delphi. Составной оператор, условные операторы, оператор выбора.
- •If условие then действие else альтернатива ;
- •Операторы передачи управления Delphi. Оператор безусловного перехода.
- •Обработка событий Delphi. Реакция на события мыши и клавиатуры.
- •Работа с графикой в Delphi. Построение графиков.
Операторы передачи управления Delphi. Оператор безусловного перехода.
Среди операторов языка Delphi существует один редкий оператор, о котором авторы сперва хотели умолчать, но так и не решились. Это оператор безусловного перехода goto ("перейти к"). Он задумывался для того случая, когда после выполнения некоторого оператора надо выполнить не следующий по порядку, а какой-либо другой, отмеченный меткой, оператор.
Метка - это именованная точка в программе, в которую можно передать управление. Перед употреблением метка должна быть описана. Раздел описания меток начинается зарезервированным словом label, за которым следуют имена меток, разделенные запятыми. За последним именем ставится точка с запятой. Типичный пример описания меток:
label
Label1, Label2;
В разделе операторов метка записывается с двоеточием. Переход на метку выполняется с помощью зарезервированного слова goto, за которым следует имя метки:
program Console;
{$APPTYPE CONSOLE}
uses
SysUtils;
label
M1, M2;
begin
M1:
Write('Желаем успеха ');
goto M2;
Write('А этого сообщения вы никогда не увидите!');
M2:
goto M1;
Writeln('в освоении среды Delphi!');
Writeln('Press Enter to exit...');
Readln;
end.
Эта программа будет выполняться бесконечно, причем второй оператор Write не выполнится ни разу!
Внимание! В соответствии с правилами структурного программирования следует избегать применения оператора goto, поскольку оно усложняет понимание логики программы. Оператор goto использовался на заре программирования, когда выразительные возможности языков были скудными. В языке Delphi без него можно успешно обойтись, применяя условные операторы, операторы повтора, процедуры Break и Continue, операторы обработки исключений
Обработка событий Delphi. Реакция на события мыши и клавиатуры.
Традиционно пользователь может предусмотреть реакцию на нажатие и отпускание любой из кнопок и перемещение курсора мыши. Эти три события обеспечивают интерфейс каждого элемента управления с мышью. Первые два из них имеют формат:
(рt) property OnMouseDown: TMouseEvent;
(Pb) property OnMouseUp: TMouseEvent;
TMouseEvent = procedure(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer) of object;
Параметры:
Sender — элемент-источник сообщения (обычно равен Self);
Button — идентификатор одной из кнопок;
TMouseButton = (mbLeft, mbRight, mbMiddle);
Shift — множество, которое может содержать элементы:
ssAlt, ssCtrl, ssShift — в зависимости от состояния этих клавиш;
ssLeft, ssRight, ssMiddle, ssDouble — в зависимости от нажатия кнопок мыши (ssDouble — нажать! и правая, и левая кнопки);
X, Y — координаты нажатия (в системе координат клиентской области получателя).
При перемещении мыши возникает событие:
(Pb) property OnMouseMove: TMouseMoveEvent;
TMouseMoveEvent = procedure(Sender: TObject; Shift: TShiftState; X, Y: Integer) of object;
Использование сообщений от мьшш уже встречалось в примерах, приведенных вьппе (например, см. разд. "Положение, размеры и выравнивание элементов управления").
Два события извещают о щелчке и двойном щелчке левой кнопкой мыши над компонентом:
(pt) property OnClick: TNotifyEvent;
(Pb) property OnDblClick: TNotifyEvent;
Отменить генерацию этих событий можно, удалив флаг csClickEvents из слова состояния элемента (ControlStyle). Для некоторых компонентов (например, кнопок) OnClick возникает еще и при нажатии определенных клавиш на клавиатуре, а также вследствие вызова метода Click.
События, связанные с мышью, могут быть получены потомками TControl. В отличие от них, реакцию на события от клавиатуры могут иметь только оконные элементы управления ("могут", т. к. на уровне TControl и TWinControl эти события только описаны, но не опубликованы). Таким образом, есть компоненты (в том числе в Палитре компонентов), не имеющие связи с этими событиями из-за ее ненадобности. Впрочем, их меньшинство, и материал в этом разделе обобщен вполне обоснованно.
Нажатие и отпускание клавиш клавиатуры могут инициировать следующие события:
property OnKeyDown: TKeyEvent;
property OnKeyUp: TKeyEvent;
TKeyEvent = procedure(Sender: TObject; var Key: Word; Shift: TShiftState) of object;
Генерация этих событий встроена в обработчики сообщений Windows WMJCEYDOWN, WMJSYSKEYDOWN и WM_KEYUP, WM_SYSKEYUP соответственно. Обработчику передаются:
Sender — источник сообщения;
Shift — состояние специальных клавиш и кнопок мыши во время нажатия (отпускания);
Key — код нажатой клавиши, представляющий собой виртуальный код клавиши Windows (константы вида VK_XX, например, VK_F1, VK_ESCAPE и т. п.). Обратите внимание, что Key является var-параметром; т. е. его значение может быть изменено программистом.
Другое событие, возникающее вследствие нажатия клавиши:
property OnKeyPress : TKeyPressEvent;
TKeyPressEvent = procedure(Sender: TObject; var Key: Char) of object;
Это событие возникает при вводе с клавиатуры символа ASCII, т. е. оно не генерируется, например, при нажатии функциональных клавиш или . Обработчик события вызывается при нажатии буквенных (в т. ч. вместе с ), цифровых клавиш, комбинаций + .. + (коды ASCII #1..#26), , , , + (код #3) и некоторых других. Также код ASCII можно сгенерировать, нажав <А11>+<десятичньш код символа> на числовой клавиатуре (Numeric Pad).
Событие OnKeyPress соответствует сообщению Windows WM_CHAR.