Главная » C++, C++ Builder » Время в панели состояния C++ Builder

0

Нашим последним примером в экскурсе в VCL станет кое-что, в чем многие программисты нуждаются в своих приложениях, но лишь немногие способны осуществить. Во многих приложениях существует необходимость отображать текущее время <Невеселый каламбур получился — Примеч. перев.> в одной из секций панели состояния (status  bar). Хотя  обычно рабочий стол Windows 95/NT отображает его в нижнем правом углу, это происходит не всегда. Пользователи, которые изменили у себя рабочий стол так, что время на нем не показывается, ожидают, что ваше приложение должно предоставить им эту информацию. CBuilder позволяет осуществить их желание настолько легко, что для вас не может быть никаких оправданий, если вы все же не пойдете им навстречу и не положите часы в ваше приложение. В этом примере мы как раз и рассмотрим процесс отображения текущего времени в панели состояния. Когда мы его напишем, вы узнаете достаточно для того, чтобы отображать все что захотите в панели состояния во время исполнения.

Замечание

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

Chapter4/TimeInAStatusBar прилагаемого к книге компакт-диска.

На рис. 4.14 показана форма, которую мы будем использовать в этом примере. Как вы видите, на форме находятся панель состояния, таймер (timer) и три поля редактирования. Поля редактирования находятся там исключительно для того, чтобы показать вам, что код, который мы собираемся добавить для формы, не окажет никакого влияния на эффективность и ход исполнения приложения. Установите интервал таймера равным  1000  миллисекунд  (единица  измерения времени для таймера — миллисекунды, так что вам надо просто ввести в поле соответствующего свойства 1000), то есть одной секунде. В данном приложении секунды будут отображаться, хотя, возможно, вам нужны только часы и минуты. Как вы увидите далее, это зависит только от вас.

Рис. 4.14. Пример приложения с часами на панели состояния

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

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

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

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

Добавьте следующий код в обработчик события Timer1Timer (что является именем события по умолчанию, которое появится, если вы дважды щелкните на событии Timer в Object Inspector):

void __fastcall TForm1::Timer1Timer(TObject *Sender)

{

StatusBar->Panels->Items[1]->Text  = Now().TimeString();

}

Вот и все, вот и весь пример. Свойство Panels панели состояния содержит объекты, которые представляют отдельные секции отображения панели состояния. Внутри свойства Panels свойство Items содержит информацию о каждой секции, включая, как мы видим из кода, и информацию о тексте, отображаемом в секции. Скомпилируйте и запустите приложение, и вы увидите текущее время на панели состояния.

Не правда ли впечатляет, что такое ничтожное количество кода способно произвести такой мощный эффект? Это лучший пример основанной на компонентах разработки приложения, который только можно придумать. Написав одну-единственную строку кода, мы получили законченное приложение, отображающее текущее время на панели состояния.

Источник: Теллес М. – Borland C++ Builder. Библиотека программиста – 1998

По теме:

  • Комментарии