Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка ЛР по ОС.doc
Скачиваний:
3
Добавлен:
04.05.2019
Размер:
735.23 Кб
Скачать

Отображение строк таблиц

4.2.6Создание графического окна для отображения строк таблиц

Для отображения строк таблицы необходимо создать новую форму, определить для неё имя и сохранить, как описано в разделе 4.2. Установите свойство графического окна FormStyle = MDIChild, это позволит отображать окно как дочерний элемент главного модуля MDI. Разместите необходимые графические элементы в окне. Для отображения списка строк таблицы используйте элемент группы Win32 – List View. Для объекта ListView рекомендуется установить следующие значения свойств RowSelect = true, ReadOnly = true. Примерный вид окна представлен на рисунке 4.4.

Рисунок 4.4 – Проект окна отображения содержимого таблицы

Кнопки «Добавить», «Изменить», «Удалить» в последствии позволят осуществлять централизованное управление данными таблицы. Подробнее об этом будет рассказано в разделе 4.5.

4.2.7Вывод строк таблицы на экран

Вывод строк таблицы на экран логично осуществлять во время создания графического окна, то есть в конструкторе объекта.

    1. Вывод строк таблицы на экран

// файл fmStudentTableUnit.cpp, класс TfmStudentTable

__fastcall TfmStudentTable::TfmStudentTable(TComponent* Owner)

: TForm(Owner)

{

// Очистка списка строк таблицы на экране

lvList->Clear();

// Объявление указателя на строку в соответствии с типом текущей таблицы

TStudent *student;

// Объявление указателя на элемент объекта TListView

TListItem *item;

// Сканирование полного списка текущей таблицы

for (int i=0; i<MainForm->Students->Count; i++)

{

// Получение i-ой строки таблицы текущей таблицы

student = (TStudent *)MainForm->Students->Items[i];

// Добавление строки в таблицу на экране

item = lvList->Items->Add();

// Заполнение значений новой строки в таблице на экране значениями из i-ой строки текущей таблицы

item->Caption = student->No;

item->SubItems->Add(student->Fio);

item->SubItems->Add(student->GroupNo);

item->SubItems->Add(student->Birthday.FormatString("dd.mm.yyyy"));

item->SubItems->Add(student->Address);

}

// Если количество строк в таблице на экране > 0, выбирается 0-ая строка

if (lvList->Items->Count > 0)

{

lvList->Items->Item[0]->Selected = true;

lvList->Items->Item[0]->Focused = true;

btAdd->Enabled = true;

btUpdate->Enabled = true;

btDelete->Enabled = true;

}

else

{

btUpdate->Enabled = false;

btDelete->Enabled = false;

}

}

Дополнительно, для всех окон приложения, создаваемых в качестве дочерних (то есть, для которых свойство FormStyle=MDIChild), необходимо создать обработчик очистки памяти объекта. Очистка памяти должна производиться во время закрытия объекта, в событии OnClose графического окна.

    1. Обработчик закрытия дочернего окна

// файл fmStudentTableUnit.cpp, класс TfmStudentTable

void __fastcall TfmStudentTable::FormClose(TObject *Sender,

TCloseAction &Action)

{

Action = caFree;

}

Кроме числовых и текстовых данных строки таблиц содержат фотоизображения. Для отображения фотографий воспользуемся событием OnSelectItem объекта ListView. Указанное событие срабатывает всякий раз, когда происходит выбор новой строки из списка.

    1. Обработчик выбора новой строки из списка

// файл fmStudentTableUnit.cpp, класс TfmStudentTable

void __fastcall TfmStudentTable::lvListSelectItem(TObject *Sender,

TListItem *Item, bool Selected)

{

if (Item == NULL || Selected == false)

return ;

// Получение индекса выделенной строки

int index = lvList->Items->IndexOf(Item);

TStudent *student;

// Получение значения выделенной строки

student = (TStudent *)MainForm->Students->Items[index];

// Извлечение значения фотографии из выделенной строки и установка фотографии в графический объект

imPhoto->Picture->Bitmap = student->Photo;

}