Иллюстрированный самоучитель по Kylix

       

Освобождение ресурсов графической подсистемы



Листинг 8.1. Освобождение ресурсов графической подсистемы

// загрузка картинки в Bitmap1
Bitmap1. LoadFromFile ('mypicture.bmp') ;
//копирование в Bitmap2 из Bitmap1
Bitmap2.Assign (Bitmap1);

// применение метода Dormant и освобождение ресурсов графической подсистемы
Bitmap2.Dormant;

  • Метод Draw применяется для рисования изображения, хранящегося в объекте, который определен параметром Graphic, в координаты, задаваемые параметрами X и Y. Изображение может быть либо битовой матрицей, либо пиктограммой, либо метафайлом. Например:
    Image1.Canvas.Draw (10, 10, Image2.Picture.Bitmap);

    Таким образом, в координаты (10,10) канвы картинки Image1 будет занесен рисунок из канвы картинки Image2.
  • Метод DrawFocusRect применяется для рисования прямоугольника с помощью булевой операции XOR. То есть повторное рисование такого же прямоугольника на том же месте удалит этот прямоугольник. Пример:
    Image1.Canvas.DrawFocusRect (Rect (0,0,30,30);
  • Метод Ellipse применяется для рисования окружности или эллипса. Параметры — точки (X1, Y1) и (X2, Y2), определяющие прямоугольник, в который вписан эллипс.
  • Метод Error вызывается при необходимости генерации исключения при работе с объектом типа TList. Вызов данного метода дает лучший результат по сравнению с командой Raise. Примером вызова этого метода может служить следующая строка:
    List.Error ('Ошибка в элементе %u списка List', I);

    Выполнение данной строки вызовет сообщение об ошибке в какой-либо строке списка.
  • Метод Exchange предназначен для обмена местами двух элементов списка. Позиции этих двух элементов задаются параметрами Index1 и Index2.

    Примечаниe
    Не применяйте метод Exchange для отсортированных списков— это может нарушить упорядоченность списков.

  • Метод Expand применяется для увеличения емкости списка типа TList. Вызов данного метода приводит к выделению дополнительной памяти для быстрого добавления новых элементов списка. В случае, если при вызове данного метода список не заполнен, его емкость не изменяется, иначе — увеличивается.
  • Метод FillRect применяется для заполнения указанного прямоугольника канвы цветом, определенным значением свойства Brush. Например, приведенный ниже код заполняет всю область канвы компонента Image1 фоновым цветом, определенным свойством Brush:
    with Image1.Canvas do
    FillRect (Rect (0, 0, Width, Height) );
  • Метод FindNextControl применяется для определения следующего за указанным в параметре CurControl дочернего оконного компонента, соответствующего последовательности табуляции. Если в качестве параметра выступает не дочерний элемент данного оконного компонента, то метод возвращает первый в последовательности табуляции компонент. Второй параметр GoForward определяет направление поиска компонента. Если данный параметр имеет значение true, то ищется следующий компонент, иначе — предыдущий. Следующий параметр CheckTabStop — определяет,
    будут ли при поиске учитываться компоненты, в которых свойство TabStop установлено в false. Если значение данного параметра равно true, то такие компоненты не учитываются, иначе — учитываются. Последний параметр CheckParent применяется для того, чтобы указывать, учитывать ли при поиске только те компоненты, которые являются прямыми потомками данного оконного компонента. Если данный параметр равен false, то просматриваются все компоненты, иначе — только прямые потомки.
  • Метод First возвращает первый элемент списка типа TList.
  • Метод FloodFill применяется для закрашивания замкнутой области канвы произвольной формы каким-либо цветом. В качестве параметров данного метода выступают: начальная точка закрашивания, цвет и стиль заполнения. Начальная точка закрашивания (X, Y) должна находиться внутри закрашиваемой области. Два других параметра применяются для задания границы этой области. Параметр color применяется для указания цвета, который является границей закрашивания. Параметр FillStyle может иметь два значения. Если он равен fsSurface, то происходит закрашивание именно той области, которая окрашена цветом color, а на других цветах закрашивание не происходит. Если же параметр FillStyle имеет значение fsBorder, то заполняется область, в которой могут присутствовать любые цвета, кроме color, который является цветом границы закрашивания.
  • Метод Focused применяется для определения, является ли в настоящий момент времени данный оконный компонент активным. Данный метод возвращает значение true, если фокус принадлежит данному оконному компоненту, иначе — false.
  • Метод FrameRect применяется для рисования на канве прямоугольной рамки. Данный метод использует установки текущей кисти (Brush). Толщина рамки равна одному пикселу. Внутренняя часть рамки не заполняется никаким цветом. В качестве примера приведем код, который рисует на канве компонента Image1 красную прямоугольную рамку:
    with Image1.Canvas do begin Brush.Color := clRed; FrameRect ( Rect (10,10,150,100) );

    end;
  • Метод Free применяется для вызова деструктора объекта. Данный метод проверяет, не была ли уже ранее высвобождена память, предназначенная для данного объекта, после чего вызывает метод Destroy.
  • Метод GetTabOrderList предназначен для построения списка типа TList дочерних оконных компонентов, расположенных в последовательности табуляции. Свойство TabStop во внимание не принимается. В список входят как прямые, так и косвенные потомки данного оконного компонента.
  • Метод HandleAllocated предназначен для проверки наличия дескриптора окна у данного компонента. В случае, если дескриптор, окна есть, метод возвращает значение true. Данный метод удобно применять, если нет необходимости создавать дескриптор окна компоненту, у которого его нет. Непосредственная проверка свойства Handle компонента приводит к созданию дескриптора окна.
  • Метод HandleNeeded применяется для создания дескриптора окна для компонента, у которого его не было. При работе настоящий метод вызывает сначала метод CreateHandle у родительского компонента, а затем создает дескриптор для данного компонента.
  • Метод Hide применяется для того, чтобы сделать компонент невидимым. Вызов данного метода эквивалентен команде
    Component.Visible := false;
    Если данный компонент является оконным и содержит в себе другие компоненты, то эти компоненты также становятся невидимыми.

    Примечание
    Обратите внимание на тот факт, что хотя компонент является невидимым, все его свойства и методы являются доступными.

  • Метод IndexOf применяется для определения индекса первого вхождения в компонент типа TList данного элемента. Если такого элемента в списке нет, метод возвращает значение —1.
  • Метод Insert предназначен для вставки нового элемента списка в заданную позицию. Единственный параметр данного метода Index показывает, в какую именно позицию будет вставлен новый элемент списка. При вставке нового элемента все последующие элементы сдвигаются (их индексы увеличиваются на единицу). В случае, если происходит попытка вставить новый элемент в отсортированный список, генерируется исключение EListError. Тогда лучше использовать метод Add.
  • Метод Invalidate используется для полной перерисовки компонента. Применяется, когда с компонентом произошли какие-либо визуальные изменения.
  • Метод Last возвращает значение, равное последнему указателю списка типа Tlist и значению Count -1.
  • Метод LineTo применяется для рисования на канве объекта прямой линии. Начало линии совпадает с текущим значением координат пера (PenPos) и заканчивается в точке с координатами (X, Y), за исключением самой точки, которые передаются в качестве параметров метода.
  • Метод LoadFromClipboardFormat применяется для загрузки изображения в графический компонент из буфера обмена.
  • Метод LoadFromFile предназначен для загрузки изображения в графический компонент из файла, задаваемого параметром FileName. Если данный графический файл по каким-либо причинам не может быть загружен (несоответствие типов, незарегистрированный графический формат файла), то генерируется исключение EInvalidGraphic.
  • Метод LoadFromStream позволяет загружать графическое изображение из потока, задаваемого параметром Stream. Данный метод может использоваться при загрузке, например, графических полей в наборе данных из объекта типа TBlobStream.
  • Метод Lock применяется для блокировки канвы компонента и запрета рисования на ней из других потоков многопоточного приложения. Обратный результат достигается при помощи метода unlock. При многократном вызове метода Lock будет увеличиваться свойство LockCount, в котором фиксируется количество блокировок. Канва будет недоступной из других потоков, пока не снимется последняя блокировка. Если вы не хотите использовать многократную блокировку, можно воспользоваться методом TryLock. После блокирования канвы общая производительность приложения может существенно снизиться.
  • Метод Mask применяется для преобразования цветного изображения в черно-белую маску. В результате замены цвет TransparentColor переходит в белый, а все остальные цвета — в черный.
  • Метод Move предназначен для перемещения элемента списка, находящегося в позиции, задаваемой параметром CurIndex, в позицию, задаваемую параметром NewIndex.
  • Метод MoveToприменяется для изменения текущей позиции пера (PenPos) в заданную параметрами (X, Y). При перемещении пера на канве ничего не рисуется. Данный метод аналогичен прямой установке координат пера в свойстве PenPos.
  • Метод OpenBit предназначен для возврата индекса первого элемента массива типа TBits, имеющего значение false.
  • Метод Pack предназначен для удаления из списка типа TList всех элементов, значение которых равно nil. После удаления происходит переиндексация всех элементов списка.
  • Метод Pie рисует замкнутый сегмент окружности или эллипса. Параметры данного метода аналогичны параметрам метода Arc. В результате выполнения данного метода может получиться рисунок, похожий на Рисунок 8.15.
  • Метод Polygon рисует на канве многоугольник по заданному множеству точек, определенных массивом Points, причем первая точка соединяется с последней, после чего многоугольник закрашивается цветом, определенным свойством кисти Brush.
    Например:
    Image1.Canvas.Polygon ( [ Point (10, 10), Point (30,10),
    Point (130, 30), Point (240, 120) ] );

    Вышеприведенный код рисует на канве компонента Image1 закрашенный четырехугольник, координаты которого заданы непосредственно.



Содержание раздела