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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.09.2009, 19:15
Orfentor Orfentor вне форума
Прохожий
 
Регистрация: 25.08.2009
Сообщения: 7
Репутация: 10
По умолчанию List index out of Bounds(0)

Проблема такова: при запуске программы она проверяет находятся ли файлы в определенной папке и добавляет их имена в ЛистБокс:

Код:
ListBox1.Clear;
 if FindFirst(Dir+'*.ini',faAnyFile,SearchRec)=0 then
 begin
 ListBox1.Items.Add(SearchRec.Name);
 while (FindNext(SearchRec)=0) do
 ListBox1.Items.Add(SearchRec.Name);
 end;
 ListBox1.ItemIndex:=0
;

Затем при нажатии на кнопку от которой требуется загрузить и отобразить выбранный файлпоявляется ошибка

Project1.dsk.exe raised exception class EStringListError with message `List index out if bounds (0)`. Process stopped. Use Step or Run to continue.

Подскажите в чем может быть причина
Ответить с цитированием
  #2  
Старый 04.09.2009, 21:11
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

На какую строчку ругается-то? Код кнопки выложи, мы не экстрасенсы.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #3  
Старый 04.09.2009, 22:03
Orfentor Orfentor вне форума
Прохожий
 
Регистрация: 25.08.2009
Сообщения: 7
Репутация: 10
По умолчанию

Проблема в том, что он не ругается на какую-то определенную строку, он выделяет строку end. в закладке проэкта

текст кнопки

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
if not DirectoryExists(Dir+ComboBox1.Items[ComboBox1.ItemIndex]) then
  createdir(Dir+ComboBox1.Items[ComboBox1.ItemIndex]);
Result:=TiniFile.Create(Dir+ComboBox1.Items[ComboBox1.ItemIndex]+'\'+LabeledEdit1.Text+LabeledEdit2.Text[1]+'.ini');
  file:=TIniFile.Create(Dir+Form1.ListBox1.Items[Form1.ListBox1.ItemIndex]);
Panel1.Visible:=TRUE;

    end;
Ответить с цитированием
  #4  
Старый 05.09.2009, 21:36
roamer roamer вне форума
Активный
 
Регистрация: 15.04.2009
Сообщения: 369
Репутация: 93
По умолчанию

Цитата:
Сообщение от Orfentor
текст кнопки

Код, который Вы привели - крайне не стабилен.

Глюки у Вас могут быть практичеки в каждой строке.

Например :

Что будет, если ComboBox1.ItemIndex<0 в ЭТОЙ строке ???
Код:
  if not DirectoryExists(Dir+ComboBox1.Items[ComboBox1.ItemIndex]) then
                  createdir(Dir+ComboBox1.Items[ComboBox1.ItemIndex]);


Участок кода, начиная с этой строки, надо защищать конструкцией TRY ... FINALLY ... END :
Код:
  Result:=TiniFile.Create(Dir+ComboBox1.Items[ComboBox1.ItemIndex]+'\'+LabeledEdit1.Text+LabeledEdit2.Text[1]+'.ini');
И при чем здесь Result ???


Здесь Вы использовали зарезервированное слово <file>
Код:
  file:=TIniFile.Create(Dir+Form1.ListBox1.Items[Form1.ListBox1.ItemIndex]);


А где освобождение ресурсов <Free> (после TiniFile.Create) ???

Вам нужно переосмыслить Ваш код и переписать его.
Тогда будет ясно - в чем глюки ...
Ответить с цитированием
  #5  
Старый 04.09.2009, 22:15
roamer roamer вне форума
Активный
 
Регистрация: 15.04.2009
Сообщения: 369
Репутация: 93
По умолчанию

Цитата:
Сообщение от Orfentor
Код:
ListBox1.Clear;

if FindFirst(Dir+'*.ini',faAnyFile,SearchRec)=0 then begin

end;

ListBox1.ItemIndex:=0; <- здесь потенциально опасный момент !

Лучше так :

Код:
...
if ListBox1.Items.Count>0 then ListBox1.ItemIndex:=0; 
;
Ответить с цитированием
  #6  
Старый 05.09.2009, 12:56
Orfentor Orfentor вне форума
Прохожий
 
Регистрация: 25.08.2009
Сообщения: 7
Репутация: 10
По умолчанию

не помогло пишет тоже самое
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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