Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Индикаторы CheckBox и CheckListBox

Поиск

 

Индикаторы с флажком CheckBox используются в приложениях в основном для того, чтобы пользователь мог включать и выключать какие-то опции, или для индикации состояния. При каждом щелчке пользователя на индикаторе его состояние изменяется, проходя в общем случае последовательно через три значения: выделение (появление черной галочки), промежуточное (серое окно индикатора и серая галочка) и не выделенное (пустое окно индикатора). Этим трем состояниям соответствуют три значения свойства компонента State: cbChec-ked, cbGrayed, cbUnchecked. Впрочем, эти три состояния допускаются только при значении другого свойства AllowGrayed равном true. Если же AllowGrayed = false (значение по умолчанию), то допускается только два состояния: выделенное и не выделенное. И State, и AllowGrayed можно устанавливать во время проектирова­ния или программно во время выполнения.

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

Проверять состояние индикатора можно не только по значению State, но и по значению свойства Checked. Если Checked равно true, то индикатор выбран, т.е. State = cbChecked. Если Checked равно false, то State равно cbUnchecked или cbGrayed. Установка Checked в true во время проектирования или выполнения ав­томатически переключает State в cbChecked.

Еще один компонент, имеющий индикаторы — список CheckListBox. Это ана­лог компонента ListBox, но около каждой строки списка имеется индикатор, состояние которого пользователь может изменять.

Свойства, общие у CheckListBox и ListBox, мы рассматривать не будем. А состояния индикаторов определяют два свойства: State и Checked. Оба эти свойства можно рассматривать как индексированные массивы, каждый эле­мент которого соответствует индексу строки. Эти свойства можно устанавливать программно или читать, определяя установки пользователя. Например, операторы

CheckListBoxl.Checked[1]:=true;

CheckListBoxl.State[2]:*cbGrayed;

устанавливают индикатор второй строки списка CheckListBoxl в состояние вы­бранного, а индикатор третьей строки — в промежуточное состояние (вспомним, что индексы начинаются с 0). Оператор

for i:=0 to CheckListBoxl.Items.Count — 1 do if CheckListBoxl.Checked[i] then...

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

В компоненте CheckListBox имеется также событие OnClickCheck, возникаю­щее при каждом изменении пользователем состояния индикатора. Его можно ис­пользовать для обработки результатов изменения.

 

Таймер – компонент Timer

 

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

Таймер — невизуальный компонент, который может размещаться в любом ме­сте формы. Он имеет два свойства, позволяющие им управлять: Interval — интер­вал времени в миллисекундах и Enabled — доступность. Свойство Interval задает период срабатывания таймера. Через заданный интервал времени после предыду­щего срабатывания, или после программной установки свойства Interval, или по­сле запуска приложения, если значение Interval установлено во время проектиро­вания, таймер срабатывает, вызывая событие OnTimer. В обработчике этого собы­тия записываются необходимые операции.

Если задать Interval = 0 или Enabled = false, то таймер перестает работать. Чтобы запустить отсчет времени, надо или задать Enabled = true, если установле­но положительное значение Interval, или задать положительное значение Inter­val, если Enabled = false.

Например, если требуется, чтобы через 5 секунд после запуска приложения закрылась форма — заставка, отображающая логотип приложения, на ней надо разместить таймер, задать в нем интервал Interval = 5000, а в обработчик события OnTimer вставить оператор Close, закрывающий окно формы.

Если необходимо в некоторой процедуре запустить таймер, который отсчитал бы заданный интервал, например, 5 секунд, после чего надо выполнить некоторые операции и отключить таймер, это можно сделать следующим образом. При проек­тировании таймер делается доступным (Enabled = true), но свойство Interval зада­ется равным 0. Таймер не будет работать, пока в момент, когда нужно запустить таймер, не выполнится оператор

Timer1.Interval:=5000;

Через 5 секунд после этого наступит событие OnTimer. В его обработчике надо задать оператор

Timer1.Interval:=0;

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

Другой эквивалентный способ решения задачи — использование свойства Enabled. Во время проектирования задается значение Interval = 5000 и значение Enabled = false. В момент, когда надо запустить таймер, выполняется оператор

Timer1.Enabled:=true;

В обработчик события OnTimer, которое наступит через 5 секунд после запус­ка таймера, можно вставить оператор

Timerl.Enabled:=false;.

который отключит таймер.

Таймер точно выдерживает заданные интервалы Interval, если они достаточно велики — сотни и тысячи миллисекунд. Если же задавать интервалы длительно­стью десятки или единицы миллисекунд, то реальные интервалы времени оказы­ваются заметно больше вследствие различных накладных расходов, связанных с вызовами функций и иными вычислительными аспектами.

 



Поделиться:


Последнее изменение этой страницы: 2016-12-28; просмотров: 344; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.148.144.139 (0.007 с.)