![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
динамическое создание 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;