Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб_раб_С++ Builder_2часть.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.11 Mб
Скачать

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

Необходимо создать программу приложение для Windows и в окне формы должны быть три нестандартные кнопки. После нажатия клавиши мышки над одной из кнопок формы приложения программа должна будет в поле Image1 переключать изображения приборов и изображение нажатой кнопки (смотри рис.1 и рис.2.). Также при нахождении указателя мыши над этими кнопками изображение стандартного курсора «стрелка » должно изменяться на курсор вида «рука».

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

Шаг 1. Перейдите на форму приложения и в свойстве Caption напишите название работы “Лаб. работа № 10 события мышки”, чтобы этот текст появился в заголовке формы. Выполните команду File/Save Project As… . На диске D:\ создайте папку Lab_10 и в этой папке сформируйте внутреннюю папку Lab_10_1 для файлов проекта P_work_10 и файла U_work_10.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.

Рис. 3

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

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

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

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

/* Исходный текст файла U_work_10.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;

}

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

Дата _______________________

(відпрацювання лаб. роботи)

Студент___________________ Група ____________

Складови знань

Бали для

оцінювання знань

Уміння змінювати та

налагоджувати алгоритм

С++ програми

Знання програмного та

файлового забезпечення

лабораторної роботи

2,0

1,0

Набрані бали

Дата __________________ Викладач ______________________

(захисту лаб. роботи) (підпис)