16597

Многооконный интерфейс. Управление объектами с помощью клавиш

Лабораторная работа

Информатика, кибернетика и программирование

Лабораторная работа 1 Многооконный интерфейс. Управление объектами с помощью клавиш. Цель работы: Создать программу которая позволяет пользователю управлять объектом с помощью стрелок на клавиатуре а также позволяет менять цвет этого объекта посредством выбора цве

Русский

2013-06-22

136 KB

3 чел.

Лабораторная работа 1

Многооконный интерфейс. Управление объектами с помощью клавиш.

Цель работы: Создать программу, которая позволяет пользователю управлять объектом с помощью стрелок на клавиатуре, а также позволяет менять цвет этого объекта посредством выбора цвета на палитре, находящейся на другой форме.

Общий вид программы следующий:

Здесь мы видим следующие элементы управления:

«Показать цвета» - Показывает палитру для изменения цвета фигуры (Рис.1)

«Показать формы» - Показывает окно для выбора формы фигуры (Рис.2)

«Координаты центра» - Показывает текущие координаты центра фигуры

Рисунок 1

Рисунок 2

Код программы:

Unit1.cpp

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

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"    //Связывание различных форм

#include "Unit2.h"

#include "Unit3.h"

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

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

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

__fastcall TForm1::TForm1(TComponent* Owner)

       : TForm(Owner)

{

}

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

void __fastcall TForm1::Button1Click(TObject *Sender) //Кнопка показать цвета

{

Form2->Show();       //Показать форму

Button1->Hide();       //Спрятать кнопку

} 

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

void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,

     TShiftState Shift)

{

switch(Key){        //Множественный выбор

case VK_LEFT: Shape1->Left = Shape1->Left-5; break; //Стрелка влево

case VK_UP: Shape1->Top = Shape1->Top-5; break;  //Вверх

case VK_RIGHT: Shape1->Left = Shape1->Left+5;  break; //Вправо

case VK_DOWN:Shape1->Top = Shape1->Top+5; break; //Вниз

}

Label1->Caption = "X=" + IntToStr(Shape1->Left + Shape1->Width/2); //Координаты

Label2->Caption = "Y=" + IntToStr(Shape1->Top + Shape1->Height/2 ); //в Label

}

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

void __fastcall TForm1::FormCreate(TObject *Sender)

{ Shape1->Left = 0;     //Начальные координаты объекта

Shape1->Top = 0;

Label1->Caption = "X=" + IntToStr(Shape1->Left + Shape1->Width/2);

Label2->Caption = "Y=" + IntToStr(Shape1->Top + Shape1->Height/2 );

}

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

void __fastcall TForm1::Button2Click(TObject *Sender)

{

Form3->Show();

Button2->Hide();

}

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

void __fastcall TForm1::Label3Click(TObject *Sender) //При нажатии на надпись

{         //Появляются обе кнопки

Button1->Show();

Button2->Show();

}

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

Unit2.cpp

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

#include <vcl.h>

#pragma hdrstop

#include "Unit2.h"

#include "Unit1.h"

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

#pragma package(smart_init)

#pragma link "CGRID"

#pragma resource "*.dfm"

TForm2 *Form2;

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

__fastcall TForm2::TForm2(TComponent* Owner)

       : TForm(Owner)

{

}

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

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

void __fastcall TForm2::CColorGrid1MouseUp(TObject *Sender,

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

{

  if(Button == mbLeft)    //При нажатии мышью меняется цвет

  {

     Form1->Shape1->Brush->Color = CColorGrid1->ForegroundColor;

  }

}

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

Здесь происходит обращение к форме, а точнее к цвету объекта на форме 1 и он заменяется на цвет выбранный в ColorGrid

Unit3.cpp

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

#include <vcl.h>

#pragma hdrstop

#include "Unit3.h"

#include "Unit2.h"

#include "Unit1.h"

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

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm3 *Form3;

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

__fastcall TForm3::TForm3(TComponent* Owner)

       : TForm(Owner)

{

}

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

void __fastcall TForm3::RadioGroup1Click(TObject *Sender)

{

switch(RadioGroup1->ItemIndex)   //Выбор формы, просто RadioGroup

{

case 0: Form1->Shape1->Shape = stCircle;   //Круг

        Form1->Shape1->Width = 80; break;

case 1: Form1->Shape1->Shape = stSquare;   //Квадрат

        Form1->Shape1->Width = 80; break;

case 2: Form1->Shape1->Shape = stRoundRect;  //Квадрат с закруг. углами

        Form1->Shape1->Width = 80; break;

case 3: Form1->Shape1->Shape = stEllipse;  //Элипс

        Form1->Shape1->Width = 160; break;   //Приходиться менять ширину

}       //т.к. эллипс в квадрате это круг

}

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

void __fastcall TForm3::FormCreate(TObject *Sender)

{

RadioGroup1->ItemIndex = 0;   //Начальное значение – т.е. круг

}

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

Вывод: Мы получили навыки создания многооконных приложений и управление объектами при помощи клавиатуры.


 

А также другие работы, которые могут Вас заинтересовать

36495. Термічна дифузія 233.6 KB
  Перший доданок являє собою потік взаємної дифузії молекул 1 газу а другий термодифузійний потік. На рисунку вихідні сталі відносні концентрації змінились і набули вигляду концентрація молекул першого газу біля першої пластини; концентрація молекул першого газу біля другої пластини; концентрація молекул другого газу біля першої пластини; концентрація молекул другого газу біля другої пластини. В результаті такої конвекції нагріта частина газу рухається відносно холодної створюючи провиток. Очевидно що температура газу поблизу проволоки...
36496. Взаємна дифузія 175.31 KB
  Згідно із основним рівнянням переносу можна записати ; . Згідно із рівнянням Фіка яке справедливо і для суміші газів коефіцієнт дифузії першого газу у суміші двох газів . Рівняння політропного процесу робота при цьому процесі Ізотермічний і адіабатний процеси це процеси ідеалізовані. Запишемо для нього рівняння.
36497. Квантовий підхід Дебая-Борна 315.41 KB
  Хоча швидкості молекул змінюються у стані термодинамічної рівноваги властивості газу залишаються сталими. Насправді закон про статистичний закон розподілу молекул за швидкостями можна сформулювати так : скільки молекул газу або яка їх частка мають швидкості значення яких лежать у деякому інтервалі наближеному до заданої швидкості Зрідження газів і методи одержання низьких температур. Рівняння ВандерВаальса показує що будь який газ може бути переведеним в рідкий стан але необхідною умовою для цього є попереднє охолодження газу до...
36498. Рівняння Ван-дер-Ваальса 238.96 KB
  Дія відштовхування зводиться до того що молекула не допускає проникнення у свій обєм інших молекул. Отже сили відштовхування враховуються через деякий ефективний обєм молекул. Якщо газ у нас не дуже стиснутий то взаємодії між молекулами будуть лише парні участь третьої четвертої та інших молекул малоймовірна. Припустимо що у посудині із обємом знаходяться лише дві однакові молекули.
36499. Розподіл газових молекул за проекціями (напрямками) швидкостей 3.96 MB
  Переписавши ось у такому вигляді отримане рівняння визначимо фізичний зміст цієї функції. У вибраній нами системі координат у просторі швидкостей відстань до початку координат і є модуль швидкості отже Тепер ми можемо записати таке рівняння . Такого роду рівняння мають назву функціональних. Для їх визначення ми повинні знайти два незалежних рівняння.
36500. Розподіл молекул у полі сил. Формула Больцмана. Барометрична формула. Дослід Перрена по визначенню числа Авогадро 258.99 KB
  Наявність зовнішньої сили призведе до того що молекули у просторі будуть розміщені неоднорідно отже створюватимуть у різних точках простору різний тиск. Для осі ця різниця тисків на грані паралелепіпеда перпендикулярні осі де зміна тиску на одиницю довжини; зміна тиску на бічних гранях; площа граней. Згадаємо що ; відповідно повні диференціали зміни тиску та потенціальної енергії. Повний диференціал зміни тиску газу дорівнює добутку концентрації молекул на повний диференціал зміни потенціальної енергії молекули взятому з...
36501. Біноміальний розподіл 536.29 KB
  Кількість частинок у ньому . Кількість комірок у обємі причому завжди виконується умова тобто частинка завжди знайде собі місце. Виділимо у обємі менший фіксований обєм і будемо шукати імовірність того що кількість частинок потрапить у цей обєм. Кількість комірок у обємі повинно бути принаймні не меншою за щоб усі частинки могли розміститись.
36502. Тиск газу з точки зору молекулярно-кінетичної теорії. Основне рівняння кінетичної теорії ідеального газу. Зв’язок між тиском газу та середньою кінетичною енергією газових молекул 205.51 KB
  Основне рівняння кінетичної теорії ідеального газу. Звязок між тиском газу та середньою кінетичною енергією газових молекул. Розрахуємо тиск газу на стінку посудини.
36503. Рівність середньокінетичних енергій молекул газу при взаємодії двох газів із непроникливою стінкою 464.46 KB
  І тепер перейдемо до вивчення елементів симетрії кристалу. Елементи симетрії кристалів. Симетрія це властивість тіла суміщатися із самим собою під час деяких операцій або перетворень симетрії. З однією операцією симетрії ми вже зустрічались на початку лекції це трансляційна симетрія.