Контекстное всплывающее меню — компонент PopupMenu
Контекстное меню привязано к конкретным компонентам. Оно всплывает, если во время, когда данный компонент в фокусе, пользователь щелкнет правой кнопкой мыши. Обычно в контекстное меню включают те команды главного меню, которые в первую очередь могут потребоваться при работе с данным компонентом.
Контекстному меню соответствует компонент PopupMenu. Поскольку в приложении может быть несколько контекстных меню, то и компонентов PopupMenu может быть несколько. Оконные компоненты: панели, окна редактирования, а также метки и др. имеют свойство PopupMenu, которое по умолчанию пусто, но куда можно поместить имя того компонента PopupMenu, с которым будет связан данный компонент.
Формирование контекстного всплывающего меню производится с помощью Конструктора Меню, вызываемого двойным щелчком на PopupMenu, точно так же, как это делалось для главного меню. Обратим только внимание на возможность упрощения этой работы. Поскольку разделы контекстного меню обычно повторяют некоторые разделы уже сформированного главного меню, то можно обойтись копированием соответствующих разделов. Для этого, войдя в Конструктор Меню из компонента PopupMenu, щелкните правой кнопкой мыши и из всплывшего меню выберите команду Select Menu (выбрать меню). Вам будет предложено диалоговое окно, в котором вы можете перейти в главное меню. В нем вы можете выделить нужный вам раздел или разделы (при нажатой клавише Shift выделяются разделы в заданном диапазоне, при нажатой клавише Ctrl можно выделить совокупность разделов, не являющихся соседними). Затем выполните копирование их в буфер обмена, нажав клавиши Ctrl-C. После этого опять щелкните правой кнопкой мыши, выберите команду Select Menu и вернитесь в контекстное меню. Укажите курсором место, в которое хотите вставить скопированные разделы, и нажмите клавиши чтения из буфера обмена — Ctrl-V. Разделы меню вместе со всеми их свойствами будут скопированы в создаваемое вами контекстное меню.
В остальном работа с PopupMenu не отличается от работы с MainMenu. Только не возникает вопросов объединения меню разных форм: контекстные меню не объединяются.
Контрольні питання
1. Навести характеристику поняття головного та локального меню прикладного застосування
2. Навести характеристику компонентів меню
АУДИТОРНЕ ЗАНЯТТЯ
ЗМІСТОВИЙ МОДУЛЬ 6: ПРОГРАМУВАННЯ З ГРАФАМИ. ВІЗУАЛЬНІ КОМПОНЕНТИ. БАЗИ ДАНИХ
ТЕМА 6.4: ОБРОБКА ВИКЛЮЧНИХ СИТУАЦІЙ
Лекція №46 –Обробка виключень
План заняття
1. Характеристика поняття глобальна обробка виключень
2. Характеристика поняття локальна обробка виключень
В Delphi введены два уровня обработки исключительных ситуаций: локальная и глобальная обработка. Глобальная обработка исключений производится только в том случае, если для возникшей исключительной ситуации не создан локальный обработчик.
Глобальная обработка исключений осуществляется с помощью объекта Application,который есть у любого приложения. Данный объект генерирует событие OnExceptionв случае получения от системы сообщения о возникновении ошибки. Глобальная обработка ошибок реализуется путем создания обработчика этого события. По умолчанию при возникновении любых динамических ошибок вызывается метод HandleException (Sender: Object),который выводит на экран окно, содержащее информацию об ошибке. Данный метод не устраняет причины исключения, а только форсированно прекращает выполнение приложения.
Для того чтобы создать собственный глобальный обработчик исключения, удобно использовать компонент ApplicationEvents, который появился только в Delphi 5. Следует помнить, что в более ранних версиях Delphi такой компонент отсутствует, поэтому создание глобального обработчика исключений будет для программиста более трудоемким.
Необходимый код обработки исключительной ситуации помещается в обработчик события OnExceptionкомпонента ApplicationEvents. Этот обработчик создается с помощью Инспектора объектов.
Пример кода процедуры глобальной обработки исключений, которая выводит соответствующее сообщение о возникшей ошибке, приведен в следующем листинге.
Локальная обработка исключений. Локальная обработка исключений осуществляется при помощи двух конструкций: try. . exceptи try. . finally.Эти конструкции очень похожи в использовании и описании, но имеют различное назначение.
В первой части этих конструкций, то есть в блоках try,записываются операторы приложения, выполнение которых может привести к возникновению исключительной ситуации, например, открытие файла или обработка данных, введенных пользователем. Н блоке tryможет содержаться несколько операторов.
Конструкция try. . exceptимеет две секции и записывается и таком формате:
Здесь Операторы_1 - это блок операторов, выполнение которых может привести к ошибке, а Операторы__2 - блок операторов, которые выполняются при возникновении ошибки.
Конструкция try. .except используется для перехвата исключительной ситуации и обеспечивает возможность ее дальнейшей обработки, то есть выработки соответствующей реакции на I возникшую ошибку.
В том случае, если при выполнении операторов из блока try возникла исключительная ситуация, управление передается в сек- js цию except. В противном случае операторы секции except игнорируются. Операторы секции except служат для того, что- I бы ликвидировать исключительную ситуацию и тем самым вое- > становить работоспособность программы. Когда используется I конструкция try. .except, для обрабатываемых с ее помощью исключений глобальный обработчик не вызывается.
Если возникает необходимость анализировать класс исключительной ситуации с целью ее обработки, разработчик приложения \ может разбивать секцию except на несколько частей с помощью конструкции on. .do. Такая конструкция применяется в случае, если в зависимости от класса исключения должны производиться различные действия по обработке этого исключения. Данная кон-струкция имеет следующий синтаксис:
Здесь Оператор_1 - это оператор обработки исключения указанного класса, Опвратор__2 - является оператором, выполняемым в случае, если исключительная ситуация не относится к заданному классу. В качестве идентификатора выступает произ-вольное имя переменной, заданное программистом. Идентификатор указывать необязательно.. Он представляет собой экземпляр класса исключения, который может быть использован для доступа к объекту возникшего исключения. Эта переменная является лая кальной и доступна только внутри данной конструкции.
Если класс возникшей исключительной ситуации не совпадает с указанным, то выполняется оператор, приведенный после слова else. В случае использования нескольких конструкций on. . do, элемент else должен располагаться в конце секции except, чтобы относиться ко всему набору конструкций on. . do.
Приложение, содержащее данную процедуру, предполагает выполнение следующих операций по нажатию кнопки Buttonl:
1)Создается файл C:\filel.txt, который затем открывается на запись.
2)Уже существующий файл C:\file2.txt открывается на чтение.
3)Содержимое второго файла переписывается в первый.
При возникновении какой-либо ошибки пользователю выдается соответствующее сообщение.
Конструкция try. . finallyиспользуется в случае, когда необходимо, чтобы некоторые действия были обязательно выполнены, в независимости от того, произошла ошибка или нет (например, необходимо в любом случае освободить используемую оперативную память или закрыть какой-либо файл). Данная конструкция имеет такой формат: •
Здесь Операторы_1 - это операторы, выполнение которых может привести к ошибке, а Операторы_2 - это операторы, которые должны быть обязательно выполнены.
Отличие данной конструкции от конструкции try. . exceptсостоит в том, что она не ликвидирует исключительную ситуацию, а лишь обеспечивает обязательное выполнение определенных действий. Поэтому если возникла такая ситуация, то после выполнения операторов, расположенных в секции finally,происходит обращение к глобальному обработчику исключения. Если программист не создал своего глобального обработчика, то будет выдано стандартное сообщение о возникшей ошибке и выполнение программы будет остановлено.
Конструкции try. .exceptи try. .finallyдолжны размещаться одна в другой, то есть быть вложенными.
Могут возникать ситуации, когда необходимо программно вызывать исключительную ситуацию. Оператор Raiseпозволяет создать объект исключения - экземпляр класса TExceptionили его потомка. Данный оператор записывается в таком формате:
Raise ExceptionClass.Create;
Здесь в качестве ExceptionClassиспользуется необходимый класс исключительной ситуации. Вместо метода Createдля создания объекта исключения могут использоваться и другие методы, приведенные выше (например метод CreateFmtHelp).
Обработка исключений, вызываемых программным образом, ничем не отличается от обработки стандартных исключений. Иначе говоря, экземпляр данного класса создается после вызова исключительной ситуации и существует до тех пор, пока эта ситуация не будет обработана, а затем автоматически уничтожается.
Ниже показан пример вызова исключительной ситуации.
В данном примере исключительная ситуация генерируется в случае, когда при вызове функции Range ее параметр Resultвыходит за пределы, определяемые параметрами Minи Мах.Сообщение, указанное в качестве параметра метода CreateFmt, будет выводиться на экран в качестве стандартного. Другими словами, в случае возникновения данного исключения Свойство Messageкласса TExceptionприобретает значение, равное заданной строке.
Конрольні питання
1. Надати характеристику поняття глобальна обробка виключень
2. Надати характеристику поняття локальна обробка виключень
АУДИТОРНЕ ЗАНЯТТЯ
ЗМІСТОВИЙ МОДУЛЬ 6: ПРОГРАМУВАННЯ З ГРАФАМИ. ВІЗУАЛЬНІ КОМПОНЕНТИ. БАЗИ ДАНИХ
ТЕМА 6.4: ОБРОБКА ВИКЛЮЧНИХ СИТУАЦІЙ
Дата добавления: 2014-12-01; просмотров: 1575;