Главная страница
    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


4-1251872844
cerber
2009-09-02 10:27
2011.11.27
как заставить сервис загружаться в защищенном режиме ХР?


2-1312203505
Guest1
2011-08-01 16:58
2011.11.27
drag and drop из webbrowser в listbox


15-1312444465
OW
2011-08-04 11:54
2011.11.27
Почему Excel не дает открыть файлы с одинаковыми именами?


2-1312652888
Gu
2011-08-06 21:48
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский