|
Вопрос # 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 - это пока еще сложновато для моих довольно-таки серых клеточек, но при необходимости, как говорилось у В.Конецкого "упремся - разберемся".
Спасибо за просветление мозгов. Если будут репортажи из нашего ПВТ ( бел. Силиконовая долина ) - я тут не при чем, нам и на пенсии хорошо. Сорри за оффтоп, умолкаю.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|