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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2011, 19:35   #1
GeorgiyS
Пользователь
 
Регистрация: 07.12.2011
Сообщений: 10
По умолчанию Программа на делфи. Нужно заменить повторяющиеся элементы

Есть программа. Нужно поменять на что-то повторяющиеся элементы в баттон-кликах с 1 по 5. Вот часть кода на примере кнопки 1.
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  begin
    CheckBox3.Checked := true
  end;
  begin
    if CheckBox3.Checked = true
    then
      begin
        CheckBox12.Checked := false;
        CheckBox13.Checked := true;
        CheckBox4.Checked := false;
      end;
  end;
  begin
    if  (CheckBox13.Checked = true) and (CheckBox14.Checked = true) and (CheckBox15.Checked = true)
    then CheckBox20.Checked := false
    else CheckBox20.Checked := true
  end;
  begin
    if CheckBox20.Checked = true
    then CheckBox21.Checked := false
    else CheckBox21.Checked := true
  end;
  begin
    if CheckBox21.Checked = true
    then Shape1.Brush.Style := bsSolid
    else Shape1.Brush.Style := bsDiagcross
  end;
  begin
    if (CheckBox12.Checked = true) or (CheckBox16.Checked = true) or (CheckBox17.Checked = true) or (CheckBox19.Checked = true)
    then CheckBox22.Checked := true
    else CheckBox22.Checked := false
  end;
  begin
    if CheckBox22.Checked = true
    then Shape2.Brush.Style := bsSolid
    else Shape2.Brush.Style := bsDiagcross
  end;
end;
вот повторяющийся элемент во всех 5 кнопках. Как его можно заменить чтобы упростить блок-схему?
Код:
  begin
    if  (CheckBox13.Checked = true) and (CheckBox14.Checked = true) and (CheckBox15.Checked = true)
    then CheckBox20.Checked := false
    else CheckBox20.Checked := true
  end;
  begin
    if CheckBox20.Checked = true
    then CheckBox21.Checked := false
    else CheckBox21.Checked := true
  end;
  begin
    if CheckBox21.Checked = true
    then Shape1.Brush.Style := bsSolid
    else Shape1.Brush.Style := bsDiagcross
  end;
  begin
    if (CheckBox12.Checked = true) or (CheckBox16.Checked = true) or (CheckBox17.Checked = true) or (CheckBox19.Checked = true)
    then CheckBox22.Checked := true
    else CheckBox22.Checked := false
  end;
  begin
    if CheckBox22.Checked = true
    then Shape2.Brush.Style := bsSolid
    else Shape2.Brush.Style := bsDiagcross
  end;
GeorgiyS вне форума Ответить с цитированием
Старый 16.12.2011, 13:56   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я Вам так скажу. я честно минут пять пытался понять, что у Вас дано и что нужно получить... но так, к сожалению, и не понял. Как связаны баттоны, чекбоксы и шейпы, что Вы пытаетесь сделать - непонятно..

Может быть сформулируете Ваше задание более конкретно?
Что дано, что нужно получить...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.12.2011, 20:23   #3
GeorgiyS
Пользователь
 
Регистрация: 07.12.2011
Сообщений: 10
По умолчанию

в общем есть программа, в ней 5 кнопок и 2 лампы. Программа - графический эмулятор схемы на логических элементах. При нажатии кнопки меняются состояния триггеров и лампочки загораются или нет. Логические уровни реализованы с помощью checkbox(true = 1, false = 0), лампы с помощью shape1 и shape2. При нажатии любой кнопки происходит присвоение соответствующей части схемы единицы
Код:
begin
CheckBox3.Checked := true
end;
Далее если эта часть схемы равна единице то она меняет некоторые входы и выходы
Код:
begin
    if CheckBox3.Checked = true
    then
      begin
        CheckBox12.Checked := false;
        CheckBox13.Checked := true;
        CheckBox4.Checked := false;
      end;
  end;
И так идет до ламп. Но во всех 5 нажатиях кнопки есть часть схемы которая работает одинаково
Код:
begin
    if  (CheckBox13.Checked = true) and (CheckBox14.Checked = true) and (CheckBox15.Checked = true)
    then CheckBox20.Checked := false
    else CheckBox20.Checked := true
  end;
  begin
    if CheckBox20.Checked = true
    then CheckBox21.Checked := false
    else CheckBox21.Checked := true
  end;
  begin
    if CheckBox21.Checked = true
    then Shape1.Brush.Style := bsSolid
    else Shape1.Brush.Style := bsDiagcross
  end;
  begin
    if (CheckBox12.Checked = true) or (CheckBox16.Checked = true) or (CheckBox17.Checked = true) or (CheckBox19.Checked = true)
    then CheckBox22.Checked := true
    else CheckBox22.Checked := false
  end;
  begin
    if CheckBox22.Checked = true
    then Shape2.Brush.Style := bsSolid
    else Shape2.Brush.Style := bsDiagcross
  end;
вот её нужно заменить на процедуру(?). Пробывал сам но выдавало ошибки. Получалось процедура вызывает процедуру. Но чет не заработало.
Может еще как нибудь можно реализовать это? Или как правильно написать процедуру в процедуре?
Заменить одинаковые куски кода нужно для упрощения блок-схемы.
Если не понятно с чекбоксами и шэйпами и баттонами, можно не брать это в расчет и подумать как вообще можно заменить одинаковые части кода для упрощения блок-схемы.
GeorgiyS вне форума Ответить с цитированием
Старый 18.12.2011, 16:40   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
При нажатии кнопки меняются состояния триггеров и лампочки загораются или нет.
Знаешь, по-моему решение такой задачи должно выглядеть в виде дерева.
Например есть один класс - переключатель, содержащий в себе список обьектов, с которым он связан, те обьекты в свою очередь содержат список объектов, которые переключают они.
Уверен что тебе стоит пересмотреть свою реализацию кардинально, построив ее на дереве из динамических списков.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.12.2011, 16:42   #5
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Цитата:
Может быть сформулируете Ваше задание более конкретно?
Что дано, что нужно получить...
вот оно скорее всего
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 18.12.2011, 16:48   #6
GeorgiyS
Пользователь
 
Регистрация: 07.12.2011
Сообщений: 10
По умолчанию

переделывать, к сожалению, времени нет(
как вызвать процедуру из процедуры?
Код:
procedure TForm1.ololo(Sender: TObject);
begin
  begin
    if  (CheckBox13.Checked = true) and (CheckBox14.Checked = true) and (CheckBox15.Checked = true)
    then CheckBox20.Checked := false
    else CheckBox20.Checked := true
  end;
  begin
    if CheckBox20.Checked = true
    then CheckBox21.Checked := false
    else CheckBox21.Checked := true
  end;
  begin
    if CheckBox21.Checked = true
    then Shape1.Brush.Style := bsSolid
    else Shape1.Brush.Style := bsDiagcross
  end;
  begin
    if (CheckBox12.Checked = true) or (CheckBox16.Checked = true) or (CheckBox17.Checked = true) or (CheckBox19.Checked = true)
    then CheckBox22.Checked := true
    else CheckBox22.Checked := false
  end;
  begin
    if CheckBox22.Checked = true
    then Shape2.Brush.Style := bsSolid
    else Shape2.Brush.Style := bsDiagcross
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  begin
    CheckBox3.Checked := true
  end;
  begin
    if CheckBox3.Checked = true
    then
      begin
        CheckBox12.Checked := false;
        CheckBox13.Checked := true;
        CheckBox4.Checked := false;
      end;
  end;
  begin
    TForm1.ololo(Sender: TObject);
  end;	
end;
на что-то ругается :о
Вложения
Тип файла: rar kursach 2.2.rar (316.2 Кб, 9 просмотров)
GeorgiyS вне форума Ответить с цитированием
Старый 18.12.2011, 18:23   #7
GeorgiyS
Пользователь
 
Регистрация: 07.12.2011
Сообщений: 10
По умолчанию

может тему перенести в раздел "компоненты delphi"?
GeorgiyS вне форума Ответить с цитированием
Старый 19.12.2011, 14:57   #8
GeorgiyS
Пользователь
 
Регистрация: 07.12.2011
Сообщений: 10
По умолчанию

up up up up
GeorgiyS вне форума Ответить с цитированием
Старый 19.12.2011, 21:31   #9
GeorgiyS
Пользователь
 
Регистрация: 07.12.2011
Сообщений: 10
По умолчанию

никто не знает?
GeorgiyS вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
в массиве все максимальные элементы заменить первым элементом, а все минимальные элементы заменить последним элементом Валерия2701 Паскаль, Turbo Pascal, PascalABC.NET 1 12.10.2011 15:49
нужно подсчитать повторяющиеся значения Mskoshka Microsoft Office Excel 4 06.06.2011 12:49
Повторяющиеся элементы в двумерном массиве. rusasha Паскаль, Turbo Pascal, PascalABC.NET 1 03.05.2010 14:46
Заменить повторяющиеся символы(которые повторяются два или три раза) в тексте пробелами. Майки Паскаль, Turbo Pascal, PascalABC.NET 3 12.01.2009 17:45
Повторяющиеся элементы массива Stanislav Общие вопросы Delphi 10 23.05.2008 12:31