Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
New_Metod Builder.doc
Скачиваний:
8
Добавлен:
10.11.2019
Размер:
652.8 Кб
Скачать

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 ( )удаление элемента

  • Пример 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; //значок элемента

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]