Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 160

Раздел: Delphi » Прочее
/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
У меня на форме 4 RadioButton(o1,o2,o3 и o4) и одна кнопка Button1.
В Button1Click я прописываю условие if o1.Checked then b=1 else b=0;
Есть переменная e:integer; она принимает значение от 1 до 4.
Вопрос в том как сделать так, чтобы если переменная e равна 3, то b равнялась бы единице если нажата o3, если e=4, то при нажатии o4?

Ученый Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Ученый (статус: 8-ой класс)
Вопрос отправлен: 5 декабря 2008, 19:05
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: ANBsoft

Здравствуйте, Ученый!
b:=Byte(o1.Checked)+2*Byte(o2.Checked)+3*Byte(o3.Checked)+4*Byte(o4.Checked);

Ответ отправил: ANBsoft (статус: Студент)
Время отправки: 5 декабря 2008, 19:16
Оценка за ответ: 5

Ответ #2. Отвечает эксперт: Anderson N.N

Здравствуйте, Ученый!
// Думаю я тебе правильно понял
//Короче создаешь один обработчик для своих TRadioButton
//надеюсь умеешь это делать,
// дальше все просто

Приложение:
  1. procedure TForm1.o1Click(Sender: TObject);
  2. begin
  3. if (TRadioButton(sender).Checked) then
  4. begin
  5. if (TRadioButton(sender).name='o1')
  6. then
  7. if (e=1) then
  8. begin
  9. b:=1;
  10. exit;
  11. end
  12. else b:=0;
  13. if (TRadioButton(sender).name='o2')
  14. then
  15. if (e=2) then
  16. begin
  17. b:=1;
  18. exit;
  19. end
  20. else b:=0;
  21. if (TRadioButton(sender).name='o3')
  22. then
  23. if (e=3) then
  24. begin
  25. b:=1;
  26. exit;
  27. end
  28. else b:=0;
  29. if (TRadioButton(sender).name='o1')
  30. then
  31. if (e=4) then
  32. begin
  33. b:=1;
  34. exit;
  35. end
  36. else b:=0;
  37. end;
  38. end;


Ответ отправил: Anderson N.N (статус: 2-ой класс)
Время отправки: 6 декабря 2008, 15:34
Оценка за ответ: 4

Комментарий к оценке: Не рационально!

Мини-форум вопроса

Всего сообщений: 12; последнее сообщение — 5 декабря 2008, 21:27; участников в обсуждении: 4.
Ученый

Ученый (статус: 8-ой класс), 5 декабря 2008, 19:19 [#1]:

Бубырь Александр Николаевич, что то я неувидил зависимости от переменной е?
ANBsoft

ANBsoft (статус: Студент), 5 декабря 2008, 19:22 [#2]:

Немного непонятно сформулировано, возможно:
b:=Byte(e=(Byte(o1.Checked)+2*Byte(o2.Checked)+3*Byte(o3.Checked)+4*Byte(o4.Checked));
Ученый

Ученый (статус: 8-ой класс), 5 декабря 2008, 19:26 [#3]:

Кажеться сам разобрался с этой проблемой, просто надобыло прописать:
case a of
1: if o1.Checked then b:=1 else b:= 0;
2: if o2.Checked then b:= 1 else b:= 0 ;
3: if o3.Checked then b:= 1 else b:= 0;
4: if o4.Checked then b:= 1 else b:= 0 ;
end;
Хотя и ваш вариант сейчас проверю.
Вадим К

Вадим К (статус: Академик), 5 декабря 2008, 19:27 [#4]:

а проще просто поставить RadioGroup. И никаких проблем:)
Галочка "подтверждения прочтения" - вселенское зло.
Dron

Dron (статус: Студент), 5 декабря 2008, 19:29 [#5]:

case a of
1: if o1.Checked then b:=1 else b:= 0;
2: if o2.Checked then b:= 1 else b:= 0 ;
3: if o3.Checked then b:= 1 else b:= 0;
4: if o4.Checked then b:= 1 else b:= 0 ;
end;
можно модернизировать до:
if TCheckBox(FindComponent('o'+IntToStr(a))).Checked then b:=1 else b:=0;
С уважением.
Ученый

Ученый (статус: 8-ой класс), 5 декабря 2008, 19:33 [#6]:

to Dron. Вот это как раз то что я и искал, спасибо!
ANBsoft

ANBsoft (статус: Студент), 5 декабря 2008, 19:38 [#7]:

Один нюанс, если вдруг Е окажется вне пределов (1...4), то в 1 случае В будет неопределено, во втором выдаст ошибку что компонент не найден.
Ученый

Ученый (статус: 8-ой класс), 5 декабря 2008, 19:40 [#8]:

Бубырь Александр Николаевич вы правы, но е точно определена, она имеет значения только от 1 до 4.
Ученый

Ученый (статус: 8-ой класс), 5 декабря 2008, 19:46 [#9]:

То Бубырь Александр Николаевич, проанализировал ваш ответ и понял что в данном случае значение складывается как бы из нажатых RadioButton причем нажатие каждого имеет свою величину, но это не то что мне нужно. Возможно просто я не совсем понятно изложил проблему в вопросе и прошу за это извенение.
ANBsoft

ANBsoft (статус: Студент), 5 декабря 2008, 20:02 [#10]:

b:=Byte(e=(Byte(o1.Checked)+2*Byte(o2.Checked)+3*Byte(o3.Checked)+4*Byte(o4.Checked));
Дает нужный Вам результат?
Ученый

Ученый (статус: 8-ой класс), 5 декабря 2008, 20:11 [#11]:

Проверил и действительно дает нужный мне результат! Если вы дадите коментарий к этому коду буду очень благодарен.
ANBsoft

ANBsoft (статус: Студент), 5 декабря 2008, 21:27 [#12]:

Коментарии:
1) Byte(Boolean) - возвращает 0 при False и 1 при True
2) ((Byte(o1.Checked)+2*Byte(o2.Checked)+3*Byte(o3.Checked)+4*Byte(o4.Checked)) возвращает 1 если o1.Checked, 2 если o2.Checked и так далее
3) b:=Byte(e=(Byte(o1.Checked)+2*Byte(o2.Checked)+3*Byte(o3.Checked)+4*Byte(o4.Checked)); если е равно вычисленному во 2 - вернет 1, иначе 0.
Все.
Преобразование Boolean в Integer, иногда бывает нужно.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:48
Выполнено за 0.03 сек.