Создание многооконных приложений реферат

Обновлено: 05.07.2024

Определение условий изменения положения и размеров окон и компонентов программы. Характеристика существующей разновидности форм. Рассмотрение заготовки форм. Принципы создания и использования форм. Оценка механизма создания многооконных приложений.

Рубрика Программирование, компьютеры и кибернетика
Вид презентация
Язык русский
Дата добавления 07.03.2016
Размер файла 39,8 K

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

HTML-версии работы пока нет.
Cкачать архив работы можно перейдя по ссылке, которая находятся ниже.

Подобные документы

Визуальная разработка приложений баз данных. Характеристика визуальных компонентов среды разработки Builder 6.0, используемых в данном приложении. Программная реализация приложения, разработка форм и вкладок. Тестирование приложения, листинг программы.

курсовая работа [3,1 M], добавлен 28.03.2011

Основные принципы написания оконных приложений с графическим интерфейсом на языке Java в среде Eclipse. Управление компоновками компонентов: показ диалоговых окон, вывод графической информации. Структура приложения и размещение элементов интерфейса.

лабораторная работа [1,1 M], добавлен 01.05.2014

Разработка технологии и средств реализации Java-приложения, сокращающих трудоемкость создания и гибкость модификации интерфейса пользователя. Использование XML-документов для описания внешнего представления, элементов управления и событий экранных форм.

дипломная работа [2,8 M], добавлен 19.08.2011

Характеристика формы как объекта базы данных, предназначенного для ввода и отображения информации. Этапы создания форм в Access, использование режимов Мастер форм и Конструктор. Видовое разделение элементов управления по способу заполнения их данными.

реферат [190,6 K], добавлен 24.07.2011

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.



ЛАБОРАТОРНАЯ

РАБОТА №
4-
5

Создание приложений с использованием различных элементов

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

Программное обеспечение . ОС Windows; Visual C++

Оборудование.
ПЭВМ
IBM
.

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

1. Создать проект программы.

2. Визуально спроектировать диалоговую панель.

3. Связать элементы управления с событиями.

4. Разработать отладочные тесты.

5. Загрузить систему программирования
.


6. Создать программный модуль и запустить его на выполнение.

7. Выполнить отладку и получить результаты счета.

8. Оформить отчет, защитить лабораторную работу по контрольным вопросам и сдать преподавателю.

Содержание отчета.


1. Тема, цель и оборудование работы.

2. Индивидуальное задание.

3. Ход выполнения задания.

4. Исходные данные и протокол выполнения работы.

5. Выводы.
Индивидуальные задания

к лабораторной работе № 5.

Вариант 5

1.
Сумму элементов больших заданного числа;

2. Произведение положительных элементов

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

// MainFrm.cpp : implementation of the CMainFrame class

static char THIS_FILE[] = __FILE__;

// CMainFrame

IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)

ON_WM_CREATE()

ON_COMMAND(ID_BUTTON32771, OnButton32771)

//>>AFX_MSG_MAP

END_MESSAGE_MAP()

static UINT indicators[] =

ID_SEPARATOR, // status line indicator

ID_INDICATOR_CAPS,

ID_INDICATOR_NUM,

ID_INDICATOR_SCRL,

// CMainFrame construction/destruction

CMainFrame::CMainFrame()

// TODO: add member initialization code here

CMainFrame::~CMainFrame()

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)

if (CFrameWnd::OnCreate(lpCreateStruct) == -1)

if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP

| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||

!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))

TRACE0("Failed to create toolbar\n");


return -1; // fail to create


if (!m_wndStatusBar.Create(this) ||


!m_wndStatusBar.SetIndicators(indicators,


sizeof(indicators)/sizeof(UINT)))

TRACE0("Failed to create status bar\n");

return -1; // fail to create

// TODO: Delete these three lines if you don't want the toolbar to

Аннотация: В прошлых лекциях мы рассмотрели особенности разработки приложений для ОС Android и настройки их интерфейсов. Однако все рассмотренные примеры вписывались в рамки экрана отдельно взятого устройства. Что делать в случаях, когда это условие не может быть соблюдено? В лекции рассказывается о работе с диалоговыми окнами, уведомлениями и всплывающими подсказками. Приведены особенности разработки приложений, содержащих несколько активностей, а так же способы перемещения между ними в запущенном приложении. Лекция может быть использована как часть курса, так и отдельно от него в целях углубления знаний по разработке многооконных Android-приложений.

Скриншоты приложений взяты из магазина приложений Google Play, официального сайта для разработчиков Android или сделаны самостоятельно с использованием смартфона Мегафон SP-A20i Mint на платформе Intel Medfield.

Презентацию к данной лекции можно скачать здесь.

7.1 Многооконные приложения

Для мобильных приложений главным ограничением является размер экрана устройства. Очень часто невозможно разместить все элементы полнофункционального приложения так, чтобы их можно было увидеть одновременно. Очевидным решением этой проблемы является разделение интерфейса на части по какому-либо принципу. Основные пути решения этой проблемы:

Каждый способ имеет свои нюансы использования. Рассмотрим их более подробно.

7.2 Работа с диалоговыми окнами

7.2.1 Диалоговые окна

Диалог - это небольшое окно, позволяющее пользователю получить или ввести дополнительную информацию. Диалоговое окно занимает только часть экрана и обычно используется в модальном режиме. Это означает, что работа приложения приостанавливается до момента, пока пользователь не закроет диалоговое окно. При этом ему, возможно, потребуется ввести какие-то данные или просто выбрать один из вариантов ответа (см. рис. 7.1).

Примеры диалоговых окон

В ОС Android можно выделить три вида диалоговых окон:

7.2.2 Использование класса Dialog

Класс Dialog является базовым для диалогов и редко используется напрямую. Рекомендуется применять производные от этого класса:

  • AlertDialog . Диалоговое окно может содержать заголовок, до трех кнопок, список выбираемых значений или настраиваемое содержимое. Пример на рис. 7.1 справа.
  • DatePickerDialog или TimePickerDialog . Диалоговое окно с предопределенным интерфейсом, позволяющее выбрать дату или время.
  • ProgressDialog . Показывает диалоговое окно, содержащее линейку процесса выполнения какого-то действия. В рекомендациях по дизайну для Android советуют использовать вместо него компонент ProgressBar .

Существует возможность создавать собственные диалоговые окна с использованием класса DialogFragment в качестве контейнера. В таком случае можно контролировать его поведение. Обратите внимание, что минимальной версией, поддерживающей DialogFragment напрямую, является Android 3.0 (API level 11). Если вы хотите использовать возможности этого класса на более ранних версиях, необходимо добавить библиотеку Support Library в ваше приложение.

Рассмотрим создание диалогового окна на примере класса AlertDialog . Существует множество вариантов диалоговых окон этого класса, однако все они содержат следующие три части (см. рис. 7.2):

Компоновка диалогового окна (класс AlertDialog)

Можно выбрать один из трех перечисленных цветом непосредственно нажатием на его название

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

Название работы: Разработка многооконных приложений с использованием Borland C++ Builder

Категория: Лабораторная работа

Предметная область: Информатика, кибернетика и программирование

Описание: Для добавления новой формы в проект приложения необходимо вызвать команду File New Form главного меню или нажать соответствующую кнопку на панели инструментов. Для каждой формы приложения вызывается метод CreteForm создать форму объекта приложения ppliction. Главная форма автоматически отображается на экране при запуске приложения в то время как остальные формы которые иногда называют вторичными будут созданы но останутся невидимыми для пользователя до тех пор пока не будут явно.

Дата добавления: 2013-09-30

Размер файла: 88.5 KB

Работу скачали: 188 чел.

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

Разработка многооконных приложений

с использованием Borland C ++ Builder

Цель работы : Научиться разрабатывать многооконные приложения в среде программирования Borland C ++ Builder .

Указания к выполнению лабораторной работы

Главным визуальным компонентом, используемым для проектирования пользовательского интерфейса программы, является форма . Форма соответствует окну создаваемого приложения и используется для размещения на нем прочих визуальных компонентов – кнопок, полей ввода, списков и т.п. Обычно пустая форма создается автоматически при создании нового приложения с помощью C ++ Builder . Сложные программные продукты могут состоять из большого числа различных форм. Рассмотрим основные аспекты разработки многооконных приложений:

  1. Создадим новый проект приложения командой File | New | Application из главного меню. Как уже было сказано, в приложение будет автоматически добавлена пустая форма. Ей соответствуют модуль программного кода (по умолчанию unit 1. cpp ), заголовочный файл ( unit 1. h ) и файл описания формы C ++ Builder ( unit 1. dfm ).
  2. Для добавления новой формы в проект приложения необходимо вызвать команду File | New | Form главного меню или нажать соответствующую кнопку на панели инструментов. В этом случае проекте появится еще одна пустая форма, для описание которой также состоит из трех файлов, имена по умолчанию для которых, соотвтетственно, unit 2. cpp , unit 2. h и unit 2. dfm .
  3. Вызовом команды Project | View Source из главного меню можно открыть в редакторе кода основной файл проекта (по умолчанию он называется Project 1. cpp ). После выполнения описанных выше действий в нем автоматически генерируются следующие строки (см. функцию WinMain) :
  1. Главную форму приложения можно изменить, соответствующим образом отредактировав вышеописанный список инициализируемых форм приложения. Кроме того, это можно сделать из окна свойств проекта, который вызывается сочетанием клавиш Shift + Ctrl + F 11 или командой Project | Options … главного меню. На вкладке Forms появившегося окна можно обнаружить свойство Main form , которому можно назначить любую форму приложения. Укажем, например, для нашего приложения форму Form 2 в качестве главной. Изменение и подтверждение указанного свойства приведет к автоматическому помещению оператора создания соответствующей формы на самый верх списка инициализации форм приложения (см. файл Project . cpp в редакторе кода). После запуска приложения мы увидим, что теперь стала видимой форма Form 2, а ее закрытие завершает работу приложения.
  2. Попробуем теперь вызвать из главной формы приложения ( From 2) вторичную форму Form 1. Для этого поместим на форму Form 2 кнопку, озаглавив ее “ Form 1”. В качестве реакции на событие нажатия этой кнопки напишем следующее:

В данном случае предполагается отобразить форму Form 1 на экране, за что отвечает метод Show () компонента формы. Попробуем откомпилировать и запустить приложение. Процесс компиляции проекта будет прерван с ошибкой “ Undefined symbol ‘ Form 1’”. Причина этого заключается в том, что описание класса формы Form 1 находится в заголовочном файле unit 1. h . Поэтому прежде чем обращаться к форме Form 1 из модуля формы Form 2, необходимо подключить к нему заголовочный файл unit 1. h . Это можно сделать вручную, добавив в include -секцию модуля unit 2. cpp соответствующую запись ( include “ unit 1. h ”), либо открыть модуль unit 2. cpp в редакторе кода, а затем вызвать команду главного меню File | Include Unit Hdr … и выбрать нужный файл из предлагаемого списка заголовочных файлов проекта. И в том, и в другом случае include -секция модуля главной формы будет содержать заголовочный файл формы Form 1, поэтому повторная компиляция проекта будет успешной. Нажатие кнопки “ Form 1” в запущенном приложении приведет к отображению на экране формы с одноименным названием. После вызова формы Form 1 пользователь может свободно переключаться между обеими формами. Форму Form 1 можно закрывать и снова вызывать повторными нажатиями кнопки на главной форме. Из этого факта можно сделать вывод, что закрытие неглавной формы по умолчанию не приводит к уничтожению объекта, а всего лишь делает эту форму невидимой. Таким образом, по умолчанию объект формы Form 1 существует все время работы приложения, до тех пор, пока не будет закрыта форма Form 2.

  1. Результат закрытия любой неглавной формы можно изменить. Завершим запущенное приложение, откроем форму Form 1 (для переключения между формами проекта целесообразно использовать список форм, который вызывается сочетанием клавиш Shift + F 12 или командой View | Forms … из главного меню) и в качестве реакции на событие OnClose запишем следующее:

Если пользователь закрывает форму, то за действия объекта формы в этот момент отвечает параметр Action , который специально объявлен в обработчике событий OnClose . Он относится к перечислимому типу TCloseAction и может принимать одно из следующих значений:

  • caNone – при закрытии формы никакие действия не производятся, т.е. форма не закрывается.
  • caHide – при закрытии формы ее объект не уничтожается, но форма становится невидимой для пользователя.
  • caFree – при закрытии формы ее объект уничтожается, занимаемая им память высвобождается, так что больше этой формы в запущенном приложении не существует.
  • caMinimize – закрытие формы означает ее минимизацию на экране. Форма остается видимой, объект не уничтожается.

По умолчанию параметр A с tion принимает значение caHide . Попробуем еще раз запустить приложение со значением параметра Action , измененным на caFree . При первом нажатии кнопки “ Form 1” форма по-прежнему вызывается и отображается на экране. Однако при ее закрытии объект формы будет уничтожен, следовательно, после ее закрытия обращаться к ней больше нельзя. Поэтому повторное нажатие кнопки на главной форме приводит к возникновению ошибки некорректного доступа к памяти.

В C ++ Builder диалоговое окно является разновидностью обычной формы. Добавим в рассматриваемый проект еще одну форму Form 3. С помощью инспектора объектов необходимо изменить свойство BorderStyle у добавленной формы. Указанное свойство характеризует внешний вид и поведение границы формы. По умолчанию значение этого свойства установлено в bsSizeable , что означает, что пользователь может изменять размеры формы стандартным образом (например, потянув мышью за ее правый нижний угол). Для диалогового окна свойству BorderStyle следует присвоить значение bsDialog . В этом случае при запуске приложения форма будет иметь фиксированный размер, определенный при разработке приложения. Кроме того, как и полагается для диалоговых окон, кнопки максимизации и минимизации окна формы исчезнут из системного меню.

Способ размещения диалогового окна по отношению к главному окну программы следует указывать с использованием свойства формы Position . Для того, чтобы окно всегда размещалось в центре поверх главного окна, необходимо установить его значение в poMainFormCenter . Размеры формы Form 3 лучше сделать несколько меньше, чем у формы Form 2, чтобы при работе приложения они не сливались.

  1. Поместим на форму Form 2 еще одну кнопку с заголовком “ Dialog ”. В качестве реакции на нажатие кнопки запишем:

Form 3-> ShowModal ();

В отличие от формы Form 1 форма Form 3 будет отображаться на экране в модальном режиме . Это значит, что после ее появления на экране все остальные формы приложения будут оставаться недоступными до тех пор, пока форма не будет закрыта. Рекомендуется убедиться в этом, запустив рассматриваемое приложение. Перед компиляцией проекта необходимо добавить в include -секцию модуля формы Form 2 заголовочный файл формы Form 3 ( unit 3. h ).

  1. Из неглавных форм можно обращаться к объекту главной формы (или других неглавных форм) точно так же, как это было описано выше. Добавим, например, в include -секцию модуля формы Form 1 заголовочный файл главной формы unit 2. h . Теперь можно описать обработчик события отображения формы Form 1 на экране следующим образом:

void __fastcall TForm1::FormShow(TObject *Sender)

При появлении на экране формы Form 1 будет выполнена вышеприведенная процедура, которая сделает кнопку “ Form 1” на главной форме недоступной для пользователя. Таким образом, повторное нажатие на эту кнопку станет невозможным, следовательно, ошибка некорректного доступа к памяти появляться не будет.

  1. В заключение отметим, что при создании многооконных приложений нередко бывает целесообразным использовать готовые шаблоны форм, которые хранятся в хранилище объектов Borland C ++ Builder . Чтобы добавить в проект форму, основанную на каком-либо шаблоне, необходимо вызвать из главного меню команду File | New | Other … . Появится окно хранилища объектов, в котором различные шаблоны форм предлагаются на вкладках Forms и Dialogs . Формы, созданные по шаблонам, в отличие от обычных форм, не являются пустыми и предлагают разработчику реализацию некоторого интерфейса и/или каких-либо функций. Программист C ++ Builder имеет возможность добавлять в хранилище объектов и собственные шаблоны форм.

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

Однодокументный интерфейс ( SDI -интерфейс, Single Document Interface ) – это метод организации графического пользовательского интерфейса в виде набора самостоятельных окон, каждое из которых имеет собственный дескриптор операционной системы (то есть ОС рассматривает каждое из окон как самостоятельный объект). Все окна располагаются прямо на рабочем столе, при максимизации могут разворачиваться на весь рабочий стол, а при минимизации – сворачиваться на панель задач или в нижнюю часть рабочего стола.

Другим способом организации графического пользовательского интерфейса является мультидокументный интерфейс ( MDI -интерфейс, Multiple Document Interface ). История его создания началась в конце 80-ых годов прошлого века, когда фирма IBM выпустила первую спецификацию соответствующего интерфейса. Его основные черты с тех пор практически не изменились:

  • Приложение состоит из основного окна и ряда дочерних окон. Все дочерние окна находятся в границах родительского окна.
  • Приложение и каждое дочернее окно допускает максимизацию и минимизацию. Максимизированные и минимизированные дочерние окна остаются в рамках основного окна.
  • Основное окно имеет меню, расположенное в верхней части. Список всех дочерних окон содержится в выпадающем подменю, имеющем название Window (Окно).
  • Приложение закрывается комбинацией Alt + F 4 , а дочернее окно – Ctrl + F 4 . Сочетание клавиш Ctrl + F 6 используется для переключения между дочерними документами.

Среда разработки приложений Borland C ++ Builder позволяет довольно просто разрабатывать приложения с мультидокументным интерфейсом. Чтобы создать MDI -приложение обычно требуется выполнение следующих шагов:

  1. В только что созданном приложении установить значение свойства FormStyle равным fsMDIForm (по умолчанию его значение равно fsNormal ). Тогда главная форма приложения станет основным окном многодокументного интерфейса.
  2. Для каждой формы, которая проектируется как дочерняя, необходимо устанавливать значение свойства FormStyle равным fsMDIChild .
  3. Особенностью дочерних окон приложения с MDI является невозможность сделать их невидимыми. Поэтому все дочерние окна, которые создаются на этапе инициализации программы, появятся в рамках основного окна сразу же после запуска приложения. Это не всегда желательно. Например, дочернее окно для отображения текстового документа имеет смысл показывать только после того, как пользователь решил открыть такой документ и выбрал соответствующий файл. По этой причине дочерние формы обычно убирают из списка инициализации форм основного файла проекта (см. п.3 в указаниях к работе). Их инициализация в этом случае обычно проводится непосредственно перед отображением дочерней формы на экране. Если пользователь из предыдущего примера решил открыть текстовый документ, то реакция на это событие будет включать в себя следующие строки программного кода:

Определяем, какой файл хочет открыть пользователь

// Создаем дочернюю форму . Параметр конструктора формы – владелец

// создаваемого объекта, в данном случае – это сама основная форма

TForm *w = new TForm2( this );

Работаем с указателем на объект формы:

проводим загрузку содержания выбранного файла в форму и т.п.

// отображаем форму на экране

Очевидно, что к модулю основной формы должны быть подключены заголовочные файлы всех ее дочерних форм.

Методы Next () и Previous () предполагают работу со списком дочерних форм . Этот список изменяется в процессе работы приложения – каждая вновь созданная дочерняя форма попадает в конец списка. У программиста есть возможность работать со списком дочерних форм непосредственно. Для этого используются свойства основной формы MDIChildCount и MDIChildren . Свойство MDIChildren – представляет собой список указателей на объекты открытых дочерних форм, а MDIChildCount определяет их количество.

  1. Реализацию многих элементов MDI -интерфейса взяли на себя разработчики среды C ++ Builder . В частности, программисту не надо беспокоиться за стандартные назначения определенных комбинаций клавиш – эти требования будут выполняться для его приложения автоматически.

На сегодняшний день нет единого мнения относительно того, какой из двух подходов к организации пользовательского интерфейса – SDI или MDI – лучше. Долгое время считалось, что SDI можно использовать только в небольших программах, а для приложений с большим количеством окон необходимо применение MDI . В последнее время, наоборот, стали говорить о том, что SDI является более гибким подходом к проектированию пользовательского интерфейса, так как в мультидокументных приложениях отсутствует возможность быстрого переключения между дочерними окнами. Некоторые специалисты даже рекомендуют разработчикам отказываться от проектирования и реализации MDI -приложений, несмотря на то, что разработка сложных многооконных SDI -приложений обычно требует больших временных затрат (по сравнению с аналогичным MDI -приложением). В этой связи интересным представляется подход разработчиков продукта Microsoft Office . Первые версии программных продуктов этого пакета имели SDI -интерфейс, потом использовался MDI -интерфейс, а начиная с версии Microsoft Office 2000 – снова SDI . Однако многие элементы многодокументного интерфейса (привычные сочетания клавиш, пункт Window (Окно) и др.) при этом были сохранены. Думается, что такой подход, основанный на грамотном сочетании двух методов организации пользовательского интерфейса, является оправданным.

После запуска C++ Builder в вашем распоряжении имеется только одна форма Form1 – стартовая форма будущего приложения для Windows. Если вы хотите построить приложение, использующее в своей работе, например, три окна – кликните мышью на значок New Form (Новая форма) два раза. Вы получили две новые формы: Form2 и Form3. Такого же результата можно добиться по-другому. А именно в меню File выберите команду New, а затем Form. Во время работы приложения на экране могут одновременно отображаться все три формы, или любые две, либо любая одна из них. Для того чтобы из любой формы можно было управлять остальными формами, их файлы Unit1.h, Unit2.h и Unit3.h необходимо связать. В заголовочной части файла Unit1.cpp для первой формы нужно дописать директивы:

Расположите их под уже имеющейся директивой, которую сгенерировала сама среда разработки во время создания первой формы:

На базе связанных между собой форм можно смело приступать к построению многооконного приложения. Для вызова из одной формы другой можно воспользоваться методом Show(), который загрузит указанную форму в оперативную память компьютера и покажет ее на экране. Метод Hide() скрывает форму от взора пользователя, без выгрузки ее из оперативной памяти. Например, строка программного кода, написанная в подходящей процедуре прерывания первой или второй формы, покажет на экране третью форму:

Form3->Show(); //показать третью форму

Убрать эту форму с экрана без выгрузки из оперативной памяти можно с помощью инструкции:

Form3->Hide(); //скрыть третью форму

Полностью закрыть форму можно с помощью инструкции:

Form3->Close(); //выгрузить третью форму

Построим многооконное приложение, состоящее из двух довольно самостоятельных частей. Первая часть будет информировать пользователя о текущих времени и дате, а также будет содержать календарь. Вторая часть предоставит в руки пользователя виртуальный генератор звуковых волн. Такой генератор будет интересен и полезен тем, кто увлекается физикой.

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

Form1->Hide(); //скрыть первую форму

Затем для второй кнопки напишите функцию обработки Button2Click:

Form3->Show(); //показать третью форму

Form1->Hide(); //скрыть первую форму

Form1->Show(); //показать первую форму

Form2->Hide(); //скрыть вторую форму

Запустите приложение на исполнение. Посредством электронных кнопок попробуйте управлять многооконным приложением для Windows. Если все окна корректно появляются и исчезают, то можно достроить второе и третье окна, так чтобы они отвечали задуманному нами в самом начале назначению.

На вторую форму добавьте компоненты Label1 и Label2. Сюда же установите компонент Timer1 из вкладки System и компонент MonthCalendar1 (Ежемесячный календарь) из вкладки Win32. Для компонента Timer1 его свойству Interval придайте значение 10. В функцию обработки Timer1Timer запишите инструкции:

Label1->Caption = Date(); //показать дату

Label2->Caption = Time(); //показать время

Через каждую одну сотую секунды (10 миллисекунд) дата и время будут обновляться. Если вы хотите чтобы дата и время одновременно выводились в одном поле вывода текста Label1, то две предыдущие инструкции можно заменить одной:

Label1->Caption = Now(); //показать дату и время

Если вам необходимо чтобы календарь показывал на экране несколько месяцев одновременно, значительно увеличьте размеры компонента MonthCalendar1. При этом размеры второй формы можно и не увеличивать, так как если ежемесячный календарь не сможет разместиться на форме по размерам, автоматически появятся полосы прокрутки по вертикали и горизонтали.

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

На третью форму добавьте компоненты Button2, Label1, TrackBar1, Image1, Image2. Компонент TrackBar1 (Движок-регулятор) можно извлечь из вкладки Win32. Ширину компонента TrackBar1 увеличьте примерно в два-три раза. Свойству Max (Максимальное положение движка) этого компонента придайте значение 50. Очистите свойство Caption у компонента Label1. В функцию обработки Button2Click впишите инструкцию, которая будет генерировать колебания звуковой частоты:

Beep(TrackBar1->Position*100, 1000); //звук

Заметьте, здесь одна инструкция записана с переносом, а поэтому расположилась в двух строках.

Запустите приложение и проверьте работоспособность третьего окна. Поэкспериментируйте с оператором звука Beep, изменяя оба его аргумента. Будьте осторожны с величиной второго аргумента, так как он отвечает за время звучания.

Добавьте в окно генератора простейшую анимацию. Для этого вставьте два подходящих изображения, которые будут отображать состояние генератора, в поля компонентов Image1, Image2. Этими изображениями могут быть, например, обезьяна в двух разных состояниях. Когда генератор молчит – обезьяна в задумчивости, когда присутствует звук – обезьяна улыбается разводит руки. Оба изображения наложите, друг на друга, так как появляться они будут в разное время. Свойству Visible компонента Image2 придайте значение false. Теперь функция обработки Button2Click будет выглядеть так:

Beep(TrackBar1->Position*100, 1000); //звук

Image1->Visible = true; //показать первый рисунок

Image2->Visible = false; //скрыть второй рисунок

Необходимо так же будет написать функцию обработки Button2MouseDown:

Image1->Visible = false; //скрыть первый рисунок

Image2->Visible = true; //показать второй рисунок

Запустите приложение. Посмотрите, как теперь работает виртуальный генератор в сопровождении анимации.

Самостоятельно достройте третье окно, так чтобы можно было регулировать длительность звучания, например, до трех секунд с шагом в полсекунды. Для регулировки длительности звука воспользуйтесь компонентом TrackBar2. Для вывода информации о длительности звукового сигнала используйте компонент Label2.

Читайте также: