Шаг 9.
Компоненты библиотеки RX.
Вкладка Controls. Компонент TRxCheckListBox

    На этом шаге мы рассмотрим компонент TRxCheckListBox.

    Как и TListBox, компонент TRxCheckListBox (рис.1) предназначен для хранения и отображения списка строк, и имеет дополнительную возможность помечать каждую строку в списке, что отражается свойствами Checked и State. Строка в списке может быть помечена как активная через индексированное свойство EnabledItem, что даст возможность изменения свойства Checked пользователем мышью во время выполнения программы.


Рис.1. Компонент TRxCheckListBox

    Для отметки строк в списке могут быть использованы как изображения, используемые в check-boxes, так и изображения radio-buttons, в зависимости от значения свойства CheckKind. Во втором случае одновременно может быть помечен только один элемент в списке (как в TRadioGroup).

    Доступны все свойства и методы компонентов TListBox, TTextListBox.

    При свойстве AutoScroll = True происходит автоматическая установка горизонтальной полосы скроллинга списка по максимальной длине строки. Если при этом список имеет стиль lbOwnerDrawVariable или lbOwnerDraFixed, то Вы можете задать диапазон скроллинга через обработчик события OnGetItemWidth.

    Рассмотрим свойства компонента TRxCheckListBox:

Таблица 1. Свойства компонента TRxCheckListBox
Свойство Описание
property Checked [Index: Integer]: Boolean; Индексированное свойство предназначено для хранения отметок о состоянии строк Items (отмечена или нет). В режиме дизайна формы это свойство доступно через редактор свойства Items.
property State [Index: Integer]: TCheckBoxState; Свойство аналогично по действию свойству State компоненты TCheckBox и имеет смысл для конкретного элемента в списке. При значении свойства CheckKind = ckRadioButtons только один элемент в списке может быть отмеченным (иметь состояние cbChecked).
property EnabledItem [Index: Integer]: Boolean; Индексированное свойство предназначено для хранения отметок об активности (разрешенности) строк Items. В режиме дизайна формы это свойство доступно через редактор свойства Items.
property CheckKind: TCheckKind; Определяет вид изображений, отображающих пометку элемента в списке и поведение списка TRxCheckListBox.
  • Изображения те же, что и в Check-Boxes - в этом случае может быть помечено сколько угодно строк списка;
  • Изображения те же, что и в CheckMarks - в этом случае может быть помечено сколько угодно строк списка;
  • Изображения те же, что и в Radio-Buttons - при этом может быть помечен только один элемент списка.
      При значении свойства ckRadioButtons номер отмеченного элемента в списке задается свойством CheckedIndex.
property CheckedIndex: Integer; Свойство имеет смысл только при значении свойства CheckKind = ckRadioButtons и определяет номер отмеченного элемента в списке.
property AutoScroll: Boolean; Свойство определяет, будет ли автоматически появляться горизонтальная полоса скроллинга в компоненте при длинах строк, превышающих ширину компоненты (по умолчанию True).
property OnGetItemWidth: TGetItemWidthEvent; Событие вызывается при стиле lbOwnerDrawVariable или lbOwnerDraFixed и установленном в True значении свойства AutoScroll для определения диапазона горизонтального скроллинга компонента. В обработчике события можно задать соотвествующую ширину, присвоив значение параметру Width.

    Приведем пример: создадим приложение, которое позволит менять внешний вид компонента TRxCheckListBox и отображать, какие строки в списке являются выделенными.

    Поместим на форму RxCheckListBox1, TextListBox1, RxLabel1, RxSpeedButton1 (рис.2).


Рис.2. Форма с размещенными на ней компонентами RxCheckListBox1, TextListBox1, RxLabel1, RxSpeedButton1

 

    RxSpeedButton1 – это кнопка, при нажатии на которую меняется значение свойства CheckKind компонента RxCheckListBox1 и соответственно свойство Caption компонента RxSpeedButton1.

    Свойству Items компонента Text ListBox1 придадим значение:

    TextListBox1.Items[0] :=‘ Выделены :';

    TextListBox1.Items[1] :=‘ 1) Смоленцева Екатерина Борисовна';

    Для компонента RxCheckListBox1 напишем обработчик события OnClickCheck:

procedure TForm1.RxCheckListBox1ClickCheck(Sender: TObject);
begin
       TextListBox1.Clear;
       TextListBox1.Items.Add('Выделены:');
       For   i:=0     to     RxCheckListBox1.Items.Capacity-1   do
          if     RxCheckListBox1.Checked[i]=true       then
                 TextListBox1.Items.Add(RxCheckListBox1.Items[i]);
end;

    Для компонента RxSpeedButton2 напишем обработчик события OnClick:

procedure TForm1.RxSpeedButton1Click(Sender: TObject);
begin
  TextListBox1.Clear;        
end;

    Для компонента RxSpeedButton2 напишем обработчик события OnClick:

procedure TForm1.RxSpeedButton2Click(Sender: TObject);
begin
    if     RxSpeedButton2.Caption='ckCheckBoxes'    then
      begin
             RxCheckListBox1.CheckKind:=ckCheckMarks;
             RxSpeedButton2.Caption:='ckCheckMarks';
      end
    else
          if    RxSpeedButton2.Caption='ckCheckMarks'        then
            begin
                 RxCheckListBox1.CheckKind:=ckRadioButtons;
                 RxSpeedButton2.Caption:='ckRadioButtons';
            end
          else
              begin
                   RxCheckListBox1.CheckKind:=ckCheckBoxes;
                   RxSpeedButton2.Caption:='ckCheckBoxes';
              еnd;
end;

    Работа программы показана на рис.3(а-в).


Рис.3а. В списке отмечена четвертая строка


Рис.3б. Свойство CheckKind изменено. В списке отмечены вторая, четвертая и седьмая строки


Рис.3в. Свойство CheckKind изменено. В списке отмечены вторая и шестая строки

    Текст этого примера можно взять здесь.

    На следующем шаге мы рассмотрим компонент TFontComboBox.




Предыдущий шаг Содержание Следующий шаг