Функция LoadFromFile в Delphi.
12369
22
Deft
activist
Следующая инструкция вызывает ошибку во время компиляции:
Form1.ListBox.Items.LoadFromFile('d:\profile.dat');
Скриншоты в аттаче.
Вопрос: Я что-то делаю не так, или может просто лыжи не едут?
Form1.ListBox.Items.LoadFromFile('d:\profile.dat');
Скриншоты в аттаче.
Вопрос: Я что-то делаю не так, или может просто лыжи не едут?
Следом выскакивает вот такое окошко. По коду это "Общая ошибка защиты (General protection fault)"
скорее всего файло некорректно сохранено и программа не может загрузить элементы списка
Файл создается функцией FileCreate. Даже если вручную создать этот файл в блокноте, то получается та же фигня. В C++Builder эта инструкция работала вполне корректно.
Я не большой спец.
Но осмелюсь предположить. Если Delphi5 то могут быть глюки компилятора или еще Бог знает чего.
У меня в одной проге при компиляции в 4 версии одна функция работала (Получить с TChart.Canvas изображение и перекинуть его в TImage) При компиляции в 5 версии упорно выдавала ошибку на эту функцию в 6,7 снова все в норме. Так что может не твои лыжи не едут?
Но осмелюсь предположить. Если Delphi5 то могут быть глюки компилятора или еще Бог знает чего.
У меня в одной проге при компиляции в 4 версии одна функция работала (Получить с TChart.Canvas изображение и перекинуть его в TImage) При компиляции в 5 версии упорно выдавала ошибку на эту функцию в 6,7 снова все в норме. Так что может не твои лыжи не едут?
Deft
activist
Но осмелюсь предположить. Если Delphi5 то могут быть глюки компилятора или еще Бог знает чего.Delphi 7. Но я тоже склоняюсь к версии, что это глюк компилятора. Приду домой и попробую 6-ю версию.
Deft
activist
Понял в чем проблема. Инструкция у меня прописана в разделе initialization, поэтому выскакивает ошибка. Как убрать ее из этого раздела, если мне нужно, чтобы она выполнялась при запуске программы? (Не бейте за тупые вопросы, я раньше писАл на С++, а Дельфи изучаю недавно :o)
Сейчас читают
Старение
44350
419
Сирия. Начало. (часть 2)
195430
1000
Топик для ночного флуда.
291285
2503
Наверное ручками берешь и переносишь.
Вот что нашел в справке:
Каждый модуль в общем случае имеет структуру:
unit ;
interface // Открытый интерфейс модуля
{Сюда могут помещаться списки подключаемых модулей, объявления типов, констант, переменных, функций и процедур, к которым будет доступ из других модулей }
implementation // Реализация модуля
{Сюда могут помещаться списки подключаемых модулей, объявления типов, констант, переменных, к которым не будет доступа из других модулей. Тут же должны быть реализации всех объявленных в разделе interface функций и процедур, а также могут быть реализации любых дополнительных, не объявленных ранее функций и процедур.}
initialization {не обязательный}
finalization {не обязательный}
end.
Вот что нашел в справке:
Каждый модуль в общем случае имеет структуру:
unit ;
interface // Открытый интерфейс модуля
{Сюда могут помещаться списки подключаемых модулей, объявления типов, констант, переменных, функций и процедур, к которым будет доступ из других модулей }
implementation // Реализация модуля
{Сюда могут помещаться списки подключаемых модулей, объявления типов, констант, переменных, к которым не будет доступа из других модулей. Тут же должны быть реализации всех объявленных в разделе interface функций и процедур, а также могут быть реализации любых дополнительных, не объявленных ранее функций и процедур.}
initialization {не обязательный}
finalization {не обязательный}
end.
В конструкторе формы прописываешь... и все будет нормально.
Вчера подумал малость и сделал так:
procedure TForm1.FormCreate(Sender: TObject);
begin
Newdirname:=GetCurrentDir;
Profile:=(Newdirname+'\profile.dat');
if FileExists(Profile)=false then FileClose(FileCreate(Profile));
Form1.ListBox.Items.LoadFromFile(Newdirname+'\profile.dat');
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Newdirname:=GetCurrentDir;
Profile:=(Newdirname+'\profile.dat');
if FileExists(Profile)=false then FileClose(FileCreate(Profile));
Form1.ListBox.Items.LoadFromFile(Newdirname+'\profile.dat');
end;
нельзя так делать.
Form1 - глобальная переменная. Она может быть
1. не инициализирована вообще (если отключено автосоздание форм проекта)
2. проинициализирована не тем экземпляром.
И вообще - слишком много действий...
procedure TForm1.FormCreate(Sender: TObject);
var
FileName: String;
begin
FileName := ExtractFileName(Application.Exename) + 'profile.dat';
if FileExists(FileName) then
ListBox.Items.LoadFromFile(FileName);
end;
Form1 - глобальная переменная. Она может быть
1. не инициализирована вообще (если отключено автосоздание форм проекта)
2. проинициализирована не тем экземпляром.
И вообще - слишком много действий...
procedure TForm1.FormCreate(Sender: TObject);
var
FileName: String;
begin
FileName := ExtractFileName(Application.Exename) + 'profile.dat';
if FileExists(FileName) then
ListBox.Items.LoadFromFile(FileName);
end;
craxx
рыжий котэ
Ну да, ты прав... просто я не обратил внимание что у автора в коде конструктора обращение к экземпляру объекта.
Так я не понял заработало или нет.
Я постоянно пользую для считывния текстовых файлов TStringList.LoadFromFile. Правда не проверяю на его наличие, а делаю в теле try ... except
Писал и в 5-й и в 7-й версиях, все работало. Данные ошибки, как мне кажется связаны с системой. Аксес вайлэшн - кто-то еще пользует.
Или я ошибаюсь?!
Я постоянно пользую для считывния текстовых файлов TStringList.LoadFromFile. Правда не проверяю на его наличие, а делаю в теле try ... except
Писал и в 5-й и в 7-й версиях, все работало. Данные ошибки, как мне кажется связаны с системой. Аксес вайлэшн - кто-то еще пользует.
Или я ошибаюсь?!
Данные ошибки, как мне кажется связаны с системойНе знаю, пробовал на двух разных машинах с абсолютно разными конфигурациями. Я писАл выше, что ошибка появляется только тогда, когда инструкция прописана в разделе initialization.
Так я не понял заработало или нет.Да. После перемещения в конструктор формы.
Deft
activist
нельзя так делать.Кстати, забыл сказать, эта форма главная и единственная, так что, наверное, можно......
Form1 - глобальная переменная. Она может быть
1. не инициализирована вообще (если отключено автосоздание форм проекта)
2. проинициализирована не тем экземпляром.
Блин, только сейчас догнал-- инструкции раздела initialization выполняются в самом начале программы, то есть, видимо, перед обращением к конструктору формы, а так как я пытался обратиться к свойству объекта, размещенного на этой форме, то............
это просто плохой стиль
так делать в принципе можно, но не рекомендуется
а главная форма может когданибудь перестать быть главной. На все воля божья.
Использование глобальных переменных находится вне парадигмы ООП
так делать в принципе можно, но не рекомендуется
а главная форма может когданибудь перестать быть главной. На все воля божья.
Использование глобальных переменных находится вне парадигмы ООП
И все равно так нельзя. Удали Form1. и будет нормально!нельзя так делать.Кстати, забыл сказать, эта форма главная и единственная, так что, наверное, можно......
Form1 - глобальная переменная. Она может быть
1. не инициализирована вообще (если отключено автосоздание форм проекта)
2. проинициализирована не тем экземпляром.