Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2009, 10:36   #1
neizerth
 
Регистрация: 14.02.2009
Сообщений: 9
По умолчанию TImage & TLabel

Есть два динамических массива (TImage & TLabel) из n элементов
Как динамически связать i элемент массива TImage и i элемент массива TLabel чтобы при щелчке на i-ом элементе TImage вызывался обработчик для i-ого элемента TLabel?
Код:
...
LabelArray[j]->OnClick = Label1Click;
imgArray[j]->OnClick = LabelArray[j]->OnClick;
...
void __fastcall TForm2::Label1Click(TObject *Sender)
{
Edit1->Text = dir+"\\"+((TLabel*)(Sender))->Caption;
Form1->Quest3DCtlr21->SetChannelText(WideString("manchester"),WideStrin g("TextureFilename"),WideString(Edit1->Text));
Form1->Quest3DCtlr21->SetChannelValue(WideString("manchester"),WideStri ng("ValueLoad"),1);
}
Модератор: тег CODE

Последний раз редактировалось MaTBeu; 15.02.2009 в 10:52.
neizerth вне форума Ответить с цитированием
Старый 15.02.2009, 10:59   #2
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Вам нужно создавать массив указателей на TLabel и TImage.
А вот такая конструкция
Код:
LabelArray[j]->OnClick = Label1Click;
imgArray[j]->OnClick = LabelArray[j]->OnClick;
вполне даже работает.

Тоесть вам нужно сначала написать вот так
Код:
TLabel **Labels;
Labels = new TLabel*[20];
а потом каждому элементу этого массива присваивать указатель на соответствующий компонент на форме.

Последний раз редактировалось MaTBeu; 15.02.2009 в 11:06.
MaTBeu вне форума Ответить с цитированием
Старый 15.02.2009, 11:21   #3
neizerth
 
Регистрация: 14.02.2009
Сообщений: 9
По умолчанию

Дело в том, что

Код:
LabelArray[j]->OnClick = Label1Click;
imgArray[j]->OnClick = LabelArray[j]->OnClick;
приводит к тому, что обработчик события не помещает в Edit1 заголовка TLabel...Поле остается заполненным только переменной dir

А касательного вашего кода, могли бы вы более подробно рассказать о том, что требуется сделать? Приношу извинения за неграмотность в подобном вопросе...
neizerth вне форума Ответить с цитированием
Старый 15.02.2009, 12:11   #4
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Вам нужно получить текст на метке?
Тогда вот так пробуйте
Edit1->Text = Label1(Sender).Caption;
MaTBeu вне форума Ответить с цитированием
Старый 15.02.2009, 12:21   #5
0nni
Форумчанин
 
Аватар для 0nni
 
Регистрация: 24.07.2008
Сообщений: 279
По умолчанию

Возможно поле Tag поможет.
Сказал и загрустил от бесспорности своей правоты.
0nni вне форума Ответить с цитированием
Старый 15.02.2009, 12:30   #6
neizerth
 
Регистрация: 14.02.2009
Сообщений: 9
По умолчанию

А как возможно поле Tag элемента TImage связать с полем Tag элемента TLabel?
neizerth вне форума Ответить с цитированием
Старый 15.02.2009, 12:38   #7
0nni
Форумчанин
 
Аватар для 0nni
 
Регистрация: 24.07.2008
Сообщений: 279
По умолчанию

С самим label. С с++ плохо знаком но кажется что то вроде этого
Код:
Image1.tag = (int)Label1;
Посде этого в поле tag хранится указатель на сам объект.
Доступ к объекту вроде этого
Код:
((TLabel)Image1.tag).Caption = "New label caption"
Таким образом у тебя остаться массив TImage и все.

Если кто знает - поправьте код.

А еще, почему бы в в массиве не хранить структуру с двумя указателями?
Сказал и загрустил от бесспорности своей правоты.

Последний раз редактировалось 0nni; 15.02.2009 в 12:41.
0nni вне форума Ответить с цитированием
Старый 15.02.2009, 13:14   #8
neizerth
 
Регистрация: 14.02.2009
Сообщений: 9
По умолчанию

Я не работал с указателями, поэтому не понимаю, как организовать подобную связь.
Собственное решение было таковым:
Код:
void __fastcall TForm2::Image2Click(TObject *Sender)
{
int tag = ((TImage*)(Sender))->Tag;

        for (int m =0;m <=j;m++)
        {
                if (LabelArray[m]->Tag == tag)
                {
                LabelArray[m]->Color = 0xFFD700;
                Form1->Quest3DCtlr21->SetChannelText(WideString("manchester"),WideString("TextureFilename"),WideString(dir+"\\"+LabelArray[m]->Caption));
                Form1->Quest3DCtlr21->SetChannelValue(WideString("manchester"),WideString("ValueLoad"),1);
                }
                else
                LabelArray[m]->Color = clBtnFace;
        }
}
neizerth вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с MVC++ 2005 && 2008 на висте NetGod Софт 1 09.08.2008 17:14
Delphi & Access & Ole vodila БД в Delphi 0 15.07.2008 11:11
Tlabel Artificial Общие вопросы Delphi 4 16.06.2008 01:31
TLabel satana Компоненты Delphi 3 10.02.2008 22:01
работа с Tlabel Аббат Общие вопросы Delphi 18 18.04.2007 13:56