Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.10.27;
Скачать: [xml.tar.bz2];

Вниз

Проблема при использовании LoadFromFile у TStrings   Найти похожие ветки 

 
Иванько   (2003-10-15 18:29) [0]

Фрагмент кода:

procedure TForm1.Button1Click(Sender: TObject);
var sss:Tstrings;
begin
opendialog1.Execute; sss.LoadFromFile(opendialog1.FileName);
end;
вызывает ошибку:

Debugger Exception Notification
Project Project1.exe raised exception class EAccessViolation with message "Access violation at address 004554B3 in module "PROJECT1.EXE". Read of address 8BD88BBB". Process stopped. Use Step or Run to continue.

в то же время RichEdit1.Lines.LoadFromFile или Memo1.Lines.LoadFromFile проходят без проблем. Пробовал вначале создать объект:
opendialog1.Execute; sss.Create; sss.LoadFromFile(opendialog1.FileName);
такой же результат. Компилировал под разными ОС (98, Ме, ХР) и разными версиями Delphi (6, 7) – не помогает. В справке про это ничего не сказано. Кто что может посоветовать????


 
Skier   (2003-10-15 18:31) [1]

Ну ё !

procedure TForm1.Button1Click(Sender: TObject);
var
sss:Tstrings;
begin
sss := TstringList.Create;
try
if opendialog1.Execute then
sss.LoadFromFile(opendialog1.FileName);
finally
sss.Free;
end; //try
end;


 
default   (2003-10-15 18:32) [2]

delphi uninstall, ИМХО


 
Иванько   (2003-10-15 18:34) [3]

Мы все учились понемногу.... (с) Пушкин.
А вообще биг сянкс!


 
default   (2003-10-15 18:52) [4]

Иванько © (15.10.03 18:34) [3]
вот тебе дали решение и ты успокоился...ты понял почему переменная объявлена как TStrings, а создаётся объект через ссылку на класс TStringList и это работает?!...


 
Иванько   (2003-10-16 18:39) [5]

Неа... Плиз, объясни!


 
AlexS   (2003-10-16 18:52) [6]

TStrings - полуфабрикат, базовый класс, у него многие методы абстрактные, поэтому лучше работать с TStringList.


 
default   (2003-10-16 18:54) [7]

Иванько © (16.10.03 18:39) [5]
моё личное убеждение в том, что чтобы до конца понять принцип работы объектов надо смотреть окно отладчика, то есть хоть чуть-чуть разбираться в ассемблерном коде
а так могу попробовать объяснить так:
использовать TStrings.LoadFormFile и большинство других методов этого класса нельзя, потому что они не определены в этом классе, а оставлены для определения в потомках, то есть TStrings является каркасом для них, чтобы меньше кода писать, а определять в наследниках этого класса то что надо или дополнить что-то(или изменить)
поэтому при вызове этих методов происходит Abstract Error(фактически на месте адреса кода метода лежит адрес кода процедуры обработки вот такого абстрактного вызова, которая и выводит текст об ошибке вызова),
присвоении sss := TstringList.Create вполне логично так как TStringList является потомком TStrings и в нём этот(и другие)
абстрактные методы определены, а компилятор "работает" с объектом через указатель на него, а указатель у нас на TStringList теперь хранится в переменной sss и поэтому всё чики пуки происходит, вот если понадобится вызвать "новые" методы TStringList придётся выполнять приведение к типу TStringList
не знаю понятно или нет, конечно, но всё же надеюсь не зря писал...


 
Иванько   (2003-10-16 19:11) [8]

вроде понятно... Пасибо, что вразумил! Я в принципе так и думал, но все равно толково и ястно рассказал!


 
mOOx_   (2003-10-16 19:44) [9]

Блин, когда-то и я так радовался. Правда откопал эту фишку в хелпах :). Всегда приятно, когда кто-то догоняет :). Удачи.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.10.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.012 c
3-89156
IGOR_k
2003-10-07 12:14
2003.10.27
dbf create


1-89234
Egor
2003-10-14 17:48
2003.10.27
Delphi && Microsoft Word


3-89131
Водопад
2003-10-07 20:41
2003.10.27
Базы данных


1-89342
ded_mazai
2003-10-16 13:48
2003.10.27
Express Quantum Tree List


3-89110
abc1
2003-10-08 12:51
2003.10.27
Как определить номер текущей записи в Query?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский