Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2009, 15:53   #1
sting
Форумчанин
 
Аватар для sting
 
Регистрация: 03.07.2008
Сообщений: 114
По умолчанию ЗагвоЗДка с Checkbox (от слова "гвоздь")

Здравствуйте товарищи!
Затормозили меня Чекбоксы!
Мне надо было узнать сколько включены а сколько выключены!
Я просмотрел форум и нашёл:
Код:
 for I := 0 to Form1.ComponentCount-1 do begin
    if (Form1.components[i] is TCheckBox) and TCheckBox(Form1.components[i]).Checked 
    then 
      Inc(d);
теперь мне надо сделать что бы:
-если больше одного, то
-если один, то
-если не одного, то

Но чёт не как не получается(


И вторая проблема такая
Мне надо определить сколько чекбоксов нажато и какие именно!

Как это реализовать?
Люди гибнут за МЕТАЛ!!!
sting вне форума Ответить с цитированием
Старый 22.05.2009, 16:03   #2
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Я так понимаю, там d равно количеству нажатых CheckBox'ов, ну тогда первая пробема:
Код:
 if d > 1 then
 if d = 1 then
 if d = 0 then
Писать надо после, приведенного вами, кода.
Вторая проблема.
d и равно количеству нажатых CheckBox'ов. Количество не нажатых равно: КолвоЧекбоксов - d

А какие именно нажаты, это тоже понятно, что вам надо делать с ними?
Код:
 for I := 0 to Form1.ComponentCount-1 do begin
  if (Form1.components[i] is TCheckBox) and TCheckBox(Form1.components[i]).Checked 
  then 
  begin
   Inc(d);
   //Что-то делать с нажатым CheckBox'ом
  end;
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Старый 22.05.2009, 16:03   #3
sting
Форумчанин
 
Аватар для sting
 
Регистрация: 03.07.2008
Сообщений: 114
По умолчанию

Не знаю как обьяснить получше...

Что то наподобе теста! (компилятор тестов тоесть)
и всё записывается в файл, а тестовая программа уже с этого файла читает и тестирует))

Скрин вложен в пост!

5 мемо 4 чекбокса (один мемо на вопросе)
каждый включенный чекбокс означает, что ответ в мемо (напротив включенного чека) правильный и (выполняется мною задуманное действие)

вот так наверно попонятнее..

проблема в том что:

пример по скрину:

нажаты
2 и 4 чекбоксы -- значит текст введёный в мэмо3 и мэмо5 верный
и уже после этого в другое мэмо (допустим мэмо666) должна занестись запись " 35"

а программа клиент уже по алгоритму сама разберёт...
вот так0))

с первой проблемой разобрался
Осталась актуальна вторая проблема)
Изображения
Тип файла: gif 4ek.gif (4.0 Кб, 85 просмотров)
Люди гибнут за МЕТАЛ!!!

Последний раз редактировалось mihali4; 22.05.2009 в 23:26. Причина: Флуд
sting вне форума Ответить с цитированием
Старый 22.05.2009, 16:37   #4
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Можете записывать в строку свойства tag чекбоксов(предварительно выставив в каждом по порядку, например у CheckBox1 св-во tag присвоить 1 и т.д.)
Потом уже проверять разные комбинации правильных значений.
Например так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 i: integer;
 d: byte;
 s: string;
begin
 for I := 0 to Form1.ComponentCount-1 do begin
  if (Form1.components[i] is TCheckBox) and TCheckBox(Form1.components[i]).Checked then
  begin
   Inc(d);
   if s <> '' then
    s := s + ', ' + IntToStr(TCheckBox(Form1.components[i]).Tag)
   else
    s := IntToStr(TCheckBox(Form1.components[i]).Tag);
  end;
 //Проверка на комбинации
 end;
 if s = '1, 2, 3, 4' then ShowMessage('Все правильно!');
 if s = '1, 2, 3' then ShowMessage('Почти все правильно!');
 if s = '1, 2, 4' then ShowMessage('Почти все правильно!');
 //И т.д.
end;
Вместо ShowMessage('Почти все правильно') можете писать свой код
Я понимаю конечно, что это не очень хороший код, но додуматься до чего-то большего пока не смог.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Старый 22.05.2009, 16:56   #5
sting
Форумчанин
 
Аватар для sting
 
Регистрация: 03.07.2008
Сообщений: 114
По умолчанию

Спасибо большое! Это намного лучше чем через AND и OR



За излишнее (неоправданное) цитирование предусмотрен штраф. Вы этим цитированием злоупотребляете. Это относится к флуду. Рекомендую перечитать (причем внимательно) правила раздела.
Люди гибнут за МЕТАЛ!!!

Последний раз редактировалось mihali4; 22.05.2009 в 23:22.
sting вне форума Ответить с цитированием
Старый 22.05.2009, 17:18   #6
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Объявляешь массивы
Код:
checks: array of TCheckBox;
checked: array of integer;
Заполняешь
Код:
SetLength(checks, 4);
for i:=0 to 3 do begin
  checks[i]:=TCheckBox.Create(Form1);
  with checks[i] do begin
    Parent:=Form1;
    Left:=x; //x - отступ слева
    Top:=50 + i*y; //50- отступ от верха, y - отступ между чекбоксами
  end;
end;
Проверка состояния чекбоксов
Код:
SetLength(checked, 0);
for i:=0 to 3 do 
  if checks[i].Checked then begin
    SetLength(checked, Length(checked)+1);
    checked[Length(checked)-1]:=i;
  end;
После проверки длина массива Length(checked) это кол-во отмеченных, в самом массиве номера отмеченных чекбоксов.

Определить реакцию в зависимости от числа отмеченных
Код:
case Length(checked) of
  0: {выполняешь нужные действия};
  1: ;
  2..4: ;
end;
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 22.05.2009 в 17:26.
mutabor вне форума Ответить с цитированием
Старый 22.05.2009, 22:56   #7
sting
Форумчанин
 
Аватар для sting
 
Регистрация: 03.07.2008
Сообщений: 114
По умолчанию

фишка не канает!
пардон за прямату!
Люди гибнут за МЕТАЛ!!!
sting вне форума Ответить с цитированием
Старый 23.05.2009, 13:46   #8
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Плохому танцору тоже что-то мешает, пардон за прямоту.
Вложения
Тип файла: zip dynamic_checkboxes.zip (3.8 Кб, 16 просмотров)
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загвоздка в программе prikolist Общие вопросы C/C++ 6 26.04.2009 21:53
Как удалить текст до слова, потом от слова ? littlecoder Общие вопросы Delphi 7 29.12.2008 00:57
загвоздка с Едитом 4321 Общие вопросы Delphi 3 25.09.2008 12:07
загвоздка... программа построения треугольника рин Помощь студентам 7 24.05.2008 20:45
Загвоздка с задачей на VBA Versifikator Помощь студентам 3 05.12.2007 22:05