Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.07;
Скачать: CL | DM;

Вниз

Как удалять динамически создаваемые кнопки?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.029 c
1-1098788125
Alexious
2004-10-26 14:55
2004.11.07
Массивы


1-1098201922
GanibalLector
2004-10-19 20:05
2004.11.07
Pchar


14-1098201489
kaZaNoVa
2004-10-19 19:58
2004.11.07
Замедление .. как реализовать ?


6-1093288647
Alaman
2004-08-23 23:17
2004.11.07
Как скачать файл из интернета по HTTP?


6-1094135174
Good
2004-09-02 18:26
2004.11.07
Для чего используются прокси-серверы?