Cтр. 1 из 3 446966288 1/16/2016 V- 1 Технология программирования 1. Отличия синтаксиса функций и процедур в OP Использование предопределенной переменной Result в теле функции Возвращаемое значение в теле функции может присваиваться или имени функции (как в TP) или специальной переменной Result (объявлять которую не надо!). Разница: имя функции – это не переменная. Оно может фигурировать только в левой части оператора присваивания, и не может входить ни в какие выражения. А Result – это обычная переменная. Пример - старый стиль (можно использовать): Function FSum(a, b, c: real): real; Begin FSum := a*(b + c); End; Пример - с использованием Result: Function FSum(a, b, c: real): real; Begin Result := b + c; If a = 1 then Exit; // Обратить внимание на предопределенную проц. выхода exit result := a*result; End; Перегрузка процедур и функций Можно определить в одной и той же области видимости несколько процедур или функций с одинаковыми именами, но различающиеся по числу и типу параметров. При этом необходимо указывать ключевое слова overload. Например: function Min(a, b: integer): integer; overload; begin if a < b then result := a else result := b; end; function Min(a, b: double): double; overload; begin if a < b then result := a else result := b; end; Если записать min(5, 3) , будет вызываться первая функция, а при вызове min(5.0, 3.0) – вторая. Параметры функций и процедур со значением по умолчанию Значение по умолчанию – это значение параметра в случае, если он не передан в вызове функции или процедуры. Пример: Function Circle(radius : real = 1; Begin Result := 2*pi*radius; End 1/16/2016 2:47:00 PM pi:real = 3.14): real; "КИТ" – В.М. 7-177- 424, 009 Cтр. 2 из 3 446966288 1/16/2016 V- 1 Вызовы такой функции могут быть такие: Circle или Circle( 10.5) или Circle(2, 3.14567 ); Передача параметра как Константы При попытке в теле процедуры или функции изменить значение такого параметра компилятор выдаст сообщение об ошибке. Это позволяет сделать код более эффективным и надежным. Пример: function foo(const x: real; a: integer) real; Begin // x := 2*x ; // ошибка // result := x * a; Result := 2 * x * a; // это сработает End; 2. Тип данных - множество – это группа элементов какого то типа, причем один и тот же элемент не может входить в множество более одного раза. Множество может быть и пустым. Множество определяется перечислением его элементов, заключенных в прямоугольные скобки. Например: [‘Y’, ‘y’, ‘N’, ‘n’]. Для определение, принадлежит ли переменная множеству, служит оператор in. Пример: дал ли пользователь допустимый ответ If (key in [‘Y’, ‘y’, ‘N’, ‘n’]) then … Объявление типа множества: Set of <базовый тип>. Объявление глобальной переменной: Var K: set of char = [‘0’..’9’, ‘+’, ‘-’] … If key in K then … Объявление типизированной константы: Const K: set of char = [‘0’..’9’, ‘+’, ‘-’] Объявление типа множества и переменных этого типа: Type TDigit = set of ‘0’..’9’; Var d1, d2 : TDigit; ... D1 := [‘0’, ‘1’]; D2 := [‘2’..’9’]; 3. Обзор невизуальных компонентов Невизуальные компоненты не присутствуют на форме во время выполнения, а вызываются по запросу (меню, диалоги) или используются без визуализации. Основные невизуальные компоненты:- Меню – компоненты MainMenu, PopUpMenu (всплывающее меню) Стандартные диалоги, расположенные на вкладке палитры компонентов Dialogs: OpenDialog, SaveDialog, FontDialog, ColorDialog и др. Диспетчеры действий: ActionList, ActionManager - позволяют упорядочить разработку обработчиков событий. Таймер: Timer – позволяет задавать в приложении интервалы времени. 1/16/2016 2:47:00 PM "КИТ" – В.М. 7-177- 424, 009 446966288 1/16/2016 V- 1 Cтр. 3 из 3 4. Подпрограмы и методы для работы с диалоговыми окнами Основные подпрограмы реализующие типовые диалоговые окна, не входящие в палитру компонентов: Процедуры, просто показывающие сообщение на экране: Procedure ShowMessage(const message: string); Procedure ShowMessageDlg(const message: string; x, y: integer); Для получения ответа от пользователя можно использовать следующие функции: function MessageDlg(const Msg: string; DlgType: TMsgDlgType; Buttons:TMsgDlgButtons; HelpCtx: Longint): Word; В этой функции используются следующие типы данных TMsgDlgType = (mtWarning, mtError, mtInformation, mtConfirmation, mtCustom); TMsgDlgBtn = (mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbIgnore, mbAll, mbNoToAll, mbYesToAll, mbHelp); TMsgDlgButtons = set of TMsgDlgBtn; В зависимости от значения DlgType в окне появяться те или иные значки. В зависимости от значения параметра Buttons в окне появяться те или иные кнопки или их сочетания. функция может возвращать следующие значения: mrOk, mrOk, mrCancel, mrYes, mrNo, mrAbort, mrRetry, mrIgnore, mrAll, mrNoToAll, mrYesToAll. Параметр HelpCtx – обычно равен 0, иначе это номер (индекс) справочной информации function InputBox(const ACaption, APrompt, ADefault: string): string; - возвращает строку, введенную пользователем function InputQuery(const ACaption, APrompt: string; var ADefault: string): boolean; - если пользователь нажал кнопку “Отмена” – возвращается False, иначе – True и в переменной ADefault - строка введенная пользователем. Наиболее “богатые” возможности предоставляет метод MessageBox объекта Application: function MessageBox(const Text, Caption: PChar; Flags: Longint = MB_OK): Integer; Параметр Flag в этой функции может принимать много различных значений (см. справку в Delphi), что позволяет показывать в окне различные значки и кнопки. Пример: if Application.MessageBox(‘Мой текст’, ‘Мой заголовок’, MB_YESNO) = IDYES then... Работа с невизуальными компонентами диалоговых окон, такими как OpenDialog, FileDialog, ColorDialog и др, расположенными на закладке Dialogs: Для вывода этих окон на экран во время работы приложения используется метод Execute этих компонентов. Метод Execute возвращает значение false в случае, если пользователь отказался выполнять действие (нажал кнопку Отмена). В противном случае метод возвращает True, и можно выбрать то или иное свойство компонента для получения более подробной информации о выборе пользователя. Например, в следующем примере свойство : FileName диалога OpenDialog1 используется для загрузки всех строк файла в компонент Memo1 (многострочный редактор): if OpenDialog1.Execute then Memo1.Lines.LoadFromFile(OpenDialog1.FileName); Наиболее часто используемые свойства компонентов диалоговых окон: Для OpenDialog, SaveDialog: FileName – полное имя файла, InitialDir - начальная папка, Title – Заголовок окна, Options – настройки диалогово окна. Для ColorDialog: Color – Выбранный цвет. Для FontDialog: - Font – Выбранный фонт (шрифт). 1/16/2016 2:47:00 PM "КИТ" – В.М. 7-177- 424, 009