Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 189

Раздел: Delphi » Прочее
/ вопрос открыт /

Здравствуйте, уважаемые эксперты.
Почему, когда я вызываю процедуру записи данных
в INI-файл из обработчика события OnCreate главной формы
(или до создания главной формы), программа «вылетает» с сообщением
“Access violation at address XXXXXXXX: write at address XXXXXX. Process stopped. Use
Step or Run to continue.” Как этого избежать?

Приложение:
  1.  
  2. Procedure WriteStandartOptions;
  3. var IniFile: TIniFile;
  4. begin
  5. IniFile.Create(ExtractFileName(Application.ExeName) + 'AppName.ini');
  6. IniFile.WriteString('Options', 'Path', 'C:WINDOWS');
  7. IniFile.WriteInteger('Options', 'Color', clBlack);
  8. IniFile.Free;
  9. end;
  10.  
  11.  
  12.  
  13.  
  14. Procedure TForm1.FormCreate (Sender: TObject);
  15. Begin
  16. If not FileExists(ExtractFileName(Application.ExeName) + 'AppName.ini') Then
  17. WriteStandartOptions;
  18. end;
  19.  
  20.  
  21.  
  22. Program Project1;
  23.  
  24. Uses
  25. Forms,
  26. Unit1 in 'Unit1.pas' {Form1}
  27.  
  28. {$R *.res}
  29.  
  30.  
  31.  
  32. Begin
  33. If not FileExists(ExtractFileName(Application.ExeName) + 'AppName.ini') Then
  34. WriteStandartOptions;
  35.  
  36. Application.Initialize;
  37. Application.CreateForm(TForm1, Form1);
  38. Application.Run;
  39. end.
  40.  


DoS Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: DoS (статус: 1-ый класс)
Вопрос отправлен: 10 декабря 2007, 18:59
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, @ndrew!
Для начала я бы рекомендовал бы вам поставить кнопочку на форму и вписать туда такой код

ShowMessage(ExtractFileName(Application.ExeName) + 'AppName.ini');
Я думаю, что после этого многие вопросы отпали бы:)
Если путь к ини файлу указан полный, то он создаётся там, куда указывает путь. а вот если только имя ини файла, то тут загвоздка. В таком случае он создаётся в папке Windows (в Висте говорят немного в другом месте, но сути не меняет).
наиболее правильно писать эту строку где то так
ChangeFileExt(Application.exename,'.ini')
Смотря на тот код, который вы написали, я думаю, вы хотели написать так
ExtractFilePath(Application.exename)+'AppName.ini'
Попробуйте это.

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 11 декабря 2007, 01:52
Оценка за ответ: 4

Ответ #2. Отвечает эксперт: Косолапов Дмитрий Юрьевич

Здравствуйте, @ndrew!
Самая первая строчка неправильная. Надо:
IniFile:=TIniFile.Create...

Ответ отправил: Косолапов Дмитрий Юрьевич (статус: 8-ой класс)
Время отправки: 11 декабря 2007, 08:27
Оценка за ответ: 5

Комментарий к оценке: Спасибо вам! Получилось!

Мини-форум вопроса

Всего сообщений: 2; последнее сообщение — 11 декабря 2007, 21:50; участников в обсуждении: 2.
Николай Рубан

Николай Рубан (статус: 10-ый класс), 10 декабря 2007, 19:14 [#1]:

А Вы подключили модуль Inifiles?
uses  Windows, Messages,.... Inifiles;
DoS

DoS (статус: 1-ый класс), 11 декабря 2007, 21:50 [#2]:

Естественно!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:58
Выполнено за 0.03 сек.