Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 15.03.2012, 18:05
GrabbeR GrabbeR вне форума
Новичок
 
Регистрация: 15.03.2012
Сообщения: 54
Версия Delphi: 7
Репутация: 10
По умолчанию Помогите с CheckBox в анкете

Помогите доделать, пожалуйста!

1. Объявляем переменную типа byte;
2. При выборе любого чекбокса увеличивать ее на 1
3. Если чекбокс не выбран то соответственно +0 (не прибавлять)
4. Общие чекбоксы в переменную не записывать
5. Button2 - обнуление всех чекбоксов (якобы новая страница)
6. Button1 - показать результат (сумму всех значений для каждого чекбокса)

Что-то типа flag:=flag+1;

Например:
А=1
А+А=2
...
Вложения
Тип файла: 7z Anketa.7z (154.6 Кбайт, 18 просмотров)

Последний раз редактировалось GrabbeR, 15.03.2012 в 18:08.
Ответить с цитированием
  #2  
Старый 15.03.2012, 19:16
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Это зачем-же такое чудовище чекастое? Ужас.
Проблема в том, что у вас совершенно невозможно понять какой чекбокс куда относится. По заголовку они не уникальные, по имени они вообще просто никак не групируются. Что-бы все это громадье заново не переделывать рекомендую сделать 3-х мерный массив (Колонка,Группа,Элемент) примерно такого типа:
Код:
Anketa: Array[1..3,1..6,1..5] of TCheckBox;
и ручками их связать:
Код:
Anketa[1,1,1] := CheckBox1;
Anketa[1,1,2] := CheckBox2;
Тогда можно уже будет что-то считать по элементам массива Anketa.
Решение конечно не идеальное, но лучше пока не вижу.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение:
GrabbeR (17.03.2012)
  #3  
Старый 15.03.2012, 19:34
Snake22 Snake22 вне форума
Активный
 
Регистрация: 20.02.2011
Сообщения: 374
Репутация: 744
По умолчанию

по вопросу.
всем чекбоксам на событие клик поставить единую процедуру и в нее написать
If (Sender as TCheckBox).checked then Inc(flag)
else Dec(flag)
тем самым флаг будет содержать кол-во включенных чеков.
(изначально ни один чек не выбран,флаг=0).
Ответить с цитированием
Этот пользователь сказал Спасибо Snake22 за это полезное сообщение:
GrabbeR (17.03.2012)
  #4  
Старый 15.03.2012, 19:43
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Цитата:
Сообщение от Snake22
по вопросу.
всем чекбоксам на событие клик поставить единую процедуру и в нее написать
If (Sender as TCheckBox).checked then Inc(flag)
else Dec(flag)
тем самым флаг будет содержать кол-во включенных чеков.
(изначально ни один чек не выбран,флаг=0).
К сожалению данное предложение не решает основную проблему, получения суммы по группам, столбцам и т.д. Так мы сможем посчитать только общее количество.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение:
GrabbeR (17.03.2012)
  #5  
Старый 15.03.2012, 23:33
GrabbeR GrabbeR вне форума
Новичок
 
Регистрация: 15.03.2012
Сообщения: 54
Версия Delphi: 7
Репутация: 10
По умолчанию

допустим, применить метод, предложенный Snake22, тогда будет идти подсчет каждого чекбокса, правильно ведь? как тогда посмотреть сумму чекбоксов по отдельности? ну то есть, может быть расширить форму под Memo и в нее выводить результат?
Ответить с цитированием
  #6  
Старый 16.03.2012, 00:05
Аватар для Karsh
Karsh Karsh вне форума
Активный
 
Регистрация: 22.09.2007
Адрес: SPb
Сообщения: 228
Версия Delphi: 7, 2009, XE2
Репутация: 70
По умолчанию

У чекбоксов есть такой параметр как 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  
Старый 16.03.2012, 01:04
GrabbeR GrabbeR вне форума
Новичок
 
Регистрация: 15.03.2012
Сообщения: 54
Версия Delphi: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Karsh
У чекбоксов есть такой параметр как 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;

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'

что не так?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:13.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025