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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 07.01.2012, 15:14   #1
demiancz
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 246
По умолчанию access violation при работе с ini файлами

Здравствуйте. Такой вопрос.
Есть 2 формы.Главная и форма с настройками программы. В форму настройки вводится код, который будет сохранен в ини файле (ну и другие настройки).
Пишу такой код:
procedure TForm1.FormCreate(Sender: TObject);
begin
ini:=Tinifile.Create(PChar(ExtractF ilePath(Application.ExeName))+'\'+' Config.ini'); // создается INI-файл с настройками в папке программы

// загружаем настройки с INI-файла
Form2.Edit1.Text := ini.ReadString('Code','useCode','0' );
end;

На этапе
Form2.Edit1.Text := ini.ReadString('Code','useCode','0' );

Вылетает access violation

Попробовал сделать так:
Кинул на первую форму Edit1 и сделал такой код
procedure TForm1.FormCreate(Sender: TObject);
begin
ini:=Tinifile.Create(PChar(ExtractF ilePath(Application.ExeName))+'\'+' Config.ini'); // создается INI-файл с настройками в папке программы

// загружаем настройки с INI-файла
Edit1.Text := ini.ReadString('Code','useCode','0' );
end;

Так все работает. Тоесть проблема возникает при считывании из второй формы. Что не так не пойму. помогите пожалуйста новичку.
Смотреть фильмы HD Фильмы для планшетов
demiancz вне форума
Старый 07.01.2012, 15:25   #2
Anton911
Форумчанин
 
Аватар для Anton911
 
Регистрация: 23.08.2011
Сообщений: 171
По умолчанию

Цитата:
Сообщение от demiancz Посмотреть сообщение
Здравствуйте. Такой вопрос.
Есть 2 формы.Главная и форма с настройками программы. В форму настройки вводится код, который будет сохранен в ини файле (ну и другие настройки).
Пишу такой код:
procedure TForm1.FormCreate(Sender: TObject);
begin
ini:=Tinifile.Create(PChar(ExtractF ilePath(Application.ExeName))+'\'+' Config.ini'); // создается INI-файл с настройками в папке программы

// загружаем настройки с INI-файла
Form2.Edit1.Text := ini.ReadString('Code','useCode','0' );
end;

На этапе
Form2.Edit1.Text := ini.ReadString('Code','useCode','0' );

Вылетает access violation

Попробовал сделать так:
Кинул на первую форму Edit1 и сделал такой код
procedure TForm1.FormCreate(Sender: TObject);
begin
ini:=Tinifile.Create(PChar(ExtractF ilePath(Application.ExeName))+'\'+' Config.ini'); // создается INI-файл с настройками в папке программы

// загружаем настройки с INI-файла
Edit1.Text := ini.ReadString('Code','useCode','0' );
end;

Так все работает. Тоесть проблема возникает при считывании из второй формы. Что не так не пойму. помогите пожалуйста новичку.
Я бы использовал StringList.
Код:
var slist:TStringList;
slist:=TStringList.Create;
slist.add('Я StringList');
slist.add('И еще одна строка');
slist.savetofile('Config.ini');
В итоге рядом с вашим exe появится config.ini в котором будет две строки:
(1)Я StringList
(2)И еще одна строка'
Код:
slist.loadfromfile('Config.ini');
Edit1.Text:=slist.Strings[0]; //Загружаем первую строку
slist.Free;
Если я вопрос не правильно понел, извините.
Каждый день узнаю новое...

Последний раз редактировалось Anton911; 07.01.2012 в 15:28.
Anton911 вне форума
Старый 07.01.2012, 15:29   #3
demiancz
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 246
По умолчанию

Проблема не в том используя я StringList или Edit, а в том что INI не воспринимает вторую форму при считывании данных с ИНИ файла. Мне нужно понять почему возникает access violation.
Ведь если на главную форму кинуть Edit, то никаких проблем и ошибок не возникает. А при работе с Формой 2 возникает ошибка
Смотреть фильмы HD Фильмы для планшетов
demiancz вне форума
Старый 07.01.2012, 15:34   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
ini:=Tinifile.Create(PChar(ExtractF ilePath(Application.ExeName))+'\'+' Config.ini'); // создается INI-файл с настройками в папке программы

// загружаем настройки с INI-файла
Form2.Edit1.Text := ini.ReadString('Code','useCode','0' );
end;
на момент создания главной формы (Form1) вторая форма (Form2) еще не создана. Обращение к несуществующему объекту дает Acsses Violation.
Перенести код чтения настроек в другой метод:
1 вар. Form2.OnCreate (рекомендуется)
Дочерние формы имеют право знать особенность (ОДНУ и ту же) главной (наличие Ini). А вот главной помнить ВСЕ особенности ВСЕХ дочерних очень тяжело (легко забыть -допустить ошибку).
2 вар. form1.OnShow (возможный вариант)
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума
Старый 07.01.2012, 15:35   #5
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

В обработчике создания первой формы есть ссылка на вторую форму, которая ещё не создавалась и, соответственно, обращение к неё и её компонентам обязательно вызовет ошибку (Form2.Edit1)
ReportCube вне форума
Старый 07.01.2012, 15:51   #6
demiancz
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 246
По умолчанию

Спасибо. Разобрался.
Смотреть фильмы HD Фильмы для планшетов
demiancz вне форума
Закрытая тема


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Access Violation при .Create.BitMap YaMolekula Общие вопросы Delphi 1 28.05.2011 13:42
Access violation при выполнении Bernarditto C++ Builder 5 04.11.2010 14:25
Access violation at address при использовании DLL spamer Общие вопросы Delphi 4 27.08.2009 22:19
Проблема при работе с ini dolphin705 Общие вопросы Delphi 4 12.08.2009 20:59
access violation при создании обьекта goog Общие вопросы Delphi 12 11.01.2009 20:33