Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

29  Порядок выполнения программы и блок finally

Try, except, finally, raise. 1) try помечает начала защищённого участка кода. 2) except обозначает конец защищённого участка кода и начало операторов обработки исключения. Синтаксис следующий: on ТипИсключения do. 3)finally специфицирует код, который выполнится в любом случае, даже если произошло исключение. В рамках фрагмента кода, помеченного этим ключевым словом, как правило выполняются разного рода завершающие операции. 4)raise позволяет породить исключительную ситуацию. Большинство исключений, с которыми программист сталкивается, в Delphi генерируются системой, но можно самостоятельно породить исключение в программе, когда на этапе выполнения программы вдруг обнаружится некорректность или противоречивость данных. Ключевое слово raise можно так же использовать внутри обработчика исключений, чтобы породить исключения заново. Это может потребоваться для того, чтобы передать исключение следующему обработчику. В примере выполняются вычисления и при этом на экране появляется курсор в виде песочных часов. var i, j:integer; begin Screen. Cursor:= crHourglass; j:=0; for i:=1000 downto 0 do j:=0 + j div i; messageDlg('Всего'+IntToStr(J),mtInformation,[mbOK],0); Screen. Cursor:= crDefault end; В алгоритме есть ошибка, переменная I достигает значения 0 и используется как делитель. При попытке деления на ноль программа прерывается, но курсор по умолчанию, но курсор по умолчанию не будет установлен. Для того, чтобы исправить ситуацию, используется блок try-finally. var i, j:integer; begin Screen. Cursor:= crHourglass; j:=0; try for i:=1000 downto 0 do j:=0 + j div i; messageDlg('Всего'+IntToStr(J),mtInformation,[mbOK],0) finally Screen. Cursor:= crDefault end end; В результате выполнения такого кода, программа восстанавливает вид курсора вне зависимости от того, возникла исключающая ситуация или нет. Рассматриваемый код не осуществляет обработку исключения, он просто обеспечивает корректное выполнение программы в случае его возникновения. За блоком try может следовать либо блок except либо блок finally, но не оба этих блока одновременно. Если же не обходимо добавить в программу код, обрабатывающий исключение, то стандартное решение – использовать 2 вложенных блока try, связывая внутренний блок с finally, внешний блок – с except, или наоборот. var i, j:integer; begin Screen. Cursor:= crHourglass; j:=0; try try for i:=1000 downto 0 do j:=0 + j div i; messageDlg('Âñåãî'+IntToStr(J),mtInformation,[mbOK],0) finally Screen. Cursor:= crDefault end except on EDivByZero do raise Exception. Create(‘Тдыщ’) end end; Finally – это хорошая защита от утечек в памяти и некорректного использования ресурсов. Её надо использовать постоянно и без сомнения. Обработка самого исключения не столь важна, так как Делфи с этим прекрасно справляется самостоятьельно.

НЕ нашли? Не то? Что вы ищете?

30  Классы исключений

В Delphi исключения – это объекты, содержащие информацию, идентифицирующую ошибку и место её возникновения. В примерах выше осуществлялся перехват исключения EDivByZero, определенного в Делфи. Существует целый ряд исключений, относящихся к различным проблемам, возникающим в ходе выполнения программы. Среди них такие как неверное динамическое приведение типов, проблема ресурсов Windows (нехватка памяти), проблемы чтения файлов (например, программа пытается прочитать ресурс изображения из файла, в котором этого ресурса нет), ошибки компонентов (использование неправильного индекса) и так далее. В то же время, программист сам может лего создавать собственные классы исключений.

31  Исключения и отладка приложений

При запуске программы в среде Delphi, программа работает в отладочной среде, и при запуске программы, отладчик останавливает программу в случае возникновения исключительной ситуации. Во время отладки и тестирования это очень удобно. Можно временно отключить режим “Stop on Delphi Exception”: Tools à Debugger Options à Language Exceptions. В большинстве случаев неизвестно, какая операция может привести к возникновению исключения неизвестно, какая операция может привести к возникновению исключения. Так же невозможно заключить каждый кусок программы в блок try-except. Вместо этого можно использовать следующий подход. Обработка всех исключений возлагаются на Delphi, а затем исключения передаются программисту. В Делфи это можно реализовать при помощи обработчика событий. onExcepion глобального объекта Application. Все связанные с этим действия выполняются при помощи компонента Application Events. Добавим на главную форму приложения компонент ApplicationEvents, а так же обработчик событий onException. procedure TForm1.ApplicationEvents1Exception(Sender: TObject; E: Exception); var FileName: string; LogFile: TextFile; begin FileName:=ChangeFileExt(Application. ExeName, '.log'); AssignFile(LogFile, FileName); if FileExists(FileName) then Append(LogFile) else Rewrite(LogFile); Writeln(LogFile, DateTimeToStr(Now)+':'+E. Message); if not CheckBoxSilent. Checked then Application. ShowException(E); CloseFile(LogFile) end; Пример использует для вывода простейший текстовый файл или, если в чекбоксе стоит галочка, выодит на экран методом Application. ShowException.

32  Класс TObject, использование методов класса TObject

TObject является предком всех классов Delphi. Иерархия классов, написанная на OP, обладает единичным корнем. Это позволяет использоать тип данных TObject в качестве замены любого класса в системе. Конструктор. Конструктор этого класса выполняет стандартгые действия по созданию объекта. - выделяет память для объекта (с помощью методов NewInstance и
InstanceSize); - инициализирует поля (метод InitInstance); Конструктор этого класса объявлен виртуальным и без параметров, однако в некоторых стандартных классах он переопределяется. Деструктор. Выполняет общие стандартные действия по уничтожению объектов (вызывает метод FreeInstance, который в свою очередь вызывает InstanceSize). Классовые методы. class function ClassInfo: Pointer – указатель на таблицу RTTI; class function ClassName: ShortString – имя класса; class function ClassNameIs (const Name: string): Boolean; class function ClassParent: TClass – указатель на класс непосредственного предка; class function InheritsFrom (AClass: TClass): Boolean – если предок, то истина; class function NewInstance: TObject; virtual; class function InstanceSize: LongInt;

33  Понятие события

Событие – это свойство, которое ссылается не на данное, а на метод. Т. е. событие – это свойство типа «указатель на метод». Когда пользователь каким-то образом воздействует на компонент, компонент генерирует событие. Другие события порождаются системой в ответ на вызов метода или изменения одного из свойств данного или другого компонента. Например, если установить фокус ввода на каком-то компоненте, то компонент, на котором был раньше фокус, теряет его, инициализируя соответствующее событие. С точки зрения технической реализации, большинство событий в Делфи инициализируются при получении соответствующего сообщения от Windows. Сообщение – это извещение о некотором имевшем место событии, посылаемое системой Windows в адрес приложения. Любые действия пользователя – щелчок мыши, изменение размеров окна – вынуждают Windows отправить приложению сообщение о том, что произошло в системе. Сообщение – это определенная запись, передаваемая приложению. Она содержит сведения о том, что произошло, а так же информацию, зависящую от типа сообщения. Система сообщений Windows состоит из 3х компонентов: 1) очередь сообщений (своя для каждого приложения); 2) цикл сообщений (группа операций, циклически выполняющих выборку сообщений для приложения и распределяющих их по соответствующим окнам); 3) процедура окна (получение сообщения и выполнение соответствующих действий).

34  Обработчики событий. Делегирование в Delphi

Чтобы осуществить обработку такого события, как, например, щелчок по кнопке, необходимо создать подкласс класса TButoon и добавить в него обработчик события. На практике, создавать новый класс не рационально: это достаточно сложная операция. Обычно в Делфи обработчик события – это метод формы, содержащей этот компонент, а не метод самого компонента. Т. е. обработка событий, имеющих отношение к компоненту выполняется средствами владельца компонента, т. е. формы, на которой он расположен. Такая технология называется делегированием и она является основой компонентной модели. Реализация событий в Делфи основана на специальном элементе языка, называемом указателем на методы. Технически тип указатель на методы – это процедурный тип, обладающий неявным параметром Self. Т. е. в отличие от указателей на функцию, указатель на метод хранит в себе 2 адреса: адрес метода и адрес экземпляра объекта. Когда указатель на метод используется для обращения к методу, адрес экземпляра объекта появляется в коде под именем Self. Объявление такого типа такое же, но в конце добавляется слово of object: type TNotifyEvent = procedure (Sender: TObject) of object. Пример. TAnimal = class private FSay: TNotifyEvent; public property OnSay: TNotifyEvent read FSay write FSay; procedure DoSay(Sender: TObject); end; метод диспетчеризации: procedure TAnimal. DoSay; begin if Assigned(FSay) then FSay(Self) end; обработчик события: procedure TForm1.DogSay(Sender: TObject); begin vclbl. Caption:='Ððððð'; vclbl. Font. Size:=random(9)+10 end; Метод диспетчеризации – метод, соответствующий каждому событию, несущий ответственность за исполнение метода обработки.

35  События стандартных визуальных компонент и их использование

Здесь кароче та же хрень, что и просто про события, только про стандартные компоненты. См. 33 и 34 вопросы.

36  Создание собственных событий и их обработка

Здесь кароче та же хрень, что и просто про события, только про создание собственных событий. См. 33 и 34 вопросы.

37  Компонентно-ориентированное программирование

Определение компонента более общее, чем объекта. Объект инкапсулирует данные и связанное с ними поведение. Компонент инкапсулирует некоторые полезные программные абстракции (они привносят возможность их соединения, комбинации для построения приложения). Компонент – это то, что может быть спроектировано для построения с другими компонентами.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6