
- •Методические указания
- •Часть 2
- •Лабораторна робота № 1
- •Загальні зведення про компоненти для розробки меню команд і вбудовування малюнків та значків на форму програми
- •Лабораторная работа № 2
- •Лабораторная работа № 3
- •Общие сведения о видах команд отладки для поиска
- •Лабораторная работа № 4
- •Общие сведения
- •2. Постановка задач лабораторной работы
- •Лабораторная работа № 5
- •Общие сведения о компонентах, инструментах для рисования
- •Лабораторная работа № 6 Обработка событий мышки в приложении Windows
- •1. Общие сведения о событиях мышки
- •2. Постановка задачи лабораторной работы.
- •3. Порядок действий и команд при выполнении работы.
- •Лабораторная работа № 7
- •Результат работы программы
- •Лабораторная работа № 8
- •Шаг 4. Установите на форму компоненты ListView1 и ListView2 , как это показано рис.3.
- •Лабораторная работа № 9
- •Лабораторная работа № 10
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 |
|
Набрані бали |
|
|
Дата __________________ Викладач ______________________
(захисту лаб. роботи) (підпис)