![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Помогите доделать, пожалуйста!
1. Объявляем переменную типа byte; 2. При выборе любого чекбокса увеличивать ее на 1 3. Если чекбокс не выбран то соответственно +0 (не прибавлять) 4. Общие чекбоксы в переменную не записывать 5. Button2 - обнуление всех чекбоксов (якобы новая страница) 6. Button1 - показать результат (сумму всех значений для каждого чекбокса) Что-то типа flag:=flag+1; Например: А=1 А+А=2 ... Последний раз редактировалось GrabbeR, 15.03.2012 в 18:08. |
#2
|
||||
|
||||
![]() Это зачем-же такое чудовище чекастое? Ужас.
Проблема в том, что у вас совершенно невозможно понять какой чекбокс куда относится. По заголовку они не уникальные, по имени они вообще просто никак не групируются. Что-бы все это громадье заново не переделывать рекомендую сделать 3-х мерный массив (Колонка,Группа,Элемент) примерно такого типа: Код:
Anketa: Array[1..3,1..6,1..5] of TCheckBox; Код:
Anketa[1,1,1] := CheckBox1; Anketa[1,1,2] := CheckBox2; Решение конечно не идеальное, но лучше пока не вижу. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
GrabbeR (17.03.2012)
|
#3
|
|||
|
|||
![]() по вопросу.
всем чекбоксам на событие клик поставить единую процедуру и в нее написать If (Sender as TCheckBox).checked then Inc(flag) else Dec(flag) тем самым флаг будет содержать кол-во включенных чеков. (изначально ни один чек не выбран,флаг=0). |
Этот пользователь сказал Спасибо Snake22 за это полезное сообщение: | ||
GrabbeR (17.03.2012)
|
#4
|
||||
|
||||
![]() Цитата:
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
GrabbeR (17.03.2012)
|
#5
|
|||
|
|||
![]() допустим, применить метод, предложенный Snake22, тогда будет идти подсчет каждого чекбокса, правильно ведь? как тогда посмотреть сумму чекбоксов по отдельности? ну то есть, может быть расширить форму под Memo и в нее выводить результат?
|
#6
|
||||
|
||||
![]() У чекбоксов есть такой параметр как Tag, для первой группы устанавливаем 10, для второй - 20, и так далее. Потом модернизируем вариант Snake22:
Код:
var MainFlag: integer = 0; //общее кол-во отмеченных чекеров Group1Flag: integer = 0; //Кол-во отмеченных из первой группы Group2Flag: integer = 0; //из второй procedure TForm1.CheckBox1Click(Sender: TObject); begin If (Sender as TCheckBox).checked then Inc(MainFlag) else Dec(MainFlag); case TCheckBox(Sender).Tag of 10: if TCheckBox(Sender).Checked then Inc(Group1Flag) else Dec(Group1Flag); 20: if TCheckBox(Sender).Checked then Inc(Group2Flag) else Dec(Group2Flag); end; end; Начинающий программист уверен, что в 1 килобайте 1000 байт.
Законченный программист уверен, что в 1 километре 1024 метра. Последний раз редактировалось Karsh, 16.03.2012 в 00:10. |
Этот пользователь сказал Спасибо Karsh за это полезное сообщение: | ||
GrabbeR (17.03.2012)
|
#7
|
|||
|
|||
![]() Цитата:
var Form1: TForm1; MainFlag: integer = 0; //общее кол-во отмеченных чекеров Group1Flag: integer = 0; //Кол-во отмеченных из первой группы Group2Flag: integer = 0; //из второй Group3Flag: integer = 0; Group4Flag: integer = 0; Group5Flag: integer = 0; Group6Flag: integer = 0; ... ... procedure TForm1.CheckBox1Click(Sender: TObject); begin If (Sender as TCheckBox).checked then Inc(MainFlag) else Dec(MainFlag) case TCheckBox(Sender).Tag of 10: if TCheckBox(Sender).Checked then Inc(Group1Flag) else Dec(Group1Flag); 20: if TCheckBox(Sender).Checked then Inc(Group2Flag) else Dec(Group2Flag); 30: if TCheckBox(Sender).Checked then Inc(Group3Flag) else Dec(Group3Flag); ... ... end; end; в строке: case TCheckBox(Sender).Tag of [Error] Unit1.pas(215): Missing operator or semicolon [Fatal Error] Project2.dpr(5): Could not compile used unit 'Unit1.pas' что не так? |