Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1312550454
DevilDevil
2011-08-05 17:20
2011.11.27
Описание формата XLSX


2-1312809401
Onyx2012
2011-08-08 17:16
2011.11.27
Drag&amp;Drop в Express Quantum Grid


2-1312652888
Gu
2011-08-06 21:48
2011.11.27
Динамический массив


4-1252429299
Дмитрий
2009-09-08 21:01
2011.11.27
Удаление кнопки при ее нажатии


15-1310580284
Leon-Z
2011-07-13 22:04
2011.11.27
Любимая детская сказка.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский