Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 21.12.2011, 01:55
Harima Hario Harima Hario вне форума
Прохожий
 
Регистрация: 28.02.2011
Сообщения: 27
Репутация: 10
По умолчанию Работа с компонентом 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  
Старый 21.12.2011, 02:13
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Не видно никакого криминала. Попробуй "прошагать" код и смотри, где может вылезти бяка.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #3  
Старый 21.12.2011, 03:05
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Судя по "фейловой" части видео, после STOPPAGE ничего нет. Естественно, что ничего не находится. Проблема, похоже, не здесь. Сложно говорить, не имея всего кода (и, судя по названию проги, внешнего девайса).
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #4  
Старый 21.12.2011, 16:38
Harima Hario Harima Hario вне форума
Прохожий
 
Регистрация: 28.02.2011
Сообщения: 27
Репутация: 10
По умолчанию

Определил, что проблема возникает в одной конкретной строке:
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  
Старый 21.12.2011, 22:00
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Поставь курсор на строку
Код:
if(Pos(substr, s) > 0) then
и запускай программу по F4, передвинь курсор на s и посмотри значение твоей строки. Функция Copy, здесь не причём. Косяк в приходящей строке.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #6  
Старый 22.12.2011, 00:11
Harima Hario Harima Hario вне форума
Прохожий
 
Регистрация: 28.02.2011
Сообщения: 27
Репутация: 10
По умолчанию

Не совсем понял, я только учусь. Разъясните пожалуйста на конкретном примере. Заранее спасибо.
Ответить с цитированием
  #7  
Старый 22.12.2011, 00:18
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Перечитай ещё раз, что написано выше. Надеюсь знаешь, что такое курсор и где находится клавиша F4.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:33.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter