Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TStrings и Objects, Не пойму как это работает. 
:(
    Опции темы
ErManDir
  Дата 10.6.2005, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 11.12.2003

Репутация: нет
Всего: нет



Есть код
Код

  png:=TPNGObject.Create;
  img:=TBitmap.Create;
  try
    png.LoadFromFile('img\status.png');
    img.Assign(png);
    for I := 0 to 6 do
    begin
      img.Assign(png);
      crop(img,i); //Здесь я отрезаю часть картинки
      StatusList.AddObject( IntToStr(I) ,img); //Сую его в StringList;
    end;
  finally
    png.Free;
    img.Free; //Если тут заменить, Free на FreeImage, то потом эксепшена нет, но во всех записях одня и та же картинка. 
  end;


После этого при вызове:
Код

img:=TBitmap(StatusList.Objects[I]); //Эксепшн.

Как я понимаю, когда я засовываю объект в StringList через переменную. Она продолжает держать ссылку на объект, так что если потом, я скажу переменной Free, то и объект в Листе тоже изчезнет.
Так вот, просвятите меня, проведите ликбез, как это сделать по науке?.
PM MAIL ICQ YIM   Вверх
_hunter
Дата 10.6.2005, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



тут:
img.Free;
ты хрохаеш тот объект, что добавляеш в StatusList


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
ErManDir
Дата 10.6.2005, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 11.12.2003

Репутация: нет
Всего: нет



Цитата(_hunter @ 10.6.2005, 16:06)
хрохаеш тот объект, что добавляеш в StatusList

Это я понял. Вопрос в том как же поступить?
Как мне отцепить переменную от засунутого объекта?
А можно сделать так?
Код

  TBitmap(StringList.Objects[I]):=TBitmap.Create;
  TBitmap(StringList.Objects[I]).Assign(img);

Как думаете?
PM MAIL ICQ YIM   Вверх
_hunter
Дата 10.6.2005, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



читаем справку:
Цитата
The TStrings object does not own the objects in the Objects array. Objects added to the Objects array still exist even if the TStrings object is destroyed. They must be explicitly destroyed by the application.

вывод -- нужно добавлять копию объекта


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
p0s0l
Дата 10.6.2005, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Должно быть так:
Код

  png:=TPNGObject.Create;    
  try    
    png.LoadFromFile('img\status.png');    
    for I := 0 to 6 do    
    begin    
      img:=TBitmap.Create;    
      img.Assign(png);    
      crop(img,i); //Здесь я отрезаю часть картинки    
      StatusList.AddObject( IntToStr(I) ,img); //Сую его в StringList;    
    end;    
  finally    
    png.Free;    
  end;
(таким кодом создастся 7 разных объектов и засунутся в StatusList... Если нужно, чтобы 7 раз добавился один и тот же объект (одна и та же картинка), то делай как у тебя было, только не делай img.Free)



--------------------
С уважением, г-н Посол.
PM   Вверх
ErManDir
Дата 14.6.2005, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 11.12.2003

Репутация: нет
Всего: нет



Огромное спасибо. А я что-то совсем не догадался про "Создаю новый объект на старыую ссылку, кладу, опять новый объект на старую ссылку". Еще раз Сенкс. smile smile
PM MAIL ICQ YIM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0451 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.