| 
| 
 | Вопрос # 4 491/ вопрос открыт / | 
 |  Здравствуйте, эксперты!
 Непонятка с Edit`ом.
 StaticText (Txt)  и Memo исправно выдают меняющийся параметр цикла, а Edit тупо сохраняет исходный текст и только в конце цикла соизволил вывалить последнее значение. Самое смешное, что у меня в десятке рабочих программ в Edit`е исправно крутятся счетчики, а тут в тестике - ни с того, ни с сего.
 Приложение:Переключить в обычный режим procedure TForm1.BtnStrtClick(Sender: TObject);var i,j,k : integer  ;s : string ;begin  if EEP.Checked = True then Max := 31 ;  if Flsh.Checked = True then Max := 1023 ;  for i := 0 to Max do    begin s := IntToStr(i) ; Memo1.Lines.Add (s) ;    Txt.Caption := s ; Edit1.Text := s end ;end; 
|  |   Вопрос задал: Толяныч (статус: 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™ (статус: Доктор наук), 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 - это пока еще сложновато для моих довольно-таки серых клеточек, но при необходимости, как говорилось у В.Конецкого "упремся - разберемся".
 Спасибо за просветление мозгов. Если будут репортажи из нашего ПВТ ( бел. Силиконовая долина ) - я тут не при чем, нам и на пенсии хорошо. Сорри за оффтоп, умолкаю.
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |