Часть урока для новичков
В прошлом уроке мы рассматривали структуру программы и модулей. Они состоят из заголовка и программного блока.
Процедуры и функции представляют собой кирпичики, дополнительные блоки, содержащиеся в программном блоке. И по своему строению очень напоминает модуль или программу. Тоже состоит из заголовка и блока.
Заголовок состоит из первого слова procudure
для процедуры и function
для функции. После этого слова следует идентификатор, по которому данная процедура или функция будет вызываться из другого места программы (возможно даже из этой же процедуры). После идентификатора могут следовать в скобках входящие или выходящие параметры. Заголовок функции завершается описанием ее типа.
После заголовка может следовать (по необходимости) описание внутренних типов, констант, переменных, меток. На эту тему мы поговорим с вами в следующем уроке.
Далее следует сам программный блок процедуры или функции, заключенный в операторные скобки begin и end.
Пример процедуры:
procedure MyProcedure (InData: Integer); // заголовок процедуры. InData - вносимый параметр
Var i1,i2,i3: Integer; // описание переменных в данной процедуре
begin
// текст программы
end;
Функция от процедуры отличается только тем, что кроме выполняемого программного блока может возвращать определенное значение (по окончанию сама принимает некоторое значение).
Пример функции:
function MyFunction (InData: Integer): Integer; // возвращаемый тип данных - Integer
Var i1,i2,i3: Integer;
begin
// текст программы
Result:= 1; // возвращаемое значение
end;
Для осмысления вышесказанного рассмотрим следующий пример.
function MyFunction (x: String): String;
begin
Result:= x+'рамма';
end;
procedure MyProcedure;
begin
ShowMessage(MyFunction('прог'));
end;
Допустим мы имеем некий программный код, который в определенный момент вызывает на выполнение процедуру MyProcedure. Порядок выполнения программы можно расписать следующим образом.
1. Вход в процедуру MyProcedure.
2. Вызывается функция MyFunction и управление передается в нее. При этом туда передается строковый параметр "прог".
3. В функции выполняется арифметическая операция со строкой. К вносимому параметру прибавляется строка "рамма" и все это передается в качестве возвращаемого параметра функции Result.
4. Возвращение в процедуру MyProcedure. Теперь MyFunction
принимает значение "программа" и это значение передается в качестве параметра в процедуру ShowMessage.
5. Процедура ShowMessage является стандартной (она описана в стандартном модуле, автоматически подключаемом изначально). Эта процедура производит вывод окошка с сообщением и кнопкой Ok.
6. После вывода окошка с текстом "программа" текущая позиция выполнения программы выходит из процедуры MyProcedure
в то место, откуда она была вызвана.
Написание всего текста кода проекта сводится к написанию программного блока внутри процедур и функций, с переходом друг к другу по мере необходимости.
Продолжаем понемногу писать текстовый редактор. Последний вариант редактирования можно скачать с прошлого урока здесь.
В почти каждом MDI-приложении есть меню "Окно" или "Window", в котором первыми пунктами стоят различного рода операции с позиционированием дочерних окон. Сделаем что-то подобное в нашем многооконном приложении.
Открываем проект на приложении в среде программирования Delphi. Комбинацией клавиш Shift+F12 выводим на экран главную форму MainForm.
![](image/index-image094.gif)
Появляется окно добавления стандартных действий, которые в последствии можно привязать к пунктам меню или кнопкам.
![](image/index-image095.gif)
По умолчанию все стандартные действия будут иметь названия на английском языке, поэтому будем из русифицировать вручную. Выбираем первый пункт списка действий Arrange1 и меняем свойство Caption на "Упорядочить значки". Здесь вы сразу заметите, что изначально это свойство имеет значение "&Arrange". Знак амперсанта означает, что следующий за ним символ будет подчеркнут. Это свойство полезно для быстрого выбора пункта данного меню с помощью горячей подчеркнутой клавиши, когда меню активизировано (подробнее можно узнать из справочной системы Windows). Вы сами можете назначать свои буквы быстрого доступа к пунктам меню самостоятельно. Скажу только, что за свою многолетнюю практику ни разу не встречал человека, который пользовался бы таким доступом в меню, поэтому в своих программах подчеркнутых букв не делаю. Но вы пожете не пренебрегать правилами хорошего тона в программировани и все делать по правилам.
Таким образом меняем свойства Caption для всех действий, согласно таблице
&Arrange |
Упорядочить значки |
&Cascade |
Каскадом |
C&lose |
Закрыть |
&Minimize All |
Минимизировать все |
Tile &Horizontally |
Упорядочить по горизонтали |
&Tile Vertically |
Упорядочить по вертикали |
Удаляем все пункты из меню "Окна". Там из наших первых уроков присутствует только один пункт "Упорядочить". Дальше все довольно просто. Для первого пустого пункта меню изменяем свойство Action в Arrange1. Этот пункт меню сразу изменит свое название на "Упорядочить значки". В проектировщике меню сразу добавляется новый пункт. Изменяем его свойство Action на Cascade1.
![](image/index-image096.gif)
Теперь сохраняйте проект и запускайте приложение на выполнение. Обратите внимание, что если дочерних окон нет, то эти пункты меню становятся серыми и недоступными для пользователя.
Еще раз отмечу прелесть визуального программирования. На этом примере вы убедились, что можно не писать ни строчки программного кода в редакторе, а добавлять необходимые компоненты, изменять некоторые свойства и в результате получается некоторое работоспособное приложение.
У нас остался незадействованным меню "Правка". Там содержатся три стандартных пункта "Вырезать", "Копировать" и "Вставить". Эти действия являются стандартными и содержатся в списке стандартных действий в ActionList1. Они находятся в категории Edit. Добавьте их в список действий самостоятельно. Не забудьте о русификации свойства Caption. В проектировщике меню измените свойство Action у пунктов правки на соответствующие пункты стандартных действий.
На этот урок все. Скачать вышерассмотренный пример можно отсюда.