Лекция_3_Дельфи.pptx
- Количество слайдов: 29
Использование строчного редактора, главного и контекстного меню, добавление новой формы в проект и обработка исключительных ситуаций Лекция 3
Memo Компонент Memo (вкладка Standard) является редактором многострочного текста, в котором формат текста (шрифт, его атрибуты, выравнивание) одинаков для всего текста. Он снабжен многими функциями, свойственными большинству редакторов со стандартными комбинациями горячих клавиш для выделения фрагментов текста, работы с буфером обмена, отмены последней команды редактирования. Весь текст окна Memo можно рассматривать как единое целое, представленное одной строкой типа string, внутри которой используются разделители типа символов возврата каретки и перевода строки, либо как N отдельных строк, разделенных между собой клавишей Enter.
Основные свойства компонента Memo
Основные свойства компонента Memo
Методы свойства Lines Для работы со строками используется свойство Lines, к которому можно применять следующие методы
Методы компонента Memo При работе с компонентом часто используются следующие методы: • Clear – позволяет очистить содержимое компонента Memo. Например, Memo 1. Clear; • Set. Focus – делает компонент Memo активным (устанавливает фокус). Например, Memo 1. Set. Focus Пример использования компонента procedure TForm 1. Button 1 Click(Sender: TObject); var a: array[1. . 5] of string; i: integer; st: string; begin if Memo 1. Lines. Count=0 //исходные данные then begin Show. Message(‘Исходные данных нет’); exit end else begin st: =’Введенный массив: ’+#13; for i: =1 to 5 do begin a[i]: =Memo 1. lines[i-1]; st: =st+Int. To. Str(i)+a[i]+#13 end; Show. Message(st) end;
Компонент Main. Menu (вкладка Standard) представляет собой главное меню программы. Он является невизуальным, место его размещения на форме в процессе проектирования не имеет значения для пользователя, так как при выполнении приложения он увидит только сгенерированное этим компонентом меню. После установки компонента на форму необходимо создать пункты меню. Для этого следует либо дважды щелкнуть на компоненте левой кнопкой мыши, либо щелкнуть на нем правой кнопкой и выбрать в контекстном меню команду Menu Designer, либо щелкнуть в правой половине строки свойства Items в инспекторе объектов: Для создания нового пункта меню необходимо поместить курсор в рамку из точек, обозначающую место расположения раздела, и задать в Инспекторе Объектов его свойство Caption, которое обозначает подпись пункта меню. Если в свойство Caption ввести символ «–» , то будет создана разделительная черта, можно воспользоваться командой контекстного меню Insert. Separator (Вставить разделитель).
Компонент Main. Menu Каждый пункт меню или подменю, т. е. каждый элемент свойства Items, является объектом типа TMenu. Item, обладающим своими свойствами, методами, событиями. Свойство Name задает имя объекта, соответствующего разделу меню. Во избежание путаницы рекомендуется задавать объектам осмысленные имена. Для вставки нового пункта меню необходимо выбрать пункт меню, выше или левее которого требуется сделать вставку и нажать клавишу Ins или вызвать команду Insert из контекстного меню (появляется при щелчке на окне правой кнопкой мыши). Чтобы переместить пункт меню в другое место, необходимо отбуксировать его туда мышью. Для удаления выбранного пункта меню нужно нажать Del или вызвать команду Delete из контекстного меню. Для создания подменю необходимо выбрать пункт меню, для которого требуется создать подменю, и нажать Ctrl+-> или вызвать команду Create Submenu из контекстного меню. В процессе конструирования меню инспектор объектов отражает свойства пункта меню, в данный момент создаваемого пользователем.
Компонент Main. Menu Свойства пунктов меню
Компонент Main. Menu При работе с меню основным используемым событием является событие On. Click, возникающее при щелчке на пункте меню или при нажатии «горячих» клавиш. К обработчику этого события можно перейти, используя вкладку Events инспектора объектов или щелкнув мышью по пункту меню на форме (обратите внимание – на форме, а не в Конструкторе Меню!). Если пункты меню повторяют какие-либо действия, т. е. события для данных действий уже существуют, то необходимо только в инспекторе объектов данного пункта меню выбрать уже сгенерированное событие.
Компонент Popup. Menu (вкладка Standard) предназначен для формирования контекстного меню. Контекстное меню создается аналогично главному. Основное отличие заключается в том, что создание его завершается привязкой к одному или несколькими элементам управления. Свойство элементов Popup. Menu должно быть в значении Popup. Menu 1 (имя компонента): , в противном случае контекстное меню при нажатии на правую клавишу мыши не вызовется.
Компонент Popup. Menu Для компонента Popup. Menu основное событие – On. Popup, значение которого аналогично On. Click для Main. Menu
Добавление в проект новой формы Каждое приложение может иметь несколько форм, одна из которых является главной и отображается первой при запуске программы. При закрытии главного окна (формы) приложения прекращается работа всего приложения, при этом также закрываются все другие окна приложения. В начале работы Delphi по умолчанию делает главной первую форму (с первоначальным названием Form 1). Для подключения новой формы к проекту нужно воспользоваться командой File/New/Form или щелчком мыши на командной кнопке New Form (Создать форму). При этом появятся новая пустая форма и связанный с ней модуль. Имя формы, данное ей Delphi по умолчанию, можно изменить на имя, более подходящее по смыслу. Переключаться между имеющимися в проекте формами можно с помощью командной кнопки View Form (Отобразить форму) или комбинацией Shift+F 12.
Добавление в проект новой формы У программы может быть только одна главная форма – это форма, которая показывается при запуске программы, и неограниченное число подчиненных форм, которые исходно на экране не появляются, а вызываются по команде из программы с помощью специальных методов. При конструировании приложения, состоящего из нескольких форм (окон), указать главную форму можно в окне параметров проекта, вызываемом командой Project/Options…. Главная форма выбирается в списке Main form вкладки Forms. Форма с информационным окном About Box При работе с программой иногда возникает необходимость вывода справки о приложении. Для этой цели можно использовать форму с информационным окном About. Box, для вызова которой воспользуемся пунктом главного меню File/New/Other, в диалоговом окне New Items на закладке Form выберем пиктограмму About. Box. Информационное окно имеет вид формы, на которой размещены компоненты Label, Image и Button. Работать с About. Box можно как с обычной формой.
Организация взаимодействия форм Главная форма должна знать о существовании другой формы, это достигается ссылкой на модуль формы в предложении Uses, то есть, если одна форма выполняет какиелибо действия с другой формой, то в списке uses раздела implementation (или interface) модуля первой формы должна быть ссылка на модуль второй формы, например: Implementation uses Unit 2; //Ссылка на модуль второй формы Ссылку на модуль другой формы можно устанавливать программно, но Delphi позволяет автоматически добавить ссылки следующим образом: на этапе разработки нужно активизировать главную форму, после чего обратиться к команде File/Uses Unit. В появившемся диалоговом окне нужно выбрать имя нужного модуля и щелкнуть на кнопке ОК. Вставляется ссылка в предложение, стоящее за зарезервированным словом Implementation, так как обычно главное окно в своей интерфейсной части не ссылается на элементы интерфейсной части второго окна. После создания новой формы сразу нужно ее сохранить.
Организация взаимодействия форм Диалоговое окно Information Если программист забудет сослаться на модуль, подключенный к проекту, Delphi при первой же трансляции программы сообщит об этом в диалоговом окне Information и предложит вставить недостающую ссылку. В диалоговом окне сообщается о том, что одна форма использует другую, но модуль второй формы отсутствует в списке uses модуля первой формы. Для автоматического добавления ссылки на модуль достаточно нажать кнопку Yes. Форма может выполнять различные операции не только с другой формой, но и с её компонентами. В этом случае также нужна ссылка на модуль другой формы. Например, Label 1. Caption: =Form 2. Edit 1. Text. Здесь при нажатии кнопки Button 2 формы Form 1 в надписи Label 1 отображается текст редактора Edit 1, расположенного на форме Form 2.
Особенности модальных форм Форма может быть модальной и немодальной. Немодальная форма позволяет переключиться в другую форму приложения без своего закрытия. Модальная форма требует обязательного закрытия перед обращением к любой другой форме приложения. Менеджер проекта автоматически подключает новую форму к списку используемых форм и обеспечивает все необходимые действия по ее инициализации. Для того чтобы показать на экранее созданную подчиненную форму, можно применить один из следующих методов: Имя_формы. Show; или Имя_формы. Show. Modal.
Особенности модальных форм Метод Show вызывает форму в немодальном режиме, а метод Show. Modal вызывает форму в модальном режиме и возвращает результат диалога с пользователем. Модальная форма полностью берет на себя дальнейшее управление программой, поэтому оператор, следующий за вызовом Show. Modal, получит управление только после её закрытия. Для удаления формы с экрана используются методы Hide (спрятать) и Close (закрыть). Для модальной формы определено свойство Modal. Result, доступное только во время выполнения приложения. При открытии формы методом Show. Modal сначала свойство Modal. Result равно нулю (константа mr. None). Как только при обработке каких-то событий на форме свойству Modal. Result будет присвоено положительное значение, модальная форма закроется. А значение её свойства Modal. Result можно будет прочитать как результат, возвращаемый методом Show. Modal. Значения свойства Modal. Result определяются тем, какая кнопка была нажата при закрытии модальной формы, и задаются следующими константами: mr. None; mr. Ok; mr. Cancel; mr. Abort; mr. Rerty; mr. Ignore; mr. Yes; mr. No; mr. All; mr. No. To. All; mr. Yes. To. All (за префиксом mr следует название кнопки).
Исключительные ситуации В ходе выполнения программы могут возникать динамические ошибки (ошибки времени выполнения Run Time Errors), которые являются следствием неправильной работы инструкций, процедур, функций или методов программы. Для обработки динамических ошибок введено понятие исключения. Исключение – это результат выполнения некорректного оператора, вызывающий прерывание или полное прекращение работы программы. Обработка исключения состоит в нейтрализации вызвавшей его динамической ошибки. Исключения могут возникать, например, при попытке деления на ноль или в результате выполнения вычислений; в случае нехватки памяти; из-за ошибки преобразования; при попытке обращения к несуществующему элементу массива и т. д. Независимо от источника ошибки приложение информируется о его возникновении.
Исключительные ситуации Возникающие при выполнении программы динамические ошибки автоматически преобразовываются средствами Delphi в соответствующие объекты-исключения. Объект-исключение содержит информацию о типе ошибки и при возникновении исключения заставляет программу временно приостановиться. После обработки исключения объект-исключение автоматически удаляется. При работе в среде Delphi при каждой исключительной ситуации среда перехватывает управление программой. Для отмены реакции среды на исключительную ситуацию необходимо вызвать опцию Tools/Debugger Options и на вкладке Language Exceptions отменить переключатель Stop on Delphi Exceptions. В Delphi базовым классом для всех исключений служит класс Exception, от которого порождены многочисленные дочерние типы, соответствующие часто встречающимся случаям ошибок ввода/вывода, распределения памяти и т. п.
Наиболее используемые классы исключений
Обработка исключений Для обработки исключений введены две конструкции: try. . finally и try. . except. Конструкция try. . finally состоит из двух блоков (try и finally): try //операторы, выполнение которых может вызвать ошибку finally //операторы, выполняемые всегда, даже в случае ошибки end; Если в любом из операторов блока try возникает исключение, то управление передается первому оператору блока finally. Если исключение не возникло, то выполняются все операторы обоих блоков. Конструкция try. . finally не обрабатывает исключение, а выполняет действия, которые должны быть произведены даже в случае возникновения ошибки.
Обработка исключений Например, var f: File; begin Assign. File(f, 'Somefile. ext'); try // оператор, в котором возможна ошибка Reset(f); // работы с файлом Finally Close. File(f) end;
Обработка исключений Конструкция try. . except также состоит из двух блоков (try и except): try //операторы, выполнение которых может вызвать ошибку except //операторы, которые выполняются только в случае ошибки end; Конструкция try. . except работает так: если в любой из инструкций блока try возникает исключение, то управление передается первой инструкции блока except, которая ликвидирует исключительную ситуацию и восстановит работоспособность программы. Если же исключение не возникло, то инструкции блока except не выполняются.
Обработка исключений Например: var f: File; begin Assign. File(f, 'Somefile. txt'); try //оператор, в котором возможна ошибка Reset(f); // работы с файлом except Show. Message(‘Ошибка работы с файлом Somefile. txt’); Close. File(f) end;
Обработка исключений Блок except можно разбить на несколько частей с помощью конструкции on. . do, позволяющей анализировать класс исключения для его более удобной и полной обработки: Try Оператор1; Оператор2; . . . Except on Идентификатор1: класс исключения do Оператор обработки ИС этого класса; on Идентификатор2: класс исключения do Оператор обработки ИС этого класса; . . . else Операторы обработки исключения по умолчанию end;
Обработка исключений При возникновении исключительной ситуации конструкции on. . do просматриваются последовательно, в порядке их описания.
Обработка исключений Идентификатор – это локальная переменная класса исключения, которую можно использовать для доступа к объекту возникшего исключения внутри конструкции on. . do. Идентификатор (произвольное имя, заданное программистом) является необязательным элементом и может отсутствовать, при этом не ставится и разделительный знак двоеточия (: ). Стандартная обработка подразумевает вывод на экран сообщения с указанием типа ошибки, имени модуля и адреса, где она имела место. Однако ее легко переопределить: Try U: = 220. 0; R: = 0; I: =U/R; Except on EZero. Divide do Show. Message('Короткое замыкание!') end;
Обработка исключений Можно обработать исключение со стандартным сообщением кода ошибки. Например: try Reset(f); while not EOF(f) do begin … end; // возможна ошибка работы с файлом Close(f); except on E: EIn. Out. Error do Show. Message(′При выполнении файловой операции’ + #13#10 + ‘возникла ошибка №′+ Int. To. Str(E. Error. Code)) end;
Лекция_3_Дельфи.pptx