§ 16. Кампаненты для работы са спісамі радкоў

16.5. Кампанент CheckListBox

Кампанент спіс з флажкамі — CheckListBox уяўляе сабой варыянт спіса з індыкатарамі. Каля кожнага радка спіса есць індыкатар-флажок, які карыстальнік можа перамыкаць. На панэлі кампанентаў Additional кампанент спіс з флажкамі намаляваны ў выглядзе , імя аб'екта  CheckListBox. Кампанент CheckListBox, змешчаны на форму, атрымлівае імя CheckListBoxN, дзе N — нумар 1, 2, 3… (прыклад 16.13).

Асноўная ўласцівасць кампанента CheckListBox, гэтак жа як і ў кампанентаў ListBox і ComboBox — гэта ўласцівасць Items, якая належыць да тыпу TSring.

Станы індыкатараў спіса з флажкамі вызначаюць уласцівасці State і Checked, разгледжаныя для кампанента флажок (CheckBox). Гэтыя ўласцівасці можна разглядаць як масівы, кожны элемент якога адпавядае індэксу радка.

Пры змене карыстальнікам стану індыкатара ўзнікае падзея OnClickCheck, якую можна выкарыстоўваць для напісання апрацоўшчыка вынікаў змены.

Прыклад 16.14. У тэкставым файле books.txt захоўваюцца назвы кніг, наяўных у кнігарні, у тэкставым файле price.txt — кошты гэтых кніг. Стварыць дадатак, у якім карыстальнік зможа выбіраць кнігі для пакупкі. Пры змене выбару павінна падлічвацца сума пакупкі.

Этапы выканання задання

  1. Змясціць на форму кампаненты: CheckListBox1, ListBox1 і Label1.
  2. Змяніць уласцівасць Caption кампанента Label1 на «Сумма покупки 0 рублей».
  3. Напісаць апрацоўшчык падзеі OnCreat для формы, якая загружае назвы кніг з файла books.txt у кампанент CheckListBox1 і кошты з файла price.txt у кампанент ListBox1.
  4. Напісаць апрацоўшчык падзеі OnClickCheck для кампанента CheckListBox1, які падлічвае суму пакупкі.

Прыклад 16.13. Кампанент CheckListBox на форме:

Прыклад 16.14. Форма на этапе праектавання:

Апрацоўшчык падзеі OnCreat для формы.

void __fastcall TForm1::FormCreate
                (TObject *Sender)

{

  CheckListBox1 -> Items -> 

  LoadFromFile("books.txt");

  ListBox1 -> Items -> 

  LoadFromFile("price.txt");

}

Апрацоўшчык падзеі OnClickCheck для кампанента CheckListBox1:

void __fastcall TForm1::
CheckListBox1ClickCheck
(TObject *Sender)

{

  double s = 0;

  for (int i = 0; i < 

   CheckListBox1 -> Items -> Count;

   i++) {

    if (CheckListBox1 -> Checked[i])

      s += StrToFloat

      (ListBox1-> Items-> Strings[i]);

  }

  Label1 -> Caption = 

  "Стоимость покупки " + 

  FloatToStr(s) + " рублей";

}

Дадатак у час працы:

Змесціва файлаў: