Форум: "Основная";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];
ВнизКак удалять динамически создаваемые кнопки? Найти похожие ветки
← →
Mitka (2004-10-21 07:16) [0]есть динамический массив Button : array of TSpeedButton;
устанавливаю размер SetLength(Button, cKolichestvo);
создаю элементы массива Button[P] := TSpeedButton.Create(Game.Panel);
В настройке можно менять cKolichestvo. Для этого удаляю старые, рисую новые.
Удаление:
if Form.Panel.ComponentCount >1 then Form.Panel.DestroyComponents;
Finalize(Button);
не работает. Invalid pointer operation
В цикле
for i:=0 to cKolichestvo do
begin
Button[i].Destroy;
end;
выдает Access violation at adress...
что у меня не так?
← →
Думкин © (2004-10-21 07:35) [1]http://delphimaster.net/view/9-1098286689/
← →
kostan © (2004-10-21 07:45) [2]наверно так
for i:=cKolichestvo downto 0 do
begin
if high(Button)=i+1 then
if (Button[i] is TspeedButton) then
begin
Button[i].Destroy;
setlength(Button,i);
end;
end;
← →
Mitka (2004-10-21 07:53) [3]Ошибку выдает при уничтожении не последнего элемента а третьего(?)
Если элемент массива = nil, то тоже ошибка. Я добавляю строчку if Button[i]<>nil then Button[i].Destroy;
не помогает.
← →
SergP © (2004-10-21 07:56) [4]
> for i:=0 to cKolichestvo do
> begin
> Button[i].Destroy;
> end;
Наверное:
for i:=0 to cKolichestvo-1 do
begin
Button[i].Destroy;
end;
Да и кстати (к сабжу не отностся) лучше делать
...
Button[i].free;
Button[i]:=nil;
...
← →
kostan © (2004-10-21 08:17) [5]1)может попробовать при создании
Button[P] := TSpeedButton.Create(self);
Button[P].parent:=form;
чтоб родитель сам убивал
2)
а вооще я правильно понял что после уничтожения элемента в середине не уничтожается следующий:
то тогда после Button[i].Destroy;
надо обязательно писать Button[i]:=nil (после destroy он может быть не nil - это как деструктор сделан);
3)
или как вариант уничтожать элемент индекс=i
(и соответственно смещать построчно элементы массива вверх)
← →
Rem © (2004-10-21 11:08) [6]>>чтоб родитель сам убивал
Уничтожает Owner. Parent является базой для отрисовки.
[4], [5]FreeAndNil(Button[i]);
Правильное решение - [4]:for i:=0 to cKolichestvo-1 do
← →
Sandman25 © (2004-10-21 11:25) [7]for I := Low(Button) to High(Button) do
begin
Button[i].Free;
end;
← →
Mitka (2004-10-22 04:34) [8]Спасибо всем!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.054 c