Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Динамичесткое обращение к компаненту

1.3K
17 ноября 2005 года
Dissident
73 / / 05.03.2003
Вобщем на форме есть несколько копмпанентов ну например Table1 Table2 Table3.
Как можно написать функцию, что-бы в нее передавался номер компанента, в данном случаи 1, 2,3
Ну типа того:

а(i=1)
{
Table->(ну че-то делаем наприме с ней)
}

Подскажите, никак не могу допереть...
276
17 ноября 2005 года
Rebbit
1.1K / / 01.08.2005
Цитата:
Originally posted by Dissident
Вобщем на форме есть несколько копмпанентов ну например Table1 Table2 Table3.
Как можно написать функцию, что-бы в нее передавался номер компанента, в данном случаи 1, 2,3
Ну типа того:

а(i=1)
{
Table->(ну че-то делаем наприме с ней)
}

Подскажите, никак не могу допереть...


Создай масив етих компонентов и обращайся к ним по индексу :)

1
18 ноября 2005 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by Dissident
Вобщем на форме есть несколько копмпанентов ну например Table1 Table2 Table3.
Как можно написать функцию, что-бы в нее передавался номер компанента, в данном случаи 1, 2,3
Ну типа того:

а(i=1)
{
Table->(ну че-то делаем наприме с ней)
}

Подскажите, никак не могу допереть...


У компонента во первых есть свойство Tag - которое можно(и нужно ) использовать в данном случае.

Rebbit

Цитата:
Создай масив етих компонентов и обращайся к ним по индексу


Форма сама является контейнером внутри которого можно обращатся к элементам по индексу. Зачем еще массив?

Код:
int ContrlCount < Form1->ControlCount;
int tg;
if(int i=0;i < ContrlCount;i++){
tg  = Form1->Controls->Tag;
 //Ну а дальше уже работаешь с конкретными компонентами.
 switch(tg){
  case 0:
  ((TEdit*)Form1->Controls)->Text = "Ok";
  break;
  case 1:
  ((TLabel*)Form1->Controls)->Caption = "1";
  break;
  case 2:
 
  ...
 }
}

Если используешь компонент который не наследует от TControl - то естественно вместо ControlCount ComponentCount и обращатся к Components[]
1.3K
18 ноября 2005 года
Dissident
73 / / 05.03.2003
А значение Tag соответствует индексу элемента?

Например у меня есть компанент Query16 значения Tag у него 16, он находится на форме Tables, мне надо до него добраться, но на строке
int count = ((TQuery*)Tables->Controls[q])->RecordCount;

вылетает ошибка
"Access violation at 0x4be43541: read of adress 0xd098e990"

Может ли это быть потому что функция находится не на форме Tables, а на другой? Или в чем может быть причина? q кстати равно 16.
1
18 ноября 2005 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by Dissident
А значение Tag соответствует индексу элемента?

Например у меня есть компанент Query16 значения Tag у него 16, он находится на форме Tables, мне надо до него добраться, но на строке
int count = ((TQuery*)Tables->Controls[q])->RecordCount;

вылетает ошибка
"Access violation at 0x4be43541: read of adress 0xd098e990"

Может ли это быть потому что функция находится не на форме Tables, а на другой? Или в чем может быть причина? q кстати равно 16.


Прочитай плиз мой пост до конца -

Цитата:
Если используешь компонент который не наследует от TControl - то естественно вместо ControlCount ComponentCount и обращатся к Components[]


У тебя как раз тот случай. При условии конечно - что Tables в данный момент у тебя реально существует. Вобщето как раз для таких случаев лучше использовать DataModule или фрейм, а ни как не форму.

276
18 ноября 2005 года
Rebbit
1.1K / / 01.08.2005
Цитата:
Originally posted by kot_
Вобщето как раз для таких случаев лучше использовать DataModule или фрейм, а ни как не форму.


Может я чурбан неотесаный, но если у нево ети компоненты одного типа, то почему не взять елементарный масив, а использовать все ети (непонятно как роботающие) сложные вещи.
Простота залог успеха.

1
18 ноября 2005 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by Rebbit
Может я чурбан неотесаный, но если у нево ети компоненты одного типа, то почему не взять елементарный масив, а использовать все ети (непонятно как роботающие) сложные вещи.
Простота залог успеха.


Простота говорят - хуже воровства :)
Почему непонятно как работающие? Можно формировать конечно массивы с указателями - но почему ты в таком случае уверен, что знаешь как работают эти массивы? :) И где здесь та простота - если ты формируешь структуру параллельную существующей? Ведь по сути - твой массив не приводит к уменьшению размера программы, не повышает ее эффективность - ты ведь форму будешь использовать по прежнему. Не приводит кстати к более надежной работе - потому как у тебя появляется дополнительный объект для которого будет выделятся память, состояние которого нужно контролировать и т.д.
Может быть я просто чего то не учел -плиз объясни.

1.3K
18 ноября 2005 года
Dissident
73 / / 05.03.2003
Да, на самом деле нужно было просто использовать Components[] вместо Controls[].
Огромное спасибо.
А массив я тоже не вижу смысла создавать, а так бы создал уже давно :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог