| 
| 
 | Вопрос # 2 160/ вопрос открыт / | 
 |  Доброго времени суток, уважаемые эксперты!У меня на форме 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
 //надеюсь умеешь это делать,
 // дальше все просто
 Приложение:Переключить в обычный режим procedure TForm1.o1Click(Sender: TObject);begin  if (TRadioButton(sender).Checked) then  begin  if (TRadioButton(sender).name='o1')  then         if (e=1) then         begin         b:=1;         exit;         end         else b:=0;  if (TRadioButton(sender).name='o2')  then         if (e=2) then         begin          b:=1;          exit;          end          else b:=0;  if (TRadioButton(sender).name='o3')  then         if (e=3) then         begin          b:=1;          exit;          end          else b:=0;  if (TRadioButton(sender).name='o1')  then        if (e=4) then        begin          b:=1;          exit;          end          else b:=0;  end;end;
|  | Ответ отправил: Anderson N.N (статус: 2-ой класс)Время отправки: 6 декабря 2008, 15:34
 Оценка за ответ: 4
 Комментарий к оценке: Не рационально! |  
 Мини-форум вопросаВсего сообщений: 12; последнее сообщение — 5 декабря 2008, 21:27; участников в обсуждении: 4. 
|   | Ученый (статус: 8-ой класс), 5 декабря 2008, 19:19 [#1]:Бубырь Александр Николаевич, что то я неувидил зависимости от переменной е? |  
|   | 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 (статус: Студент), 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 (статус: Студент), 5 декабря 2008, 19:38 [#7]:Один нюанс, если вдруг Е окажется вне пределов (1...4), то в 1 случае В будет неопределено, во втором выдаст ошибку что компонент не найден. |  
|   | Ученый (статус: 8-ой класс), 5 декабря 2008, 19:40 [#8]:Бубырь Александр Николаевич вы правы, но е точно определена, она имеет значения только от 1 до 4. |  
|   | Ученый (статус: 8-ой класс), 5 декабря 2008, 19:46 [#9]:То Бубырь Александр Николаевич, проанализировал ваш ответ и понял что в данном случае значение складывается как бы из нажатых RadioButton причем нажатие каждого имеет свою величину, но это не то что мне нужно. Возможно просто я не совсем понятно изложил проблему в вопросе и прошу за это извенение. |  
|   | 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 (статус: Студент), 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, иногда бывает нужно.
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |