Методические указания. 1. Компонент Timer (страница System)

1. Компонент Timer (страница System)

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

Основные свойства:

¨ Interval –интервал временив миллисекундах.

¨ Enabled –управление работой таймера (используется для запуска/остановки таймера)

ú trueтаймер запущен

ú false таймер остановлен

Эти свойства можно менять в процессе проектирования в окне Инспектора Объектов и в процессе выполнения программы.

Основное событие:

¨ OnTimer –выполняется при истечение времени, указанного в свойстве Interval

 

v Пример. В качестве примера создадим бегущую строку.

Определим строку, которую будем использовать в качестве бегущей, как глобальную переменнуютипа AnsiString. Описать глобальную переменную нужно в заголовочном модуле формы (с расширением «.h»), а определить – в основном модуле формы (имеющим расширение «.cpp»). Чтобы быстро открыть заголовочный модуль можно использовать сочетание клавиш <Ctrl>+F6.

Если программа называется Name:

1. Для описания глобальной переменной типа AnsiString нужно в заголовочный модуль (файл Name.h) дописать:

extern AnsiString Str;

2. Для определения - в основном модуле (файл Name.cpp) вне функций написать:

AnsiString Str=”Это пример бегущей строки……….”;

Строка будет располагаться в окне редактирования Edit. Чтобы сделать строку бегущей, надо использовать таймер. Для этого на форме надо разместить компонент Timerи задать его свойства

Þ Interval = 100

Þ Enabled = true

В обработчик события OnTimer (вызвать ее можно двойным щелчком на компоненте Timer) вставить операторы, осуществляющие циклический сдвиг строки:

void __fastcall TForm1::Timer1Timer (TObject *Sender)

{ Edit1->Clear();

if (!Str.IsEmpty()) // Если строка не пуста

{ Edit1->Text = Str;
char first = Str[1];

for (int i=1; i < Str.Length(); i++) //Циклический сдвиг строки

Str[i] = Str[i+1]; //на один символ влево

Str[Str.Length()] = first;} }

Теперь каждый раз по истечении 100 миллисекунд (0,1 сек) строка в окне редактирования Edit будет циклически сдвигаться влево, т.е. это будет бегущая строка.

2. Компонент PageControl (страница Win32)

PageControl - многостраничная панель, которая позволяет экономить пространство окна приложения, размещая на од­ном и том же месте страницы разное содержание.

Properties

¨ ActivePage - содержит указатель типа TTabSheet на активную страницу

¨ PageCount -число страниц, помещенных на панели (доступно только программно)

Чтобы задавать и редактировать страницы этого ком­понента, надо щелкнуть на нем правой кнопкой мыши. Во всплывшем меню вы можете видеть коман­ды:

ú New Page — создать новую страницу

ú Next Page — переключиться на следующую страницу

ú Previous Page — переключиться на предыдущую страницу

ú Delete Page —удалить страницу

Каждая страница является объектом типа TTabSheet. Это панель, на которой можно размещать любые компоненты. Кроме того каждая страница обладает своими свойствами:

¨ Caption - надпись для страницы

¨ TabVisible- отвечает за видимость вкладки

v Для рассматриваемого примера можно использовать многостраничную панель для экономии места на форме. Например, на этом компоненте можно создать 3 страницы, называющихся (надписанных) так: «Текст», «Скорость», «Размер шрифта». На каждой странице будем помещать управляющие элементы, отвечающие за соответствующие параметры бегущей строки.

 

3. Компонент DateTimePicker (страница Win32)

DateTimePickerвизуальный компонент для задания даты или времени.

Основные свойства:

¨ Kind –тип отображаемой информации

ú dtkDateотображение даты.

ú dtkTimeотображение времени

¨ Date –значение даты

¨ Time –значение времени

¨ DateFormat –формат отображения даты

ú dfShortдд . мм . гггг (15.03.2004)

ú dfLong дд месяц гггг г. (15 марта 2004 г.)

Время всегда отображается в формате чч:мм:сс (15:45:25)

¨ DateMode –способ изменения даты (в процессе выполнения программы)

ú dmComboBox с помощьювыпадающего календаря

ú dmUpDown с помощью кнопки-счетчика (отдельно по каждому полю)

Время всегда изменяется с помощью кнопки-счетчика (также отдельно по каждому полю). Кроме того можно непосредственно вводить значение различных полей даты и времени с клавиатуры.

¨ MaxDate –максимальное возможное значение даты

¨ MinDate –минимальное возможное значение даты

Основное событие:

¨ OnChange –выполняется при изменении данных.

Во время выполнения программы наиболее важными является свойство Dateили Time (в зависимости от значения, установленного в свойстве Kind). Для изменения их значений в процессе выполнения программы можно использовать следующие методы:

¨ DecodeDate (year, month, day) – разбивает дату на 3 составляющие – год, месяц, день.

¨ DecodeTime (hour, min, sec, msec) - разбивает время на 4 составляющие – часы, минуты, секунды, милисекунды.

¨ FormatString (format) – форматированный вывод даты или времени.
format – символьная строка, например:

ú “ddddd” – дата в формате дд . мм . гггг (15.03.2004)

ú “dddddd” – дата в формате дд месяц гггг г. (15 марта 2004 г.)

ú “tt” – время в формате чч:мм:сс (15:45:25)

 

v Пример. Изменим текст бегущей строки так, чтобы она сообщала о дате, выбранной по календарю. Добавим на страницу “Текст” компонент DateTimePickerи установим его свойства:

Þ Kind = dtkDate

Þ DateFormat = dfLong

Þ DateMode = dmComboBox

В обработчик события OnChange (вызвать ее можно двойным щелчком рядом с названием события на закладке Events Инспектора Объектов) вставить операторы, осуществляющие изменение текста строки:

void __fastcall TForm1::DateTimePicker1Change(TObject *Sender)

{ Str = DateTimePicker1->Date.FormatString("dddddd") + " "; }

 

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

 

4. Компонент TrackBar (страница Win32)

Компонент TrackBar представляет собой элемент управления в виде ползунка, который пользователь может перемещать курсором мыши или клавишами во время выполнения. Таким образом, пользо­ватель может управлять какими-то процессами: громкостью звука, размером изображения и т.п.

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

Properties

¨ Position –текущее положение. Это свойство можно задавать во время проектирования или программно во время выполнения. При перемещении пользователем ползунка можно прочитать значение Position, характеризующее позицию, в которую пользователь переместил ползунок.

¨ Min, Мах - границы изменения свойства Position

За внешний вид ползунка отвечают свойства:

¨ Orientation - ориентация ползунка:

ú trHorizontal — горизонтальная

ú trVertical — вертикальная

¨ TickMarks - указывает размещение шкалы относительно компонента

ú tmBottomRight - снизу или справа

ú tmTopLeft - сверху или слева

¨ TickStyle - способ изображения шкалы

ú tsAuto - автоматическая прорисовка шкалы

ú tsNone - отсутствие шкалы

¨ Frequency - частота нанесения меток

¨ Cursor -вид курсора, который будет появляться при наведении на компонент

¨ SelStart и SelEnd- позволяют визуально выделить на шкале некоторый диапазон, который о чем-то говорит пользователю, например, рекомендуемый диа­пазон значений. При этом ничто не мешает пользователю выйти за пределы этого диапазона

¨ LineSize- определяют, насколько смещается ползунок, если пользователь управляет им с помощью клавиш со стрелками

¨ PageSize- определяют, насколько смещается ползунок, если пользователь управляет им с помощью клавиш PageUp и PageDown

Основное событие:

¨ OnChange –возникает при перемещении пользователем ползунка. В обработчике этого события можно прочитать значение Position и использовать его для управления каким-то компонентом.

 

v В нашем примере пользователь будет управлять скоростью движения бегущей строки. Для этого на страницу «Скорость» перенесите компонент TrackBar. Поэкспериментируйте с его свойствами TickMarks, TickStyle, Orientation. Установите свойства:

Þ Min=0

Þ Max=10

Þ Position = 5

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

void __fastcall TForm1::TrackBar1Change(TObject *Sender)

{ Timer1->Interval = 200-(TrackBar1->Position)*20; }

 

5. Компонент UpDown (страница Win32)

UpDown - кнопка-счетчик в сочетании с компонентами Edit и другими позволяющая вводить цифровую информацию. Компонент UpDown превращает окно редактирования Edit в компонент, в котором пользователь может выбирать целое число, изменяя его кнопками со стрелками.

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

 

Основные свойства:

¨ Associate- связывает кнопки со стрелками с одним из оконных компонентов, обычно с Edit.

¨ AlignButton –расположение кнопок

ú UdLeftслева от окна

ú UdRight-справа от окна

¨ Orientation –ориентация кнопок

ú UdHorizontal -по вертикали (одна под другой)

ú UdVertical -по горизонтали (одна рядом с другой)

¨ ArrowKeys –управление компонентом с клавиатуры

ú true -с помощью клавиш со стрелками

ú false не управляются с клавиатуры

¨ Min - минимальное значение чисел

¨ Мах -максимальное значение чисел

¨ Increment -приращение числа при каждом нажатии на кнопку

¨ Position -те­кущее значение числа (в диапазоне Min — Мах)

¨ Wrap - определяет, как ведет себя компонент при достижении максимального или минима­льного значений

ú false-при увеличении или уменьшении числа до максимального или минимального значения это число фиксируется на предельном значении и нажатие кнопки, пытающей­ся увеличить максимальное число или уменьшить минимальное, ни к чему не приводит;

ú true- попытка превысить максимальное число приводит к его сбросу на минимальное значение. Аналогично, попытка уменьшить минимальное число приводит к его сбросу на максимальное значение, т.е. изменение чисел «закольцовывается»

Основное событие:

¨ OnChanging –возникает при изменении значения UpDown. В обработчике этого события можно читать значения свойства Position, чтобы узнать, какое число задал пользователь

v В нашем примере будем менять размер шрифта. Для этого на страницу «Размер шрифта» добавьте компоненты Edit2 и UpDown. Установите свойства компонента UpDown:

Þ Associate = Edit2 (выбрать значение этого из выпадающего списка этого свойства)

Þ Max = 30

Þ Min = 10

Þ Position = 20 (текущее значение)

Þ Increment = 2 (шаг изменения при нажатии стрелок)

В функции UpDown1Changing - обработчике события OnChanging компонента UpDown1 нужно менять размер шрифта в окне редактирования, где расположена бегущая строка:

{ Edit1->Font->Size = UpDown1->Position; }

6. ProgressBar (Win32)

ProgressBar -индикатор процесса выполнения длительной процедуры.

Properties

¨ Min - минимальное значение

¨ Мах -максимальное значение

¨ Position -те­кущая позиция (в диапазоне Min — Мах)

¨ Orientation –ориентация компонента

ú рdHorizontal -вертикально

ú рdVertical-горизонтально

¨ Step –шаг перемещения индикатора при изменения позиции на 1

¨ Smooth –тип индикатора

ú true -сплошной

ú falseразделенный на блоки (1 блок соответствует изменению на 1 позицию, т.е. на величину, указанную в свойстве Step)

 

v Пример программы «Таймер-секундомер»

Поместим на форму MyForm компоненты

Þ MyTimer

Þ EditTimer

Þ UpDownTime - связанный с компонентом EditTimer

Þ LabelTime

Þ Label1 - Caption = «Установка таймера», расположите его рядом с EditTimer

Þ Label2 - Caption = «Текущее время», расположите его рядом с LableTime

Þ MyProgressBar - отображает ход таймера

Þ ButtonStart - для запуска таймера после его установки.

По истечению заданного времени появляется сообщение «Время вышло!».

 

TMyForm *MyForm;

TProgressBar *MyProgressBar;

void__fastcall TMyForm::TMyForm(TComponent* Owner): Form(Owner)

{

MyProgressBar->Visible = false //до запуска таймера индикатор невидим

MyTimer->Enabled = false; //таймер еще не запущен

}

 

void __fastcall TMyForm::ButtonStartClick(TObject *Sender)

{ MyTimer->Enabled = true; //запуск таймера

MyProgressBar->Position = 0; //текущая позиция индикатора обнуляется

MyProgressBar->Max = UpDownTime->Position; //макс. граница индикатора

//соответствует заданному пользователем числу в EditTimer

MyProgressBar->Visible = true; //индикатор становится видимым

}

 

void __fastcall TMyForm::MyTimerTimer(TObject *Sender)

{ //отображение текущего времени в период работы таймера

LabelTime->Caption = Time().FormatString("tt");

//если текущая позиция индикатора меньше максимального значения

if(MyProgressBar->Position < MyProgressBar->Max)

{

MyProgressBar->Position++; //увеличиваем текущую позицию

if ((MyTimer->Enabled) & (StrToInt(EditTimer->Text)!=0))

//если таймер запущен и установлено его значение

EditTimer->Text=IntToStr(StrToInt(EditTimer->Text)-1);

} //уменьшение времени

else //если время истекло

{

MyProgressBar->Visible =false;

MyTimer->Enabled = false;

ShowMessage("Время вышло!"); // вывод сообщения

LabelTime->Caption = "";

}

}