Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

динамический массив из компонентов [D7, WinXP]


Suvit ©   (2005-01-20 11:20:00) 

есть такой код для Билдера

 Memo* memos[]={Memo1,Memo2};
 memos[((TComponent*)Sender)->Tag]->Lines->LoadFromFile

Подскажите как его переделать для Delphi, интересует как можно в делфи легко создать массив из некоторых компонентов формы.


Suvit   (2005-01-20 12:32:00) [1]

да я уже TObjectList взял, только получать из него плохо, все время кастовать приходиться


Poirot   (2005-01-20 11:58:00) [2]

Сделай проще. Сделай не массив а что-то типа списка связангого и работай сн им, а для удобства инкапсулируй это всё в какой нить класс и сделай у него дефолтным свойство напрмиер

property Items[Index:Integer]:TMemo read GerProc write GetProc; default;

и всё буит так как ты хочешь:) ООП блин:)


Suvit   (2005-01-20 11:53:00) [3]


> неа... не динамический... при таком объявлении это статика..
> ибо память видуляется в стеке под этот массив, а вот если
> делать через new тогда просто так присвоить не получится...
> конечно я ненаю, что там борланд с С придумал в биледре,
> но в С всю жизть было так именно:)
> (Memo*)* memos - это совершенно другое объявление

понял, можно вызывать TMemo.Create
только им потом leftы и topы надо будет выставлять, что лень сделать :))


Style   (2005-01-20 11:47:00) [4]

На наслаждайся :)))

type
 TMemoArray = array of TMemo;

...

function TForm1.AddArr(const Args: array of TMemo): TMemoArray;
begin
 SetLength(result, Length(Args));
 CopyMemory(result,@Args, sizeof(Args));
end;

procedure TForm1.Button1Click(Sender: TObject);
var
ar: TMemoArray;
begin
 ar := AddArr([Memo1, Memo2,Memo3]);

 ar[0].Lines.Text := 'Ops';
end;


Poirot   (2005-01-20 11:47:00) [5]

неа... не динамический... при таком объявлении это статика.. ибо память видуляется в стеке под этот массив, а вот если делать через new тогда просто так присвоить не получится...
конечно я ненаю, что там борланд с С придумал в биледре, но в С всю жизть было так именно:)
(Memo*)* memos - это совершенно другое объявление


Suvit   (2005-01-20 11:44:00) [6]


> ЗЫ:
> >>Memo* memos[]={Memo1,Memo2};
> По IMHO Это не динамический массив, а как раз статический:)
> елси я ничего не путаю)

+1
динамический как так
 (Memo*)* memos


Poirot   (2005-01-20 11:37:00) [7]

ЗЫ:
>>Memo* memos[]={Memo1,Memo2};
По IMHO Это не динамический массив, а как раз статический:) елси я ничего не путаю)


Poirot   (2005-01-20 11:32:00) [8]

боюсь что нет... хотя в последних делфях аля 2005 всё мб и возможно...


Suvit   (2005-01-20 11:32:00) [9]


> А это что ни руками???
>
> А тебе какая разница как руками вводить - Так или Сяк ???
> :)))

понял, буду использовать TComponent.Conponents


Style   (2005-01-20 11:30:00) [10]


> а как нибудь так
> memos = [ Memo1, Memo2, ... Memo100];
> нельзя?

А это что ни руками???

А тебе какая разница как руками вводить - Так или Сяк ??? :)))


Suvit   (2005-01-20 11:27:00) [11]

т.е. в если мемов будет к примеру 100 мне надо каждый элемент завоить руками?

а как нибудь так
memos = [ Memo1, Memo2, ... Memo100];
нельзя?


Poirot   (2005-01-20 11:24:00) [12]

memo : array of TMemo
SetLength(memo, 2);
memo[0] = Memo1;
memo[1] = Memo2;
Что-то вроде этого..
memos[((Sender as TComponent ).Tag].Lines.LoadFromFile()


Наверх

Титульная страница Поиск, карта сайта Написать письмо