Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекції для 3ОТ1.doc
Скачиваний:
10
Добавлен:
21.02.2016
Размер:
16.31 Mб
Скачать

Контекстное всплывающее меню — компонент 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, который затем открывается на запись.

  1. Уже существующий файл C:\file2.txt открывается на чтение.

  2. Содержимое второго файла переписывается в первый.

При возникновении какой-либо ошибки пользователю выдает­ся соответствующее сообщение.

Конструкция 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 приобретает значение, равное за­данной строке.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]