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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.03.2011, 16:57   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию d2010. Создал класс на основе Tlist. AV при сохранении в ini

Всем привет!

У меня проблема и я не доумеваю как её лечить...

Написал класс, наследник Tlist, но опция сохранения в ini не рабоает , немогу понять почему...:
Код:
type
  TErrorWindowsList = class(TList)

...

procedure TErrorWindowsList.Save;
var
  i: Integer;
  ini: TIniFile;
begin
  ini := TIniFile.Create(myDir + ErrIni_File);
  ini.EraseSection(ErrIni_SectionName);
  try
    for i := 0 to Count - 1 do
    begin
      ini.WriteString(ErrIni_SectionName, IntToStr(i) + ErrIni_WindowTitle,
        Window[i].ErrorTitle);
      ini.WriteString(ErrIni_SectionName, IntToStr(i) + ErrIni_WindowText,
        Window[i].ErrorText);
      ini.WriteInteger(ErrIni_SectionName, IntToStr(i) + ErrIni_CheckingType,
        Window[i].ErrorChecktype);
    end;
  except
    ini.Free;
  end;
end;
но почему-то она не срабатывает , перескакивает на except экземпляк класса создаётся при создании главной формы....
Человек_Борща вне форума Ответить с цитированием
Старый 19.03.2011, 21:52   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,883
По умолчанию

F1 на EraseSection гласит : If a section cannot be removed, an exception is raised.
надо бы проверить, почему она не может ремувнуть секцию (особоенно её имя и существование в инишке), или пока отказаться от функционала ремувания, поглядите как без него будет

а ещё кстати, free не вызывается при стандартном ходе проги, будут утечки памяти

Последний раз редактировалось phomm; 19.03.2011 в 21:55.
phomm вне форума Ответить с цитированием
Старый 19.03.2011, 22:29   #3
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Интересная конструкция, однако.
Значит, если ошибки не произойдет, то объект "ini" так и останется болтаться в памяти.
finally вместо except здесь больше подойдет.
try указывают после создания объекта, а не после того как с ним какие-либо операции происходят.
Прежде чем удалять секцию, надо проверить существование файла, хотя бы.
Да и чего ее эту секцию удалять то. Какая в этом польза или корысть?
Прик вне форума Ответить с цитированием
Старый 19.03.2011, 22:58   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Учёл ваши советы.
Рузультат:
Access violation at address 00699309 in module 'HLR.exe'. Read of address 00000008.
Код:
procedure TErrorWindowsList.Save;
var
  i: Integer;
  ini: TIniFile;
begin
  ini := TIniFile.Create(myDir + ErrIni_File);
  try
  if ini.SectionExists(ErrIni_SectionName) then
  begin
  ini.EraseSection(ErrIni_SectionName);
  end;
    for i := 0 to Count-1 do    //Access violation at address 00699309 in module 'HLR.exe'. Read of address 00000008.
    begin
      ini.WriteString(ErrIni_SectionName, IntToStr(i) + ErrIni_WindowTitle,
        Window[i].ErrorTitle);
      ini.WriteString(ErrIni_SectionName, IntToStr(i) + ErrIni_WindowText,
        Window[i].ErrorText);
      ini.WriteInteger(ErrIni_SectionName, IntToStr(i) + ErrIni_CheckingType,
        Window[i].ErrorChecktype);
    end;
  finally
    ini.Free;
  end;
end;
Корысть? Перезапись секции... Обновление в соответсвии с данными в программе.

p.S. спасибо что указали где утечка памяти. Долго я над этим думал! И оказалось всё так банально try...except

Последний раз редактировалось Человек_Борща; 19.03.2011 в 23:02.
Человек_Борща вне форума Ответить с цитированием
Старый 19.03.2011, 23:05   #5
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Может быть дело не в иниФайле, а в самом классе.
Как тут определишь причину AV, если ничего не известно, кроме метода Save.
Прик вне форума Ответить с цитированием
Старый 19.03.2011, 23:26   #6
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Проблему решил... оказывается не добавлял обьект в сам Tlist.
Человек_Борща вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Класс MediaPlayer на основе готового. Дописать [C#] Casper-SC Фриланс 1 07.03.2010 11:13
Ошибка при сохранении БД Xeon332 Помощь студентам 2 05.01.2010 17:00
Ошибки при сохранении Alex19789 Microsoft Office Excel 6 16.10.2009 12:39
Макрос при сохранении Полина Л. Помощь студентам 0 14.09.2009 16:30
Блокирование при работе с TList. Riman Общие вопросы Delphi 7 31.05.2007 15:28