|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Firemonkey уничтожение динамических объектов
Доброго времени суток.
Создаю картинки на форме (мобильное приложение): Код:
for i := 0 to 17 do begin NewEntered_Img[i]:= TImage.Create(MainForm.ScrollBox_Content); NewEntered_Img[i].Scale.X:= 2; NewEntered_Img[i].Scale.y:= 2; NewEntered_Img[i].Position.X:= NewEntered_Img_Grid[i,0]; NewEntered_Img[i].Position.Y:= NewEntered_Img_Grid[i,1]; NewEntered_Img[i].Visible:= true; NewEntered_Img[i].BringToFront; NewEntered_Img[i].Parent:= MainForm.ScrollBox_Content; NewEntered_Img[i].Name:= 'NewEnteredImg'+IntToStr(i); NewEntered_Img[i].OnClick:= MainForm.MainMenuImageClick; end; Далее их необходимо удалить: Код:
if NewEntered_Img[0] <> NIL then begin for i := 0 to 17 do begin NewEntered_Img[i].Parent:= nil; NewEntered_Img[i].Free; NewEntered_Img[i]:= nil; end; end; В ходе работы программы возникает необходимость вновь создать эти картинки, но при повторном выполнении первого кода, программа вылетает на выполнении кода (строка 10 в первом листинге). Такое ощущение, что объекты не были удалены, либо информация об их имени хранится в программе. Что делать? |
#3
|
||||
|
||||
так сам ScrollBox_Content уже имеет контейнер в виде свойства Components. можно его использовать для доступа к элементам TImage и удаления их. если есть еще какие-то TImage на нем, которые не должны при этом учитываться, можно использовать наследника от TImage.
Пишу программы за еду. __________________ |
#4
|
|||
|
|||
[quote=NumLock]так сам ScrollBox_Content уже имеет контейнер в виде свойства Components. можно его использовать для доступа к элементам TImage и удаления их. если есть еще какие-то TImage на нем, которые не должны при этом учитываться, можно использовать наследника от TImage.[/QUOTE
Всем спасибо. А пример есть? |
#5
|
|||
|
|||
а почему на NIL проверяется NewEntered_Img[0]
А удаляется затем NewEntered_Img[i].Free |
#6
|
|||
|
|||
Удаляется всегда все кучей. Если [0] = NIL, то все остальные тоже NIL.
|
#7
|
||||
|
||||
создать:
Код:
var i: Integer; img: TImage; begin for i:=0 to 24 do begin img:=TImage.Create(ScrollBox1); img.Parent:=ScrollBox1; img.Picture.LoadFromFile('d:\Картинки\Разное\apple.bmp'); img.AutoSize:=True; img.Left:=(i mod 4)*img.Width; img.Top:=(i div 4)*img.Height; end; end; Код:
var i: Integer; begin for i:=ScrollBox1.ComponentCount-1 downto 0 do if ScrollBox1.Components[i] is TImage then TImage(ScrollBox1.Components[i]).Free; end; Пишу программы за еду. __________________ |