TSearchRec SearchRec; // результат поиска файла, компонент входит в библиотеку VCL

Практическая работа №2

Тема: Использование компонента «список» в приложениях

 

Цель: Освоить приемы использования компонента список, а также компонента изображений в приложениях, разрабатываемых средствами C++Builder.

Ход работы.

1. Средствами C++Builder создайте форму и расположите на ней компоненты TListBox, TButton(группа Standard на Палитре Инструментов), TImage(группа Additional на Палитре Инструментов). Примерный вид формы:

 

 

2. Прежде всего в файл реализации формы Unit1.cpp добавьте директивы

 

#include <jpeg.hpp> - для работы с изображениями формата jpeg(аналог uses jpeg)

 

#include <filectrl.hpp> - для доступа к функциям поиска FindFirst и FindNext, которые будут использованы для формирования списка

 

3. При нажатии на кнопку «Папка», на экран нужно вывести диалоговое окно, в котором пользователь сможет выбрать папку с изображениями. Это можно сделать с использованием функции SelectDirectory, которая вызывает окно стандартного диалога

 

 

Таким образом, для кнопки Button1 создайте функцию-обработчик события OnClick и добавьте в нее следующий программный код:

/*в случае открытия окна стандартного диалога, после того как пользователь выберет нужную папку, список имен файлов из папки будут загружены в компонент ListBox, и, при выборе файла, его имя будет отображаться в строке заголовка главного окна программы*/

 

if (SelectDirectory("Выберите каталог", "",Path ) )

{

Path = Path + "\\";

Form1->Caption = "Просмотр иллюстраций - " + Path;

FillListBox();

}

4. Для формирования списка файлов в компоненте ListBox используется FillListBox( ) и переменная Path, для хранения имени папки с изображениями. Для начала опишите функцию и переменную в заголовочном файле Unit1.h.

 

class TForm1 : public TForm

{

__published: // IDE-managed Components

 

TListBox *ListBox1;

TImage *Image1;

TButton *Button1;

void __fastcall ListBox1Click(TObject *Sender);

void __fastcall Button1Click(TObject *Sender);

private: // User declarations

__fastcall int FillListBox( );

AnsiString Path;

 

public: // User declarations

__fastcall TForm1(TComponent* Owner);

};

 

Затем в файле Unit1.cpp в конструктор формы, т.е. функцию TForm1 добавьте вызов функции FillListBox( ), чтобы сформировать список изображений, которые находятся в папке с exe-файлом.

 

// Конструктор

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

// т.к. значение переменной Path равно "пустая строка",

// то будет сформирован список иллюстраций текущего

// каталога, т.е. того, в котором находится exe-файл

this->FillListBox();

}

 

В этом же файле напишите следующую реализацию функции FillListBox( ):

 

// Сформировать список jpg-файлов

__fastcall TForm1::FillListBox( ){

TSearchRec SearchRec; // результат поиска файла, компонент входит в библиотеку VCL

int r;

r = FindFirst(Path + "*.jpg",faAnyFile,SearchRec);