Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Язык программирования Сpp 25.09.11 (2).doc
Скачиваний:
32
Добавлен:
19.08.2019
Размер:
10.09 Mб
Скачать

Классы для хранения графических объектов.

C++ Builder для хранения графических объектов использует следующие классы: TBitmap, TIcon, TMetafile. Все они являются наследниками абстрактного, базового клаасс TGraphic. Кроме того, определен класс TPicture, который может хранить любой из этих объектов. Этот класс может содержать объекты определенные пользователем, производные от TGraphic. Для доступа к графическому объекту следует использовать свойство TPicture->TGraphic, а если тип графического объекта известен, то можно непосредственно обратиться к свойству TPicture->Bitmap, TPicture->Icon, TPicture->Metafile.

Для всех рассмотренных классов определены методы загрузки и сохранения в файл:

void __fasstcall LoadFromFile(const Sysytem::AnsiString Filename);

void __fasstcall SaveToFile(const Sysytem::AnsiString Filename);

При этом для классов TBitmap, TIcon, TMetafile формат файла должен соответствовать классу объекта. Объект класса TPicture может оперировать с любым форматом.

Для всех рассмотренных классов определены методы присвоения значений объектов:

void __fasstcall Assign(TPersistent* Sourse);

Рассмотрим пример, в котором создается объект Bitmap для загрузки картинки в память. Точнее создается не сам объект, а указатель.

Graphics::TBitmap *Bitmap=new Graphics::TBitmap;

//далее графический файл MyBitmap.bmp загружается в объект

Bitmap->LoadFromFile("MyBitmap.bmp");

//теперь графический объет сохраняется в новом файле

Bitmap->SaveToFile("BitmapMy.bmp");

Пример. Поместим на форму объекты Image, Label и две копки BitBtn. В раздел директивы препроцессора добавим две строки

#include <jpeg.hpp> // обеспечивает работу с JPEG-иллюстрациями

#include <FileCtrl.hpp> // для доступа к функции SelectDirectory

//Объявим две новые переменные

AnsiString aPath; // каталог, в котором находится иллюстрация

TSearchRec aSearchRec; // результат поиска файла

//Обработчик первой кнопки

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

void __fastcall TForm1::BitBtn1Click(TObject *Sender)

{

// щелчок на кнопке Каталог

If (SelectDirectory( //Компонент библиотеки

"Выберите каталог, в котором находятся иллюстрации","",aPath)!= 0)

{

// пользователь выбрал каталог и щелкнул на кнопке ОК

aPath = aPath + "\\";

FirstPicture(); // вывести иллюстрацию

}

}

//======================================================

//Создадим функцию, не забыв объявить ее в файле с расширением .h

void TForm1::FirstPicture()

{// найти и вывести первую картинку

Image1->Visible = false; // скрыть компонент Imagel

BitBtn2->Enabled = false; // кнопка Дальше недоступна

Label1->Caption = "";

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

VCL FindFirst*/

// faAnyFile – значит любой файл

if ( FindFirst(aPath+ "*.jpg", faAnyFile, aSearchRec) == 0)

{

Image1->Picture->LoadFromFile(aPath+aSearchRec.Name);

Image1->Visible = true;

Label1->Caption = aSearchRec.Name;

if ( FindNext(aSearchRec) == 0) // найти след, иллюстрацию

{

// иллюстрация есть

BitBtn2->Enabled = true; // теперь кнопка Дальше доступна

}

}

}

//===============================================================

//Обработчик создания формы

void __fastcall TForm1::FormCreate(TObject *Sender)

{

aPath = ""; // текущий каталог — каталог, из которого

// запущена программа

Image1->AutoSize = false;

Image1->Proportional = true;

BitBtn2->Enabled = false;

FirstPicture(); // показать картинку, которая

// есть в каталоге программы

}

//===============================================================

//Обработчик второй кнопки

void __fastcall TForm1::BitBtn2Click(TObject *Sender)

{

// щелчок на кнопке Дальше

Image1->Picture->LoadFromFile(aPath+aSearchRec.Name);

Label1->Caption = aSearchRec.Name;

if ( FindNext(aSearchRec) != 0) // найти след, иллюстрацию

{

// иллюстраций больше нет

BitBtn2->Enabled = false; // теперь кнопка Дальше недоступна

}

}

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