Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по программированию.doc
Скачиваний:
11
Добавлен:
13.11.2019
Размер:
1.2 Mб
Скачать

Void __fastcall tForm1::Timer1Timer(tObject *Sender)

{

exit(1);

}

На следующем этапе разместим на форме кнопку, изменив название (свойство Name) с установленного по умолчанию Button1 на ОК - в поле Name напишите ОК и нажмите Enter. Теперь необходимо написать обработчик события OnClick щелчка по кнопке. Это, конечно, можно сделать через инспектор объектов, но, для основного события объекта, а для кнопки щелчок это основное событие, можно поступить проще. Просто сделайте двойной щелчок по кнопке на форме, и вы сразу попадете в текстовый модуль, в функцию-обработчик, которая тоже пока пуста.

Что необходимо написать в обработчике? Сначала нужно задать интервал срабатываний таймера. Этот интервал, выраженный в миллисекундах необходимо взять из поля редактирования и присвоить соответствующему параметру таймера. Напомним, что параметр Interval является свойством объекта Timer1, а текст в поле редактирования является свойством Text объекта Edit1. Казалось бы, что для достижения поставленной цели нужно применить выражение присваивания Timer1->Interval = Edit1->Text; Если мы вставим это выражение в обработчик и попробуем скомпилировать программу, то получим ошибку:

[C++ Error] Unit1.cpp(26): E2034 Cannot convert 'AnsiString' to 'unsigned int'.

Компилятор сообщает вам, что не может превратить выражение типа строка в выражение типа беззнаковое целое. Действительно, если вы обратитесь к справке по конструкции Interval для таймера и конструкции Text для поля редактирования, то увидите, что эти величины разного типа. Дело поправимое. Для конвертирования строки в целое существует специальная функция, и если в обработчике написать

Timer1->Interval = StrToInt(Edit1->Text);

то все будет в порядке.

Далее в обработчике щелчка по кнопке следует запустить таймер - присвоить свойству Enabled значение ИСТИНА (true). Окончательно функция-обработчик должна выглядеть следующим образом:

Void __fastcall tForm1::okClick(tObject *Sender)

{

Timer1->Interval = StrToInt(Edit1->Text);

Timer1->Enabled = true;

}

Теперь все готово к запуску программы. Сделаем это. Возможно, не лишним будет отметить, что после запуска приложения в поле редактирования значение 5000 миллисекунд, заданное нами по умолчанию, можно заменить на любое другое.

На этом изготовление программы заканчивается. Можно немного «навести красоту». Захватив мышкой рамку формы слева или справа, снизу или сверху, можно изменить размеры окна формы и привести их к виду, показанному на рисунке. Вместо безликого form1 можно задать имя окна формы через свойство Caption в инспекторе объектов. Наконец отметим, что таймер является тем самым не визуальным визуальным компонентом. При разработке он присутствует на форме, при исполнении программы он не виден.

Рисование графиков

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

Построение графиков проиллюстрируем конкретным примером. Сформулируем задачу следующим образом. На одном графике необходимо отобразить две функции – синус и косинус, при изменении аргумента функций в пределах от 0 до 10 радиан. Графики должны представлять собой ломаные линии, проходящие через узловые точки. Шаг следования узлов должен задаваться средствами графического интерфейса. Необходимо выполнить полную разметку осей (ординат и абсцисс). Для каждой функции должен использоваться свой стиль линий. Необходимо организовать подрисуночную подпись графика.

Прежде всего, создаем новый проект, оставив предлагаемый по умолчанию вариант приложения с формой. Проект сохраняем в рабочем каталоге. В верхней центральной части формы размещаем элемент МЕТКА (Label) из вкладки Standard линейки визуальных компонентов. Когда метка выделена мышью, слева от формы в окне инспектора объектов (Object Inspector) отображаются свойства этой метки. Перейдем там на поле Caption и заменим текст по умолчанию на STEP=. Эти надпись теперь и будет отображаться в метке. Теперь в инспекторе объектом перейдем на пункт Font и, активировав его мышью (щелчком немного правее), зададим размер символов, равный 14. Метка готова.

Немного правее только что сформированной метки разместим поле редактирования Edit с той же вкладки VCL. В поле Text инспектора объектов запишем вместо того, что было по умолчанию текст 50. Аналогично тому, как это было сделано для метки, выберем через пункт Font размер символов 14. Поле редактирования также готово.

Теперь на форме необходимо разместить область рисования графики. В качестве таковой можно использовать инструменты Image или PaintBox из линейки VCL. Остановим свой выбор на втором. Он находится на вкладке System линейки. Пользуясь мышью подберите размеры области так, чтобы она занимала почти всю ширину формы и оставляла место для двух кнопок в нижней части.

Ну и разместим эти две кнопки друг под другом или рядом друг с другом в самом низу формы. Измените имена кнопок в свойствах Caption в инспекторе объектов на START и FINISH. Теперь заготовка графического интерфейса программы готова. Выглядеть она должна примерно так, как это показано на следующем рисунке.

Все основные события в проектируемом приложении будут разворачиваться при нажатии на кнопку START на форме. В связи с этим необходимо перейти к редактированию кода программы в теле функции0бработчика соответствующего события. Делать это мы уже умеем. Итак, далее мы будем последовательно описывать выражение, которые нужно вписать в текс тела функции.

Для начала нам понадобятся две переменные целого типа. Переменная i, в основном, будет служить счетчиком циклов. Переменная step будет задавать шаг изменения горизонтальной координаты узла (аргумента функций синуса и косинуса). Производится обычное объявление локальных переменных.