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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.10.2017, 08:49   #1
Ambros
Пользователь
 
Регистрация: 20.09.2012
Сообщений: 17
По умолчанию Вычисление с помощю цикла

Здравствуйте, У меня такой вопрос. Есть несколько качеств, каждое качество вычисляется путем перемножения Edit и сомбобокса,а ответ идет в label.
Каждое качества имеет по edit, сомвовох и label. Вот код для вычисления одного из качеств. Суть вопроса состоит в том как сделать все это через цикл, а не заниматься копипастом?

procedure TForm6.Button1Click(Sender: TObject);
var a,b,c:real;
begin
a:=strtofloat(edit1.Text);
b:=a*strtofloat(combobox1.items[combobox1.ItemIndex]);
label6.Caption:=floattostrf(b,ffFix ed,0,2);
Ambros вне форума Ответить с цитированием
Старый 19.10.2017, 09:26   #2
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Ну можно создать для каждого качества свои контроли со своими именами.
например :
свойство 1 = prop1, label_prop1, edit_prop1, combox_prop1
свойство n = propn, label_propn, edit_propn, combox_propn

затем в цикле произвести поиск нужных контролов на форме и обработать данные из них.

поиск наверное как то так будет выглядеть:
Код:
function MyFindChildControl(AControl: TControl; const AClassName: string): TControl;
var
  I: Integer;
begin
  Result := nil;
  if Assigned(AControl) then
    for I := 0 to AControl.ControlCount - 1 do
      if CompareText(AControl.Controls[i].ClassName, AClassName) = 0 then
      begin
        Result := AControl.Controls[i];
        Exit;
      end;
end;
Могу ошибаться, на делфи давно уже не пишу.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 19.10.2017, 09:54   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Несколько - это сколько? Наверняка лучше использовать какой-то табличный объект. Да и имена типа edit1 это бутерброд, который всегда падает маслом вниз ))
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 19.10.2017, 09:58   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

согласен с советом WorldMaster, можно переименовать контролы так, чтобы они были связаны именами.

допустим, что они называются
Для Свойства1: edit1 combobox1 label_prop1
Для Свойства2: edit2 combobox2 label_prop2
и т.д.

тогда все их можно легко вычислить в таком цикле:
Код:
var MyEdit, MyCombo, MyLabel : TControl;
  mc : TCombobox;
  i : integer;
begin
   i:=1;
   MyEdit := FindComponent('Edit'+IntToStr(i));
   while Assigned(MyEdit) do begin
        MyCombo := FindComponent('ComboBox'+IntToStr(i));
        MyLabel := FindComponent('label_prop'+IntToStr(i));
        if Assigned(MyCombo) and Assigned(MyLabel) then begin
            mc := TCombobox(MyCombo);
            TLabel(MyLabel).Caption := FloatToStrF( StrToFloat(TEdit(MyEdit).Text) * StrToFloat(mc.items[mc.ItemIndex]) ,ffFixed,0,2);
        end;
       Inc(i)
   end;
end;
p.s. писал в браузере, возможны опечатки...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.10.2017, 10:12   #5
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Если таких комбинаций реально много, я бы не поленился написать свой Control, который будет интегрировать кнопку, метку, комбо и эдит.

Но можно с этим не заморачмваться, а просто создавать нужные кнопку, метку, комбо и эдит динамически, одновременно занося их в массив (или в TList, кому как больше нравится). При этом у кнопки выставить значение Tag, равное индексу в массиве. Это даст возможность в обработчике кнопки взять этот Tag и сразу получить доступ к метке, комбо и эдиту по этому индексу.
Black Fregat вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Использование оператора цикла c пред- или постусловием (вычисление суммы ряда) replaced Помощь студентам 1 30.01.2015 18:51
избавиться от цикла for или ускорить вычисление AlexVI Visual C++ 0 09.02.2012 16:06
алгоритмы нахождения эйлерова цикла и гамильтонова цикла в графе. Necare Помощь студентам 0 15.11.2011 18:26
Вычисление суммы членов ряда, используя оператора цикла с предусловием WHILE SeeJay Помощь студентам 3 17.02.2010 21:30
Переход от цикла к циклу не выходя из цикла (без multithreading) Qousio Общие вопросы C/C++ 2 16.05.2009 09:27