|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Проблема с ListBox после использования LoadFromFile
Значит есть компонент ListBox. В него вносятся построчно данные:
Код:
ListBox1.Items.Add('some information'); Код:
if ListBox1.ItemIndex >= 0 then begin SomeProcedure(ListBox1.Items[ListBox1.ItemIndex], 1); ListBox2.Items.Add(ListBox1.Items[ListBox1.ItemIndex]); ListBox1.Items.Delete(ListBox1.ItemIndex); end; После таких нехитрых манипуляций - сохраняем наши изменения в файл: Код:
ListBox1.Items.SaveToFile('info.txt'); Код:
ListBox1.Items.LoadFromFile('info.txt'); Код:
SomeProcedure(ListBox1.Items[ListBox1.ItemIndex], 1); Если есть какой-то нюанс - прошу подметить. Спасибо |
#2
|
||||
|
||||
Нет, я точно с ума сойду.
Даже после загрузки элемент ListBox на самом деле выводится: Код:
ShowMessage(ListBox1.Items[ListBox1.ItemIndex]); Просматривал даже через отладчик - такое впечатление что просто не видит процедуры "SomeProcedure" - шагает просто мимо нее! И там не зарезервированное название процедуры. Ведь до сохранения в файл работает как надо. Голову почти сломал |
#3
|
||||
|
||||
Иногда, у компилятора Дельфи сносит крышу. Поведение очень схожее. Помогает просто переформатирование кода, добавление нафик не нужных бегинов и т.д. Попробуйте тупо в критическую секцию поместить вызов вашей процедуры.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
Speech (22.12.2015)
|
#4
|
||||
|
||||
Ясно спасибо. Теперь хоть знаю что похожие проблемы и у других бывают. Значит действительно такой компилятор.
Пробовал только что и разные begin..end вставлять, и процедуру переименовывать - все тщетно. Будто вообще нету той строки кода с вызовом процедуры. Что самое примечательное - другие процедуры (написанные мной) запускаются. А с этой и даже такой вариант не проходит: Код:
SomeProcedure('some information', 1); Но это уже будет завтра. Если что - отпишусь. Если получится и кто-то это в будущем прочитает - то может сохранит свой ясный разум, и не будет биться головой об монитор |
#5
|
||||
|
||||
Долго и нудно пытался повторить вашу ашипку, но не получилось, да и не должно её быть в принципе, поскольку итемы в ListBox это обычные строки и сохранение\загрузка содержимого происходит средствами класса TStrings, попробуйте скомпилить, будет-ли глюк?
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
Speech (22.12.2015)
|
#6
|
||||
|
||||
Alegun, спасибо за потраченное время - этот пример работает.
Сделал загрузку файлов вручную с помощью цикла и последующем добавлении в ListBox - тщетно. На таком пустяке уже 2-й день сижу. Постараюсь вырезать тот участок кода и полностью выложить сюда. |
#7
|
||||
|
||||
Проблема решена.
Процедура подгружала файлы из папки в корне программы. Загрузка данных в ListBox осуществлялась через OpenDialog из соседней папки также в корне программы. Но при использовании повторно SomeProcedure путь к файлам искажался. Если для начала достаточно было написать Код:
If FileExists('Avatars\' + Data1 + '.jpg') then Form1.Image1.Picture.LoadFromFile('Avatars\' + Data1 + '.jpg'); Проблема решена вот таким пустяком. Код:
If FileExists(ExtractFilePath(Application.ExeName) + 'Avatars\' + Data1 + '.jpg') then Form1.Image1.Picture.LoadFromFile(ExtractFilePath(Application.ExeName) + 'Avatars\' + Data1 + '.jpg'); Ведь если бы отладчик показал изначально неверный путь к файлу - проблему нашел бы сразу, и не пришлось бы создавать тему на форуме. |
#8
|
|||
|
|||
по умолчанию, OpenDialog (Save тоже) меняет текущую папку. Что бы он этого не делал, надо у диалога в Options отключить эту фичу.
А вот почему отладчик глючит... да фих его знает, но отладчик крайних версий замечен за такой фигней... |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
Speech (22.12.2015)
|