Час в панелі стану C ++ Builder
Нашим останнім прикладом в екскурсі в 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
Чи не правда вражає, що таке нікчемне кількість коду здатне виробити такий потужний ефект?