Методические указания. 1. Компонент ImageList (страница Win32)
1. Компонент ImageList (страница Win32)
Невизуальный компонентImageList представляет собой контейнер для хранения графических объектов (по умолчанию размером 16 x 16 пикселей). На ImageList могут ссылаться другие компоненты, например для получения пиктограмм. Для обращения к графическим объектам используются индексы, начинающиеся с 0.
Основные свойства:
¨ Width– ширина изображения
¨ Height– высота изображения
¨ DrawingStyleопределяет способ отображения
Основные методы:
¨ Add ( )–добавление объекта
¨ Delete ( ) –удаление изображения
¨ Clear ( ) –очищение списка
¨ FileLoad ( ) –загрузка изображения из графического файла
¨ GetBitmap ( ) возвращает указанное индексом изображение в виде битового образа, а GetIcon – в виде значка
Изображения в компонентTImageList могут быть загружены в процессе проектирования с помощью редактора списков изображений. Окно редактора вызывается двойным щелчком на компонентеTImageList или щелчком правой кнопки мыши и выбором команды контекстного меню ImageList Editor… . В окне редактора списков изображений можно добавить в списки изображения (кнопка Add), удалить изображение из списка (кнопка Delete), очистить весь список (кнопка Clear). При добавлении изображения в список появляется окно, в котором вы можете выбрать интересующий вас файл.
v Пример 1. Поместите на форму 2 компонента ImageList. В одном из них будем хранить битовые изображения размером 16x16, а в другом - 32x32. В ImageList1 загрузите из каталога Files\ Common Files\ Borland Shared\ Images следующие графические изображения outclose.bmpиз каталога Default , иconstr16.bmpи handsh16.bmp из каталога Icons. В свойствах Wedth и Height компонента ImageList2 измените размеры на 32 , затем загрузите графический объект из каталога Icons файл handshak.ico.
2. Компонент TreeView (страница Win32)
Компонентслужит для отображения древовидных структур, где с каждым узлом дерева могут быть связаны некоторые данные.
Основное свойство компонентаItems –элементы дерева. Каждый из них является объектом типаTTreeNodes и обладает своими свойствами и методами.
Ряд свойств компонентаTreeView:
¨ ShowButtonsопределяет показывать или нет кнопку «+»
¨ ShowLinesпоказывает линии дерева
¨ ShowRoot отвечают за изображение линий связи с корневым элементом.
¨ SortType позволяет автоматически сортировать ветви и узлы дерева.
ú stText- узлы автоматически сортируются по алфавиту
ú stData - сортировка по связанным с узлами объектамData
ú stBoth-сортировка одновременно по тексту и объектам Data
¨ Count — число узлов, управляемых данным, т.е. дочерних узлов, их дочерних узлов и т.п. Если значениеCount узла равно нулю, то он является листом дерева.
¨ Indent показывает число раскрываемых потомков.
Создавать узлы дерева можно как программно, так и с помощью редактора узлов дерева. Он вызывается двойным щелчком на компоненте TreeView или нажатием кнопки с многоточием около свойстваItems в окне Инспектора Объектов. Здесь кнопка New Item позволяет добавить в дерево новый узел, New Subltem позволяет добавить в дерево дочерний узел. Если нажать на Delete, можно удалить выделенный узел дерева. Кнопка Load позволяет загрузить структуру дерева из файла — обычный текстовый файл. Уровни узлов обозначаются отступами. Например, файл дерева, представленного на рисунке справа имел бы вид:
Компоненты
Standard
MainMenu
Label
Edit
Additional
BitBtn
SpeedBtn
MaskEdit
В панели Item Properties редактора узлов можно задать такие свойства, как Text — надпись, появляющаяся в дереве около данного узла, а так же Image Index и Selected Index определяют индекс пиктограммы, отображаемой для узла, который соответственно не выделен и выделен пользователем в данный момент. Индексы начинаются с 0 и соответствуют списку изображений, хранящихся в отдельном компоненте ImageList. Указание на этот компонент можно задать в свойстве Images компонента TreeView. Значение по умолчанию равно -1 (пиктограммы изображаться не будут).
Доступ к информации об отдельных узлах осуществляется через свойствоItem[intIndex].Например,чтобы обратитьсяк узлу дерева с индексом 0 и определить число дочерних узлов (на рис.1 это узел «Компоненты», число управляемых им узлов – 4), необходимо написать
{ TreeViewl->Items->Item[0]->Count }
СвойствоSelected указывает узел, который выделен пользователем и доступно только во время выполнения программы. Если ни один узел не выбран, значение Selected равно NULL. При выделении пользователем нового узла происходит событие OnChange, в обработчик которого передается параметр TTreeNode*Node — выделенный узел. В этом обработчике можно предусмотреть действия, которые должны производится при выделении узла. Например:
void __fastcall TForm1::TreeView1Change (TObject *Sender, TTreeNode *Node)
{ Edit1->Text = Node->Text; } //Выводим в Edit1 надпись выделенного узла
С каждым узлом может быть связан некоторый объект и данные о нем. Ссылка на этот объект содержится в свойствеузлаData.
Основные методы:
¨ AddChild ( ) – добавление дочернего узла
¨ Add ( )– добавление узла
¨ Insert ( )– вставка узла
¨ Clear ( )– очищение дерева
¨ SaveToFile– сохранение структуры дерева в файл
Например, чтобы добавить узел «Компоненты», необходимо написать
{ TreeView1->Items->Add (NULL," Компоненты "); }
v Пример 2. Пусть требуется создать дерево, узлами которого является номера групп, а при выборе соответствующего узла отображать сведения о студентах группы. Пусть пиктограммы, для отображения узла хранятся в компонентах ImageList1 и ImageList2 из примера 1. В основном модуле с расширением *.h перед классом формы объявим класс Student и определим экземпляры этого класса:
class Student
{ public:
AnsiString Fam;
AnsiString Name;
int NomZach; // номер зачетной книжки
int Shit; //номер читательского билета
Student (AnsiString F, AnsiString N,int NZ,int S)
{ Fam=F; Name=N; NomZach=NZ; Shit=S; };
};
Student* stud1 = new Student ("Митрохина","Ольга",1496,7015);
Student* stud2 = new Student ("Федоров","Алексей",1355,7047);
Student* stud3 = new Student ("Суровикова","Вера",3792,6034);
Student* stud4 = new Student ("Иванова","Ольга",4550,7532);
Student* stud5 = new Student ("Пронин","Андрей",4567,7542);
Добавим на форму компонент TreeView. Пусть дерево отображается при нажатии кнопки Button1 с надписью «Загрузить». Тогда в обработчике события Click необходимо программно заполнить узлы дерева значениями (это также можно сделать, внося изменения в свойство Items… компонента TreeView).
void __fastcall TForm1::Button3Click(TObject *Sender)
{
TTreeNode* Nd; //указатель на объект типа TTreeNodes
TreeView1->Items->Clear();
Nd=TreeView1->Items->Add(NULL,"Группа 240");
FillViewList (Nd,stud1); //заполнение дочерних узлов
FillViewList (Nd,stud2);
FillViewList (Nd,stud3);
Nd=TreeView1->Items->Add(NULL," Группа 243");
FillViewList (Nd,stud4); //заполнение дочерних узлов
FillViewList (Nd,stud5);
}
Здесь для каждого дочернего узла вызывается функция FillViewList ( ), которую необходимо заранее определить в заголовочном файле *.h в классе формы как
private: void __fastcall FillViewList(TTreeNode* Nd, Student* stud);
и реализовать в файле *.cpp
void __fastcall TForm1::FillViewList (TTreeNode* Nd, Student* stud)
{
TTreeNode* NdChild;
NdChild=TreeView1->Items->AddChild (Nd,stud->Fam);
NdChild->Data=stud; //заполнение узла данными
NdChild->ImageIndex=1;
NdChild->SelectedIndex=1;
}
Теперь прочитать данные, связанные с узлом, например, имя можно так:
Edit1->Text=((Student*) Nd->Data) ->Name; //Nd-выделенный узел
3. Компонент ListView (страница Win32)
Компонент ListViewпозволяет представить данные в виде списков, таблиц, крупных и мелких пиктограмм, дает возможность представления иерархических структур. Смысл дочерних узлов другой: это информация, которая появляется только в режиме vsReport - в виде таблицы.
Ряд свойств компонентаListView:
¨ Items –объекты типа TListItem, доступ к которым осуществляется с помощью редактора свойств или программно
¨ ViewStyle - стиль отображения информации. Может принимать следующие значения:
ú vsIcon - крупные значки
ú vsSmallIcon - мелкие значки
ú vsList - список
ú vsReport-таблица
¨ Columns –определяет список заголовков в режимеотображения таблицыvsReport , объекты типа TListColumn. При этом свойство ShowColumnHeadersдолжно быть установлено в true
¨ Largelmagesуказывает на компонент, хранящий пиктограммы для отображения больших иконок (режимvsIcon)
¨ SmallImages указывает на компонент, хранящий пиктограммы для режимовvsSmallIcon, vsList и vsReport
Свойство Items в свою очередь имеет ряд свойств, относящихся к определенному узлу и доступные только во время выполнения программы:
ú SubItems –определяет дочерний узел, т.е. колонки табличного списка
ú Caption - надпись, появляющаяся около пиктограммы Для дочерних узлов это свойство соответствует надписи, появляющейся в ячейках таблицы в режимеvsReport.
ú ImageIndex - определяет пиктограммы, индексы которых соответствует спискам изображений в компонентахImageList. Указания на эти компоненты можно задать в свойствахLargelmages и SmallImages
Эти свойства можно задать в редакторе Items кнопками NewItem - новые узлы и NewSubltem - дочерние узлы. Здесь также задаются свойства Caption и ImageIndex. СвойствоColumns также можно задать в специальном редакторе заголовков, вызываемым двойным щелчком на компоненте ListView или через Инспектор Объектов. При этом следует задавать значение свойства Caption
Основные методы компонента ListView:
¨ Clear ( )- очистка списка
¨ Add ( ) -добавление элемента
¨ Delete ( ) –удаление элемента
v Пример 3. Продолжим рассмотренный выше пример. Добавим на форму компонент ListView изададим начальный режим отображения списка, т.е. в виде списка
void __fastcall TForm1::FormCreate(TObject *Sender)
{ ListView1->ViewStyle = vsList; }
Заполним свойство Columns, добавив в него 4 элемента с надписями (свойство Caption) «Фамилия», «Имя», «Номер зачетной книжки», «Номер читательского билета». Это будут заголовки столбцов в табличном режиме отображения списка. Теперь сделаем так, чтобы при выборе пользователем конкретного узла дерева (группы или студента) информация о нем отображалась бы в окне списка ListView. Необходимо обрабатывать событие OnChange дерева:
void __fastcall TForm1::TreeView1Change(TObject *Sender, TTreeNode *Node)
{ int i;
ListView1->Items->Clear(); //очистка списка
if (Node->Level > 0) //если выбран дочерний узел
SetViewList (Node); //выводим сведения об отдельном студенте
else //если выбран корневой каталог с номером группы
for (i=0; i<Node->Count; i++)
SetViewList (Node->Item[i]); } //выводим сведения о всей группе
Здесь для каждого узла вызывается функция SetlViewList ( ), которую необходимо заранее определить в заголовочном файле *.h в классе формы как
private: void __fastcall SetViewList(TTreeNode* Nd);
и реализовать в файле *.cpp
void __fastcall TForm1::SetViewList(TTreeNode * Nd)
{ TListItem *Item1; //новый элемент списка
Item1=ListView1->Items->Add(); //добавляем элемент
Item1->Caption=((Student*)Nd->Data)->Fam; //надпись для пиктограммы
//заполняем колонки табличного списка, т.е. добавляем дочерние элементы
Item1->SubItems->Add(((Student*)Nd->Data)->Name);
Item1->SubItems->Add(IntToStr(((Student*)Nd->Data)->NomZach));
Item1->SubItems->Add(IntToStr(((Student*)Nd->Data)->Shit));
Item1->ImageIndex=2; //значок элемента
}
4. Компонент OpenDialog (страница Dialogs)
Это компонент, вызывающий стандартную диалоговую панель открытия файла.
Отметим, что все компоненты со страницы Dialogs обладают методом Execute ( ), осуществляющим вывод соответствующей диалоговой панели на экран. Основные свойства компонента:
¨ FileName – имя открываемого файла
¨ DefaultExt - расширение имени файла по умолчанию
¨ Title - заголовок окна
¨ Filter - набор шаблонов имен файлов. Заполняется с помощью редактора
¨ FilterIndex определяет, какая из масок используется по умолчанию
¨ Options имеет набор подсвойств, описывающих настройки диалогового окна
Важно помнить, что данный компонент отвечает только за вывод диалоговой панели. Для реального открытия файла следует написать код, использующий свойство FileName компонента.
На этой же странице имеется похожий компонент SaveDialog, вызывающий стандартную диалоговую панель сохранения файла. Основные свойства те же, что и у OpenDialog.
v Пример 4. Дополним наш пример: сохраним созданное дерево в текстовый файл
void __fastcall TForm1::Button1Click(TObject *Sender)
{ SaveDialog1->Title = "Save File"; // заголовок окна
SaveDialog1->Filter = "Text files (*.txt)|*.TXT"; //шаблон имени файла
if (SaveDialog1->Execute())
if (FileExists (SaveDialog1->FileName))
TreeView1->SaveToFile(SaveDialog1->FileName);
}
5. Компонент FontDialog (страница Dialogs)
Компонент, вызывающий стандартную диалоговую панель выбора шрифта.
Основные свойства компонента:
¨ Font - шрифт, появляющийся в диалоговой панели (или выбранный пользователем)
¨ Options - набор подсвойств, описывающих настройки диалогового окна (например, определить, какие типы шрифтов предлагать пользователю)
6. Компонент ColorDialog (страница Dialogs)
Компонент, вызывающий стандартную диалоговую панель выбора цвета.
Основные свойства компонента:
¨ Color – выбранный цвет
¨ Options - набор подсвойств, описывающих настройки диалогового окна (например, отображение окна вместе с панелью выбора дополнительных цветов и др.)