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

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

динамическое создание Tstringgrid [D7, XP]


Daimyo ©   (2006-04-05 10:44:00) 

Здравствуйте вот возникла такая проблема, можно ли динамически создать Таблицы (TStringgrid) из одной формы на другой. поясняю :)
необходжимо по мере выполнения программы создавать таблицы явно больше 2-х количество не ограничено , в программе есть две формы жмем кнопку на одной и в это время на другой форме должны появится таблиццы количество как я сказал не ограничено,
я пробовал делать но почему то они у меня не появлялись, никаких ошибок не вылазило просто при открытии второй формы таблиц небыло  ( вот пример кода:

var
a:array[1..10] of TStringgrid;
i,k:integer;
begin
i:=10
for k:=1 to i do
begin
a[k]:=TstringGrid.create(form2);
a[k].name:='somename'+inttostr(k);
a[k].left:=form2.left+20+k;
a[k].top:=form2.top+20+k;
a[k].visible:=true;
end;
end;

ошибок никаких не появлялось но при вызове form2.show; таблиц на ней не обнаружено (
помогите пожалуйста


daimyo   (2006-04-07 14:17:00) [1]


> >a[k].free;
> >- это не работает )
>
> Работает (в цикле по всему массиву, конечно)

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


daimyo   (2006-04-07 14:16:00) [2]


> Если есть необходимость порождать произвольное кол-во однотипных
> объектов, принимающих (обрабатывающих) разные данные, ИМХО,
>  рационально использовать фрэйм не только собственно с объектами
> (стрингрид, кнопки и т.д.), но и полной реализацией всего
> функционала. В фрэйме по необходимости предусмотреть переменные-
> указатели, куда после создания записать адреса объектов-
> приемников или источников данных, посредством которых код
> фрэйма будет обмениваться информацией с другими модулями
> (формами).
> При этом не надо как-то идентифицировать эти фрэймы ибо
> каждый из них будет знать "что и как делать"


эх хорошо сказано но я понятия не имею что такое фрейм (


daimyo   (2006-04-07 14:15:00) [3]


> Работает (в цикле по всему массиву, конечно)

rконечно всеэто в цикле но не работает :(


MsGuns   (2006-04-07 13:12:00) [4]

Если есть необходимость порождать произвольное кол-во однотипных объектов, принимающих (обрабатывающих) разные данные, ИМХО, рационально использовать фрэйм не только собственно с объектами (стрингрид, кнопки и т.д.), но и полной реализацией всего функционала. В фрэйме по необходимости предусмотреть переменные-указатели, куда после создания записать адреса объектов-приемников или источников данных, посредством которых код фрэйма будет обмениваться информацией с другими модулями (формами).
При этом не надо как-то идентифицировать эти фрэймы ибо каждый из них будет знать "что и как делать"


MBo   (2006-04-07 12:42:00) [5]

>a[k].free;
>- это не работает )

Работает (в цикле по всему массиву, конечно)


daimyo   (2006-04-07 10:18:00) [6]

гуд все работает
а как убить эти таблицы ??

a[k].free;

- это не работает )

a[k].destroy;

тоже не работает

тогда как ?? ) подскажите плз


MBo   (2006-04-06 15:54:00) [7]

да не надо case

T:= (Sender as TComponent).Tag;
N:=a[T].RowCount;


daimyo   (2006-04-06 15:40:00) [8]


> Для 10 таблиц, IMHO, лучше использовать не цикл, а
>
> Case (Sender as TComponent).Tag of

ну да это понятно просто уточнил :)


Amoeba   (2006-04-06 15:39:00) [9]


> daimyo   (06.04.06 15:29) [4]

Для 10 таблиц, IMHO, лучше использовать не цикл, а

Case (Sender as TComponent).Tag of


MBo   (2006-04-06 15:36:00) [10]

>те в этом обработчике событий делать цикл по перебору соответсвий a[k].tag и (Sender as TComponent).Tag и если равны то это та самая таблоица так ?? )

Проще всего при создании назначить Tag - равным индексу в массиве, тогда ничего и сравнивать не надо

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


daimyo   (2006-04-06 15:29:00) [11]


> Присваивай св-ву Tag таблицы уникальное значение, а потом
> по нему идентифицируй, какая таблица вызвала событие, приводя
> Sender к TComponent.
>
> (Sender as TComponent).Tag


те в этом обработчике событий делать цикл по перебору соответсвий a[k].tag и (Sender as TComponent).Tag и если равны то это та самая таблоица так ?? )


Amoeba   (2006-04-06 14:01:00) [12]

Присваивай св-ву Tag таблицы уникальное значение, а потом по нему идентифицируй, какая таблица вызвала событие, приводя Sender к TComponent.

(Sender as TComponent).Tag


daimyo   (2006-04-06 13:27:00) [13]


> Жуков Олег   (05.04.06 10:55) [1]
>
> a[k].Parent := Form2;


большое спасибо помогло :)
а как для каждой вновь созданной таблицы прописать событие
те вот что есть :

procedure SGaSelectCell(Sender: TObject; ACol, ARow: Integer;

 var CanSelect: Boolean);
var w:tstringgrid;
 begin

КОД

end;

те событие будет для всех одинаковое - выделение ячейки а вот как опрределить какая именно таблица вызвала его , чтоб работать с данными именно той таблицы ??
я конечно понимаю что копать надо в Sender:TObject
но вот как узнать имя таблицы с помошью его ?? у меня так и не получилось (


Жуков Олег   (2006-04-05 10:55:00) [14]

a[k].Parent := Form2;


Наверх

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