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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.09.2014, 12:59   #1
Roma30
Пользователь
 
Регистрация: 10.09.2014
Сообщений: 12
По умолчанию Работа с CheckBox

Например мы вводим в едит цифры, выбираем нужные, жмем на кнопку и он нам высчитывает среднеарифметическое? Как это можно сделать?
Изображения
Тип файла: jpg 18693.jpg (9.3 Кб, 88 просмотров)
Roma30 вне форума Ответить с цитированием
Старый 17.09.2014, 13:05   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ваша задача решается перебором контролов на форме.
Только Вам нужно будет решить одну "маленькую" техническую проблемку - как связаны чекбоксы с Edit'ами.

вариантов много. Начиная от массива связей (какой checknox c каким Edit'ом связана) и заканчивая прописыванием поля TAG в нужных Edit'ах...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.09.2014, 13:12   #3
indexx
Заблокирован
 
Регистрация: 12.09.2014
Сообщений: 544
По умолчанию

Думаю в данном случае нет смысла что-то усложнять, и будет достаточно простых связок if ... then
indexx вне форума Ответить с цитированием
Старый 17.09.2014, 13:41   #4
Roma30
Пользователь
 
Регистрация: 10.09.2014
Сообщений: 12
По умолчанию

пример на один чекбокс не покажешь?
Roma30 вне форума Ответить с цитированием
Старый 17.09.2014, 14:17   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Roma30
пример на один чекбокс не покажешь?
Roma30, Вы к кому обращаетесь?

indexx предлагает такой вариант:

Код:
sum := 0.0;
countSum := 0;
if CheckBox1.Checked then begin
  sum := sum + StrToIntDef(Edit1.Text, 0); {можно StrToFloat, если нужны вещественные числа}
  inc(countSum)
end;

if CheckBox2.Checked then begin
  sum := sum + StrToIntDef(Edit2.Text, 0); {можно StrToFloat, если нужны вещественные числа}
  inc(countSum)
end;

....

if CheckBox4.Checked then begin
  sum := sum + StrToIntDef(Edit4.Text, 0); {можно StrToFloat, если нужны вещественные числа}
  inc(countSum)
end;

if  countSum 
then ShowMessage('Ни одно значение не выбрано, считать нечего!')
else  ShowMessage(' среднеарифметическое = '+FloatToStr( sum / countSum) );
Пример понятен?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.09.2014, 15:12   #6
Roma30
Пользователь
 
Регистрация: 10.09.2014
Сообщений: 12
По умолчанию

Я сделал так:

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
   a,b,c,d,e:real;
begin

if CheckBox1.Checked=True then a:=StrToFloat(Edit1.text) else exit;
if CheckBox2.Checked=True then b:=StrToFloat(Edit2.text) else exit;
if CheckBox3.Checked=True then c:=StrToFloat(Edit3.text) else exit;
if CheckBox4.Checked=True then d:=StrToFloat(Edit4.text) else exit;


e:=(a+b+c+d)/4;
Edit5.text:=FloatToStrF(e,ffFixed,8,2);

end;
Из этого можно что-то сделать дальше?
Roma30 вне форума Ответить с цитированием
Старый 17.09.2014, 15:42   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
if CheckBox1.Checked=True then
1) масло маслянное.. пишите просто:
Код:
if CheckBox1.Checked then ...
2) нельзя использовать переменные не иницилизируя их.
Код:
var
   a,b,c,d,e:real;
begin
  a := 0; b := 0; c := 0; d := 0;
3) Вы решаете задачу: "Найти среднеарифметическое ЧЕТЫРЁХ чисел, для отмеченных - брать значения из Edit, для неотмеченных брать НОЛЬ"

в моём примере среднеарифметическое находится среди отмеченных значений (отметите одно - будет среднее равное этому числу, отметите два, будет (ОдноОтмеченное + ДругоеОтмеченное)/2.

Это разные задачи и будут разные ответы.
Что именно нужно Вам - Вам виднее!

Цитата:
Из этого можно что-то сделать дальше?
Можно. Что именно - не знаю, Вам опять же виднее!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.09.2014, 08:30   #8
Roma30
Пользователь
 
Регистрация: 10.09.2014
Сообщений: 12
По умолчанию

Начал делать по примеру indexx. С Float не проходит, ошибка.
Roma30 вне форума Ответить с цитированием
Старый 18.09.2014, 08:35   #9
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

TCheckBox можно смело присвоить свойству Tag преобразованием типов туда и обратно.
Код:
Edit100500.Tag:= Integer(CheckBox100500);
//---------
if TCheckBox(Edit100500.Tag).Checked
  then begin...
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 18.09.2014, 08:41   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Roma30 Посмотреть сообщение
Начал делать по примеру indexx. С Float не проходит, ошибка.
Ну и где код? Какая ошибка? Надеюсь, не секретная?
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с CheckBox linkoln_7 C# (си шарп) 5 24.03.2013 09:17
Как выполнить функцию в случае нажатия на CheckBox, если данный CheckBox был добавлен через код? PAMAC Microsoft Office Excel 7 21.02.2013 15:33
CheckBox Кристинка89 Общие вопросы Delphi 4 08.05.2012 18:52
CheckBox`ы new player Общие вопросы Delphi 3 15.10.2010 09:32