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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.08.2015, 19:22   #11
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Сообщений: 353
По умолчанию

То что вы описали практически невозможно сделать в таком виде.
Даже если играться с флагами и Application.ProcessMessages - получится глючное недоразумение.

Как выглядит ТЗ целиком?
ResourceSpace вне форума Ответить с цитированием
Старый 31.08.2015, 08:49   #12
fanlis
Пользователь
 
Регистрация: 13.05.2007
Сообщений: 60
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
вы хотите
ВЫПОЛНИТЬ остановку внутри процедуры без остановки.
а это невозможно.
процедуру можно остановить если
есть другая процедура которая ее может запустить снова (это будут параллельные процессы) но это опять ПЕРЕДЕЛКА. и ОПЯТЬ надо будет править ваш "большой код" чтобы он имел возможность остановки.
Я вас понял. Просто надеялся, что может можно как-то сделать, не трогая код. В принципе действительно просто разбить процедуры на части, как было описано.
Цитата:
Сообщение от DIONISKA Посмотреть сообщение
Ps: первоначально это случаем не было консольным приложением?
не, обычное, с формой. Просто так сделано.
Цитата:
Сообщение от ResourceSpace Посмотреть сообщение
Как выглядит ТЗ целиком?
Написали программу, основная функция которой разного рода расчеты и вывод графиков. Воткнули Memo и подряд в него выводят всю информацию: информацию по этапам расчетов, результаты, разные вопросы, указания ввести дополнительные данные и проч. По ходу дела вместе с сообщениями появляются панели с кнопками, эдитам и т.д. А вся информация и вопросы идут в Memo. Вот решили переделать, чтобы инфа шла не сплошным текстом, а отдельными сообщениями. А мне не хочется ковыряться в коде и переделывать его, думал, может как-то проще можно.
Думаю, что остановлюсь на разбивке процедур на части.
fanlis вне форума Ответить с цитированием
Старый 31.08.2015, 13:54   #13
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

чтобы было меньше проблем с переменными, они ведь были объявлены ОДИН раз в начале большо-о-о-й процедуры (надеюсь что там, а не глобальные переменные).

Сделайте класс вычислениЯ.
в котором будут
1) набор тех процедур вычислений (ЭТАПОВ), про которые мы уже говорили.
2) переменные (значения) необходимые для хранения промежуточных данных (которые БУДУТ нужны при переходе от одноЙ процедуры(этапа) к другой процедуре(этапу)
3) настроечные данные, получаемые путем уточнения задачи.
Цитата:
разные вопросы, указания ввести дополнительные данные и проч. По ходу дела вместе с сообщениями появляются панели с кнопками, эдитам и т.д.
но не делайте в этом классе НИКАКОГО ввода/вывода.
Все что нужно вывести или наоборот ввести(заполнить нужные переменные) должно быть снаружи. ДО запуска(!!) ИЛИ ПОСЛЕ выполнения(!!) каких либо процедур(этапов).
В этом случае ПРИ НЕОБХОДИМОСТИ(!) вы легко сможете ОБЪЕДИНЯТЬ этапы (просто последовательный вызов двух и более процедур(!)
Да сейчас такой необходимости нет, но тот кто писал большую процедуру, тоже не предвидел необходимости разделения.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 31.08.2015 в 14:05.
evg_m вне форума Ответить с цитированием
Старый 31.08.2015, 14:22   #14
fanlis
Пользователь
 
Регистрация: 13.05.2007
Сообщений: 60
По умолчанию

Хорошо, спасибо. Посмотрим, что у меня получился.
fanlis вне форума Ответить с цитированием
Старый 31.08.2015, 15:01   #15
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

для контроля и самопроверки можете воспользоваться следующим тезисом.

Ваша имеющая большая процедура, должна сохранять работоспособность (и правильность вычислений) при замене ВСЕХ имеющихся блоков вычислений на соответствующих вызов этапов "нового" класса, а ВЕСЬ ввод-вывод можно и нужно оставить в ней.(с заменой переменных(!) на соответствующие данные из класса).
т.е. в процедуре никаких переменных для хранения данных. допустимы только те переменные, которые нужны при преобразовании данных для вывода (или ввода).
вроде этого
Код:
procedure superCalc;
var
  s: string;
begin
  calc.Run1;
  s:=inttostr(calc.rez);
            showmessage('rez1='+s);
  calc.Run2;
  s:=floattostr(calc.rez2);
            showmessage('rez2='+s);
end;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нет вывода строки на экран ДЕД_МАЗАЙ Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 23.11.2014 19:58
с++ рекурсивная функция вывода на экран строки в обратном порядке archil Помощь студентам 1 26.05.2014 15:10
Ожидание завершения DrBAXA Общие вопросы Delphi 8 26.01.2013 21:42
мультипоточное ожидание Fun_tick C# (си шарп) 5 05.03.2012 15:00
Контроллер для вывода "бегущей строки" на светодиодные табло HellMercenariess Компьютерное железо 4 20.07.2010 03:51