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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.10.2012, 21:57   #1
desytov
 
Регистрация: 02.10.2012
Сообщений: 4
По умолчанию сокращение кода

добрый вечер. помогите сократить количество строк в коде.
идея такая есть n-ное количество сцепок из 3х Edit'ов
типа:
Edit1 / Edit2 = Edit3
при большом количестве таких сцепок код получается очень большой.

спасибо заранее
Вложения
Тип файла: rar сцепка.rar (3.1 Кб, 14 просмотров)
desytov вне форума Ответить с цитированием
Старый 02.10.2012, 22:35   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Во-первых - убрать все Form1. , без них лучше даже.
Во-вторых - Вы уже поставили всем эдитам одно событие - поставьте теперь всем эдитам в одной "сцепке" одно событие, а в коде различайте какой именно эдит вызвал событие (у вас для 2 эдитов из "сцепки" оно почти одинаково, кроме "вызывавшего " эдита, правда в 1й "сцепке" почему-то нарушено это, там в обработчике первого - эдит2 а в обработчике второго - эдит1) вот так:
Код:
procedure TForm1.Edit4Change(Sender: TObject);
var
  Edit: TEdit absolute Sender;
begin  
  if Edit.Text <> '' then
  Edit6.Text := FloatToStr(StrToFloat(Edit4.Text)/StrToFloat(Edit5.Text));
end;
Я ведь так понимаю, код отвечает за то, чтобы сразу при вводе в эдиты вычислялось значение частного.
В-третьих - учесть деление на 0 (плюс, наверное, учесть возможность/невозможность вставки минуса).

При должном понимании процесса, который требуется реализовать - можно сделать унификацию ещё больше. Альтернативно - можно покопать в сторону динамического создания компонент. Также можно попробовать задействовать TStringGrid, вместо кучи эдитов, будет удобнее, хотя код, наверное, не станет меньше.

Ну и самое эдакое - назвать такой код большим просто язык не поворачивается )) даже если будет 100 сцепок (а 300 эдитов на форме расположить - надо огромное терпение) то кода будет всего на 600-700 строк
phomm вне форума Ответить с цитированием
Старый 02.10.2012, 22:50   #3
desytov
 
Регистрация: 02.10.2012
Сообщений: 4
По умолчанию

Цитата:
Во-первых - убрать все Form1. , без них лучше даже
уберу.

Цитата:
назвать такой код большим просто язык не поворачивается
под большим я подразумевал слишком много повторяющихся элементов.

спасибо за подсказку.

всё отлично работает. спасибо

Последний раз редактировалось artemavd; 03.10.2012 в 08:18.
desytov вне форума Ответить с цитированием
Старый 02.10.2012, 23:14   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну есть идеи, как можно сократить код...
например, использовать (получать и анализировать) порядковые номера в именах Edit'ов. пример, если надо, напишу.
Недостаток: если случайно/специально переименовать любой edit в "сцепке" - всё "посыплется"...

можно в тех же целях воспользоваться полем tag (у первой "сцепки" проставить tag соответственно: 1 2 3
у второй "сцепки" - 4 5 6 и т.д.
пример, если надо, напишу.


А почему бы Вам не воспользоваться StringGrid ?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.10.2012, 06:46   #5
desytov
 
Регистрация: 02.10.2012
Сообщений: 4
По умолчанию

Цитата:
А почему бы Вам не воспользоваться StringGrid ?
StringGrid вроде не позволяет ручной ввод данных в таблицу

сделал в таком варианте. осталось избавиться от деления на 0.

Код:
procedure TForm1.Edit1Change(Sender: TObject);
var
  Edit: TEdit absolute Sender;
begin
  if (Edit1.Text <> '') and (Edit2.Text <> '') then
  Edit3.Text := FloatToStr(StrToFloat(Edit1.Text)/StrToFloat(Edit2.Text));
end;
хотел заменить это всё таблицей, но не знаю нужного компонента (((

Последний раз редактировалось artemavd; 03.10.2012 в 08:17.
desytov вне форума Ответить с цитированием
Старый 03.10.2012, 07:27   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
StringGrid вроде не позволяет ручной ввод данных в таблицу
с чего это вдруг?! Позволяет!
Тольок в его опциях включите разрешение редактировать данные!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.10.2012, 08:19   #7
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Serge_Bliznykov, только я один вижу, как пользователь устраивает чат в теме??
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оптимизация (сокращение) кода решения задачи #2 c acmp.ru - нахождение суммы целых чисел от 1 до N Serge_Bliznykov Помощь студентам 31 23.08.2014 22:35
Сокращение кода. Eldrich JavaScript, Ajax 0 07.09.2011 20:01
Функции, сокращение кода Neolit1819 Помощь студентам 0 31.05.2011 08:48
Оптимизация и сокращение кода (if + сдвиг) Alex Cones Общие вопросы Delphi 2 06.04.2010 21:37
Сокращение if AxenicX Общие вопросы C/C++ 2 07.11.2009 16:08