replace_if() заменяет элементы при выполнении предиката

replace_copy() копирует последовательность, заменяя элементы с указанным значением

replace_copy_if() копирует последовательность, заменяя элементы при выполнении предиката

fill() заменяет все элементы данным значением

remove() удаляет элементы с данным значением

remove_if() удаляет элементы при выполнении предиката

remove_copy() копирует последовательность, удаляя элементы с указанным значением

remove_copy_if() копирует последовательность, удаляя элементы при выполнении предиката

reverse() меняет порядок следования элементов на обратный

random_shuffle() перемещает элементы согласно случайному равномерному распределению (“тасует” последовательность)

transform() выполняет заданную операцию над каждым элементом последовательности

unique() удаляет равные соседнии элементы

unique_copy() копирует последовательность, удаляя равные соседние элементы

Сортировка.

sort() сортирует последовательность с хорошей средней эф-фективностью

partial_sort() сортирует часть последовательности

stable_sort() сортирует последовательность, сохраняя порядок следо-вания равных элементов

lower_bound() находит первое вхождение значения в отсортированной последовательности

upper_bound() находит первый элемент, больший чем заданное значение

binary_search() определяет, есть ли данный элемент в отсортированной последовательности

merge() сливает две отсортированные последовательности

Работа с множествами.

includes() проверка на вхождение

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

set_union() объединение множеств

set_intersection() пересечение множеств

set_difference() разность множеств

V. Минимумы и максимумы.

min() меньшее из двух

max() большее из двух

min_element() наименьшее значение в последовательности

max_element() наибольшее значение в последовательности

Перестановки.

next_permutation() следующая перестановка в лексикографическом порядке

pred_permutation() предыдущая перестановка в лексикографическом порядке

4. Объектная модель. Составные части объектной модели Отношения между объектами. Методы объектно-ориентированного анализа.

Объекты

Рассмотрим более пристально объекты — конкретные сущности, которые суще­ствуют во времени и пространстве.

Общая характеристика объектов

Объект — это конкретное представление абстракции. Объект обладает индивиду­альностью, состоянием и поведением. Структура и поведение подобных объектов определены в их общем классе. Термины «экземпляр класса» и «объект» взаимо­заменяемы. На рис. 9.1 приведен пример объекта по имени Стул, имеющего опре­деленный набор свойств и операций.

Индивидуальность — это характеристика объекта, которая отличает его от всех других объектов.

Состояние объекта характеризуется перечнем всех свойств объекта и текущими значениями каждого из этих свойств (рис. 9.1).

Рис. 9.1. Представление объекта с именем Стул

Объекты не существуют изолированно друг от друга. Они подвергаются воздей­ствию или сами воздействуют на другие объекты.

Поведение характеризует то, как объект воздействует на другие объекты (или под­вергается воздействию) в терминах изменений его состояния и передачи сообще­ний. Поведение объекта является функцией как его состояния, так и выполняе­мых им операций (Купить, Продать, Взвесить, Переместить, Покрасить). Говорят, что состояние объекта представляет суммарный результат его поведения.

Операция обозначает обслуживание, которое объект предлагает своим клиентам. Возможны пять видов операций клиента над объектом:

1) модификатор (изменяет состояние объекта);

2) селектор (дает доступ к состоянию, но не изменяет его);

3) итератор (доступ к содержанию объекта по частям, в строго определенном по­рядке);

4) конструктор (создает объект и инициализирует его состояние);

5) деструктор (разрушает объект и освобождает занимаемую им память). Примеры операций приведены в табл. 9.1.

Таблица 9.1. Разновидности операций

Вид операции Пример операции

Модификатор Пополнеть (кг)

Селектор КакойВес (): integer

Итератор ПоказатьАссортиментТоваров (): string

Конструктор СоздатьРобот (параметры)

Деструктор Уничтожить Робот ()

В чистых объектно-ориентированных языках программирования операции могут объявляться только как методы — элементы классов, экземплярами которых являют­ся объекты. Гибридные языки (C++, Ada 95) позволяют писать операции как свобод­ные подпрограммы (вне классов). Соответствующие примеры показаны на рис. 9.2.

Свободные подпрограммы Голосовать(имя) Выражать мнение (имя)

Иванушка

Методы:

Спать ()

Есть ()

Пить ( ) БытьГражданином( )

Рис. 9.2. Методы и свободные подпрограммы

В общем случае все методы и свободные подпрограммы, ассоциированные с конк­ретным объектом, образуют его протокол. Таким образом, протокол определяет оболочку допустимого поведения объекта и поэтому заключает в себе цельное (ста­тическое и динамическое) представление объекта.

Большой протокол полезно разделять на логические группировки поведения. Эти группировки, разделяющие пространство поведения объекта, обозначают роли, которые может играть объект. Принцип выделения ролей иллюстрирует рис. 9.3.

С точки зрения внешней среды важное значение имеет такое понятие, как обязан­ности объекта. Обязанности означают обязательства объекта обеспечить опреде­ленное поведение. Обязанностями объекта являются все виды обслуживания, ко­торые он предлагает клиентам. В мире объект играет определенные роли, выполняя свои обязанности.

В заключение отметим: наличие у объекта внутреннего состояния означает, что по­рядок выполнения им операций очень важен. Иначе говоря, объект может представ­ляться как независимый автомат. По аналогии с автоматами можно выделять ак­тивные и пассивные объекты (рис. 9.4).

Активный объект имеет собственный канал (поток) управления, пассивный — нет. Активный объект автономен, он может проявлять свое поведение без воздействия со стороны других объектов. Пассивный объект, наоборот, может изменять свое состояние только под воздействием других объектов.

Виды отношений между объектами

В поле зрения разработчика ПО находятся не объекты-одиночки, а взаимодейству­ющие объекты, ведь именно взаимодействие объектов реализует поведение систе­мы. У Г. Буча есть отличная цитата из Галла: << Самолет — это набор элементов, каж­дый из которых по своей природе стремится упасть на землю, но ценой совместных непрерывных усилий преодолевает эту тенденцию» [22]. Отношения между парой объектов основываются на взаимной информации о разрешенных операциях и ожи­даемом поведении. Особо интересны два вида отношений между объектами: связи и агрегация.

Связи

Связь — это физическое или понятийное соединение между объектами. Объект сотрудничает с другими объектами через соединяющие их связи. Связь обознача­ет соединение, с помощью которого:

1)  объект-клиент вызывает операции объекта-поставщика;

2)  один объект перемещает данные к другому объекту.

Можно сказать, что связи являются рельсами между станциями-объектами, по которым ездят «трамвайчики сообщений».

Связи между объектами показаны на рис. 9.5 с помощью соединительных линий. Связи представляют возможные пути для передачи сообщений. Сами сообщения показаны стрелками, отмечающими их направления, и помечены именами вызы­ваемых операций.

Как участник связи объект может играть одну из трех ролей;

1) актер — объект, который может воздействовать на другие объекты, но никогда не подвержен воздействию других объектов;

2) сервер — объект, который никогда не воздействует на другие объекты, он толь­ко используется другими объектами;

3) агент — объект, который может как воздействовать на другие объекты, так и ис­пользоваться ими. Агент создается для выполнения работы от имени актера или другого агента.

На рис. 9.5 Том — это актер, Мери, Колонки — серверы, Музыкальный центр — агент.

Видимость объектов

Рассмотрим два объекта, А и В, между которыми имеется связь. Для того чтобы обьект А мог послать сообщение в объект В, надо, чтобы В был виден для А.

В примере из предыдущего подраздела объект РабочийКонтроллер должен видеть [объект РабочийГрафик (чтобы иметь возможность использовать его как аргумент в 'операции Обрабатывать), Различают четыре формы видимости между объектами.

1. Объект-поставщик (сервер) глобален для клиента.

2. Объект-поставщик (сервер) является параметром операции клиента.

3. Объект-поставщик (сервер) является частью объекта-клиента.

4. Объект-поставщик (сервер) является локально объявленным объектом в опе-[ рации клиента.

На этапе анализа вопросы видимости обычно опускают. На этапах проектирова­ния и реализации вопросы видимости по связям обязательно должны рассматри­ваться.

Агрегация

Связи обозначают равноправные (клиент-серверные) отношения между объектами. Агрегация обозначает отношения объектов в иерархии «целое/часть». Агрегация обес­печивает возможность перемещения от целого (агрегата) к его частям (свойствам).

В примере из подраздела «Связи» объект РабочийКонтроллер имеет свойство регу­лятор, чьим классом является РегуляторУгла. Поэтому объект Рабочий Контроллер яв­ляется агрегатом (целым), а экземпляр РегулятораУгла — одной из его частей. Из РабочегоКонтроллера всегда можно попасть в его регулятор. Обратный же переход (из части в целое) обеспечивается не всегда.

Агрегация может обозначать, а может и не обозначать физическое включение час­ти в целое. На рис. 9.7 приведен пример физического включения (композиции) частей (Двигателя, Сидений, Колес) в агрегат Автомобиль. В этом случае говорят, что части включены в агрегат по величине.

На рис. 9.8 приведен пример нефизического включения частей (Студента, Препо­давателя) в агрегат Вуз. Очевидно, что Студент и Преподаватель являются эле­ментами Вуза, но они не входят в него физически. В этом случае говорят, что части включены в агрегат по ссылке.

Итак, между объектами существуют два вида отношений — связи и агрегация. Ка­кое из них выбрать?

При выборе вида агрегации должны учитываться следующие факторы:

1)Связи обеспечивают низкое сцепление между объектами;

2) агрегация инкапсулирует части как секреты целого;

8. Объектно-ориентированные библиотеки классов. Примеры (Turbo Vision, OWL, MFC).

От автора: К-К-К как мы будем это все рассказывать я понятия не имею???

Вообще начнем с того что такое библиотека. Библиотека – это сборка материалов связанных одной какой либо общей целью. В случае Объектно-ориентированные библиотеки классов, это сборка классов которые должны взаимодействовать с друг другом для достижения какой либо цели. Давайте для примера рассмотрим библиотеку Turbo Vision далее (TV). Данная библиотека написана на языке Pascal и предназначена для формирования интерфейса пользователя в приложениях.

Все отображаемы элементы в TV - это объекты какого либо класса. Это дает несколько преимуществ, перед функциональными библиотеками. Если нам нужно как то расширить поведение какого либо элемента или изменить как то его параметры, мы не переписываем это элемент, переписывание уже готового элемента ведет к не поддержке обратной совместимости библиотек разных версий. Нам всего лишь нужно наследоваться от уже имеющегося объекта и изменить или добавить поведение. При этом старый класс останется неизменным.

Приведем пример базовой программы на TV. Данный пример просто создает рабочую область.

program Minimal;

uses App;

var

MyApp: TApplication;

begin

MyApp. Init;//инициализация приложения

*****n;//основная работа приложения

MyApp. Done;//окончание работы приложения, освобождение системных ресурсов

end.

Для того что-бы расширить это пример приведем зададим свои комманды:

unit TutConst;

interface

const

cmOrderNew = 251;

cmOrderWin = 252;

cmOrderSave = 253;

cmOrderCancel = 254;

cmOrderNext = 255;

cmOrderPrev = 250;

cmClipShow = 260;

cmAbout = 270;

cmFindOrderWindow = 2000;

const

cmOptionsVideo = 1502;

cmOptionsSave = 1503;

cmOptionsLoad = 1504;

implementation

end.

И расширим нашу программу при помощи задания новых комманд.

program Tutor02a;

uses App, Objects, Menus, Drivers, Views, TutConst;//используемые юниты

type

TTutorApp = object (TApplication);

procedure InitStatusLine; virtual;

{ новый метод }

end;

procedure TTutorApp. InitStatusLine;{реализация мтода}

var R: TRect;

begin

GetExtent (R);

R. A.Y := R. B.Y - 1;

New (StatusLine, Init (R, {“создаем новую строку статуса”}

NewStatusDef (0, $EFFF, { “нормальный” диапазон}

NewStatusKey ('~F3~Open', kbF3, cmOpen,

{ связь с F3 }

NewStatusKey ('~F4~New', kbF4, cmNew,

{ связь с F4 }

NewStatusKey ('~Alt+F3~Close', kbAltF3, cmClose,

{ связь с Alt+F3 }

StdStatusKeys (nil)))),

{ добавляем стандартные клавиши}

NewStatusDef ($F000, $FFFF, { другой диапазон }

NewStatusKey ('~Shift+F6~Next', kbF6, cmOrderNext,

NewStatusKey ('~Shift+F6~Prev', kbShiftF6,

cmOrderPrev,

StdStatusKeys (nil))),nil))));

nil) { более определений нет}

)); { закрывающиеся скобки для New и Init }

end;

var TutorApp: TTutorApp;

begin

TutorApp. Init;

*****n;

TutorApp. Done;

end.

По сравнению с первым примером у нас в нижней области экрана, в строке статуса появились новые команды, но пункт меню связанный с Alt+F3 не активен, он будет активен только когда появиться хоть одно окно. Для инициализации меню используется метод InitMenuBar.

procedure TTutorApp. InitMenuBar;

var R: TRect;

begin

GetExtent(R);//получили размер рабочей области

R. B.Y := R. A.Y + 1;//сказали что займем одну строку

MenuBar := New(PMenuBar, Init(R, NewMenu( //создаеми меню

NewItem('~N~ew', '', kbNoKey, cmNew, hcNew,//создаем новые пункты под меню

NewItem('~O~pen...', F3'', kbF3, cmOpen, hcOpen,

NewItem('~S~ave', 'F3', kbF3, cmSave, hcSave,

NewItem('Save ~a~s...', '', kbNoKey, cmSaveAs, hcSaveAs,

NewLine(

NewItem('~E~xit', 'Alt-X', kbAltX, cmQuit, hcExit,

nil)))))))));//больше не будет объявлений

end;

А что бы мы могли реагировать на события поступаемые от пользователя на нужно перегрузить метод HandleEvent. И на этом вся сложность заканчивается.

procedure TTutorApp. HandleEvent(var Event: TEvent);

begin

inherited HandleEvent(Event); { вызываем соответствующий метод предка }

if Event. What = evCommand then { если не обработано проверить на события}

case mand of

cmOptionsVideo;

begin

SetScreenMode(ScreenMode xor smFont8x8);

{ переключаем бит режима, или делаем тут чтонибуть }

ClearEvent(Event); { помечаем события как обработанное}

end;

end;

end;

Как из всех выше перечисленных примеров TV позволяет довольно просто задавать новые команды, новые пункты меню и обрабатывать их. Это достигнуто за счет того, что все элементы в TV представлены отдельными объектами. И что бы добавить или изменить какой либо объект достаточно наследоваться от него и изменить нужную часть.

Загрузка и выгрузка объектов

Еще одна очень важная особенность TV это возможность автоматической сохранения и записи объектов в поток.

Для того, что – бы было возможно запись/чтение объектов в поток нужно сначала нужно TV научить как это делать. То есть зарегистрировать класс объекта. Что такое регистрация – это способ сообщения потоку, с каким видом объектов ему придется работать, как его идентифицировать, как считывать или записывать данные объекта. Пример регистрации стандартных объектов:

constructor TTutorApp. Init;

var R: TRect;

begin

MaxHeapSize := 8192;

EditorDialog := StdEditorDialog;

StreamError := @TutorStreamError;

RegisterObjects;//зарегистрировать объект

RegisterViews;

RegisterEditors;//зарегистрировать стандартные объеты управления

RegisterApp;

inherited Init;

Desktop^.GetExtent(R);

ClipBoardWindow := New(PEditWindow, Init(R, '', 0));

if ValidView(ClipboardWindow) <> nil then

begin

ClipboardWindow^.SetState(sfVisible, False);

InsertWindow(ClipboardWindow);

Clipboard := ClipboardWindow^.Editor;

Clipboard^.CanUndo := False;

end;

end;

Пример сохранения рабочей области экрана

procedure TtutorApp. SaveDesktop;

var DesktopFile: TBufStream;

begin

DesktopFile. Init('DESKTOP. TUT', stCreate, 1024);

{ открыл поток }

DesktopFile. Put(Desktop); { сохранения}

DesktopFile. Done; { закрытие потока}

end;

Строки которые позволяет загрузить рабочую область в память

DesktopFile. Init('DESKTOP. TUT', stOpenRead, 1024);

{открыть поток}

TempDesktop := PDesktop(DesktopFile. Get);

{ загрузить рабочую область }

DesktopFile. Done; { закрыть поток}

Группа.

Объект, в который включены другие объекты. Объекты, входящие в группу, называются элементами группы. Элементы группы, в свою очередь, могут быть группой.

Примеры групп:

1) окно в интерактивной программе, которое владеет такими элементами, как поля ввода и редактирования данных, кнопки, списки выбора, диалоговые окна и т. д. Примерами таких окон являются объекты классов, порожденных от абстрактного класса Tgroup (TDeskTop, TWindow, TDialog) в иерархии классов библиотеки Turbo Vision и объекты классов, порожденных от TWindowObject в иерархии классов библиотеки OWL;

2) агрегат, состоящий из более мелких узлов;

3) огород, состоящий из растений, системы полива и плана выращивания;

4) некая организационная структура (например, ФАКУЛЬТЕТ, КАФЕДРА, СТУДЕНЧЕСКАЯ ГРУППА).

Мы отличаем «группу» от «контейнера». Контейнер используется для хранения других данных. Примеры контейнеров: объекты класса TCollection библиотеки Turbo Vision и объекты контейнерных классов библиотеки STL в C++ (массивы, списки, очереди).

В отличие от контейнера мы понимаем группу как класс, который не только хранит объекты других классов, но и обладает собственными свойствами, не вытекающими из свойств его элементов.

Группа дает второй вид иерархии (первый вид - иерархия классов, построенная на основе наследования) - иерархию объектов (иерархию типа целое/часть), построенную на основе агрегации.

Реализовать группу можно несколькими способами.

1. Класс “группа” содержит поля данных объектного типа. Таким образом, объект “группа” в качестве данных содержит либо непосредственно свои элементы, либо указатели на них:

Type

TWindowDialog=object(TGroup)

Input1 :TInputLine;

Edit1 :TEdit;

Button1 :TButton;

{другие поля и методы}

end;

Такой способ реализации группы используется в Delphi.

2. Группа содержит поле last типа PObject, которое указывает на начало связанного списка объектов, включенных в группу. В этом случае объекты должны иметь поле next типа PObject, указывающее на следующий элемент в списке.

3. Создается связанный список записей типа TItem:

Type

PItem=^TItem;

TItem=record

next :PItem;

item :PObject;

end;

Поле item указывает на объект, включенный в группу. Группа содержит поле last типа PItem, которое указывает на начало связанного списка записей типа TItem.

Если необходим доступ элементов группы к ее полям и методам, объект типа TObject должен иметь поле owner типа TGroup, которое указывает на собственника этого элемента.

Методы группы.

Имеется два метода, которые необходимы для функционирования группы:

1) Procedure Insert(p:PObject);

Вставляет элемент в группу.

2) Procedure Show;

Позволяет просмотреть группу.

Кроме этого, группа может содержать следующие методы:

1) Function Empty:boolean;

Показывает, есть ли хотя бы один элемент в группе.

2) Procedure Delete (p:PObject);

Удаляет элемент из группы, но сохраняет его в памяти.

3) Procedure DelDisp (Var p:PObject);

Удаляет элемент из группы и из памяти.

Итератор.

Итераторы позволяют выполнять некоторые действия для каждого элемента определенного набора данных.

For all элементов набора do действия

Такой цикл мог бы быть выполнен для всего набора, например, чтобы напечатать все элементы набора. Или мог бы искать некоторый элемент, который удовлетворяет определенному условию, и в этом случае такой цикл может закончиться, как только будет найден требуемый элемент.

Мы будем рассматривать итераторы как специальные методы класса-группы, позволяющие выполнять некоторые действия для всех объектов, включенных в группу. Примером итератора является метод Show.

Нам бы хотелось иметь такой итератор, который позволял бы выполнять над всеми элементами группы действия заданные не одним из методов объекта, а произвольной процедурой или функцией пользователя. Такой итератор можно реализовать, если эту процедуру(функцию) передавать ему через параметр процедурного типа.

Type TProc=procedure(p:PObject);

Метод-итератор может объявляться таким образом:

Procedure ForEach(action:TProc);

Передаваемая итератору процедура (функция) должна быть откомпилирована с атрибутом far:

Procedure MyProc (p:PObject);far;

Метод-итератор можно сделать более удобным, если передавать ему указатель на процедуру:

Procedure ForEach (action : pointer);

2. Визуальное программирование. Среды.
Компонентный подход к созданию приложений

Под визуальным программированием чаще всего понимают конструирование форм ввода в интерактивном режиме. То - есть на экране вы видите свою форму и на нее можете перетаскивать различные визуальные и не визуальные компоненты. У каждой компоненты есть свои так называемые свойства и события, которые потдерживает данный компонент, на эти события можно «навешать» свои обработчики событий.

Свойство – это механизм доступа к полям класса. Обычно каждому свойству соответствует два метода: первый получение значения поля, а второй – это установка значения свойства. Сразу нужно оговориться, что в C++ и JAVA нет явного механизма для реализации свойств. Поэтому там обычно реализуется методы по типу getИмяСвойства() и setИмяСвойства().

Событие – это какое либо явление на которое должна отреагировать прикладная прогамма. Обработчиком событий является либо какая либо функция в (С++ или Delphi), или объект за ранее определенным интерфейсом как например в JAVA, такие объекты называются listners (прослушиватели). Но что в первом, что во втором случае все сводиться к делегированию (передаче управления) другому методу. Который отвечает за обработку (за реакцию на) данного события.

Компонент это клас удолетворяющий определенным условиям. В большинстве типизированных языков, таких как С++, JAVA, Object Pascal (Delphi) это классы унаследованные от класса (T)Component (в скобочках приписка для Delphi). Бывают так же и визуальные компоненты они унаследованы либо от класса (T)Control (С++,Object Pascal) , либо от Displayble (в J2ME) и так далее. Компоненты разрабатываются, как правило с универсальным интерфейсом, рассчитаны на многоразовое использование и интеграцию в более сложные системы. Поэтому написав одну хорошую компоненту её можно использовать где угодно.

Среды

Самые сейчас наверно широко используемые среды программирования это Borland Delphi среда для разработки приложений на Object Pascal, Microsoft Visual для разработки приложений для платформы. NET, Borland Visual С++ для С++ , Jbuilder X и eclipse для JAVA

Что такое Delphi?

Delphi – это программная среда визуального программирования и создания как приложений клиент/сервер, так и общих приложений для Windows.

Delphi – это система быстрой разработки приложений для Windows, так называемая система RAD (Rapid Application Development).

Delphi сочетает в единой среде высокопроизводительный компилятор с языком Object Pascal, визуальные механизмы программирования, инструмент создания приложений – клиентов для работы с различными локальными и удаленными базами данных.

Основой Delphi является графическая среда разработки приложений, называемая интегрированной средой разработки (Integrated Development Environment, IDE ).

Delphi, как и всякая современная среда разработки приложений основана на ООП.

В основе Delphi лежит объектно – ориентированное программирование на языке Pascal, которую Borland называет Object Pascal. Это дополненная (причём существенно) и измененная версия Borland Pascal 7.0.

Основные инструменты Delphi.

После загрузки Delphi на экране открываются четыре окна IDE: главное окно, окно проектировщика форм, окно редактора кода, окно инспектора объектов.

1.Главное окно.

Главное окно состоит из трёх частей: меню, панели инструментов и палитры компонентов. IDE содержит четыре стандартных панелей инструментов: View, Standard, Debug, Custom. Среда позволяет добавлять или удалять кнопки в панели инструментов с помощью команды Customize из локального меню или панелей инструментов.

В палитре компонентов отображаются компоненты, с помощью которых пользователь создаёт свои приложения. Пиктограммы стандартных компонентов Delphi разделены на группы, каждая группа расположена на отдельной станице.

2.Проектировщик форм Form Designer.

В окне проектировщика форм отображается форма как визуальный объект. Здесь вы определяете, как будет выглядеть ваше приложение с точки зрения пользователя, и создаёте графический интерфейс пользователя. Вы выбираете компоненты из палитры компонентов и перетаскиваете их в форму, используя мышь для точного расположения и определения размеров компонента. Вы можете управлять внешним видом и поведением компонента с помощью Object Inspector и Code Editor. Это собственно и есть визуальное программирование.

3.Инспектор объектов Object Inspector.

С его помощью вы можете изменять свойства компонентов формы и определять события, на которые должна реагировать форма или её компоненты.

Окно инспектора объектов имеет две вкладки:

Properties – свойства

Events – события

4.Редактор кода Code Editor.

В окне редактора кода вы можете вводить разработанный вами код или редактировать сгенерированный Delphi код для компонентов разработанной формы. Code Editor использует технологию вкладок, каждая вкладка соответствует своему модулю или файлу.

Обработка событий

События – это свойства процедурного типа, предназначенные для оздания пользовательской реакции на те или иные входные воздействия.

Все события в Delphi принято именовать с ”On”.Щёлкнув в Инспекторе объектов на станице Events в поле любого события, вы получите в программе заготовку метода – обработчика этого события. При этом его имя будет состоять из имени текущего компонента и имени события (без “On”), а относиться он будет к текущей форме. Например, если на форме размещена кнопка(компонент TButton с именем Button1), то заготовка обработчика события OnClick(щелчок по кнопке) будет иметь

procedure TForm1.Button1Click(Sender: TObject);

begin

end;

Заготовку обработчика события OnClick можно также получить дважды щелкнув по размещенной на форме кнопке.

Поскольку события – это свойства объекта, их значение можно изменять во время выполнения программы. Эта возможность называется делегированием.

Форма.

Форма в Delphi - это синоним окна. Любая программа имеет как минимум одну форму - она появляется на экране в момент старта программы. Для подключения новой формы к проекту достаточно обратиться к репозиторию и выбрать нужную разновидность формы. Доступ к репозиторию открывает опция меню File|New. Помимо универсальной пустой формы Form(страница New репозитория) репозиторий содержит и специализированные формы.

Подключение новой формы к проекту приводит к тому, что менеджер проекта размещает ее в списке автоматически создаваемых форм(окно Project Option, страница Forms, список Auto-create forms). Для того, чтобы форма не создавалась автоматически в момент старта программы, необходимо перенести ее в список Available forms. В этом случае форма создается по мере необходимости.

В момент старта программы на экране показывается только одна – главная форма. Каждое следующее окно становится видно только после вызова его метода Show или ShowModal.

Основной способ, используемый для закрытия формы – зто вызов метода procedure Close. Внутри метода Close в первую очередь вызывается метод function CloseQuery:boolean. Для закрытия формы необходимо, чтобы функция CloseQuery вернула True. Для проверки на возможность закрытия CloseQuery вызывает обработчик события OnCloseQuery:TCloseQueryEvent;

TCloseQueryEvent-это процедурный тип:

TCloseQueryEvent=procedure(Sender:TObject;Var CanClose:boolean) of object;

Вы должны в обработчике события проверить возможность закрытия формы и вернуть нужное значение в параметре CanClose.

Последним при уничтожении формы инициируется событие OnDestroy:TNotifyEvent; Здесь программист может предусмотреть необходимые действия, к примеру записать значения в файл.


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