Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 491

/ вопрос открыт /

Здравствуйте, эксперты!

Непонятка с Edit`ом.
StaticText (Txt) и Memo исправно выдают меняющийся параметр цикла, а Edit тупо сохраняет исходный текст и только в конце цикла соизволил вывалить последнее значение. Самое смешное, что у меня в десятке рабочих программ в Edit`е исправно крутятся счетчики, а тут в тестике - ни с того, ни с сего.

Приложение:
  1. procedure TForm1.BtnStrtClick(Sender: TObject);
  2. var i,j,k : integer ;
  3. s : string ;
  4. begin
  5. if EEP.Checked = True then Max := 31 ;
  6. if Flsh.Checked = True then Max := 1023 ;
  7. for i := 0 to Max do
  8. begin s := IntToStr(i) ; Memo1.Lines.Add (s) ;
  9. Txt.Caption := s ; Edit1.Text := s end ;
  10. end;
  11.  


Толяныч Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Толяныч (статус: 4-ый класс)
Вопрос отправлен: 7 августа 2010, 16:56
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 9; последнее сообщение — 8 августа 2010, 21:41; участников в обсуждении: 4.
Ерёмин А.А.

Ерёмин А.А. (статус: *Администратор), 7 августа 2010, 17:25 [#1]:

А
Application.ProcessMessage
кто будет делать?
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 8 августа 2010, 06:37 [#2]:

и во всех программах из десятка работающих используются подобные конструкции

Цитата (Толяныч):

if EEP.Checked = True
?
Конечно на работоспособность программы это не влияет, но выглядит как-то совсем уж по начинающему
Толяныч

Толяныч (статус: 4-ый класс), 8 августа 2010, 12:43 [#3]:

Ув. Андрей Мережников, я действительно в Дельфи и вообще в ООП чайниковат, несмотря на четвертьвековой стаж в ремесле. Но раньше работал на БЭСМ-6,IBM360,СМ-4, потом перешел на микроконтроллеры, так что Дельфою занимаюсь недавно. В корифеи в этой области выйти уж не суждено, я отношусь к этому без трагизма, мне бы к моим микроконтроллерным устройствам ( в них я далеко не кофейник ) получить доступ по USB - и это уже работает, но вот начал обкатывать новую версию прошивок - и заколбасило, фрагменты из работавших прог не работают. А чем if EEP.Checked = True не катит? Как бы напис`ал профи? if EEP.Checked - и все, это уже и есть логическое выражение, хоть и состоит из одной boolean переменной, но результат выражения True или False определяет поведение if?
Это я понимаю, if True=True действительно не образец стиля.
Насчет Application.ProcessMessage.... Я эту фразу перенес из примеров для USB в рабочие программы, и там все нормально, но употребляю ее, как шаманское заклинание, не очень понимая смысл. Мой процесс отправляет кому-то ( операционке ) Message?
Просто Message без всякого содержания - типа "я здесь и пока живой" ? Но ведь у меня нет обращений к внешним устройствам, и в остальных 2 каналах вывода ( Memo, StaticText ) инфа отображается исправно?
Подозреваю, что логикой тут ничего не добьюсь, и как говорил Попандопуло, "дави на клавиши и не задавай глупых вопросов" - делай как сказано и не задумывайся.
Еще меня гнобит одна непонятка с выходом из цикла, если сам не разберусь, опять буду просить помощь клуба.
min@y™

min@y™ (статус: Доктор наук), 8 августа 2010, 12:59 [#4]:

Цитата (Толяныч):

А чем if EEP.Checked = True не катит? Как бы напис`ал профи?

Я бы написал if (EEP.Checked) then ...

Цитата (Толяныч):

Насчет Application.ProcessMessage.... Я эту фразу перенес из примеров для USB в рабочие программы, и там все нормально, но употребляю ее, как шаманское заклинание, не очень понимая смысл. Мой процесс отправляет кому-то ( операционке ) Message?

Андрюха пропустил одну буковку.
Application.ProcessMessages();
Этот метод инициирует принудительную обработку сообщений, накопленных в очереди, таких как перерисовка, таймер, клики мыши, клава и прочая байда. Если этого не делать, то создаётся впечатление, что программа повисла - именно тогда Windows пишет в заголовке окна фразу "Программа не отвечает".

Цитата (Толяныч):

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

Не стесняйся.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 8 августа 2010, 15:38 [#5]:

на СМ-4 работать не довелось :-)) Начинал с БК-0010, ДВК-2, ЕС-1840 тоже лет 25 назад. Я не говорил, что конструкция "не катит" - она вполне работоспособна. Можно записывать ее короче вот и все. Если из цикла нужен выход по условию, то лучше (на мой взгляд) использовать конструкции while do или repeat until.
Толяныч

Толяныч (статус: 4-ый класс), 8 августа 2010, 16:50 [#6]:

ДВК-2 (3,4) - это тоже СМ-4 (PDP-11), только маленькие :-) С ностальгическим всхлипом, мучаемый Дельфою, вспоминаю кристальную прозрачность и детскую простоту операционки РАФОС (клон RT-11, кажется), когда ты - хозяин, а ОС - твоя верная и ппредупредительная служанка, а не теперь, когда ты - маленький винтик в лабиринте Виндовоза и компиляторов.
По делу : добавил - помогло ! По ходу устранилась еще одна бага : у меня в цикле была строчка
if (MaxV<32) or (Flag<1) then Exit;
Первое условие - чтобы цикл не запустился при невыбранных чекбоксах ( вы сейчас говорите, что его надо было до начала цикла - я протелепатил :-). Второе условие - кнопкой Стоп я предустановленный в 1 флаг обнулял для экстренного прерывания цикла ( в норме цикл дожен полностью отработать по всем блокам флеши или EEPROM ). Так вот: кнопка Стоп не работала.
Если я в отладчике ставил на ней брекпойнт и в процессе цикла тискал кнопку Стоп, на останов выходил, но... после полного окончания цикла. Ап-мессагами вылечилось и это.
Так что теперь буду пихать Ap... куда надо и куда не надо, не задумываясь об логике: так надо - и точка! Преувеличиваю, конечно :-)
Спасибо клубу за восстановленную веру в Дельфи и себя.

Странно, но когда я ставил Application.ProcessMessages в обработчик кнопки Стоп - улучшения не наступало :-(

Лирическое отступление : только что сходил на "железячный" форум, там тоже много толковых и отзывчивых к чужим проблемам людей, но пара безнаказанных хамов и флудеров отбивает охоту туда заглядывать. Надеюсь, железная рука Андрея Е. такие поползновения, аки буде, придушит в зародыше.
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 8 августа 2010, 17:07 [#7]:

Цитата (Толяныч):

Странно, но когда я ставил Application.ProcessMessages в обработчик кнопки Стоп - улучшения не наступало :-(


Это вполне объяснимо. Application.ProcessMessages надо ставить в тело длительного цикла, а не в обработчик нажатия кнопки. При выполнении цикла Delphi откладывает обработку внешних сообщений (в том числе и обработку нажатия клавиш, мыши и т.п.) до выхода из цикла. Особенно это заметно на длительных циклах. Если в цикле есть ProcessMessages, то это дает команду просмотреть внешние события и обработать их. Куда не надо - вставлять не надо (извините за тавтологию). Либо, как вариант, выполнение длительных циклов выносить в отдельную нить (Thread).
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 8 августа 2010, 17:10 [#8]:

по поводу ДВК-2 - меня лично напрягало отсутствие "винчестера" и необходимость постоянно таскаться с дискетами 5.25". Хотя, конечно, это было лучше, чем кассетный магнитофон для ZX-Spectrum :-))
Толяныч

Толяныч (статус: 4-ый класс), 8 августа 2010, 21:41 [#9]:

В ДВК-3 винчестер уже был: размером с булку хлеба, аж на целых 10МБ, правда, штатно системой форматировался так, что были видны только 5 :-)
Что до Thread - это пока еще сложновато для моих довольно-таки серых клеточек, но при необходимости, как говорилось у В.Конецкого "упремся - разберемся".
Спасибо за просветление мозгов. Если будут репортажи из нашего ПВТ ( бел. Силиконовая долина ) - я тут не при чем, нам и на пенсии хорошо. Сорри за оффтоп, умолкаю.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:39
Выполнено за 0.02 сек.