Разработка кроссплатформенных приложений 1 Введение в Delphi 2 Язык программирования Delphi 3 Использование визуальных компонентов 4 Форма — главный компонент приложения 5 Меню, панели инструментов и механизм действий 6 Развитые средства Delphi 7 Организация приложений 8 Работа с графикой и мультимедиа 9 Работа с файлами и каталогами 10 Библиотеки, пакеты и компоненты Старший преподаватель кафедры МПУИ Ганжур Анастасия Александровна 1 Введение в Delphi XE 1.1 Обзор RAD Studio 10.4 1.2 Процесс разработки программы с помощью Delphi 1.3 Откладка программы в среде RAD Studio 2 Среда разработки Delphi является одним из популярнейших инструментов разработки прикладных программ. Она поддерживает так называемую быструю разработку, основанную на технологии визуального проектирования и событийного программирования. Delphi – это среда быстрой разработки приложений (RAD-среда, от Rapid Application Development – быстрая разработка приложений) на языке Delphi, в основе которого лежит хорошо знакомый многим программистам язык Pascal. 3 1.1 Обзор RAD Studio 10.4 Среду разработки RAD Studio 10.4 можно скачать по QR-коду: https://nnmclub.to/ https://rutracker.org/ 4 Меню Используемые компоненты Инспектор объектов События (Events) Свойства Объектов (Properties) Менеджер проекта Форма Редактор кода Палитра компонент 5 Object Inspector (Инспектор объектов) Вкладка Properties этого окна используется для редактирования значений свойств объектов. Свойства определяют вид объекта, его положение и поведение. Например, свойство Caption формы определяет текст, который отображается в ее заголовке, а свойства Width и Height – ее размеры (ширину и высоту). Справа от названия свойств указаны их значения. Свойства по функциональному признаку объединены в группы (названия групп 6 выделены цветом). Palette (Палитра компонентов ) На вкладках палитра компонентов (окно Palette) находятся компоненты. Компонент – это элемент пользовательского интерфейса или объект, реализующий некоторую функциональность. Например, на вкладке Standard находятся компоненты, обеспечивающие взаимодействие с пользователем (Label – поле отображения текста; Edit – поле редактирования; Button – командная кнопка и др.), а на вкладке dbGo — 7 компоненты доступа к базам данных Project Manager (Менеджер проекта) В окне Project Manager отображается структура проекта, над которым в данный момент идет работа. Если какое-либо из перечисленных окон на экране не отображается, то для того чтобы его увидеть, надо в меню View выбрать соответствующую команду. 8 1.2 Процесс разработки программы с помощью Delphi Разработаем программу для вычисления суммы двух чисел Начало работы: 1) В меню File выбрать команду New → VCL Forms Application – Delphi. 2) Форма. Работа над приложением начинается с создания стартовой формы – главного окна программы. 9 Основные свойства формы (объекта TForm) Свойство Name Caption Width Height Position Назначение Имя (идентификатор) формы. Используется для доступа к форме, ее свойствам и методам, а также для доступа к компонентам формы Текст заголовка Ширина формы Высота формы Положение окна в момент первого его появления на экране (poCenterScreen – в центре экрана; poOwnerFormCenter – в центре родительского окна; poDesigned – положение окна определяют значения свойств Top и Left) 10 Основные свойства формы (объекта TForm) Свойство Top Left BorderStyle Назначение Расстояние от верхней границы формы до верхней границы экрана Расстояние от левой границы формы до левой границы экрана Вид границы. Граница может быть обычной (bsSizeable), тонкой (bsSingle) или вообще отсутствовать (bsNone). Если у окна обычная граница, то во время работы программы пользователь может с помощью мыши изменить размер окна. Изменить размер окна с тонкой границей нельзя. Если граница отсутствует, то на экран во время работы программы будет выведено окно без заголовка. Положение и размер такого окна во время работы программы изменить 11 нельзя Основные свойства формы (объекта TForm) Свойство BorderIcons Icon Назначение Кнопки управления окном. Значение свойства определяет, какие кнопки управления окном будут доступны пользователю во время работы программы. Значение свойства задается путем присвоения значений уточняющим свойствам biSystemMenu, biMinimaze, biMaximaze и biHelp. Свойство biSystemMenu определяет доступность кнопки системного меню (значок в заголовке окна), biMinimaze – кнопки Свернуть, biMaximaze – кнопки Развернуть, biHelp – кнопки вывода справочной информации Значок в заголовке диалогового окна, обозначающий кнопку вывода системного меню 12 Основные свойства формы (объекта TForm) Свойство Color Font Назначение Цвет фона. Цвет можно задать, указав название цвета или привязку к текущей цветовой схеме операционной системы. Во втором случае цвет определяется текущей цветовой схемой, выбранным компонентом привязки и меняется при изменении цветовой схемы операционной системы Шрифт. Шрифт, используемый по умолчанию компонентами, находящимися на поверхности формы. Изменение свойства Font формы приводит к автоматическому изменению свойства Font компонента, располагающегося на поверхности формы. То есть компоненты наследуют свойство Font от формы (имеется возможность запретить наследование) 13 14 3) Добавление компонент TEdit Поля редактирования, поля отображения текста, командные кнопки, списки, переключатели и другие элементы, обеспечивающие взаимодействие программы с пользователем, называют компонентами пользовательского интерфейса. Компоненты, которые программист может использовать в процессе разработки программы, находятся в палитре компонентов (Palette). На вкладках Standard, Additional и Win32 находятся часто используемые компоненты пользовательского интерфейса. 15 Основные свойства компонента TEdit Свойство Name Text Left Top Назначение Имя компонента. Используется для доступа к компоненту и его свойствам Текст, который находится в поле редактирования Расстояние от левой границы компонента до левой границы формы Расстояние от верхней границы компонента до верхней границы формы Height Высота компонента Width Ширина компонента 16 Основные свойства компонента TEdit Свойство Font ParentFont MaxLength TabOrder Назначение Шрифт, используемый для отображения текста в поле компонента Признак наследования шрифта от формы. Если значение свойства равно True, то для отображения текста в поле компонента используется шрифт формы Количество символов, которое можно ввести в поле редактирования. Если значение свойства равно нулю, ограничения на количество символов нет Определяет порядок перемещения фокуса (курсора) с одного элемента управления на другой в результате нажатия клавиши <Tab> 17 18 4) Добавление компонент Tlabel Отображение текста на обеспечивает компонент TLabel. поверхности формы 19 Основные свойства компонента TLabel Свойство Name Caption Font ParentFont AutoSize Left Top Назначение Имя компонента. Используется для доступа к компоненту Отображаемый текст Шрифт, используемый для отображения текста Признак наследования характеристик шрифта от объекта (формы), на котором компонент находится Признак автоматического изменения размера компонента при изменении текста, отображаемого в поле компонента Расстояние от левой границы поля вывода до левой границы формы Расстояние от верхней границы поля вывода до верхней границы формы 20 Основные свойства компонента TLabel Свойство Height Width WordWrap Назначение Высота поля вывода Ширина поля вывода Признак того, что слова, которые не помещаются в текущей строке, автоматически переносятся на следующую строку (значение свойства AutoSize должно быть False) 21 22 5) Добавление кнопок TButton 23 Основные свойства компонента TButton Свойство Name Caption Enabled Left Top Height Width TabOrder Назначение Имя компонента. Используется для доступа к компоненту и его свойствам Текст на кнопке Признак доступности кнопки. Кнопка доступна (программа реагирует на ее нажатие), если значение свойства равно True, и не доступна, если значение свойства равно False Расстояние от левой границы кнопки до левой границы формы Расстояние от верхней границы кнопки до верхней границы формы Высота кнопки Ширина кнопки Определяет порядок перемещения фокуса (курсора) с одного 24 элемента управления на другой (<Tab>) 25 Завершив работу по созданию формы, можно приступить к программированию – созданию процедур обработки событий. 6) События Событие (Event) – это то, что происходит во время работы программы. У каждого события есть имя. Например, щелчок кнопкой мыши – это событие Click, двойной щелчок мышью – событие DblClick. Следует понимать, что одни и те же действия, но выполненные над разными объектами, вызывают разные события. 26 Некоторые события, возникающие в результате действий пользователя Свойство Click DblClick MouseDown MouseUp MouseMove KeyPress KeyDown Назначение Щелчок кнопкой мыши Двойной щелчок кнопкой мыши Нажатие кнопки мыши Отпускание нажатой кнопки мыши Перемещение указателя мыши Нажатие клавиши клавиатуры Нажатие клавиши клавиатуры. События KeyDown и KeyPress – это чередующиеся, повторяющиеся события, которые происходят до тех пор, пока не будет отпущена удерживаемая клавиша (в этот момент происходит событие KeyUp) 27 Некоторые события, возникающие в результате действий пользователя Свойство KeyUp Create Paint Enter Exit Назначение Отпускание нажатой клавиши клавиатуры Создание объекта (формы, элемента управления). Процедура обработки этого события обычно используется для инициализации переменных, выполнения подготовительных действий Событие происходит при появлении окна на экране в начале работы программы, после появления части окна, которая, например, была закрыта другим окном Получение элементом управления фокуса Потеря элементом управления фокуса 28 Процедура обработки события В Delphi реакция на событие реализуется как процедура обработки события. Таким образом, для того чтобы программа выполняла некоторую работу в ответ на действия пользователя, программист должен написать процедуру обработки соответствующего события. Чтобы приступить к созданию процедуры обработки события необходимо: 1. Выбрать компонент, для которого создается процедура обработки события; 2. В окне Object Inspector нужно открыть вкладку Events; 3. Выбрать нужное событие (сделать щелчок мышью на его 29 имени). 30 31 32 33 34 Структура проекта Проект представляет собой совокупность файлов, которые используются компилятором для генерации выполняемого файла. Основа проекта - файл главного модуля (dpr-файл) и один или несколько модулей (для каждой формы Delphi создает отдельный модуль — pas-файл). Помимо файла проекта и модулей в процессе компиляции используются: файл ресурсов (res-файл), файлы описания форм (отдельный dfm-файл для каждой формы), а также файл конфигурации (cfg-файл). Общая информация о проекте хранится в dproj-файле. 35 Главный модуль Главный модуль Интерфейс Реализация interface implementation Инициализация 36 Имя модуля Интерфейс: объявления класса TForm1 и объекта Form1 Подключение модулей 37 Реализация Описание методов класса 38 Компиляция Процесс преобразования исходной программы в выполняемую называется компиляцией и состоит из двух этапов: непосредственно компиляции и компоновки. На этапе компиляции выполняется перевод исходной программы (модулей) в некоторое внутреннее представление. На этапе компоновки выполняется сборка (построение) программы. Project → Compile или команда Run → Run / Run Without Debugging) 39 Обработка исключения Обработку исключений берет на себя автоматически добавляемый в выполняемую программу код, который обеспечивает вывод сообщения об ошибке и завершение процедуры, при выполнении которой возникло исключение. try // здесь инструкции, при выполнении // которых может произойти исключение except on Исключение do begin // здесь инструкции обработки исключения end; end; 40 Типичные исключения Тип исключения EConvertError EZeroDivide EFOpenError Возникает При выполнении преобразования строки в число, если преобразуемая величина не может быть приведена к требуемому виду. Чаще всего возникает при преобразовании строки в дробное число, если в качестве разделителя целой и дробной частей указан неверный символ Деление на ноль. При выполнении операции деления, если делитель равен нулю (если и делитель, и делимое равны нулю, то возникает исключение EInvalidOp) При обращении к файлу, например при попытке загрузить файл иллюстрации с помощью метода LoadFromFile. Наиболее частой причиной является отсутствие требуемого файла или, в случае использования сменного диска, отсутствие диска в накопителе 41 Типичные исключения Тип исключения EInOutError EOLEException Возникает При обращении к файлу, например при попытке открыть для чтения несуществующий файл При выполнении операций с базой данных, например при попытке открыть несуществующую базу данных, если для доступа к базе данных используются ADO-компоненты (чтобы иметь возможность обработки этого исключения, в директиву uses надо добавить ссылку на модуль ComObj) 42 Вывод сообщения о неверных данных (функция MessageDlg) r := MessageDlg(Сообщение, Тип, Кнопки, РазделСправки) где: o Сообщение – текст сообщения; o Тип – тип сообщения. Сообщение может быть информационным (mtInformation), предупреждающим (mtWarning) или сообщением об ошибке (mtError). o Кнопки – список кнопок, отображаемых в окне сообщения; o РазделСправки — идентификатор раздела справочной информации, который появится на экране, если пользователь нажмет клавишу <F1>. Если вывод справки не предусмотрен, то в качестве 43 параметра следует указать ноль. Тип сообщения (функция MessageDld) Сообщение Тип сообщения Warning (Внимание) mtWarning Error (Ошибка) mtError Information (Информация) mtInformation Confirmation (Подтверждение) mtConfirmation Значок 44 Идентификаторы кнопок (функция MessageDld) Идентификатор mbYes mbNo mbOK mbCancel mbHelp Кнопка Yes No OK Cancel Help 45 Значения функции MessageDlg (функция MessageDld) Значение mrYes mrNo mrOK mrCancel Диалог завершен нажатием кнопки Yes No OK Cancel Для вывода сообщения вместо функции MessageDlg можно использовать процедуру ShowMessage. Эта процедура выводит окно с сообщением и кнопкой OK. ShowMessage('Надо ввести данные в оба поля'). 46 47 48 1.3 Откладка программы в среде Delphi Компилятор генерирует выполняемую программу (exeфайл) только в том случае, если в исходной программе нет синтаксических ошибок. Если в программе есть ошибки, то программист должен их устранить. Процесс устранения ошибок носит итерационный характер. Обычно сначала устраняются наиболее очевидные ошибки, например объявляются необъявленные переменные. После очередного внесения изменений в текст программы выполняется повторная компиляция. 49 Сообщения компилятора об ошибках Сообщение Вероятная причина Undeclared identifier Используется переменная, не объявленная в разделе var. (Необъявленный идентификатор) Ошибка при записи имени переменной. Unterminated string (Незавершенная строка) Incompatible types (Несовместимые типы) При записи строковой константы, например сообщения, не поставлена завершающая кавычка В инструкции присваивания тип выражения не соответствует или не может быть приведен к типу переменной, получающей значение выражения. Тип фактического параметра процедуры или функции не соответствует или не может быть приведен к типу формального параметра Missing operator or semicolon После инструкции не поставлена точка с запятой (Отсутствует оператор или ;) Could not create output file Программа, над которой идет работа, запущена. (Невозможно создать exe-файл) 50 Предупреждения и подсказки При обнаружении в программе неточностей, которые не являются ошибками, компилятор выводит подсказки (Hints) и предупреждения (Warnings). Например, часто выводимой подсказкой является сообщение об объявленной, но не используемой переменной: Variable ... is declared but never used in ... Сообщение Причина Variable... is declared but never used Переменная объявлена, но не используется in ... Variable ... might not have been initialized. В программе нет инструкции, которая (Вероятно, используется присваивает переменной начальное значение неинициализированная переменная) 51 Отладка программ Процесс выявления причин обнаруженной ошибки, определение места (локализация) ошибки в программе и исправление ошибочно реализованного программного кода обычно называется отладкой. Если при инспекции кода выявить ошибки не удается, далее наступает основной способ отладки – отладочное выполнение программы (или трассировка), в ходе которого работа программы может быть приостановлена для просмотра значений тех или иных переменных программы с целью обнаружения ситуаций, когда эти значения не соответствуют предполагаемых. Тем самым, задача трассировки – обнаружение информационных признаков проявления ошибки. 52 Для определения неявных ошибок, связанных с логикой построения алгоритма и программы, приводящих к недопустимым результатам вычислений, в Delphi реализован удобный механизм отладки – встроенный отладчик (Debugger), контролирующий ход выполнения программы. Он выполняет трассировку программы без ее изменений с помощью следующих действий: 1) остановки выполнения программы в указанной точке; 2) выполнения программы построчно (по шагам); 3) перезапуска программы без ее завершения; 4) получения, назначения и изменения значений любых переменных и параметров программы. 53 Задание точек останова. Во время запуска программы ее инструкции выполняются последовательно от начала до конца со скоростью работы компьютера. Удобным средством, позволяющим прервать работу программы в нужном месте, является использование точек останова (breakpoints). Точка останова определяет оператор в программе, перед выполнением которого работа программы будет прервана и управление будет передано среде Delphi. Debug → Toggle Breakpoint (аналогично нажатию клавиши <F5>) 54 Более широкие возможности определения точки останова можно задать в диалоговом окне Add Source Breakpoint, которое вызывается командой меню Run → Add Breakpoint → Source Breakpoint. 56 Назначение полей диалогового окна Add Source Breakpoint: o Filename - отображает имя файла программы, куда добавляется точка останова; o Line number содержит номер строки программы, в которую добавляется точка останова; o в поле Condition вводится условие, при выполнении которого программа приостановит свою работу в данной точке (например, если значение переменной равно некоторой величине); o в поле Pass count вводится число пропусков задаваемой точки останова. Если в это поле ввести число, отличное от нуля, то программа приостановит свою работу в этой точке только после того, как инструкция, содержащаяся в строке с точкой останова, будет выполнена указанное число раз. После щелчка на кнопке ОК точка останова будет добавлена в 57 программу, а строка ее содержащая выделится цветом. Для изменения характеристики точки останова надо воспользоваться опцией меню View → Debug Windows → Breakpoints, и в появившемся диалоговом окне Breakpoint List из контекстного меню строки, содержащей точку останова, выбрать команду Properties. В появившемся диалоговом окне Add Source Breakpoint нужно внести необходимые изменения. 58 Пошаговое выполнение программ Для выполнения программы в пошаговом режиме (режиме трассировки) используются команды, доступные из меню Run и панели инструментов Debug. 59 o Команда Step Over (<F8>) обеспечивает пошаговое выполнение программы, но при этом вызов подпрограмм рассматривается как один неделимый шаг (т.е. без перехода внутрь подпрограмм). o Команда Trace Info (<F7>) обеспечивает пошаговое выполнение программного кода программы, включая содержимое вызываемых подпрограмм (т.е. с переходом внутрь подпрограмм). o Команда Trace to Next Source Line (<Shift>+<F7>) пошагово выполняет программу до следующей строки исходного текста с заходом в подпрограммы. o Команда Run to Cursor (<F4>) обеспечивает выполнение без останова программного кода между текущей строкой останова до 60 строки, в которой находится курсор. Принудительное прерывание работы программы Если программа запущена из среды Delphi, ее работу можно прервать в любой момент с помощью команды меню Run → Program Reset или комбинацией клавиш <Ctrl>+<F2>. 61 Наблюдение за значениями переменных Для наблюдения значений переменных в момент останова выполнения программы достаточно расположить указатель мыши на имени переменной – в результате значение переменной появится в виде всплывающей подсказки. 62 Дополнительная возможность для наблюдения значений переменных состоит в использовании специального окна Watch List, которое используется в отладочном режиме для наблюдения за изменением значений переменных, помещенных в это окно. Окно наблюдения Watch List вызывается командой главного меню View → Debug Windows → Watches. Состав отображаемых в этом окне переменных может формироваться непосредственно программистом. Для добавления переменной в окно для наблюдения нужно из контекстного меню окна Watch List выбрать команду Add Watch…, после чего Delphi выведет диалоговое окно Watch Properties, в котором можно задать имя переменной или записать нужное выражение в поле Expression. 63 64 Поле Repeat count определяет количество показываемых элементов массивов данных, поле Digits – количество значащих цифр для отображения вещественных данных, переключатель Enabled – разрешает/запрещает отображение значения переменной (вычисление выражения). Остальные элементы определяют вид представления значения. После нажатия на кнопку ОК переменная (выражение) будет добавлена в окно наблюдения Watch List. Так как переменные программы существуют только во время ее выполнения, то после имени переменной выводится сообщение «process not accessible» (процесс недоступен). Для удаления переменной (выражения) из окна наблюдения достаточно выделить строку, содержащую соответствующую переменную (выражение), и нажать клавишу <Delete>. 65