|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Работа с компонентом TMemo
Помогите разрешить ситуацию.
Коротко о том, что делает процедура: В компоненте TMemo при появлении ключевого слова STOPPAGE копируется три позиции (цифры) после самого слова. В нашем случае: STOPPAGE000016000 в результате следующей выборки мы должны получить значение «000», после умножить это значение на 255 и вывести на экран результат. Код:
procedure SetMinMax(s:string); var tmp,substr,firstb:string; var secm:integer; var firstas:Integer; begin substr:='STOPPAGE'; if(not maxFound) then begin if(Pos(substr, s) > 0) then begin firstb := Copy(s, Pos(substr, s) + 8, 3); firstas := StrToInt(firstb); secm := firstas*255; showmessage(IntToStr(secm)); end; end; end; Все с виду просто, но у меня в большей половине случаев происходит сбой… для наглядности сам сбой и нормальную рабочую ситуацию я отобразил в видео: http://www.youtube.com/watch?v=i0xsQsopFCQ Дело не в железе 100% если закоментить несколько строк в процедуре - все работает нормально... |
#2
|
||||
|
||||
Не видно никакого криминала. Попробуй "прошагать" код и смотри, где может вылезти бяка.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#3
|
||||
|
||||
Судя по "фейловой" части видео, после STOPPAGE ничего нет. Естественно, что ничего не находится. Проблема, похоже, не здесь. Сложно говорить, не имея всего кода (и, судя по названию проги, внешнего девайса).
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#4
|
|||
|
|||
Определил, что проблема возникает в одной конкретной строке:
firstb := Copy(s, Pos(substr, s) + 8, 3); При следующем варианте процедуры все работает нормально Код:
procedure SetMinMax(s:string); var tmp,substr,firstb:string; var secm:integer; var firstas:Integer; begin substr:='STOPPAGE'; if(not maxFound) then begin if(Pos(substr, s) > 0) then begin // firstb := Copy(s, Pos(substr, s) + 8, 3); // showmessage(firstb); end; end; end; http://www.youtube.com/watch?v=Wnxu3nEcpPw В открытом виде строки обнаружил кое-что интересное. Сам вариант процедуры: Код:
procedure SetMinMax(s:string); var tmp,substr,firstb:string; var secm:integer; var firstas:Integer; begin substr:='STOPPAGE'; if(not maxFound) then begin if(Pos(substr, s) > 0) then begin firstb := Copy(s, Pos(substr, s) + 8, 3); showmessage(firstb); end; end; end; http://www.youtube.com/watch?v=jd7-Xpdwc9k То есть в самом начале вместо 000 копирует пустоту, а уже после – идут долгожданные 000. Подскажите тогда как реализовать проверку внутри процедуры, на количество копируемых символов… скажем если скопированный кусок не равен трем любым символам – ждем какое-то время и пробуем скопировать еще раз… мне кажется это должно решить проблему. |
#5
|
||||
|
||||
Поставь курсор на строку
Код:
if(Pos(substr, s) > 0) then Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#6
|
|||
|
|||
Не совсем понял, я только учусь. Разъясните пожалуйста на конкретном примере. Заранее спасибо.
|
#7
|
||||
|
||||
Перечитай ещё раз, что написано выше. Надеюсь знаешь, что такое курсор и где находится клавиша F4.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |