![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Доброго времени суток.
Создаю картинки на форме (мобильное приложение): Код:
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 в первом листинге). Такое ощущение, что объекты не были удалены, либо информация об их имени хранится в программе. Что делать? |
|
#2
|
||||
|
||||
|
Я бы использовал православный TObjectList для списка объектов и не присваивал бы имени динамически создаваемым компонентам.
|
|
#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; |