Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.10;
Скачать: CL | DM;

Вниз

Проблема с считыванием из файла и заполнением 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.015 c
3-31123
GIL
2003-06-17 22:10
2003.07.10
Почему нет коннекта


1-31316
NikB
2003-06-26 01:54
2003.07.10
Помогите пожалуста сделать Print Preview в TChart!


14-31473
Dimkin
2003-06-24 11:14
2003.07.10
А кто работа с Oracle? Есть вопросик ..


1-31241
Всеволод Соловьёв
2003-06-28 23:11
2003.07.10
Как у TRichEdit убрать выделение?


14-31451
shuba
2003-06-21 10:29
2003.07.10
Регулярные выражения