Глава 6. Основные элементы VCL
ГЛАВА 6
В этой главе мы рассмотрим, что представляет собой компонент Delphi, изучим типы компонентов, их структуру. Особое внимание уделим иерархии визуальных компонентов Delphi. Кратко остановимся на изучении типов времени выполнения (RTTI).
Компоненты
Компоненты Delphi являются частью классовой иерархии Delphi, которая называется библиотекой визуальных компонентов (Visual Component Library, VCL). Библиотека визуальных компонентов Delphi, несмотря на название, содержит в своем составе как визуальные (видимые во время выполнения приложения), так и невизуальные (видимые только на этапе проектирования) компоненты. К визуальным компонентам относятся TButton, TEdit, TLabel и др. К невизуальным относятся такие компоненты, как TTimer,
TTable, TQuery И др.
Компонент - это небольшая часть приложения, обеспечивающая создание пользовательского интерфейса. Компоненты можно представить как небольшие "кирпичики", из которых строится "дом" - приложение.
Компоненты могут находиться на панели компонентов. Разработчик может брать компоненты из панели компонентов и располагать их на форме.
Компоненты могут сильно отличаться по степени своей сложности. Можно использовать в своем приложении как простые компоненты (как, например, TLabel, TEdit), так и достаточно сложные (скажем, компонент, объединяющий в себе возможности текстового процессора).
Для того чтобы успешно работать с компонентами, нужно понимать основные типы компонентов Delphi, а также представлять себе их внутреннее строение и иерархию компонентов. Все это мы опишем далее в этой части книги.
Типы компонентов
В Delphi имеется четыре базовых типа компонентов. Вы можете использовать в своих приложениях любые компоненты данных типов, а также создавать новые компоненты любого из них.
Первый тип компонентов - стандартный.
Стандартные компоненты включают в себя поведение элементов управления
Windows. К таким компонентам относятся: TListView, TRichEdit, TImageList
и др. Все эти компоненты находятся на вкладке Win32 панели компонентов Delphi. Каждый из данных компонентов представляет собой так называемую оболочку (wrapper) стандартного элемента управления Windows. Эти компоненты позволяют легко использовать элементы управления Windows в ваших программах.
Второй тип компонентов - пользовательский.
К пользовательским компонентам относятся все компоненты, которые невходят в стандартную библиотеку компонентов Delphi. Эти компоненты добавляются вами в существующий набор компонентов. Пользовательские компоненты создаются вами самостоятельно или приобретаются у других программистов.
Примечание
Информацию о создании собственных компонентов см. в главе 6.
Третий тип компонентов - графический.
Графические компоненты предназначены для создания визуальных элементов управления, которые не могут получать фокус ввода. Обычно, подобные компоненты применяются для отображения какой-либо информации (текстовой или графической). В качестве примера таких компонентов можно Привести TShape, TLabel, TImage И Др.
И, наконец, последний тип компонентов - невизуальный.
Невизуальные компоненты не видны пользователю во" время выполнения приложения. Хотя они обладают свойствами, событиями и методами. Ярким примером компонента такого типа является TTimer.
Структура компонентов
Компоненты, как и всякий другой класс, инкапсулируют в себе свойства, события, методы и поля.
Примечание
Компоненты являются классами, с которыми можно работать в интегрированной среде разработки Delphi.
Рассмотрим свойства, события, методы и поля компонентов.
Свойства
Свойства компонента предназначены для доступа пользователя к внутренним полям компонента. Свойства позволяют изменять атрибуты компонента, в том числе и вычисляемыми значениями. Определение свойства компонента должно содержать его имя и тип, а также как минимум одно объявление способа доступа к данному свойству (описания). Синтаксис определения свойства компонента имеет вид:
property Имя свойства: тип описания;
- имя свойства - должно быть уникальным;
- тип - определяет, значения какого типа могут быть записаны в данном свойстве;
- описания - объявления способов доступа к этому свойству.
Как мы уже говорили, каждое свойство компонента должно иметь как минимум одно обязательное объявление способа доступа к свойству. К таким описаниям относятся read или write. Кроме того, в Delphi имеются дополнительные описания: stored, default (nodefault), implements.
Рассмотрим описания более подробно.
Синтаксис обязательных описаний read и write имеет следующий вид:
read поле или метод write поле или метод
где поле или метод - поле, из которого берется (или в которое помещается) значение свойства, или метод, который берет или помещает значение свойства компонента.
Несложно догадаться, что объявление read (читать) описывает поле или метод, предназначенный для чтения значения свойства, а объявление write (писать) описывает поле или метод, предназначенный для записи значения свойства компонента.
К необязательным описаниям способа доступа относятся описания stored, default (nodefault), implements.
Эти описания называют хранимыми описаниями, они не дают эффекта при выполнении программы, но отвечают за способы хранения переменных средой Delphi.
Описание stored может принимать любое из двух значений: true или false. Оно используется, когда Delphi сохраняет текущее состояние компонента. При сохранении, Delphi проверяет свойства компонента, если свойство отличается от величины, установленной по умолчанию и описание stored имеет значение true, то в этом случае новое значение величины свойства
компонента сохраняется. В противном случае (когда описание stored имеет значение false) новое значение величины свойства не сохраняется.
Для установки значения свойства компонента по умолчанию используется
писание default.
Приведем пример описания свойства компонента:
property MaxLength: Integer read FMaxLength write SetMaxLength default 0;
В этом примере мы описываем свойство компонента, которое имеет имя MaxLength, тип integer и получает значение из поля FMaxLength, а для записи значения в поле FMaxLength используется метод SetMaxLength. По умолчанию, значение данного свойства равно о.
Наконец, описание implements служит для поддержки свойством компонента интерфейсов. Например,
property Mylnterface: IMylnterface read FMylnterface implements IMylnterface;
Описание implements должно находиться в самом конце описаний. Оно может содержать несколько интерфейсов, разделенных запятыми. Свойство, содержащее описание implements, должно:
- быть классом или интерфейсом;
- не быть массивом;
- иметь описание read.
Типы свойств
Следует отметить, что к свойствам применимы те же правила, которые используются для описания типов в Object Pascal. Типы свойств компонента нужны в первую очередь для отображения и редактирования его в окне инспектора объектов. Перечислим основные типы свойств компонентов Delphi (табл. 2.1).
Таблица 2.1. Типы свойств
|
|
|
|
|
|
|
|
Отображение свойств в окне инспектора объектов
|
|
|
|
|
Числовые, символьные и строковые свойства отображаются соответственно как числа, символы и строки. Разработчик может редактировать значения данных свойств непосредственно в окне инспектора объектов
|
|
|
|
Перечисляемый
(Enumerated)
|
Свойства перечисляемых типов (включая булевы) отображаются в инспекторе объектов как редактируемые строки. Разработчик может кроме непосредственного ввода значения свойства переключать допустимые значения свойства двойным щелчком в поле значения свойства инспектора объектов, либо выбирать допустимое значение из выпадающего списка
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Свойства типа Set отображаются в инспекторе объектов как множества. При помощи двойного щелчка на значении свойства разработчик может расширить множество и установить каждому элементу множества булево значение (true, если данный элемент входит во множество)
|
|
|
|
|
Свойства такого типа часто имеют свой собственный редактор свойств. Свойства типа объект должны быть потомками класса TPersistent
|
|
|
|
|
Свойства типа Array должны иметь свой собственный редактор свойств. Инспектор объектов Delphi не поддерживает редактирование свойств данного типа. Разработчик должен при регистрации компонента определить редактор свойств
|
|
|
|
|
|
|
Свойства стандартных компонентов Delphi
Рассмотрим свойства, которые имеют стандартные компоненты Delphi.
Свойство Action предназначено для определения действия, связанного с элементом управления (меню, кнопкой и т. д). Значение данного свойства устанавливается во время разработки приложения, путем выбора из выпадающего списка предусмотренных действий. Данный список формируется путем размещения на форме компонента TActionList и задания его свойств.
Свойство Active предназначено для определения наличия соединения с базой данных, а также для установки или отключения этого соединения. Данное свойство может принимать одно из двух значений: false или true. Если значение свойства равно false, то в этом случае база данных является закрытой и работа с ней (чтение или запись данных) невозможна. Если вы установите свойство Active в true, то произойдет следующее:
- приложение сгенерирует событие BeforeOpen;
- набор данных (свойства state) установится в состояние dsBrowse;
- в наборе данных установится курсор;
- приложение сгенерирует событие AfterOpen.
Данное свойство можно установить непосредственно, например:
Tablel.Active := true;
или с помощью вызова методов open (установка свойства Active в true) или
Close (false): Tablel.Open;
Свойство Align предназначено для задания способа выравнивания компонента внутри компонента контейнерного типа. Перечислим возможные значения данного свойства.
- alNone - компонент остается на том месте, где он был размещен во время разработки приложения. Данное значение присваивается свойству Align по умолчанию.
- alTop - компонент занимает всю верхнюю часть компонента-контейнера. Во время выполнения приложения ширина компонента зависит от ширины компонента-контейнера. Высота компонента остается неизменной независимо от высоты контейнера.
- alBottom - аналогичен значению aiTop, за исключением того, что компонент занимает всю нижнюю часть компонента-контейнера.
- alLeft - компонент занимает всю левую часть компонента-контейнера. Во время выполнения приложения высота компонента зависит от высоты компонента-контейнера. При изменении ширины компонента-контейнера ширина компонента остается неизменной.
- alRight - аналогичен значению alLeft, за исключением того, что компонент занимает всю правую часть компонента-контейнера.
- alclient - компонент занимает всю клиентскую часть компонента-контейнера. При изменении высоты и ширины компонента-контейнера меняется высота и ширина компонента. Если в клиентской части компонента контейнерного типа уже имеются другие компоненты, то данный компонент занимает всю оставшуюся незанятую часть компонента-контейнера.
Примечание
Значения alTop и alBottom имеют больший приоритет по сравнению со значениями alLeft и aiRight. Таким образом, если вы вывели на форму два компонента, присвоив свойству Align одного из них значение alTop, а другого - alRight, то первый компонент вытеснит верхнюю часть второго компонента (рис. 2.1).
Свойство Anchors предназначено для определения привязки компонента к родительскому компоненту при изменении размеров родительского компонента. Данное свойство было введено начиная с Delphi 4. Это свойство имеет тип множества, которое может содержать такие элементы:
- akTop - компонент привязан к верхнему краю родительского компонента; - akLeft - компонент привязан к левому краю родительского компонента;
- akBottom - компонент привязан к нижнему краю родительского компонента;
- akRight - компонент привязан к правому краю родительского компонента.

Рис. 2.1. Применение свойства Align
В случае, когда существует привязка к противоположным сторонам родительского компонента, при изменении его размеров будет происходить сжатие или растяжение дочернего компонента вплоть до полного исчезновения его изображения. Таким образом, данное свойство определяет как бы фиксацию расстояния от компонента до краев родительского компонента.
Свойство AutoCalcFields определяет режим автоматической генерации события onCalcFields. Данное свойство установлено в true по умолчанию. В этом случае события onCalcField, связанные с пересчетом вычисляемых полей таблицы данных, генерируются в следующих случаях:
- когда открывается набор данных;
- когда набор данных переводится в состояние dsEdit;
- когда фокус переходит между компонентами, содержащими данные или перемещается по столбцам таблицы, связанной с данными;
- когда ищется какая-либо запись.
Для того чтобы уменьшить время, необходимое на пересчет вычисляемых
полей, можно установить свойство AutoCalcField В false.
Свойство AutoEnable служит для задания автоматического определения доступных кнопок медиаплейера в разных режимах. Если это свойство установлено в true, то значение, заданное свойством EnabledButtons, игнорируется. В противном случае доступные кнопки определяются свойством EnabiedButtons (описание этого свойства см. далее).
Свойство AutoMerge применяется для того, чтобы объединить меню вторичных форм c меню главной формы. Для этого нужно в каждой вторичной форме установить данное свойство в true.
Примечание
В приложениях MDI установка свойства AutoMerge необязательна, т. к. все равно будет выполнено объединение меню.
Свойство AutoOpen предназначено для автоматического открытия медиа-плейера во время выполнения приложения. Если данному свойству присвоить значение true, то медиаплейер автоматически откроет при создании формы устройство, указанное в свойстве DeviceType (описание этого свойства см. далее). В случае если при открытии устройства возникает ошибка, то приложение генерирует исключение EMClDeviceError. Если значение свойства AutoOpen равно false, то для открытия устройства необходимо использовать метод Open.
Свойство AutoSelect показывает, будет ли текст, содержащийся в компоненте, выделяться в тот момент, когда данный компонент получает фокус. Это свойство не применяется в многострочных редакторах (таких как Memo, RichEdit и др.). Если данное свойство имеет значение true, то текст, содержащийся в однострочном редакторе, будет выделен при получении фокуса. Свойство AutoSelect удобно применять, когда пользователь, скорее всего, будет вводить новое значение в поле для ввода вместо старого, а не редактировать.
Свойство AutoSize применяется для того, чтобы приложение автоматически устанавливало высоту поля для ввода (Edit), в зависимости от высоты используемого шрифта. Если значение данного свойства равно true, то поле для ввода будет автоматически изменять размер при смене размера используемого в нем шрифта.
Свойство Bitmap предназначено для указания на объект типа TBitmap, который содержит изображение. В случае если свойство Bitmap не пустое, то свойство style игнорируется и в качестве шаблона заполнения берется объект, на который указывает свойство Bitmap.
Свойство BoundsRect применяется для получения одновременно координат всех четырех вершин компонента.
Примечание
Данные координаты можно получить из следующих свойств компонента: Left (левый край компонента), тор (верхний край), width (ширина компонента) и Height (высота). Описание этих свойств мы приведем ниже.
Началом координат считается левый верхний угол окна, содержащего данный компонент.
Свойство Break предназначено для разбивания списка разделов меню на несколько столбцов. Это свойство может принимать следующие значения:
- mbNone - нет разбивки (установлено по умолчанию);
- mbBarBreak - в меню добавляется новый столбец разделов и отделяется от предыдущего полосой;
- mbBreak - в меню добавляется новый Столбец разделов и отделяется от предыдущего пробелами.
Рассмотрим пример (рис. 2.2).
В данном примере мы отделили Первый раздел меню от Второго полосой (установили значение свойства Break для Второго раздела в mbBarBreak), а также отделили Третий и Четвертый разделы меню от Второго пробелами (установили значение свойства Break для Третьего раздела в mbBreak).

Рис. 2.2. Разбиение меню приложения на столбцы разделов с помощью свойства Break
Свойство Brush применяется для чтения текущего значения цвета и стиля заполнения фона окна. Обратите внимание на то, что данное свойство предназначено только для чтения. Но значение этого свойства можно изменить при помощи изменения свойств Color и style.
Свойство Canvas предназначено для рисования, изменения изображения и других действий с изображениями. Данное свойство имеется у тех компонентов, которые имеют поверхности для рисования.
Свойство Capabilities определяет возможности открытого устройства мультимедиа. Данное свойство устанавливается при открытии устройства мультимедиа методом Open. Это свойство доступно только для чтения. Свойство capabilities может принимать следующие значения:
- mpCanEject - возможно освобождение объекта, загруженного в устройство; - mpCanPlay - возможно воспроизведение; - mpCanRecord - возможна запись;
- mpcanstep - возможно перемещение на задаваемое число кадров вперед и назад;
- mpuseswindow - возможно использование окна для отображения выходного изображения.
Свойство capacity применяется для определения количества элементов, которые могут храниться в компоненте класса TList. В случае, когда при увеличении значения данного свойства возникает нехватка оперативной памяти, генерируется исключение EOutOfMemory. Свойство capacity отличается от похожего свойства Count тем, что хранит в себе число, указывающее, сколько элементов может храниться в Компоненте класса TList, a count показывает, сколько элементов действительно хранится в компоненте. Таким образом, значение свойства capacity всегда больше или равно значению свойства count. При увеличении значения свойства count, в случае необходимости, происходит увеличение значения Capacity. Данное свойство применяется для того, чтобы предотвратить слишком частое перераспределение оперативной памяти. Если принудительно задать значение свойства capacity меньше, чем значение свойства count, приложение сгенерирует исключение
EListError.
Свойство caption связывает с компонентом некоторую строку текста, поясняющую его назначение. Данная строка является обычно заголовком компонента (заголовком кнопки, метки, пункта меню и др.). По умолчанию это свойство устанавливается таким же, как имя компонента (свойство Name). Для пунктов меню и кнопок с помощью этого свойства можно задать кнопку быстрого вызова. Для этого перед символом кнопки быстрого вызова ставится символ амперсанда (&). Например, для быстрого вызова меню Файл перед буквой "Ф" в свойстве caption данного пункта меню можно поставить знак &: &Файл. При этом буква "Ф" в пункте меню будет подчеркнутой. Теперь для вызова данного пункта меню достаточно нажать комбинацию клавиш <А1t>+<Ф>.
Свойство charset применяется для задания используемого набора символов шрифта. Каждый вид шрифта поддерживает один или несколько наборов символов. Ниже приведена сокращенная таблица констант, применяемых в данном свойстве (табл. 2.2).
Таблица 2.2. Константы наборов символов
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Символы, установленные по умолчанию. Шрифт выбирается только по имени (Name) и размеру (size)
|
|
|
|
|
|
Стандартный символьный набор
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Набор, включающий в себя символы, добавляемые к основным буквам для восточноевропейских языков
|
|
|
|
|
|
Набор символов операционной системы
|
|
|
|
|
|
|
|
В некоторых случаях, для того, чтобы правильно отображались русские шрифты, полезно установить значение свойства charset в RUSSIAN_CHARSET.
Свойство clientHeight предназначено для установки или чтения высоты клиентской области компонента. Данное свойство применяется при изменении размеров компонента, который содержит в себе другие компоненты. При таком изменении будет происходить изменение компонентов, содержащихся в компоненте-контейнере.
Свойство clientorigin предназначено для получения экранных координат (х и у) левого верхнего угла клиентской области компонента. Началом координат является верхний левый угол экрана. Возвращаемые координаты передаются в структуре типа TPoint. Данное свойство предназначено только для чтения.
Свойство clientRect возвращает координаты углов клиентской области компонента. Данное свойство также предназначено только для чтения. Координаты возвращаются в структуре типа TRect.
Свойство clientwidth предназначено для установки или чтения горизонтального размера клиентской области компонента.
Свойство ciipRect определяет область, доступную для рисования. То есть вне области, определяемой свойством clipRect, рисовать невозможно. Использование данного свойства сокращает затраты времени на перерисовку этой области.
Свойство color определяет цвет фона компонента. Значение этого свойства может быть или числом, определяющим интенсивность трех основных цветов (красного, зеленого и синего), или константой, определенной в Delphi (табл. 2.3).
Таблица 2.3. Константы, определяющие цвета
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Цвет фона рабочего стола Windows
|
|
|
|
|
|
|
|
|
|
Цвет фона полосы заголовка активного окна
|
|
|
|
|
Цвет фона полосы заголовка неактивного окна
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Цвет текста заголовка в активном окне
|
|
|
|
|
Цвет бордюра активного окна
|
|
|
|
|
Цвет бордюра неактивного окна
|
|
|
|
|
Цвет рабочей области приложения
|
|
|
|
|
Цвет фона выделенного текста
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Цвет тени, отбрасываемой кнопкой
|
|
|
|
|
Цвет текста недоступных элементов окна
|
|
|
|
|
|
|
|
|
|
Цвет заголовка в неактивном окне
|
|
|
|
|
|
|
|
|
|
Цвет темных теней трехмерных элементов окна
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Светлый цвет на краях трехмерных элементов окна
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Данные константы цвета, начиная с clBackground, определяются той цветовой схемой Windows, которая установлена пользователем на данном конкретном компьютере. Эти цвета рекомендуется использовать при разработке приложений для передачи третьим лицам.
Свойство commonAvi предназначено для определения стандартного клипа Windows из файла-библиотеки Shell32.dll. То есть такие клипы, как копирование файлов, поиск файлов, удаление файлов в корзину и др.
Свойство componentcount определяет число компонентов, содержащихся в данном компоненте контейнерного типа.
Свойство component index определяет индекс (порядковый номер) компонента, содержащего в компоненте-контейнере.
Свойство components хранит в себе массив компонентов, владельцем которых является данный компонент. Параметр свойств index позволяет выбрать любой компонент из массива, благодаря свойству Componentindex. Индексы компонентов нумеруются начиная с нуля. Число компонентов, которые содержатся в массиве, можно определить с помощью свойства Componentcount.
Рассмотрим пример применения данных свойств. Предположим, что у нас на форме имеется несколько компонентов. Наша задача - сместить все компоненты, которые присутствуют на форме, кроме компонента Button1 вправо на 10 единиц. Для этого мы можем использовать следующий код:
for i := 0 to Componentcount - 1 do
if (Components[i].Name <> 'Button1') then
(Components[i] as TControl).Left:=(Components[i] as TControl).Left + 10;
Свойство controicount определяет число дочерних компонентов данного оконного элемента.
Дочерними называются компоненты, которые расположены в клиентской области этого элемента и, кроме того, в свойстве Parent которых указан данный элемент. Свойство controicount предназначено только для чтения.
Свойство controls является массивом, содержащим все дочерние компоненты данного элемента. Параметр index определяет индекс соответствующего компонента. Индексы начинают нумероваться с нуля. Это свойство предназначено только для чтения.
Свойство Controlstate определяет различные условия, действующие на данный экземпляр компонента. Например, двойной щелчок мыши или необходимость выравнивания компонента.
Свойство Controlstyle определяет различные атрибуты компонента. Например, может ли компонент быть захвачен мышью, имеет ли компонент фиксированные размеры и др. Данное свойство описывает не экземпляры класса, а класс в целом.
Свойство CopyMode определяет способ копирования графического изображения на канву с помощью метода copyRect, или при рисовании объекта типа TBitmap. При помощи данного свойства можно достичь разных эффектов объединения изображений. В табл. 2.4 перечислены возможные значения
свойства
CopyMode.
Таблица 2.4. Возможные значения свойства CopyMode
|
|
|
|
|
|
|
|
|
|
|
|
|
Заполняет область, в которую производится копирование, черным цветом. Собственное изображение и копируемое изображение удаляются
|
|
|
|
|
Инвертирует изображение области копирования. Копируемое изображение может быть любым - оно не участвует в процессе инвертирования
|
|
|
|
|
Объединяет изображение, находящееся в области копирования, и копируемое изображение при помощи булевой операции AND
|
|
|
|
|
Объединяет изображение, находящееся в области копирования, и инвертированное копируемое изображение при помощи булевой операции OR
|
|
|
|
|
Помещает в область копирования инверсное копируемое изображение, причем изображение, находящееся в копируемой области, игнорируется
|
|
|
|
|
Объединяет изображение, находящееся в области копирования, и копируемое изображение при помощи булевой операции OR, после чего результат копирования инвертируется
|
|
|
|
|
Копирует шаблон источника в область копирования, причем собственное изображение игнорируется
|
|
|
|
|
Объединяет изображение, находящееся в области копирования, и шаблон источника при помощи булевой операции XOR
|
|
|
|
|
Объединяет инверсное изображение источника и его шаблон при помощи булевой операции OR, затем результат объединяется с изображением, находящемся в области копирования, при помощи булевой операции OR
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Объединяет изображение, находящееся в области копирования, и изображение источника при помощи булевой операции AND
|
|
|
|
|
Копирует изображение источника в область копирования. Собственное изображение, находящееся в области копирования, игнорируется. Данный режим применяется по умолчанию
|
|
|
|
|
Инвертирует изображение в области копирования и объединяет результат с изображением источника при помощи булевой операции AND
|
|
|
|
|
Объединяет изображение источника с изображением в области копирования при помощи булевой операции XOR. Повторное копирование восстанавливает прежнее изображение в области копирования
|
|
|
|
|
Объединяет изображение в области копирования и изображение источника при помощи булевой операции OR
|
|
|
|
|
Заполняет область копирования белым цветом, собственное изображение и копируемое изображение игнорируются
|
|
|
|
|
|
|
Приведем пример использования способов копирования. Предположим, нам нужно в область с изображением вывести некоторое изображение, а затем убрать его, восстановив прежнее изображение. Для этого можно использовать код:
Imagel.Canvas.CopyMode := cmSrcInvert;
Imagel.Canvas.CopyRect (Rect (0,0,200,200), Image2.Canvas,
Rect (0,0,200,200)); Imagel.Canvas.CopyRect (Rect (0,0,200,200), Image2.Canvas,.
Rect '(0,0,200,200));
Свойство count предназначено для хранения количества элементов, содержащихся в компоненте класса TList. При добавлении новых элементов или при удалении (при помощи методов Add и Delete) значение данного свойства изменяется автоматически. При увеличении значения данного свойства вручную, в компонент класса TList будет добавлено соответствующее значение нулевых элементов. Удалить нулевые элементы можно при помощи вызова метода Pack. При уменьшении данного свойства count будут удалены последние элементы, содержащиеся в данном компоненте.
Свойство cti3D предназначено для установки внешнего вида компонента. Если данное свойство имеет значение true, то компонент будет выглядеть бъемным, если - false, то компонент будет плоским.
Свойство Cursor определяет вид указателя мыши, когда он находится над данным компонентом. Есть еще одно свойство Dragcursor, которое определяет вид указателя мыши, когда над компонентом происходит перетаскивание другого компонента. Delphi имеет встроенные виды указателей. Кроме встроенных, разработчик может помещать в приложение собственные виды указателя мыши. В табл. 2.5 находится список встроенных типов указателей мыши.
Таблица 2.5. Встроенные указатели мыши
|
|
|
|
|
|
|
|
Изображение указателя мыши
|
|
|
|
|
Указатель, принятый по умолчанию. Обычно это crArrow
|
|
|
|
|
Без изображения указателя
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Указатель в виде курсора для ввода текста
|
|
|
|
|
Указатель изменения размера окна
|
|
|
|
|
Указатель изменения размера окна в правом верхнем углу или в левом нижнем
|
|
|
|
|
Указатель изменения размера окна вверху или внизу (по вертикали)
|
|
|
|
|
Указатель изменения размера окна в левом верхнем углу или в правом нижнем
|
|
|
|
|
Указатель изменения размера окна слева или справа (по горизонтали)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Перетаскивание компонента
|
|
|
|
|
Указатель, показывающий невозможность переноса компонента в данную область
|
|
|
|
|
Горизонтальный разделитель
|
|
|
|
|
|
|
|
|
|
Перетаскивание нескольких компонентов
|
|
|
|
|
Ожидание выполнения SQL-запроса
|
|
|
|
|
Указатель, показывающий невозможность действия
|
|
|
|
|
Ожидание старта приложения (стрелка с песочными часами)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Свойство DesktopFont предназначено для определения, использует ли компонент для отображения текста шрифт Windows. Установка свойства DesktopFont в True определяет, что компонент должен применять для свойства Font изображение шрифта Windows. Этот шрифт задается свойством lconFont глобальной переменной Screen. Таким образом, всякий раз, когда будет изменяться используемый Windows шрифт, будет автоматически изменяться свойство Font для данного компонента.
Свойство DeviceType применяется для задания типа устройства мультимедиа, открываемого медиаплейером. По умолчанию значение данного свойства dtAutoSelect. Это означает, что тип устройства будет определяться по расширению файла, указанного в свойстве FileName.
Свойство Display определяет компонент окна, который будет использован мультимедийным устройством для вывода. Таким компонентом может быть форма или панель. По умолчанию значение данного свойства равно nil, это означает, что устройство создает собственное окно для вывода. Например, если мы хотим, чтобы изображение выводилось на панель Panel 1, мы можем использовать следующий код:
MediaPlayerl.Display := Panel1;
Свойство DispiayRect предназначено для задания прямоугольной области окна, определенного свойством Display, для вывода в нее изображения.
Данное cвойство игнорируется, если
Display = nil. свойство
DispiayRect
должно задаваться только после того, как устройство мультимедиа открыто. При задании значения данного свойства обратите внимание на то, что первые два числа задают координаты левого верхнего угла изображения, а следующие два - ширину и высоту изображения, а не координаты правого нижнего угла. Например:
MediaPlayerl.DispiayRect := Rect(10,10,300,200);
Данная строка задает область вывода с координатами левого верхнего угла (10, 10) шириной изображения 300 и высотой 200 точек.
Свойство DragMode определяет поведение компонента в процессе его перетаскивания. Данное свойство может принимать одно из двух значений: automatic и dmManual. В первом случае, от разработчика не требуется обработка событий. Достаточно щелкнуть на компоненте и начать его перетаскивание. Во втором случае, компонент не может начать процесс перетаскивания, пока приложение не вызовет метод BeginDrag.
Свойство Drawingstyle применяется для задания стиля изображения. Данное свойство может принимать следующие значения:
- dsFocused - изображение на 25% смешивается с цветом, указанным в свойстве BlendColor. Данное значение влияет только на те изображения, которые содержат маску;
- deselected - то же, что и dsFocused, только смешивание происходит на 50%;
- dsNormal - изображение рисуется цветом, указанным в свойстве BkColor. Если BkCoior равно ciNone, то изображение рисуется прозрачным с использованием маски;
- dsTransparent - изображение рисуется с помощью маски, независимо от свойства BkCoior.
Свойство Enabled показывает, будет ли компонент доступен пользователю во время работы приложения. Недоступный компонент (Enabled = false) отображается серым цветом. Он игнорирует события клавиатуры, мыши и таймера. Данное свойство применяется для временного ограничения доступа пользователя к компонентам. Например, если мы хотим сделать временно недоступной кнопку, нужно в свойстве Enabled кнопки установить значение false:
Buttonl.Enabled := false;
Свойство Font предназначено для установки шрифта, а также всех его атрибутов (размера, стиля, цвета и т. д.).
Свойство Groupindex применяется для описания способа объединения меню.
Свойство Handle используется для обеспечения доступа к дескриптору окна при обращении к функциям Win32 API, которые требуют дескриптор окна. Свойство Handle применяется только для чтения.
Примечание
Обращение к свойству Handle приводит к тому, что приложение создает дескриптор окна, если он не был создан ранее. Поэтому не обращайтесь к данному свойству при создании компонента или чтении его из потока.
Свойство Height применяется для задания высоты компонента.
Свойство HelpContext определяет номер, используемый в контекстно-зависимой справке. То есть задается номер страницы справки, которая будет отображаться на экране, когда пользователь нажмет клавишу <F1>.
Свойство Hint применяется для задания текста всплывающей подсказки. Оно обычно состоит из двух частей, разделяемых символом вертикальной черты (|). Например:
Buttonl.Hint := "Открыть[Выбор и открытие файла рисунка"
В данном случае, при наведении указателя мыши на кнопку Buttonl будет выдана всплывающая подсказка "Открыть", вторая часть подсказки будет выведена в специальную область, отведенную для таких подсказок, например, панель состояния. Разработчик может пользоваться только первой частью подсказки, без использования символа (|). Кроме того, для отображения всплывающих подсказок нужно дополнительно установить свойство
ShowHint В true.
Свойство imageindex применяется для указания индекса изображения, появляющегося левее надписи данного раздела меню. Индексы начинают нумерацию с нуля.
Свойство lsControl определяет способ сохранения формы. Если оно равно true, то сохраняются только те свойства, которые характерны для элементов управления. Если же оно равно false, то все свойства записываются вместе с формой.
Свойство items применяется для доступа к массиву указателей, хранящихся в объекте типа TList. Свойство items имеет тип Pointer. Индексы начинают нумерацию с нуля.
Свойство Left используется для задания координаты левого края компонента. Для всех компонентов за начало координат берется левый верхний угол клиентской области родительского компонента. Для форм началом координат является левый верхний угол экрана.
Свойство List предназначено для доступа к массиву указателей объекта типа TList. Данное свойство имеет доступ только для чтения.
Свойство LockCount указывает, сколько раз была заблокирована область вывода изображения (канва) компонента для предотвращения эффектов наложения от действий различных потоков многопоточного приложения. Данное свойство доступно только для чтения.
Свойство Mode предназначено для задания режима переноса данных из одной таблицы в другую. В табл. 2.6 приведены возможные значения этого свойства.
Таблица 2.6. Возможные значения свойства Mode
|
|
|
|
|
|
|
|
|
|
|
|
|
Записи из источника данных переносятся в приемник, не изменяя уже существующих в приемнике данных. Таблица-приемник должна существовать до начала переноса данных
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Записи из источника данных переносятся в приемник, изменяя уже существующие значения в приемнике. Новые записи в таблицу-приемник не добавляются. Таблица-приемник должна существовать до начала переноса данных
|
|
|
|
|
Записи из источника данных переносятся в приемник, заменяя уже существующие и добавляя новые записи. Таблица-приемник должна быть создана до начала переноса данных и индексирована
|
|
|
|
|
Записи в таблице-приемнике, которым есть соответствие в таблице-источнике, удаляются из приемника. Таблица-приемник должна быть создана до начала переноса данных и должна быть индексирована
|
|
|
|
|
Создается копия таблицы-источника. Если до копирования таблица-приемник уже существовала, ее содержимое полностью изменяется на содержимое источника
|
|
|
|
|
|
|
Свойство Name определяет имя компонента, по которому на него ссылаются другие компоненты, а также которое в дальнейшем используется разработчиком. Имя задается в процессе разработки программы и не должно изменяться во время работы программы. Delphi по умолчанию самостоятельно дает имена новым компонентам, например Button1, Button2, Labell и т. д. Рекомендуется изменять эти имена на более осмысленные.
Свойство Notify указывает, должно ли генерироваться событие onNotify после завершения вызова некоторых методов медиаплейера (open, close, Next и др.).
Свойство Parent определяет родительский компонент (родительский компонент - это не родительский объект!) контейнерного типа, в пределах которого располагается данный компонент.
Примечание
Важно различать два похожих свойства. Свойство Parent определяет родительский компонент, т. е. тот компонент, на котором располагается данный компонент. Свойство Owner определяет владельца компонента. Владелец - это компонент, который передается в качестве параметра в конструктор компонента и который владеет им. Например, форма является владельцем всех расположенных на ней компонентов (и, одновременно, родителем).
Свойство Parentctiso предназначено для определения, будет ли компонент наследовать от своего родительского компонента значение свойства ctiso.
Свойство ParentFont предназначено для определения, будет ли для данного компонента использоваться шрифт, применяемый в родительском компоненте контейнерного типа. Например, если на форме находится кнопка, то при установке у этой кнопки свойства parentFont в true приведет к тому, что надпись на кнопке будет выполнена тем шрифтом, который указан в свойстве Font формы.
Свойство ParentshowHint предназначено для включения и выключения родительского свойства showHint. Данное свойство используется для одновременного разрешения или запрещения показа всплывающих подсказок в пределах некоторой формы или компонента контейнерного типа.
Свойство Реп определяет атрибуты пера, которое используется для рисования линий. Данное свойство имеет тип треп. Свойство Реп определяет такие атрибуты, как ширину, цвет, стиль линий и режим рисования пером.
Свойство PenPos предназначено для определения положения пера на области для рисования. Значение этого свойства можно изменять вызовом метода MoveTo и другими методами. Можно непосредственно установить требуемое значение данного свойства, это будет равносильно вызову метода MoveTo.
Свойство Pitch применяется для установки ширины символов шрифта. Применяемые в Windows шрифты могут быть двух типов:
- шрифты с фиксированной шириной символа, т. е. каждый символ имеет определенную ширину, равную ширине других символов;
- шрифты с различной шириной символов. Рассмотрим возможные значения свойства Pitch:
- fpDefauit - ширина шрифта устанавливается равной значению, принимаемому по умолчанию, т. е. такой, какая описана для данного шрифта;
- fpFixed - одинаковая ширина для всех символов; - fpvariable - различная ширина символов.
Свойство Pixels предназначено для получения значения цвета точки с координатами х и Y в пределах текущей области компонента, определенной свойством clipRect. Попытка получить значение цвета точки вне области, заданной свойством ciipRect, возвращает значение -1.
Свойство shortcut предназначено для задания комбинации горячих клавиш, с помощью которых пользователь может выбрать нужный раздел меню.
Свойство showHint применяется для включения или выключения показа всплывающих подсказок при задержке указателя мыши над компонентом. Текст подсказки задается в свойстве Hint.
Свойство showing предназначено для определения, видит ли пользователь данный компонент в настоящий момент времени. При этом не учитывается, что этот компонент могут загораживать другие компоненты. Данное свойство предназначено только для чтения. Свойство showing связано со свойством visible. Если свойство visible компонента и всех его родителей (компонентов, содержащих его) равно true, то и showing равно true. Если же свойство visible компонента или какого-то из его родителей равно
false, то
Showing равно
false.
Свойство size определяет размер используемого шрифта.
Свойство Taborder применяется для задания последовательности перехода от одного компонента формы к другому при помощи клавиши <Таb>. Нумерация осуществляется начиная с нуля. Если задать свойству Taborder компонента значение -1, то этот компонент не сможет получить фокус при помощи клавиши <Таb>. Предположим, что у нас на форме расположены три кнопки: Button1, Button2 и Button3. Для того чтобы фокус между этими кнопками передавался следующим образом: сначала активна кнопка Button2, потом Button1 и затем Button3, нужно установить свойство Taborder для кнопки Button1 равным 1, для Button2 равным 0, а для Button3 равным 2.
Свойство Tabstop применяется для указания возможности передачи фокуса на, компонент при помощи клавиши <Таb>. Если значение этого свойства равно true, то при помощи клавиши <Таb> можно передать фокус данному компоненту, в зависимости от его свойства Taborder. Если значение свойства Tabstop равно false, то независимо от свойства Taborder фокус будет невозможно передать при помощи клавиши <Таb>.
Свойство Tag применяется программистом по своему усмотрению. Тип данного свойства Longint. Разработчик может использовать свойство Tag в своих целях, помещая в него нужную информацию.
Свойство Text предназначено для задания или чтения строки текста, связанной с данным компонентом. Применяется в компонентах типа TEdit и в компонентах-списках.
Свойство TextFlags применяется для задания способа вывода текста в область вывода при помощи методов TextOut и TextRect. При задании способа вывода можно воспользоваться следующими константами:
- ETO_CLIPPED - выводится текст, размещающийся в заданной прямоугольной области;
- ETO_OPAQUE - выводится текст с непрозрачным цветом фона;
- ETO_RTLREADING - текст выводится справа налево. Доступно только для версий Windows, предназначенных для восточных стран;
- ETO_GLYPH_INDEX - текст передается непосредственно в GDI Windows. Применяется только для шрифтов TrueType.
Свойство тор предназначено для задания или чтения значения, определяющего координату верхнего края компонента.
Свойство Transparentcoior определяет прозрачный цвет при рисовании.
Свойство visible применяется для определения, будет ли виден компонент на форме во время выполнения программы. Если свойство имеет значение true, то компонент будет виден, иначе - невидим.
Свойство width используется для установки горизонтального размера компонента, а также для чтения текущего значения ширины компонента.
Методы
Методы - это процедуры или функции, принадлежащие объекту. Методы определяют поведение объекта. Для вызова метода объекта сначала записывается имя объекта, с которым ассоциирован данный метод, затем, через точку, название метода. Например:
Buttonl.Click
Вызывает метод нажатия (click) кнопки (Buttonl).
Для создания метода его нужно сначала объявить внутри описания класса или компонента, содержащего данный метод. Например:
type TMyComponent = class(TObject)
procedure DoSomething;
end;
Здесь, внутри описания нового компонента, объявляем метод DoSomething с помощью служебного слова procedure. После того как мы объявили новый метод, мы должны создать тело данного метода. Эта процедура может находиться где угодно внутри модуля, в котором был описан компонент. Например:
procedure TMyComponent.DoSomething; begin
// Здесь размещаем команды и операторы, которые должны выполняться
// при вызове метода DoSomething на выполнение
end;
Заметим, что при создании процедуры DoSomething мы должны указывать его полное имя вместе с указанием имени компонента или класса
(procedure TMyComponent.DoSomething;).
Рассмотрим основные методы, которые имеются в среде Delphi.
Метод Add предназначен для добавления нового элемента в список типа TList, TstringList или Tstrings. Если список не отсортирован, то новый
элемент добавляется в самый конец списка. Если список отсортирован, то новый элемент добавляется в позицию списка, определяемую сортировкой. Вызов этого метода увеличивает значение свойства Count для данного списка. При выполнении подобного метода может возникнуть исключение EListError в случае, когда список отсортирован, добавляемая строка уже присутствует в списке и для данного списка свойство Duplicates установлено В dupError..
Метод Аrc предназначен для рисования дуги окружности или эллипса. В качестве параметров метода передаются координаты четырех точек. Первые две точки (X1, YI) и (X2, Y2) определяют прямоугольник, описывающий эллипс. Следующая точка (X3, YЗ) задает начальную точку дуги, которая находится на пересечении прямой, проходящей через центр окружности или эллипса и точки (X3, YЗ). Точка (X4, Y4) фиксирует конечную точку дуги, которая находится на пересечении прямой, проходящей через центр окружности или дуги и точки (X4, Y4). Дуга рисуется против часовой стрелки от начальной до конечной точки. Для наглядности, приведем рис. 2.3.

Рис. 2.3. Координаты точек, задаваемых при вызове метода Arc
Для рис. 2.3 можно привести такой пример вызова метода Arc: Imagel.Canvas.Arc (0,0, 200,100, 200,10, 0,0);
Примечание
Если вы создаете приложение, предназначенное для работы в Windows 95, обратите внимание на суммы Х1+Х2, Y1+Y2 и X1+X2+Y1+Y2. Они не должны превышать числа 32 768.
Метод Assign применяется для копирования данных одного объекта в другой. Данный метод имеет отличие от простого присваивания: объект1 := объект2. Разница заключается в том, что при присваивании указатель на <объект-назначение> начинает указывать на <объект-источник>, а метод Assign создает новую копию объекта. После применения Assign имеется два объекта с одинаковыми данными. Если объекты разного типа, то
при вызове D.Assign(S) тип D должен "знать", как скопировать в него тип s (тип s может ничего не знать о преобразовании типов). Если метод Assign не может осуществить преобразование типов, то он вызывает защищенный метод AssignTo, объявленный в классе TPersistent и перегруженный в классах, производных от него. Вызов имеет вид s.AssignTo(D). Если и метод AssignTo не может осуществить преобразование или если он не перегружен, то вызывается AssignTo класса TPersistent и генерируется исключение. Метод Assign можно применять в разных ситуациях. Хорошей иллюстрацией использования данного метода может служить копирование изображения из буфера обмена в графический компонент Timage:
Imagel.Picture.Assign (Clipboard);
и, наоборот, из компонента в буфер обмена
Clipboard.Assign (Imagel.Picture);
Примечание
Для работы с буфером обмена Windows необходимо в блок uses модуля, в котором идет работа с Clipboard, добавить ClipBrd.
Метод BeginDrag вызывается, когда начинается процесс перетаскивания компонента. Данный метод применяется только в случае, когда свойство DragMode компонента имеет значение dmManual. В случае, когда свойство имеет значение dmAutomatic, перетаскивание компонента осуществляется автоматически. Вызов метода BeginDrag обычно вставляют в обработчик события onMouseDown. Параметр immediate метода BeginDrag показывает, сразу ли после нажатия кнопки мыши указатель курсора сменит вид на тот, который определен в свойстве DragCursor, и сразу ли начнется процесс перетаскивания. В случае, когда параметр immediate имеет значение false, перетаскивание начинается только после того, как пользователь щелкнет на компоненте и сместит указатель мыши на расстояние в пять пикселов. Это удобно для того, чтобы обрабатывать щелчок на компоненте, не начиная его немедленного перетаскивания.
Метод BringToFront применяется для переноса компонента наверх в так называемой Z-последователъности. Z-последовательность определяет порядок компонентов в свойстве controls родительского оконного компонента (см. раздел "Иерархия визуальных компонентов" этой главы). Тот компонент, который расположен в Z-последовательности выше других, в случае частичного или полного перекрытия компонентов, будет виден. Таким образом, вызов метода BringToFront позволит переместить "наверх" компонент, скрытый под другими компонентами. Данный метод можно применять как к неоконным, так и к оконным компонентам. Однако все неоконные компоненты располагаются в Z-последовательности ниже оконных, поэтому в случае, когда неоконный компонент перекрыт оконным, например кнопка перекрыта компонентом типа TMето, вызов метода - BringToFront для кнопки ничего не даст.
Метод BrushCopy вызывается для копирования части изображения битовой матрицы на область вывода (канву) и замены указанного цвета в изображении на значение, установленное для кисти канвы. Данный метод сохранился от предыдущих версий Delphi и применяется только для совместимости с ними.
Метод CanFocus используется для определения, может ли данный компонент получать фокус. Этот метод возвращает значение true, если у компонента и всех его родителей свойства visible и Enabled имеют значения true.
Метод changeScale применяется для изменения масштаба компонента и всех его дочерних элементов. При вызове этого метода масштабируются такие свойства компонента, как тор, Left, width, Height. Метод ChangeScale имеет два параметра, определяющие множитель и делитель масштаба: м и о. Приведем пример использования данного метода. Допустим, мы хотим увеличить размер формы Forml в два раза, для этого зададим множитель масштаба равный двум, а делитель - единице:
Forml.ChangeScale (2,1);
При выполнении данной строки размеры формы Forml увеличатся в два раза.
Для уменьшения размеров, например, в три раза, нужно задать значение м, равное единице, а значение D, равное трем:
Forml.ChangeScale (1,3);
Метод chord применяется для рисования замкнутой фигуры, границами которой являются дуга окружности или эллипса и хорда. Параметры данного метода аналогичны параметрам метода Arc. Результатом работы метода chord могут стать фигуры, изображенные на рис. 2.4.

Рис. 2.4. Фигуры, получаемые после вызова метода Chord
Метод className применяется для определения имени типа компонента.
Метод clear предназначен для удаления всех элементов, входящих в список, или для удаления всего текста, входящего в компонент.
Примеры:
ListBoxl.Clear; Memol.Clear;
Метод Clear можно применять и к объекту Clipboard. вызов метода Clear
для буфера обмена удалит все содержимое буфера.
Метод click служит для вызова обработчика события Onciick для данного компонента. Применяется для имитации нажатия левой кнопки мыши над объектом. Например, для вызова обработчика события Onciick кнопки Buttoni можно проделать следующее:
Button1.Click;
Метод clientloScreen применяется для преобразования координат клиентской области компонента в координаты экрана. Началом координат клиентской области является левый верхний угол клиентской области компонента. Началом координат экрана - левый верхний угол экрана. Для обратного преобразования координат можно использовать метод ScreenTodient.
Метод containsControi определяет, каким наследником (прямым или косвенным) является данный компонент по отношению к какому-либо оконному компоненту. Если этот компонент прямой наследник, то метод возвращает true, иначе - false.
Метод controlAtpos предназначен для оконных компонентов. Он применяется для того, чтобы определить, какой дочерний компонент находится в позиции с координатами, задаваемыми параметром POS. В случае, если в заданной позиции нет ни одного дочернего компонента, метод ControiAtpos возвращает в качестве результата значение nil. Второй параметр AllowDisabled определяет, нужно ли учитывать при вызове метода те компоненты, которые отключены ( которые Disabled = true).
Метод copyRect применяется для копирования прямоугольной части изображения с одной канвы на другую. Копирование осуществляется в том режиме, который определен свойством copyMode.
Метод Delete применяется по отношению к таким компонентам, как TList, TStringList, TStrings и TMenuitem. Данный метод вызывается при необходи-мости удаления какого-либо элемента из списка. В качестве параметра этого метода передается число, определяющее индекс удаляемого элемента. Нумерация элементов начинается с нуля. При удалении пункта меню, содержащего подменю, удаляется и данный пункт, и его подменю.
Примечание
Обратите внимание на то, что при удалении элемента списка происходит перестроение данного списка. То есть, если вы удалили третий элемент, то после его удаления на место третьего элемента будет поставлен четвертый. Таким образом, пустых мест в списках не бывает.
Метод Destroy применяется для вызова деструктора объекта. То есть вызов данного метода уничтожает объект и освобождает занимаемую память.
Примечание
Не рекомендуется вызывать непосредственно метод Destroy для уничтожения объекта. Для этих целей лучше использовать метод Free, он проверяет, не была ли уже раньше освобождена занимаемая объектом память, после чего вызовет метод Destroy. Более того, метод Free генерирует меньший код. Для уничтожения форм используйте метод Release.
Метод DisabieAiign применяется для временного запрета выравнивания дочерних компонентов оконного компонента. Обратное действие можно получить, ВОСПОЛЬЗОВаВШИСЬ МеТОДОМ EnableAlign.
Метод Dormant служит для создания битовой матрицы в оперативной памяти для освобождения дескриптора матрицы. Применение данного метода позволяет сократить расходы ресурсов GDI, которые используются приложением. Приведем пример (листинг 2.1).
Листинг 2.1
// Загрузка картинки в Bitmapl
Bitmapl.LoadFromFile ('mypicture.bmp');
// Копирование в Bitmap2 из Bitmapl
Bitmap2.Assign (Bitmapl);
// Применение метода Dormant и освобождение ресурсов GDI
Bitmap2.Dormant;
Метод Draw применяется для рисования изображения, хранящегося в объекте, который определен параметром Graphic, в координаты, задаваемые параметрами х и У. Изображение может быть либо битовой матрицей, либо пиктограммой, либо метафайлом. Например:
Imagel.Canvas.Draw (10, 10, Image2.Picture.Bitmap);
Таким образом, в координаты 10, 10 канвы картинки image1 будет занесен
рисунок из канвы картинки Image2.