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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2022, 09:10   #1
reaque
 
Регистрация: 06.04.2009
Сообщений: 4
По умолчанию Динамически обратиться к свойствам

Хочу создать процедуру, которая будет присваивать одному из свойств объекта Edit определенное текстовое значение.
Например, для объекта Edit1 через выполнение процедуры хочу в зависимости от условия передавать текстовое значение либо в свойство Text, либо Hint.

proc(String property)
{
Edit1->PROPERTY = "Какой-то текст";
}

*property - текстовая переменная, которая содержит наименование свойства объекта.

вызов процедуры proc("Text"); - результат в Edit1->Text должен встать "Какой-то текст".
вызов процедуры proc("Hint"); - результат в Edit1->Hint должен встать "Какой-то текст".

Как это реализовать?

Последний раз редактировалось reaque; 14.12.2022 в 12:13.
reaque вне форума Ответить с цитированием
Старый 14.12.2022, 09:32   #2
Valick
Форумчанин
 
Регистрация: 27.04.2022
Сообщений: 491
По умолчанию

Честно говоря непонятно чего вы хотите добиться, но возможно вы хотите это https://www.techiedelight.com/ru/dif...c-binding-cpp/
Valick вне форума Ответить с цитированием
Старый 21.12.2022, 16:00   #3
reaque
 
Регистрация: 06.04.2009
Сообщений: 4
По умолчанию

Мне нужно загружать данные из БД в зависимости от логики приложения то в свойство Hint, то в свойство Text. Мне приходится сейчас держать 2 процедуры практически одинаковых по тексту, хотелось бы заменить на одну универсальную, чтобы свойство объекта передавалось через переменную.

Код:
void __fastcall TForm1::db_hint(String forma, int k)
{
	for(int i=2; i<=k; i++)
	{
			TEdit *e = (TEdit*)(FindComponent(forma + "_Edit" + lpad(IntToStr(i), 2)));
			e->Hint = OraQuery1->Fields->FieldByNumber(i+1)->AsString;
	}
}
Код:
void __fastcall TForm1::db_text(String forma, int k)
{
	for(int i=2; i<=k; i++)
	{
			TEdit *e = (TEdit*)(FindComponent(forma + "_Edit" + lpad(IntToStr(i), 2)));
			e->Text= OraQuery1->Fields->FieldByNumber(i+1)->AsString;
	}
}
Фактически тело одной только процедуры на страницу, хотелось бы все-таки оптимизировать код.
Хотелось бы, чтобы получилось примерно так:
Код:
void __fastcall TForm1::db(String forma, int k, String PROPERTY)
{
	for(int i=2; i<=k; i++)
	{
			TEdit *e = (TEdit*)(FindComponent(forma + "_Edit" + lpad(IntToStr(i), 2)));
			e->PROPERTY = OraQuery1->Fields->FieldByNumber(i+1)->AsString;
	}
}

Последний раз редактировалось reaque; 21.12.2022 в 16:05.
reaque вне форума Ответить с цитированием
Старый 22.12.2022, 21:15   #4
jillitil
Форумчанин
 
Аватар для jillitil
 
Регистрация: 17.10.2018
Сообщений: 184
По умолчанию

... получилось примерно так:
Код:
void __fastcall TForm1::db(String forma, int k, BOOL ForHint)
{
	for(int i=2; i<=k; i++)
	{
			TEdit *e = (TEdit*)(FindComponent(forma + "_Edit" + lpad(IntToStr(i), 2)));
			(ForHint?(e->Hint):(e->Text)) =  OraQuery1->Fields->FieldByNumber(i+1)->AsString;
	}
}
jillitil вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение размера динамически созданного StringGrid на динамически созданной форме loom12 Общие вопросы Delphi 2 08.09.2014 15:35
Доступ к свойствам каталога artemavd Общие вопросы Delphi 3 21.04.2013 16:41
Как обратиться к свойствам Sharepoint в Word через VBA макрос? Kypo Microsoft Office Word 2 06.10.2011 12:06
Как обратиться к динамически созданному объекту, изменить его? 2bfree Общие вопросы Delphi 3 24.07.2011 14:06
Методы доступа к свойствам diliana Помощь студентам 8 08.02.2010 14:56