12405

Компоненты отображения иерархических данных

Лабораторная работа

Информатика, кибернетика и программирование

Лабораторная работа № 10 Компоненты отображения иерархических данных Цель лабораторной работы состоит в изучении методики работы с компонентами отображения произвольных иерархических данных. Общие сведения о компонентах В библиотеке VCL для отображения иерар...

Русский

2013-04-27

165 KB

8 чел.

Лабораторная работа № 10

Компоненты отображения иерархических данных

Цель лабораторной работы состоит в изучении методики работы с компонентами отображения произвольных иерархических данных.

Общие сведения о компонентах

В библиотеке VCL для отображения иерархических структур имеются такие компоненты

Таблица № 1

Компонента

Страница VCL

Описание

TreeView

(окно дерева данных)

Win32

Просмотр структуры иерархических данных в виде дерева в стиле Windows 95/98/2000

OutLine

(окно дерева данных)

Win3.1

Просмотр структуры иерархических данных в виде дерева в стиле Windows 3.х

ListView

(список данных в стиле Windows 95)

Win32

Отображение в стиле папок Windows списком

в виде колонок или пиктограмм

OpenDialog

(открыть файл)

Dialogs

Предназначен для создания окна диалога «Открыть файл»

FileListBox

(список файлов)

Win3.1

Отображает список всех файлов каталога

DirectoryListBox

(структура каталогов)

Win3.1

Отображает структуру каталогов диска

DriveComboBox

(список дисков)

Win3.1

Выпадающий список доступных дисков

CDirectoryOutline

(дерево каталогов)

Samples

Пример компонента, используемого для отображения структуры каталогов выбранного диска

Компонента ListView позволяет в стиле Windows отображать данные в виде списков, таблиц, крупных и мелких пиктограмм. Пользователь сталкивается с таким отображением данных  при раскрытии папок Windows.

Стиль отображения информации определяется свойством ViewStyle , которое может устанавливаться в процессе проектирования или программно во время выполнения. Свойство может принимать такие значения: vsIcon – крупные значки; vsSmallIcon – мелкие значки; vsList – список; vsReport – таблица. Основное свойство компоненты ListView задается в поле свойств – Items. Реорганизация дерева, связанная с созданием или удалением многих узлов, может вызывать неприятные мерцания изображения. Избежать этого можно с помощью методов BeginUpdate и EndUpdate. Первій метод запрещает перерисовку дерева, а второй – разрешает.

Постановка задачи лабораторной работы.

Необходимо создать для Windows приложение у которого в окне формы будет видна структура папок выбранного диска и при открытии двойным щечком папки должен появляться список файлов хранящихся в папке.

Порядок действий и команд при выполнении работы.

Шаг 1. Перейдите на форму приложения и в свойстве Caption напишите название работы “Лаб. работа № 13 компонента ListView ”, чтобы этот текст появился в заголовке формы. Выполните команду File/Save Project As…  . На диске D:\ создайте папку Lab_13  для  файлов проекта P_work_13.bpr и файла U_work_13.cpp.

Шаг 2. Установите на форму компоненты DriveComboBox1 и DriveComboBox2 , как это показано рис.1.

Рис.1.

Шаг 3. Установите на форму компоненты DirectoryListBox1 и DirectoryListBox2 , как это показано рис.2.

Рис.2.

Шаг 4. Установите на форму компоненты ListView1 и ListView2 , как это показано рис.3.

Рис. 3.

Шаг 5. Выполните предварительную компиляцию с целью проверки.

Шаг 6. Установите на форму компоненты Label1 и Label2 . В свойстве Caption задайте синим цветом пояснительную надпись «Свойства значков» и расположите их согласно рис.4.

Шаг 7. Установите на форму компоненты ComboBox1 и ComboBox2 , как это показано рис.4. . В свойстве Items задайте названия для выпадающего списка: Крупные значки

                                                                                                                     Мелкие значки

                                                                                                                     Список

                                                                                                                     Таблица.

Шаг 8. Задайте событие   void __fastcall TForm1::FormCreate(TObject *Sender); и заполните оператоы согласно листинга программы файла U_work_13.cpp .

Шаг 9. Задайте события   void __fastcall TForm1::DirectoryListBox1Change(TObject *Sender); и void __fastcall TForm1::DirectoryListBox2Change(TObject *Sender); и  заполните оператоы согласно листинга программы файла U_work_13.cpp .

Шаг 10. Задайте события   void __fastcall TForm1::ComboBox1Click(TObject *Sender); и  void __fastcall TForm1::ComboBox2Click(TObject *Sender);  и заполните оператоы согласно листинга программы файла U_work_13.cpp .

Шаг 11. Выполните компиляцию исходных файлов и проверте работу приложения, как показано рис.5.

Рис.4.

Рис. 5. Результат работы приложения Windows.

Листинг файла U_work_13.cpp.

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "U_work_13A.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

       : TForm(Owner)

{

}

//---------------------------------------------------------------------------

void UpdateFiles_1()

{

TSearchRec sr1;

// TSHFileInfo * fi1;

TListItem *pItem1 = NULL;

int IconIndex1;

TSHFileInfo * fi1 = new TSHFileInfo;

Form1->ListView1->Items->BeginUpdate();

Form1->ListView1->Items->Clear();

if (FindFirst(Form1->DirectoryListBox1->Directory + "\\*.*", faAnyFile, sr1) == 0)

 do

 {

   if (sr1.Attr == faDirectory) continue;

  pItem1 = Form1->ListView1->Items->Add();

  pItem1->Caption = sr1.Name;

  SHGetFileInfo(("*" + LowerCase(ExtractFileExt(pItem1->Caption))).c_str(),

    0, fi1, sizeof(fi1),

     SHGFI_SMALLICON | SHGFI_SYSICONINDEX | SHGFI_TYPENAME);

  pItem1->ImageIndex = fi1->iIcon;

  if (sr1.Size < 1024)

   pItem1->SubItems->Add(IntToStr(sr1.Size) + " byte");

   else if (sr1.Size < 1024 * 1024)

    pItem1->SubItems->Add(IntToStr(sr1.Size / 1024) + " KByte");

    else pItem1->SubItems->Add(IntToStr(sr1.Size / (1024 * 1024)) + " MByte");

   pItem1->SubItems->Add(fi1->szTypeName);

  }

  while (FindNext(sr1) == 0);

FindClose(sr1);

Form1->ListView1->Items->EndUpdate();

}

//---------------------------------------------------------------------------

void UpdateFiles_2()

{

TSearchRec sr2;

// TSHFileInfo * fi2;

TListItem *pItem2 = NULL;

int IconIndex2;

TSHFileInfo * fi2 = new TSHFileInfo;

Form1->ListView2->Items->BeginUpdate();

Form1->ListView2->Items->Clear();

if (FindFirst(Form1->DirectoryListBox2->Directory + "\\*.*", faAnyFile, sr2) == 0)

 do

 {

   if (sr2.Attr == faDirectory) continue;

  pItem2 = Form1->ListView2->Items->Add();

  pItem2->Caption = sr2.Name;

  SHGetFileInfo(("*" + LowerCase(ExtractFileExt(pItem2->Caption))).c_str(),

    0, fi2, sizeof(fi2),

     SHGFI_SMALLICON | SHGFI_SYSICONINDEX | SHGFI_TYPENAME);

  pItem2->ImageIndex = fi2->iIcon;

  if (sr2.Size < 1024)

   pItem2->SubItems->Add(IntToStr(sr2.Size) + " byte");

   else if (sr2.Size < 1024 * 1024)

    pItem2->SubItems->Add(IntToStr(sr2.Size / 1024) + " KByte");

    else pItem2->SubItems->Add(IntToStr(sr2.Size / (1024 * 1024)) + " MByte");

   pItem2->SubItems->Add(fi2->szTypeName);

  }

  while (FindNext(sr2) == 0);

FindClose(sr2);

Form1->ListView2->Items->EndUpdate();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)

{

TSHFileInfo * fi1, *fi2;

DriveComboBox1->DirList = DirectoryListBox1;

ListView1->SmallImages->Height = 16;

ListView1->SmallImages->Width = 16;

 DriveComboBox2->DirList = DirectoryListBox2;

 ListView2->SmallImages->Height = 16;

 ListView2->SmallImages->Width = 16;

// SHGetFileInfo("*.*", 0, fi,

//      sizeof(fi), SHGFI_SMALLICON | SHGFI_ICON | SHGFI_SYSICONINDEX);

ListView1->SmallImages->Handle =

SHGetFileInfo("*.*", 0, fi1,

     sizeof(fi1), SHGFI_SMALLICON | SHGFI_ICON | SHGFI_SYSICONINDEX);

ListView1->LargeImages->Handle = SHGetFileInfo("*.*", 0, fi1,

     sizeof(fi1), SHGFI_LARGEICON | SHGFI_ICON | SHGFI_SYSICONINDEX);

ComboBox1->ItemIndex = 0;

ListView1->SmallImages->Handle =

SHGetFileInfo("*.*", 0, fi2,

     sizeof(fi2), SHGFI_SMALLICON | SHGFI_ICON | SHGFI_SYSICONINDEX);

ListView2->LargeImages->Handle = SHGetFileInfo("*.*", 0, fi2,

     sizeof(fi2), SHGFI_LARGEICON | SHGFI_ICON | SHGFI_SYSICONINDEX);

ComboBox2->ItemIndex = 0;

UpdateFiles_1();

UpdateFiles_2();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::DirectoryListBox1Change(TObject *Sender)

{

UpdateFiles_1();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::ComboBox1Click(TObject *Sender)

{

switch (ComboBox1->ItemIndex)

{

 case 0: ListView1->ViewStyle = vsIcon;

         break;

 case 1: ListView1->ViewStyle = vsSmallIcon;

         break;

 case 2: ListView1->ViewStyle = vsList;

         break;

 case 3: ListView1->ViewStyle = vsReport;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::ComboBox2Click(TObject *Sender)

{

 switch (ComboBox2->ItemIndex)

{

 case 0: ListView2->ViewStyle = vsIcon;

         break;

 case 1: ListView2->ViewStyle = vsSmallIcon;

         break;

 case 2: ListView2->ViewStyle = vsList;

         break;

 case 3: ListView2->ViewStyle = vsReport;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::DirectoryListBox2Change(TObject *Sender)

{

  UpdateFiles_2();

}

//---------------------------------------------------------------------------

Листинг U_work_13.h

//---------------------------------------------------------------------------

#ifndef U_work_13H

#define U_work_13H

//---------------------------------------------------------------------------

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <ComCtrls.hpp>

#include <FileCtrl.hpp>

#include "ShellAPI.h"

#include "shlwapi.h"

#include <ImgList.hpp>

//---------------------------------------------------------------------------

class TForm1 : public TForm

{

__published: // IDE-managed Components

       TListView *ListView1;

       TDirectoryListBox *DirectoryListBox1;

       TDriveComboBox *DriveComboBox1;

       TComboBox *ComboBox1;

       TImageList *ImageList1;

       TImageList *ImageList2;

       TLabel *Label1;

       TDriveComboBox *DriveComboBox2;

       TDirectoryListBox *DirectoryListBox2;

       TListView *ListView2;

       TLabel *Label2;

       TComboBox *ComboBox2;

       void __fastcall FormCreate(TObject *Sender);

       void __fastcall DirectoryListBox1Change(TObject *Sender);

       void __fastcall ComboBox1Click(TObject *Sender);

       void __fastcall ComboBox2Click(TObject *Sender);

       void __fastcall DirectoryListBox2Change(TObject *Sender);

private: // User declarations

public:  // User declarations

       __fastcall TForm1(TComponent* Owner);

};

//---------------------------------------------------------------------------

extern PACKAGE TForm1 *Form1;

//---------------------------------------------------------------------------

#endif

Контрольные задания по лабораторной работе.

1. Настроить события для перемещения папки или файла мышкой.

2. Настроить события для копирования файлов.

3. Установить индикаторы для визуального наблюдения за ходом копирования файла.


 

А также другие работы, которые могут Вас заинтересовать

30121. Наследственные и врожденные болезни 15.44 KB
  Наследственные и врожденные болезни: НАСЛЕ́ДСТВЕННЫЕ БОЛЕ́ЗНИ патологические состояния организма обусловленные изменениями генетического материала мутациями. В широком смысле термин наследственные болезни включает не только хромосомные и генные болезни вызываемые соответствующими мутациями но и мультифакториальные болезни развитие которых связано с взаимодействием нормальных полиморфных генов формирующих предрасположенность к заболеванию с факторами внешней среды. Условно к наследственным болезням можно также отнести болезни...
30122. Методы диагностики наследственных болезней 29.39 KB
  Методы диагностики наследственных болезней: 1.Генеалогический метод диагностики наследственных болезней – один из важнейших методов в генетике он представляет собой систему изучения заболеваемости в роду с составлением соответствующей родословной. В настоящее время известно более 50 наследственных заболеваний связанных с полом.Биохимикогенетические методы диагностики наследственных болезней исследования широко применяются в диагностике наследственных заболеваний обмена веществ и других форм.
30123. Хромосомные синдромы 19.27 KB
  Хромосомные синдромы: Хромосомные синдромы с числовыми нарушениями аутосом: Синдром Дауна трисомия по хромосоме 21 одна из форм геномной патологии при которой чаще всего кариотип представлен 47хромосомами вместо нормальных 46 поскольку хромосомы 21й пары вместо нормальных двух представлены тремя копиями трисомия см. Существует ещё две формы данного синдрома: транслокация хромосомы 21 на другие хромосомы чаще на 15 реже на 14 ещё реже на 21 22 и Yхромосому 4 случаев и мозаичный вариант синдрома 5 . Синдром получил...
30124. Кариотип 17.21 KB
  Кариотип это совокупность признаков полного набора хромосом соматических клеток организма на стадии метафазы III фаза деления клетки – их количество размер форма особенности строения. Исследование кариотипа проводят методом световой микроскопии с целью выявления патологии хромосом. Чаще всего это исследование проводят у детей для выявления заболеваний обусловленных нарушениями в хромосомах и у супругов при бесплодии или привычном невынашивании беременности. Выявление хромосомных перестроек в этом случае позволяет установить причину...
30125. Генетический контроль синтеза ферментов 16.67 KB
  Генетический контроль синтеза ферментов. Однако под действием некоторых сигналов синтез индуцибельных ферментов повышается. coliв присутствии лактозы образуется ряд ферментов участвующих в катаболизме этого дисахарида. Репрессор связывается со специфическим участком ДНК и блокирует транскрипцию генов ответственных за синтез определенных ферментов.
30126. Создание устройства для дистанционного мониторинга основных физиологических показателей человека, программного обеспечения для регистрации частоты сердечных сокращений и температуры тела 3.2 MB
  Устройство для дистанционного мониторинга физиологических показателей человека позволяет удалённо следить за температурой и частотой пульса пациента. Устройство закрепляется на внутренней стороне плеча, что позволяет точнее измерять температуру.
30127. Разработка аппарата коррекции речи, который использует такие методы лечения заикания как «метроном» и «задержанная акустическая связь» 2.4 MB
  Благодаря речи индивидуальное сознание каждого человека, не ограничиваясь личным опытом, собственными наблюдениями, питается и обогащается результатами общественного опыта: наблюдения и знания всех людей становятся или могут благодаря речи стать достоянием каждого. Огромное многообразие стимулов, которое получает благодаря этому человек, дало мощный толчок для дальнейшего развития его мозга
30128. Микро- и наноэлектроника. МЕТОДИЧЕСКИЕ УКАЗАНИЯ ПО ДИПЛОМНОМУ ПРОЕКТИРОВАНИЮ 835 KB
  ЦЕЛИ И ЗАДАЧИ ДИПЛОМНОГО ПРОЕКТИРОВАНИЯ Дипломное проектирование по специальности Микро и наноэлектроника является заключительным этапом обучения студента в университете и имеет следующие цели: систематизацию закрепление и расширение теоретических и практических знаний по специальности применение этих знаний при решении конкретных научных технических экономических и производственных задач; развитие навыков ведения самостоятельной работы и овладение методикой исследования и экспериментирования при решении разрабатываемых в...
30129. Исследование методов позиционирования, а так же разработка устройства для дистанционного мониторинга технических объектов, транспортных средств и человека 873.95 KB
  Одним из основных компонентов системы позиционирования является устройство под названием GPSтрекер.4 Применение систем навигации Кроме навигации координаты получаемые благодаря спутниковым системам используются в следующих отраслях: Геодезия: с помощью систем навигации определяются точные координаты точек Картография: системы навигации используется в гражданской и военной картографии Навигация: с применением систем навигации осуществляется как морская так и дорожная навигация Спутниковый мониторинг транспорта: с помощью систем...