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

Вниз

Проблема с считыванием из файла и заполнением ListBox   Найти похожие ветки 

 
Edvard   (2003-06-27 14:56) [0]

Есть два ListBox, из одного записываю содержимое в файлы (строки имеют вид TIcon + String), в другой пытаюсь загрузить содержимое из файлов. При загрузке вылетает ошибка: "... Project.exe raised exeption class EAccessViolation with message " Access Violation at adress 00000000...... " . Причем, в процессе заполнения ListBox2, видно что строки грузятся правильно, а вот иконки рядом с ними везде появляются одинаковые и меняются одновременно во всех строках.
В чем может быть проблема, что неправильно?

Это соответствующие процедуры:

//сохранение
procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
ico: TIcon;
im: TImagelist;
begin
im := Timagelist.Create(self);
im.Width := 16;
im.Height :=16;
for i := 0 to ListBox1.Items.Count-1 do
begin
ico:=ListBox1.Items.Objects[i] as TIcon;
im.AddIcon(ico);
end;
WriteComponentResFile("icolist.bin",im);
im.Free;
ListBox1.Items.SaveToFile("stringlist.txt");
end;



//чтение и заполнение
procedure TForm1.Button2Click(Sender: TObject);
var
i: Integer;
im: Timagelist;
st,st1: TStringList;
ico : TIcon;
begin
ico := Ticon.Create;
St := TstringList.Create;
St1 := TstringList.Create;
im := Timagelist.Create(nil);
im := ReadComponentResFile("icolist.bin", im) as TImagelist;
st.LoadFromFile("stringlist.txt");
for i := 0 to st.Count-1 do begin
im.GetIcon(i,ico);
ListBox2.Items.AddObject(st[i], ico);
end;
st.Free;
St1.Free;
ico.Free;
end;


 
Юрий Федоров   (2003-06-27 15:15) [1]

В какой строке Access Violation ?


 
Song   (2003-06-27 15:21) [2]

А кто Ico за тебя будет создавать?


 
Edvard   (2003-06-27 15:48) [3]

>Song © (27.06.03 15:21)

блин, точно, я не там это делал! С меня пиво!:)


 
Edvard   (2003-06-27 16:03) [4]

Все равно, еще где-то лажа, та же ошибка, но теперь видно что заполняется правильно, а вылетает в самом конце, когда уже все заполнено...


 
Юрий Федоров   (2003-06-27 16:19) [5]

>> im := Timagelist.Create(nil);
>> im := ReadComponentResFile("icolist.bin", im) as TImagelist;
Это лажа. Зачем создавать, если сразу теряешь ссылку на созданный объект ? Но валится не из-за этого


 
Edvard   (2003-06-27 16:42) [6]

>Юрий Федоров © (27.06.03 16:19)

а откуда тогда я изображения грузить буду?... ну бог с ним

нашел где вываливается: убираю ico.Free; и все работает, странно, но факт.


 
Юрий Федоров   (2003-06-27 16:53) [7]

>>а откуда тогда я изображения грузить буду?... ну бог с ним
ReadComponentResFile создает объект, создавать его не надо

правильно будет так :

//ico := Ticon.Create;
...
for i := 0 to st.Count-1 do begin
ico := Ticon.Create;
im.GetIcon(i,ico);
ListBox2.Items.AddObject(st[i], ico);
...
// ico.Free;

И не забудь, когда будешь очищать ListBox2.Items, сначала освободить все иконки, которые в его Objects"ах



 
Юрий Федоров   (2003-06-27 16:53) [8]

>>ReadComponentResFile создает объект, создавать его не надо
В смысле перед этим самому создавать не надо


 
Edvard   (2003-06-27 17:04) [9]

в ReadComponentResFile("icolist.bin", im) кроме всего прочего указывается имя файла из которого идет чтение (куда ранее были сохранены иконки - WriteComponentResFile("icolist.bin",im)), не знаю как в теории, но только что последовал твоему совету, результат заполнения: только строки и никаких иконок.


 
Юрий Федоров   (2003-06-27 17:35) [10]

>>Edvard © (27.06.03 17:04)
насчет создания я несколько погорячился. ТО есть можно передать nil вторым параметром, либо оставить так как написано. А насчет создания \ освобождения иконок я прав


 
Edvard   (2003-06-27 18:48) [11]

ОК, спасибо!



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

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

Наверх





Память: 0.47 MB
Время: 0.009 c
4-31579
Still Swamp
2003-05-08 18:46
2003.07.10
Thread


11-31167
lamachok
2002-10-27 22:32
2003.07.10
ПОЧТА


14-31504
Silentium!
2003-06-19 17:29
2003.07.10
процессы


7-31550
Алексей
2003-04-29 09:31
2003.07.10
Работа с чужими приложеними


4-31563
Петр
2003-05-11 11:19
2003.07.10
Сообщения на обработку нажатия клавиш





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский