Главная страница
    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.46 MB
Время: 0.052 c
4-31560
K_O_T
2003-05-06 22:35
2003.07.10
COM интерфейс IStorage. Help!


3-31106
victor_ch
2003-06-13 10:17
2003.07.10
Подключение к MSsql серверу


14-31397
RIMMER
2003-06-23 00:58
2003.07.10
Куда уходят ветки?


3-31110
Vovik
2003-06-17 15:10
2003.07.10
Как узнать текушее Field.Name в DBGrid


3-31147
Shaman
2003-06-18 17:31
2003.07.10
Описания к кодам ошибок MSSQL





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