Правильная ссылка на эту страницу
http://az-design.ru/Support/SoftWare/Delphi/D3/SB21.shtml

Глава 21. TCollection, TCollectionItem и их потомки

  • TCollection
  • TCollectionItem
  • TListColumns
  • TListColumn
  • THeaderSections
  • THeaderSection
  • TStatusPanels
  • TStatusPanel
  • TDBGridColumns
  • TColumn
  • Пример проекта

       TCollection и TCollectionltem необходимы для поддержки работоспособности ряда элементов управления Windows, не являющимися родными для среды Windows и поддерживающими список элементов. Распространенным примером является линейка состояния, которая, как правило, разделена на несколько областей, содержащих различные текстовые сообщения, относящиеся к состоянию текущих операций определенной программы. Линейка состояния не является фундаментальным типом элементов управления Windows, каким является окно списка, однако определяется Delphi VCL. Такого же рода примерами являются объекты TListColumns и TDBGridColumns, которые используются для поддержки других элементов управления в Delphi VCL. Такие элементы управления, не родные для Windows и требующие управления списком объектов, для корректной организации данных по соглашению должны использовать классы TCollection и TCollectionltem. Рисунок 21-1 демонстрирует графический пример иерархии VCL, связанной с классами, которые будут обсуждаться в настоящей главе.

TCollection
       Класс TCollection похож на другие классы, определенные в Delphi, которые управляют списками объектов, в частности — на TList и TStrings. Класс TCollection используется для хранения объектов типа TCollectionltem. TCollection является абстрактным классом и непосредственно не задействуется. Примером порожденного класса является коллекция TStatusPanels, которая размещена в определении элемента управления TStatusBar. В таблице 21-1 перечислены свойства и методы, реализуемые TCollection.


РИСУНОК 21-1 Диаграмма иерархии TCollection и TCollectionltem и порожденных классов.

Таблица 21-1 Методы, свойства и события, реализуемые TCollection

Использовать или установить это ... Чтобы сделать это ... Наследование
Add Добавить к списку новый объект TCollectionItem. Нет
Assign Копировать содержимое объекта TPersistent в данный объект TCollection. TPersistent
BeginUpdate Начать операцию обновления. Нет
Clear Возвратить TCollection в пустое состояние. Нет
Count Возвратить количество элементов в коллекции. Нет
Create Создать новый экземпляр TCollection. Нет
Destroy Удалить экземпляр TCollection. Нет
EndUpdate Завершить операцию обновления. Нет
FindItemID Получить ссылку на объект TCollectionItem с указанным ID. Нет
GetItem Вернуть индексированный элемент коллекции. Нет
Item Обеспечить доступ к элементам коллекции. Нет

TCollectionItem
       Класс TCollectionItem используется для определения элементов, которые будут запоминаться в каждом экземпляре TCollection. TCollectionItem является абстрактным классом, который не используется непосредственно. Определение TCollectionItem сравнительно просто и реализует небольшое количество членов. Производные данного класса обычно определяют внутренние свойства, которые должны поддерживаться в коллекции для того, чтобы позволить элементу управления, владеющего соответствующим объектом TCollection, корректно визуализировать отдельный элемент коллекции.
       В таблице 21-2 перечислены свойства и методы, которые реализованы в TCollectionItem.

Таблица 21-2 Методы и свойства, реализуемые TCollectionItem

Использовать или установить это ... Чтобы сделать это ... Наследование
Collection Возвратить или установить владельца объекта TCollection. Нет
Create Создать новый экземпляр TCollectionItem. Нет
Destroy Удалить экземпляр TCollectionItem. Нет
Index Возвратить или установить значение индекса элемента. Нет
SetIndex Указать индекс для элемента коллекции. Нет

TListColumns
       TListColumns используется классом TCustomListView. Класс TCustomListView является абстрактным классом, который представляет собой фундамент для элемента управления ranaTTistView. TListColumns наследует все свойства и методы, ассоциируемые с классом TCollection, и обеспечивает дополнительное свойство Owner.
       В таблице 21-3 перечислены свойства и методы, которые реализуются TListColumns.

Таблица 21-3 Методы и свойства, реализуемые TListColumns

Использовать или установить это ... Чтобы сделать это ... Наследование
Add Добавить к коллекции новый объект TListColumn TCollection
Create Создать новый экземпляр TListColumns TCollection
Items Получить или установить в коллекции индексированный объект TListColumns. TCollection
Owner Получить TCustomListView, владеющий коллекцией. Нет

TListColumn
       Данный класс используется для реализации индивидуальных объектов, которые хранятся в классе TListColumns. Таким образом формируются отдельные объекты, которые представляют заголовки колонок в потомках элемента управления TCustomListView. Данный объект хранит текстовую строку для заголовка, ширину и свойство выравнивания для управления внешним видом заголовка колонки в классах TCustomListView.
       В таблице 21-4 перечислены свойства и методы, которые реализуются TListColumn.

Таблица 21-4 Методы и свойства, реализуемые TListColumn

Использовать или установить это ... Чтобы сделать это ... Наследование
Alignment Указать, как должны выравниваться элементы. Использовать одно из следующих значений: taLeftJustify, taRightJustify, taCenter. Нет
Assign Копировать содержимое другого объекта TListColumn в данный экземпляр TListColumn. TCollectionItem
Caption Читать или писать текстовую строку заголовка. Нет
Create Создать новый экземпляр TListColumn. TCollectionItem
Destroy Освободить экземпляр TListColumn. TCollectionItem
Width Читать или писать ширину соответствующей колонки. Нет
WidthType Определить размеры колонки списка. Нет

THeaderSections
       Класс THeaderSections содержит элементы THeaderSection, определенные классом THeaderSection. Он используется элементом управления Win95 THeader.
       В таблице 21-5 перечислены свойства и методы, реализуемые THeaderSections.

Таблица 21-5 Методы и свойства, реализуемые THeaderSections

Использовать или установить это ... Чтобы сделать это ... Наследование
Add Добавить к коллекции новый объект THeaderSections. TCollection
Create Создать новый экземпляр THeaderSections. TCollection
Items Получить или установить в коллекции индексированный объект THeaderSections. TCollection

THeaderSection
       Данный класс используется для реализации отдельных объектов, которые хранятся в классе THeaderSections. Они формируют объекты, представляющие отдельные разделы заголовков, содержащихся в любом элементе управления THeader. THeaderSection может быть в одном из двух стилей: hsText или hsOwnerDraw. Если стиль для раздела установлен в hsOwnerDraw, программист должен в обработчике события OnSectionDraw определить код, который будет визуализировать на холсте, доступном в разделе. В противном случае элемент управления использует текстовую строку, реализованную в приватных переменных — членах класса. Атрибуты, ассоциированные с каждым THeaderSection и доступные методам класса, таковы: Text, Width, MinWidth, MaxWidth, Alignment, Style и AllowClick. В таблице 21-6 перечислены свойства и методы, реализуемые THeaderSection.

TStatusPanels
       Класс TStatusPanels содержит элементы TStatusPanel, определенные классом TStatusPanel. В таблице 21-7 перечислены свойства и методы, реализуемые TStatusPanels.

Таблица 21-6 Методы и свойства, реализуемые THeaderSection

Использовать или установить это ... Чтобы сделать это ... Наследование
Alignment Возвратить или установить стиль выравнивания раздела (taLeftlustify, taRightJustify, taCenter). Нет
AllowClick Определить, будет ли раздел отвечать на события нажатия кнопки путем включения обработчика OnClick. Нет
Assign Копировать в текущий экземпляр содержимое другого THeaderSection. TCollectionItem
Create Создать новый экземпляр THeaderSection. TCollectionItem
Destroy Освободить экземпляр THeaderSection. TCollectionItem
Left Возвратить координаты левой стороны раздела. Нет
MaxWidth Указать максимальную ширину раздела в пикселах. Нет
MinWidth Указать минимальную ширину раздела в пикселах. Нет
Right Вернуть координаты правой стороны раздела. Нет
Style Указать стиль hsText или hsOwnerDraw. Нет
Text Текст, используемый для разделов стиля hsText. Нет
Width Установить или получить ширину текущего раздела. Нет

Таблица 21-7 Методы и свойства, реализуемые TStatusPanels

Использовать или установить это ... Чтобы сделать это ... Наследование
Add Добавить к коллекции новый объект TStatusPanel. TCollection
Create Создать новый экземпляр TStatusPanels TCollection
Destroy Удалить экземпляр TStatusPanels. TCollection
Items Получить или установить индексированный объект TStatusPanel в коллекции. TCollection

TStatusPanel
       Данный класс используется для реализации отдельных объектов, хранящихся в классе TStatusPanels. Они формируют объекты, которые представляют отдельные панели, содержащиеся в любом элементе управления TStatus. TStatusPanel может быть одного из двух стилей: hsText или hsOwnerDraw. Если стиль раздела установлен в hsOwnerDraw, программист должен указать в обработчике события OnDrawPanel код, визуализирующий любой желаемый образ на холсте панели, который обработчик делает доступным. В противном случае элемент управления использует текстовую строку, реализуемую в классе приватными переменными-членами. Атрибуты, ассоциированные с каждым TStatusPanel и доступные методам класса, таковы: Alignment, Bevel, Style, Text и Width. В таблице 21-8 перечислены свойства и методы, реализуемые TStatusPanel.

Таблица 21-8 Методы и свойства, реализуемые TStatusPanel

Использовать или установить это ... Чтобы сделать это ... Наследование
Alignment Возвратить стиль выравнивания раздела (taLeftlustify, taRightlustify, taCenter). Нет
Assign Копировать в текущий экземпляр содержимое другого TStatusPanel. TCollectionItem
Bevel Определить фаску — выпуклую или вогнутую. Нет
Create Создать новый экземпляр TStatusPanel. TCollectionltem
Destroy Освободить экземпляр TStatusPanel. TCollectionItem
GetDisplayName Получить отображаемое имя TStatusPanel. TCollectionItem
Style Указать стиль hsText или hsOwnerDraw. Нет
Text Текст, используемый для разделов стиля hsText. Нет
Width Установить или получить ширину текущего раздела. Нет

TDBGridColumns
       Класс TDBGridColumns используется для хранения коллекции объектов TColumn, которые соотносятся с колонками в компоненте TDBGrid. Каждый компонент TDBGrid содержит объект TDBGridColumns и делает его доступным через свойство Columns. Атрибуты объектов TColumn, содержащиеся в TDBGridColumns, устанавливаются во время конструирования в редакторе Columns Editor, вызываемом из Object Inspector или меню Component Editor. Во время выполнения различные методы TDBGridColumn можно использовать для манипуляций колонками, содержащимися в компоненте.
       В таблице 21-9 перечислены свойства и методы, определяемые классом TDBGridColumns.

Таблица 21-9 Методы и свойства, реализуемые TDBGridColumns

Использовать или установить это ... Чтобы сделать это ... Наследование
Add Создать новый элемент коллекции. TCollection
Create Создать новый экземпляр TDBGridColumns. TCollection
Destroy Разрушить экземпляр TDBGridColumns. TCollection
Grid Ссылка на элемент управления DBGrid, который владеет данной коллекцией. Нет
Items Установить или получить из коллекции отдельные объекты TColumn. Нет
RebuildColumns Пересоздать колонки в сетке из полей в присоединенной базе данных. Нет
RestoreDefaults Возвратить все колонки в состояние по умолчанию. Нет
State Установить или получить состояние колонок - либо csDefault, либо csCustomized. Нет

TColumn
       Класс TColumn определяет объекты, которые содержатся в классе TDBGridColumn. Класс TColumn задает способ отражения колонки в TDBGrid. Программисту доступны разнообразные атрибуты, подобные цвету, шрифту, ширине и т.д. В таблице 21-10 перечислены свойства и методы, определенные классом TDBGridColuns.

Таблица 21-10 Методы и свойства, реализуемые TColumn

Использовать или установить это ... Чтобы сделать это ... Наследование
Alignment Установить/получить выравнивание колонки. Нет
Assign Копировать в другой объект TColumn содержимое одного объекта TColumn. TCollectionItem
AssignedValues Возвратить множество атрибутов, у которых состояние по умолчанию было изменено Нет
ButtonStyle Установить/получить стиль кнопки для колонки. Нет
Color Установить/получить цвет для колонки. Нет
Create Создать новый экземпляр TColumn. TCollectionItem
CreateTitle Создать экземпляр TColumnTitle. Нет
DefaultAlignment Возвратить свойство выравнивания соответствующего поля базы данных. Нет
DefaultColor Возвратить свойство цвета соответствующего поля базы данных. Нет
DefaultFont Возвратить TitleFont объекта TDBGrid. Нет
DefaultReadOnly Возвратить установку ReadOnly по умолчанию. Нет
DefaultWidth Возвратить установку Width по умолчанию. Нет
Destroy Разрушить экземпляр TColumn. TCollectionItem
DropDownRows Установить/получить количество выпадающих строк для комбинированных окон в объекте TColumn. Нет
Field Установить/получить соответствующую ссылку на поле для объекта TColumn. Нет
FieldName Установить/получить соответствующее имя поля для объекта TColumn. Нет
Font Установить/получить шрифт, используемый объектом TColumn. Нет
GetGrid Вернуть ссылку на TDBGrid, который владеет данным объектом TColumn. Нет
PickList Установить/получить элементы в списке выбора колонки. Нет
ReadOnly Установить/получить состояние атрибута Readonly для колонки. Нет
RestoreDefaults Вернуть параметры колонки по умолчанию. Нет
Title Установить/получить заголовок колонки. Нет
Width Установить/получить ширину колонки. Нет

Метод Add
Свойство Alignment
Свойство AllowClick
Метод Assign
Свойство AssignedValues
Метод BeginUpdate
Свойство Bevel
Свойство ButtonStyle
Свойство Caption
Метод Clear
Свойство Collection
Свойство Color
Свойство Count
Метод Create
Метод CreateTitle
Метод DefaultAlignment
Метод DefaultColor
Метод DefaultFont
Метод DefaultReadOnly
Метод DefaultWidth
Метод Destroy
Свойство DropDownRows
Метод EndUpdate
Свойство Field
Свойство FieldName
Метод FindItemID
Свойство Font
Метод GetDisplayName
Метод GetGrid
Метод GetItem
Свойство Grid
Свойство Index
Свойство Items
Свойство Left
Свойство MaxWidth
Свойство MinWidth
Свойство Owner
Свойство PickList
Свойство ReadOnly
Метод RebuildColumns
Метод RestoreDefaults
Свойство Right
Метод SetIndex
Свойство State
Свойство Style
Свойство Text
Свойство Title
Свойство Width
Свойство WidthType

Пример проекта

       Следующий пример проекта иллюстрирует ряд простых концепций, связанных с использованием классов TCollection и TCollectionltem. С небольшими изменениями концепции, примененные в примере к компоненту TStatusBar, применимы также и к другим производным TCollection. Проект показывает, как создавать линейку состояния, реализующую пользовательскую отрисовку, и изображает на каждой панели линейки состояния что-то свое. Задача выполняется путем прохода по членам TStatusPanels, которые являются объектами TStatusPanel.
       Ниже представлена распечатка кода:

unit Ch21;
interface 
uses
   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls;
type
   TForm1 = class(TForm)
   StatusBar1: TStatusBar;
{  Заметьте, что часть требуемой работы будет выполняться 
   при запуске обработчика FormResize.
      Обработчик StatusBarlDrawPanel вызывается по запросу Delphi, 
   когда одна из панелей в элементе управления TStatusBar требует 
   перерисовки и имеет стиль psOwnerDraw. }
   procedure FormResize(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   procedure StatusBarlDrawPanel(StatusBar: TStatusBar; Panel: TStatusPanel; const Rect: TRect);
private
{ Private declarations }
// Отсутствует public
{Public declarations }
// Отсутствует end;
var
   Form1: TForm1;
implementation
{$R *.DFM}
procedure TForml.FormResize(Sender: TObject);
var
   i,j,k: integer;
begin
   i := StatusBarl.Panels.Count; // Получить количество панелей
   k := StatusBarl.Width;       // Вычислить общую ширину панели состояния
   for j:=0 to i-1 do
      begin
      // При каждом изменении размера формы разделять линейку
      // состояния на сегменты одинаковой ширины
      StatusBarl.Panels[j].Width := k div i;
      end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
   i, j : integer;
begin
   // Установить стиль каждой панели в StatusBar в OwnerDraw
   i := StatusBarl.Panels.Count;
   for j := 0 to i - 1 do
   StatusBar1.Panels[j].Style := psOwnerDraw;
end;
procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar; 
                      Panel: TStatusPanel; const Rect: TRect);
var
   Bitmap1: TBitmap;
   tempPanel: TStatusPanel;
begin
// Выполнить рисование по требованию TStatusPanel.
// Это будет вызываться для каждой панели всякий раз, когда
// система определяет, что панель должна быть перерисована.
// Прежде всего это возникает при изменении размера формы
// или перемещении последней поверх остальных форм при
// условии перекрывания ее другими формами.
   Bitmap1 := TBitmap.Create;  // Рабочий объект изображения
// Следующие условия определяют, какая из трех панелей
// линейки состояния перерисовывается и затем загружают 
// в панель соответствующее изображение.
//В главе 21 Супербиблии Delphi 3 рассматривается
// альтернативный метод получения доступа к индивидуальным
// TCollectionltem из TCollection с использованием функции FindItemID.
   if (Panel = StatusBar.Panels[0]) then begin
      Bitmap1.LoadFromFile('с:\windows\Tartan.bmp');
      StatusBar.Panels[0].Text := 'one';
      Editl.Text := StatusBar.Panels[0].GetDisplayName;
    end
    else if (Panel = StatusBar.Panels[1]) then begin
       Bitmapl.LoadFromFile('с:\windows\Marble.bmp');
       Edit2.Text := StatusBar.Panels[1].GetDisplayName;
    end
    else if (Panel = StatusBar.Panels[2]) then begin
       Bitmap1.LoadFromFile('с:\windows\Metal Links.bmp');
       Edit3.Text := StatusBar.Panels[2].GetDisplayName;
    end;
// Нарисовать две версии изображений для покрытия всей
// области полотна панели.
    StatusBar1.Canvas.Draw(Rect.Left, Rect.Top, Bitmap1);
    StatusBar1.Canvas.Draw(Rect.Left+Bitmap1.Width, Rect.Top, Bitmap1);
    Bitmap1.Free;
end;
end.

       Для обеспечения функционирования данного примера требуется всего несколько обработчиков. Элемент управления StatusBar при размещении в главной форме делится на три панели. С целью иллюстрации перехода от панели к панели на них рисуется различная графика. Для реализации панелей StatusBar, отрисовываемых владельцем, стиль каждой панели необходимо установить в psOwnerDraw. Установку стиля можно сделать в Редакторе компонент, но в примере это делается в обработчике FormCreate, чтобы проиллюстрировать итерации по множеству TStatusPanel для установки корректных значений свойства Style.
       Еще один проход по членам TStatusPanels производится в обработчике FormResize, в котором ширина объектов TStatusPanel устанавливается одинаковой и занимающей всю линейку состояния, независимо от того, какой размер формы указывает пользователь во время операции установки размеров.
       В последнем примере обработчик StatusBarlDrawPanel иллюстрирует способ реализации технологии рисования владельцем для объектов TStatusPanel. В данном случае Delphi выполняет итерации автоматически для каждой панели, которая имеет свойство, установленное в psOwnerDraw. В общем случае некоторые панели могут отрисовываться владельцем, а некоторые — нет. Однако в данном случае в обработчике FormCreate все панели установлены в стиль psOwnerDraw. Таким образом, обработчик StatusBar lDrawPanel будет вызываться трижды с параметрами, установленными для каждой панели. Обработчик иллюстрирует способ определения, какая из трех панелей рисуется, путем сравнения параметра StatusBar с одним из членов коллекции TStatusPanel. Когда они совпадают, это означает, что необходимая для обновления панель найдена. После того, как нужная панель найдена, из диска загружается соответствующая битовая графика и отображается на панели. Обратите внимание на то, что графика рисуется дважды таким способом, который гарантирует покрытие изображением всей панели. Также обратите внимание на альтернативную подпрограмму StretchDraw, которую можно было бы использовать, однако с битовой графикой, выбранной для данного примера, результат выглядел бы не очень привлекательно. В образе на рисунке 21-3 проиллюстрированы результаты выполнения программы.


РИСУНОК 21-3 Результаты выполнения кода примера из главы 21

уже скачали 173 раз.


<<< Пред. Оглавление
Начало раздела
След. >>>




Дата последнего изменения:
Thursday, 21-Aug-2014 09:10:56 MSK


Постоянный адрес статьи:
http://az-design.ru/Support/SoftWare/Delphi/D3/SB21.shtml