Форум: "Начинающим";
Текущий архив: 2011.11.27;
Скачать: [xml.tar.bz2];
ВнизДинамический массив Найти похожие ветки
← →
Gu (2011-08-06 21:48) [0]Допустим есть некий массив определенный как
Type
MyType=<какойто невизуальный компонент>;
Var
MyArray:Array of MyType;
MyArrayLength:integer=0;
работаем с ним так
Procedure AddMyArray(Owner:TForm);
begin
inc(MyArrayLength);setLength(MyArray,MyArrayLength);
MyArray[MyArrayLength-1]:=TMyType.create(owner);
end;
допустим создали для 3х форм эти компоненты
AddMyArray(Form1);AddMyArray(Form2);AddMyArray(Form3);
Удаляю так:
Procedure DelMyArray(Owner:TForm);
var i:integer;
begin
for i:=0 to MyArrayLength-1 do
if MyArray[i]<>nil then if MyArray[i].owner=Owner then begin MyArray[i].Free;MyArray[i]:=nil;break;end;
end;
// use
DelMyArray(Form2);
Но так получается, что массив все время растет. Вопрос: как удалить компонет для формы Form2, вырезав из массива этот итем, а не приравнивая его к nil? Т.е. нужно не просто обнулить элемент массива, но еще и вырезать его, аналогично Stringlist[i].delete; Это можно сделать или может есть другой способ все это реализовать?
Задача: в произвольном порядке создавать компоненты для разных форм и в произвольном же порядке их уничтожать. Сделал через массив, может как то еще можно?
← →
Gu (2011-08-06 21:51) [1]Число форм, порядок добавления и уничтожения - неизвестны.
← →
Servy © (2011-08-06 22:04) [2]TObjectList из модуля Contnrs либо его шаблонный вариант из модуля Generics.Collections в новых версиях Делфи будет куда лучшей альтернативой этому на редкость кривому велосипеду.
← →
Gu (2011-08-06 22:05) [3]спасибо
← →
_Юрий (2011-08-07 10:53) [4]
> Вопрос: как удалить компонет для формы Form2, вырезав из
> массива этот итем, а не приравнивая его к nil? Т.е. нужно
> не просто обнулить элемент массива, но еще и вырезать его,
> аналогично Stringlist[i].delete
разрушить.
MyComponent.Free;
при этом он автоматически уберется из формы.
← →
Юрий Зотов © (2011-08-07 12:14) [5]
> _Юрий (07.08.11 10:53) [4]
>> Вопрос: как удалить компонет для формы Form2, вырезав
>> из массива этот итем, а не приравнивая его к nil? Т.е. нужно
>> не просто обнулить элемент массива, но еще и вырезать его
> разрушить.
> MyComponent.Free;
> при этом он автоматически уберется из формы.
А из массива? Вопрос-то об этом.
> Gu
Правильно сказано в [2] - используйте не массив, а готовый контейнер TObjectList или TComponentList. Что лучше подойдет - решать Вам, а описание этих классов есть в справке.
← →
Gu (2011-08-07 12:18) [6]сделал через Generics.Collections - даже не знал что такая новинка есть. отлично работает. тут вот примерчег есть: http://blog.kansoftware.ru/?p=4
← →
_Юрий (2011-08-07 12:35) [7]
> Юрий Зотов © (07.08.11 12:14) [5]
Да, что-то я затупил
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.11.27;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.004 c