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

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

Шаг 2. Выберите в библиотеке компонент страницу Additional и разместите на форму компоненты Image1, Image2иImage3 затем маркерной рамкой определите размеры под рисунки, как это задано на рис. 3.

Шаг 3.Установите поочередно курсор на поля Image1 и Image2и в свойствеCursorвыберите из списка вид курсора crHandPoint (рука).

Шаг 4.Установите курсор на сетку формы и в списке событий откройте шаблон для OnCreate, чтобы можно было заполнить исходные рисунки и задать необходимые объявления при открытии формы приложения.

Шаг 5.Установите курсор на компоненту Image1и откройте шаблон для события OnMouseDown и заполните соответствующие команды.

Шаг 6.Установите курсор на компоненту Image2и откройте шаблон для события OnMouseDown(переключение трех кнопок на форме) и заполните соответствующие команды.

Шаг 7.На форму приложения поместите кнопку SpeedButton1и для нее задайте событиеOnClick, где определите вид курсораcrHandPoint (рука).

Шаг 8.При помощи встроенного редактора Image Editor создайте нестандартный временный курсор и его зафиксируйте в файл ресурсов проекта приложения. Для этого выполните:

8.1. Выберите в меню команды Tools/ ImageEditor.

8.2. Выберите в меню команды File/ Open и найдите для приложения файл ресурсов проекта .res. В результате откроется окно со структурой и в меню добавится Resource.

8.3. Выполните команды Resource/ New/ Cursor , чтобы добавилась новая группа Cursor и новое имя Cursor1.

8.4. На имени Cursor1 сделайте щелчок правой клавишей мышки и выберите команду Rename и задайте новое имя нестандартного курсора.

8.5. На новом имени курсора сделайте двойной щелчок и создайте свою иконку(рисунок) нестандартного курсора.

8.6. Через команды File / Save сохраните новый курсор в файл ресурсов проекта, создаваемого приложения.

 

 

 

 

ис. 3

 

Шаг 9.ВфайлU_work_10.cpp сохраните текст исходной программы в следующем виде:

 

/* Исходный текст файла U_work_3.cpp . */

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

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

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

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

//--- состояния при переключении рисунков

int pic1_On_Off, pic2_On_Off, pic3_On_Off, pic4_On_Off;

//--- указатели для загрузки рисунков

TImage *PictK1;

TImage *PictP1;

TImage *PictIm3;

const int crLi = 1; //--- константа для регистрации нестандартного курсора

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

 

__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner)

{

}

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

 

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

void __fastcall TForm1::FormCreate(TObject *Sender)

{

TImage *Pict = new TImage(Form1);

Pict->AutoSize = true;

// загрузка исходных рисунков в поля Image

Pict->Picture->LoadFromFile("Pic_1.bmp");

Image1->Canvas->CopyRect(Image1->ClientRect, Pict->Canvas,

Rect(0,0,Pict->Width,Pict->Height));

Pict->Picture->LoadFromFile("But1_On.bmp");

Image2->Canvas->CopyRect(Image2->ClientRect, Pict->Canvas,

Rect(0,0,Pict->Width,Pict->Height));

Pict->Picture->LoadFromFile("Image3.bmp");

Image3->Canvas->CopyRect(Image3->ClientRect, Pict->Canvas,

Rect(0,0,Pict->Width,Pict->Height));

pic1_On_Off = 1;

delete Pict;

//--- загрузка и регистрация временного курсора к приборам

Screen->Cursors[crLi] = LoadCursor(HInstance,"LI");

}

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

 

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

void __fastcall TForm1::Image1MouseDown(TObject *Sender,

TMouseButton Button, TShiftState Shift, int X, int Y)

{

TImage *PictIm3 = new TImage(Form1); //---для сообщений о названиях приборов

PictIm3->AutoSize = true;

if((Sender == Image1) && (Screen->Cursor == crHandPoint) )

Image1->Cursor = crLi; /* задаем нестандартный курсор, созданный в редакторе Image Editor*/

else

{PictIm3->Picture->LoadFromFile("Image3.bmp");

Image3->Canvas->CopyRect(Image3->ClientRect, PictIm3->Canvas,

Rect(0,0,PictIm3->Width,PictIm3->Height));

}

if((X < Image1->Width / 2) && (Y < Image1->Height / 3))

{

PictIm3->Picture->LoadFromFile("LI.bmp");

Image3->Canvas->CopyRect(Image3->ClientRect, PictIm3->Canvas,

Rect(0,0,PictIm3->Width,PictIm3->Height));

}

if((X > Image1->Width / 2) && (X < 2*(Image1->Width / 2)) && (Y < Image1->Height / 3))

{

PictIm3->Picture->LoadFromFile("EI.bmp");

Image3->Canvas->CopyRect(Image3->ClientRect, PictIm3->Canvas,

Rect(0,0,PictIm3->Width,PictIm3->Height));

}

if((X < Image1->Width / 2) && (Y > Image1->Height / 3) && (Y < 2*(Image1->Height / 3)))

{

PictIm3->Picture->LoadFromFile("TI.bmp");

Image3->Canvas->CopyRect(Image3->ClientRect, PictIm3->Canvas,

Rect(0,0,PictIm3->Width,PictIm3->Height));

}

if((X > Image1->Width / 2) && (X < Image1->Width ) && (Y > Image1->Height / 3)

&& (Y < 2*(Image1->Height / 3)))

{

PictIm3->Picture->LoadFromFile("GE.bmp");

Image3->Canvas->CopyRect(Image3->ClientRect, PictIm3->Canvas,

Rect(0,0,PictIm3->Width,PictIm3->Height));

}

if((X < Image1->Width / 2) && (Y > 2*(Image1->Height / 3)))

{

PictIm3->Picture->LoadFromFile("PI.bmp");

Image3->Canvas->CopyRect(Image3->ClientRect, PictIm3->Canvas,

Rect(0,0,PictIm3->Width,PictIm3->Height));

}

if((X > Image1->Width /2 ) && (Y > 2*(Image1->Height / 3) ) && (Y < Image1->Height ))

{

PictIm3->Picture->LoadFromFile("GEK.bmp");

Image3->Canvas->CopyRect(Image3->ClientRect, PictIm3->Canvas,

Rect(0,0,PictIm3->Width,PictIm3->Height));

}

}

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

void __fastcall TForm1::Image2MouseDown(TObject *Sender,

TMouseButton Button, TShiftState Shift, int X, int Y)

{

TImage *PictK1 = new TImage(Form1); /---/для кнопок

PictK1->AutoSize = true;

TImage *PictP1 = new TImage(Form1); //---для приборов

PictP1->AutoSize = true;

switch(1+X /(Image2->Width /3) + 3*(Y /(Image2->Height/2)))

{

case 1: PictK1->Picture->LoadFromFile("But1_On.bmp");

Image2->Canvas->CopyRect(Image2->ClientRect, PictK1->Canvas,

Rect(0,0,PictK1->Width,PictK1->Height));

if(pic1_On_Off ==0) //---проверяем, чтобы не было мигания при повторных включениях

{

PictP1->Picture->LoadFromFile("Pic_1.bmp");

Image1->Canvas->CopyRect(Image1->ClientRect, PictP1->Canvas,

Rect(0,0,PictP1->Width,PictP1->Height));

 

pic1_On_Off =1;pic2_On_Off =0;pic3_On_Off =0;pic4_On_Off =0;

}

break;

case 2: PictK1->Picture->LoadFromFile("But2_On.bmp");

Image2->Canvas->CopyRect(Image2->ClientRect, PictK1->Canvas,

Rect(0,0,PictK1->Width,PictK1->Height));

if(pic2_On_Off == 0) //--проверяем, чтобы не было мигания при повторных включениях

{

PictP1->Picture->LoadFromFile("Pic_2.bmp");

Image1->Canvas->CopyRect(Image1->ClientRect, PictP1->Canvas,

Rect(0,0,PictP1->Width,PictP1->Height));

pic1_On_Off =0;pic2_On_Off =1;pic3_On_Off =0;pic4_On_Off =0;

}

break;

case 3: PictK1->Picture->LoadFromFile("But3_On.bmp");

Image2->Canvas->CopyRect(Image2->ClientRect, PictK1->Canvas,

Rect(0,0,PictK1->Width,PictK1->Height));

if(pic3_On_Off == 0) //---проверяем, чтобы не было мигания при повторных включениях

{

PictP1->Picture->LoadFromFile("Pic_3.bmp");

Image1->Canvas->CopyRect(Image1->ClientRect, PictP1->Canvas,

Rect(0,0,PictP1->Width,PictP1->Height));

pic1_On_Off =0;pic2_On_Off =0;pic3_On_Off =1;pic4_On_Off =0;

}

break;

case 4: PictK1->Picture->LoadFromFile("But123_Off.bmp");

Image2->Canvas->CopyRect(Image2->ClientRect, PictK1->Canvas,

Rect(0,0,PictK1->Width,PictK1->Height));

if(pic4_On_Off == 0)//---проверяем, чтобы не было мигания при повторных включениях

{

PictP1->Picture->LoadFromFile("Pic_4.bmp");

Image1->Canvas->CopyRect(Image1->ClientRect, PictP1->Canvas,

Rect(0,0,PictP1->Width,PictP1->Height));

pic1_On_Off =0;pic2_On_Off =0;pic3_On_Off =0;pic4_On_Off =1;

}

break;

case 5: PictK1->Picture->LoadFromFile("But123_Off.bmp");

Image2->Canvas->CopyRect(Image2->ClientRect, PictK1->Canvas,

Rect(0,0,PictK1->Width,PictK1->Height));

if(pic4_On_Off == 0) //---проверяем, чтобы не было мигания при повторных включениях

{

PictP1->Picture->LoadFromFile("Pic_4.bmp");

Image1->Canvas->CopyRect(Image1->ClientRect, PictP1->Canvas,

Rect(0,0,PictP1->Width,PictP1->Height));

pic1_On_Off =0;pic2_On_Off =0;pic3_On_Off =0;pic4_On_Off =1;

}

break;

case 6: PictK1->Picture->LoadFromFile("But123_Off.bmp");

Image2->Canvas->CopyRect(Image2->ClientRect, PictK1->Canvas,

Rect(0,0,PictK1->Width,PictK1->Height));

if(pic4_On_Off == 0) //---проверяем, чтобы не было мигания при повторных включениях

{

PictP1->Picture->LoadFromFile("Pic_4.bmp");

Image1->Canvas->CopyRect(Image1->ClientRect, PictP1->Canvas,

Rect(0,0,PictP1->Width,PictP1->Height));

pic1_On_Off =0;pic2_On_Off =0;pic3_On_Off =0;pic4_On_Off =1;

}

}

}

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

 

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

void __fastcall TForm1::SpeedButton1Click(TObject *Sender)

{

Screen->Cursor = crHandPoint;

}

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

 

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

void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,

TShiftState Shift, int X, int Y)

{

Screen->Cursor = crDefault;

}

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

 

 

 

абораторная работа № 4

 

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

 

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

 

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

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

Таблица № 4-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. Первій метод запрещает перерисовку дерева, а второй – разрешает.