Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.119.107.96] |
|
Сообщ.
#1
,
|
|
|
Имеется н-ное количество разношерстных vcl компонентов в которых нужно менять текстовое поле. Можно ли создать указатели на поля в массив, что бы потом менять эти значения через массив.
Пример до: Label1->Caption= "aaa"; Edit1->Text= "bbb"; Пример после занесения указателей в массив: PText[0] ="aaa"; PText[1] ="bbb"; Соответсвенно в элементах поменялся текст. |
Сообщ.
#2
,
|
|
|
Нельзя. Все текстовые поля - область владения компонента, поэтому когда вы меняете строку, то меняется и сам класс TWideChar или вроде того. А, задавая изменение через внешнее PText=..., вы, тем самым, желаете извне распоряжаться классом строки, что неправильно с т.з. компонента.
Можно, конечно, засунуть в каждую строку длиннющую последовательность, а потом заполучить .c_str() - указатель на wchar_t, и затем в нём шалить аки вздумается, но ход сей весьма кривоват... |
Сообщ.
#3
,
|
|
|
Цитата mishapk @ Имеется н-ное количество разношерстных vcl компонентов в которых нужно менять текстовое поле. Можно ли создать указатели на поля в массив, что бы потом менять эти значения Наверное, надо попробовать сделать классы-адаптеры для объектов типа "Label1" и "Edit1"; Определить интерфейс типа "присвоить строку" и указать для него метод "operator=". У адаптеров-наследников интерфейса "присвоить строку" реализовать операцию "operator=", которая и будет для каждого указанного типа объекта делать необходимое: Label1->Caption= "aaa"; или Edit1->Text= "bbb"; После чего, определить массив указателей на интерфейсы "присвоить строку", занести туда указатели на адаптеры, которые будут преобразованы к типу интерфейса "присвоить строку". Как-то так. ----- Вариант 2: Делаем класс-адаптер, который работает одновременно со всеми необходимыми типами указателей. Используем массив адаптеров. И это всё. |