Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.08.2017, 10:29   #1
woziti
Пользователь
 
Регистрация: 09.08.2017
Сообщений: 10
По умолчанию странная проблема - после цикла не выполняется код

Добрый день, есть код, элементарный:
Код:
Procedure SendListTrabnsferPower(hash:String);
var
temp: TStrings;
i: Integer;
begin
   showmessage(hash);
   temp:=TStringlist.Create;
   temp.Add('[transferpower:listupdate]');

     for I := 0 to TransferPowerForm.TransferList.Items.Count-1 do
      if TransferPowerForm.TransferList.Items.Item[i].Caption=hash then
      begin
        temp.Add('tansfpower:stringnext');
        temp.Add(TransferPowerForm.TransferList.Items.Item[i].SubItems.Strings[1]);
        temp.Add(TransferPowerForm.TransferList.Items.Item[i].SubItems.Strings[2]);
        temp.Add(TransferPowerForm.TransferList.Items.Item[i].SubItems.Strings[3]);
        temp.Add(TransferPowerForm.TransferList.Items.Item[i].SubItems.Strings[4]);
      end;

   showmessage(hash);
     DataModule342.TerminalToCenter.Socket.Connections[GetConnectCenter(hash)].SendText('<'+inttostr(length(temp.Text))+'>'+temp.Text);
temp.Free;
end;
showmessage(hash); в начале
и такой же в конце, по идее должно быть показано 2 окна..

Что мы емеем:
выполнение программы доходит до цикла и далее выполнение процедуры не происходит...
как будто там кода нет...

showmessage срабатывает один раз (вставил для теста)
отправка не происходит, хоть close там пиши... по баробану




++++



Убрал
Код:
     for I := 0 to TransferPowerForm.TransferList.Items.Count-1 do
      if TransferPowerForm.TransferList.Items.Item[i].Caption=hash then
      begin
        temp.Add('tansfpower:stringnext');
        temp.Add(TransferPowerForm.TransferList.Items.Item[i].SubItems.Strings[1]);
        temp.Add(TransferPowerForm.TransferList.Items.Item[i].SubItems.Strings[2]);
        temp.Add(TransferPowerForm.TransferList.Items.Item[i].SubItems.Strings[3]);
        temp.Add(TransferPowerForm.TransferList.Items.Item[i].SubItems.Strings[4]);
      end;
происходит выполнение 2х showmessage...
Или я уже..... Или код после цикла должен выполнятся в любом случае, в независимости что будет найдено \ не найден в цикле..

Последний раз редактировалось woziti; 09.08.2017 в 10:38.
woziti вне форума Ответить с цитированием
Старый 09.08.2017, 10:55   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

что есть TransferList ?
почему hash в процедуру передаёте, а TransferList - нет?


Цитата:
Сообщение от woziti Посмотреть сообщение
выполнение программы доходит до цикла и далее выполнение процедуры не происходит...
как будто там кода нет...
теоретически такое может происходить, если происходит исключение в коде.
Проверьте, что включена отладка в опциях проекта. Перекомпилируйте.
И попробуйте запустить не из под IDE (запустите откомпилированный EXE-шник).


а в отладочном режиме (поставив точку останова на temp.Add('tansfpower:stringnext'); ) пробовали?

а если так попробовать?
Код:
     for I := 0 to TransferPowerForm.TransferList.Items.Count-1 do
      if TransferPowerForm.TransferList.Items.Item[i].Caption=hash then
      begin
        temp.Add('tansfpower:stringnext DEBUG found at #'+IntToStr(i) );
      end;

Последний раз редактировалось Serge_Bliznykov; 09.08.2017 в 11:02.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.08.2017, 11:03   #3
woziti
Пользователь
 
Регистрация: 09.08.2017
Сообщений: 10
По умолчанию

Цитата:
теоретически такое может происходить, если происходит исключение в коде.
Проверьте, что включена отладка в опциях проекта. Перекомпилируйте.
И попробуйте запустить не из под IDE (запустите откомпилированный EXE-шник).
ошибок нет
Цитата:
что есть TransferList ?
это listview, пустой.
woziti вне форума Ответить с цитированием
Старый 09.08.2017, 11:03   #4
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,689
По умолчанию

TransferList - ЛистьВью, скорее всего.
А вот так делать можно, но не нужно
Код:
var
temp: TStrings;
...
   temp:=TStringlist.Create;
Отладчиком нужно пройтись
eoln вне форума Ответить с цитированием
Старый 09.08.2017, 11:07   #5
woziti
Пользователь
 
Регистрация: 09.08.2017
Сообщений: 10
По умолчанию

Цитата:
Сообщение от eoln Посмотреть сообщение
TransferList - ЛистьВью, скорее всего.
А вот так делать можно, но не нужно
Код:
var
temp: TStrings;
...
   temp:=TStringlist.Create;
Отладчиком нужно пройтись
а как лучше сделать? всю жизнь работало вроде...
сотни таких конструкций в программе)
woziti вне форума Ответить с цитированием
Старый 09.08.2017, 11:08   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от woziti Посмотреть сообщение
это listview, пустой.
пустой?!
т.е.
Код:
ShowMessage('count = '+IntToStr( TransferPowerForm.TransferList.Items.Count));
покажет count = 0 ?

тогда попробуйте:
Код:
     for I := 0 to TransferPowerForm.TransferList.Items.Count-1 do ShowMessage('i = '+IntToStr(i));
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.08.2017, 11:14   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
Убрал
Код:
     for I := 0 to TransferPowerForm.TransferList.Items.Count-1 do
      if TransferPowerForm.TransferList.Items.Item[i].Caption=hash then
      begin
        temp.Add('tansfpower:stringnext');
        temp.Add(TransferPowerForm.TransferList.Items.Item[i].SubItems.Strings[1]);
        temp.Add(TransferPowerForm.TransferList.Items.Item[i].SubItems.Strings[2]);
        temp.Add(TransferPowerForm.TransferList.Items.Item[i].SubItems.Strings[3]);
        temp.Add(TransferPowerForm.TransferList.Items.Item[i].SubItems.Strings[4]);
      end;
происходит выполнение 2х showmessage...
теперь верни цикл, но убери ВСЕ SubItems.Strings, проверь, и добавляй по одной!!! (пока не сломается).

P.S. вообще-то нумерация в TStrings (а SubItems есть его наследник) начинается с 0!!!

Код:
 temp.Add('tansfpower:stringnext');
 temp.AddStrings(TransferPowerForm.TransferList.Items.Item[i].SubItems); // это добавит ВСЕ сколько есть SubItems
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 09.08.2017 в 11:20.
evg_m вне форума Ответить с цитированием
Старый 09.08.2017, 11:16   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от woziti Посмотреть сообщение
Цитата:
А вот так делать можно, но не нужно
Код:
var
temp: TStrings;
...
   temp:=TStringlist.Create;
а как лучше сделать? всю жизнь работало вроде...
Код:
var
temp: TStringList;
...
   temp:=TStringList.Create;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.08.2017, 11:19   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
и добавляй по одной!!! (пока не сломается)
тогда уж
Код:
     for i := 0 to TransferPowerForm.TransferList.Items.Count-1 do
      if TransferPowerForm.TransferList.Items.Item[i].Caption=hash then
      begin
        temp.Add('tansfpower:stringnext');
        j := 0;
        while (j<4) and (j<TransferPowerForm.TransferList.Items.Item[i].SubItems.Count) do begin
           temp.Add(TransferPowerForm.TransferList.Items.Item[i].SubItems[j]);
           Inc(j);
        end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.08.2017, 11:19   #10
woziti
Пользователь
 
Регистрация: 09.08.2017
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
пустой?!
т.е.
Код:
ShowMessage('count = '+IntToStr( TransferPowerForm.TransferList.Items.Count));
покажет count = 0 ?

тогда попробуйте:
Код:
     for I := 0 to TransferPowerForm.TransferList.Items.Count-1 do ShowMessage('i = '+IntToStr(i));
вставил до цикла
ShowMessage('count = '+IntToStr( TransferPowerForm.TransferList.Item s.Count));
и ...do ShowMessage('i = '+IntToStr(i));
результат: count = 0


Если заполнить listview, вызывается ShowMessage
count = 1, count = 2
тоесть цикл. работает...
но после него нечего не выполняется... как будто делфи глючит..
woziti вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
цикл for to do, шаг цикла не выполняется impeee Общие вопросы Delphi 20 22.10.2013 10:57
Странная работа чекбоксов после сохранения Jleksern Общие вопросы Delphi 0 07.05.2013 16:41
Не выполняется код после вызова другой процедуры... sorockinalex Общие вопросы Delphi 3 09.09.2012 18:24
сколько раз выполняется тело цикла? adm2010 Паскаль, Turbo Pascal, PascalABC.NET 2 23.12.2010 16:46
Странная работа цикла valerij Microsoft Office Excel 5 06.03.2009 16:40