150 _____________________________________________Глава 3

образом, учитывая, что индексы начинаются с 0, значения RichEditl->CaretPos.y
+ 1 и RichEditl->CaretPos.x + 1 определяют соответственно номер строки и симво-
ла в ней, перед которым расположен курсор.

3.2.5 Специализированные компоненты ввода чисел,

дат и времени — UpDown, CSpinEdit, DateTimePicker,
MonthCaIendar, CCalendar, FIBook

В C++Builder имеются специализированные компоненты, обеспечивающие
ввод чисел, дат и времени.

Компонент UpDown превращает окно редактирования Edit в компонент, в ко-
тором пользователь может выбирать целое число, изменяя его кнопками со стрел-
ками (см. рис 3.1). Если к тому же установить в true свойство окна Readonly, то
пользователь просто не сможет ввести в окно какой-либо свой текст и вынужден
будет ограничиться выбором числа. Компонент CSpinEdit представляет собой со-
четание Edit и UpDown, оформленное как отдельный тип компонента.

Основное свойство компонента UpDown — Associate, связывающее кнопки со
стрелками с одним из оконных компонентов, обычно с Edit. Свойство AlignBut-
ton, которое может принимать значения udLeft или udRight, определяет, слева
или справа от окна будут размещаться кнопки. Свойство Orientation, которое мо-
жет принимать значения udHorizontal или udVertical, определяет, расположатся
ли кнопки по вертикали (одна под другой) или по горизонтали (одна рядом с дру-
гой). Свойство ArrowKeys определяет, будут ли управлять компонентом клавиши
клавиатуры со стрелками. Свойство Thousands определяет наличие или отсутст-
вие разделительного пробела между каждыми тремя цифрами разрядов вводимого
число.

Свойства Min и Мах задают соответственно минимальное и максимальное зна-
чения чисел, свойство Increment задает приращение числа при каждом нажатии
на кнопку. Свойство Position определяет текущее значение числа. Это свойство
можно читать, чтобы узнать, какое число задал пользователь. Его можно задать во
время проектирования в диапазоне Min — Мах. Тогда это будет значение числа по
умолчанию, отображаемое в окне в начале выполнения приложения.

Свойство Wrap определяет, как ведет себя компонент при достижении макси-
мального или минимального значений. Если Wrap = false, то при увеличении или
уменьшении числа до максимального или минимального значения это число фик-
сируется на предельном значении и нажатие кнопки, пытающейся увеличить мак-
симальное число или уменьшить минимальное, ни к чему не приводит. Если же
Wrap = true, то попытка превысить максимальное число приводит к его сбросу на
минимальное значение. Аналогично, попытка уменьшить минимальное число
приводит к его сбросу на максимальное значение. Т.е. изменение чисел «закольцо-
вывается».

Свойства компонента CSpinEdit похожи на рассмотренные, только имеют дру-
гие имена: свойства Min, Max, Position называются соответственно MinValue,
MaxValue, Value. В целом компонент CSpinEdit во многих отношениях удобнее
простого сочетания UpDown и Edit. Так что, если не требуются какие-то из опи-
санных выше дополнительных возможностей UpDown (нестандартное расположе-
ние кнопок, «закольцовывание» изменений и т.п.), то можно рекомендовать поль
зоваться компонентом CSpinEdit.

Из компонентов ввода дат и времени наиболее удобным является
DateTimePicker (см. рис. 3.2, на котором справа вверху показан этот компонент в
режиме ввода времени, а ниже — в режиме ввода даты). Компонент очень эффек-
тен за счет появления выпадающего календаря (иногда даже слишком эффектен
для строго оформленного приложения) и обеспечивает безошибочный с точки зре-