Методические указания. 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 = "";
}
}