![]() |
|
![]() ![]() ![]() |
|
Wapo |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 13.8.2003 Репутация: нет Всего: нет |
У меня возникла следуящая проблема. На форме очень много компонентов TEdit имеющие имена Edit1, Edit2 ... Edit N. При каждой загрузке формы нужно заполнить их. Писать вручную очень долго и не очень красиво. Как можно организовать обращение к компонентам в цикле.
Это сообщение отредактировал(а) Wapo - 31.1.2005, 18:13 |
|||
|
||||
Vyacheslav |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
Обратиться то в цикле можно, только как в цикле будешь изменять то, чем их заполнить надо
![]() -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
NiJazz |
|
|||
![]() Jazz coder ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2286 Регистрация: 10.8.2003 Где: Москва Репутация: нет Всего: 23 |
Вопрос к знатокам: как привести к TEdit? |
|||
|
||||
Vyacheslav |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
Ой какой кошмар . Пoпроще нельзя? Это же С++
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
Vyacheslav |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
Кстати. Зачем использовать явно слючевое слово operator .
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
Adil' |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 26.8.2004 Где: Питер Репутация: 4 Всего: 15 |
Хочу дополнить - оба кода будут работать, только если у Edit'oв Owner'ом Form1 является (хотя обычно так и бывает
![]() З.Ы. Vyacheslav за что жы так над for'ом глумишься? Я даже с первого захода не понял как оно работает ![]() З.З.Ы. dynamic_cast -------------------- Удачи |
|||
|
||||
NiJazz |
|
||||
![]() Jazz coder ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2286 Регистрация: 10.8.2003 Где: Москва Репутация: нет Всего: 23 |
Это он будет приводить все компоненты подряд?
Тут он выдавал ошибку. |
||||
|
|||||
Vyacheslav |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
1) Он будет пытаться приводить все компоненты. Если это не удается, то Edit'у будет привоен NULL
2) Обрати внимание: у меня AnsiString clName = "TEdit"; -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
Vyacheslav
clName == Components[i]->ClassName() работать не станет потому что типа ShortString а clName AnsiString..нету такого оператора сравнивания... И зачем делать dynamic_cast??? Для dynamic_cast тебе нужно будет включить в проект RTTI (Run Time Type Information)..не очень весело...по моему так лучше...
Добавлено @ 13:50 У AnsiString -а есть оператор сравнивания, но какой в этом смысл??? обяви сразу ShortString и покончь с делом... |
|||
|
||||
Vyacheslav |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
1) Это работает по правилам С++ . Если не веришь, проверь хотя бы в тупую код. А после этого может быть найдешь объясненние. Если не найдешь, я объясню А вот ShortString оператора сравнения нет, поэтому твой код работать не будет 2) А ты пробовал собрать программу с использованием VCL без RTTI. Или ты думаешь, что ClassName обходится без RTTI? Тогда внимательно прочитай help про TObject
-------------------- С уважением, Вячеслав Ермолаев |
||||||
|
|||||||
azesmcar |
|
||||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
можно просто заменить на
У меня билдера нету, так на память помнил что вроде бы так...вот так точно работает... Вот и все, а прочесывать всю иерархию для всех обьектов dynamic_cast -ом нахожу нецелеобразным...если обьяснишь почему вышеупомянутое правильно и обоснуешь я с тобой соглашусь...dynamic_cast довольно сильно замедляет программу, в данном случае он бессмысленен, если можно проверить тип перед кастингом...а насчет RTTI я уже сказал..Пробовал, собирал, работает... |
||||||
|
|||||||
Vyacheslav |
|
||||||||||||||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
Ну-ну ![]()
Ну-ну. String, говоришь? Загляни- ка в symac.h. Это ни о чем не говорит? ![]()
Я не собираюсь выводить тебя из твоего сладкого заблужения о возможности исключить RTTI из VCL. Только вот прежде чем делать такие заявления, надо хотя бы иметь основания А в реалиях имеем следущее Вот этот код без использования VCL
При попытке отрубить RTTI не откомпилируется с выдачей ошибки и будет совершенно прав
Для этого достаточно в опциях отключить флажок Enable RTTI или в параметра ком. строки добавить -RT- А вот этот код с VCL
будет спокойно собираться и работать в любом случае: будешь ли ставить галочку или не будешь, будешь добавлять -RT- или нет. То есть если подключен VCL компилятору глубоко наплевать какие опции там стоят, ибо VCL без RTTI работать не способен и к VCLу по крайней мере его RTTI будет подключен обязательно А насчет использовать, или не использовать. Напиши мне пожайлуста код, который у всех Controlo'v на форме поменяет цвет. Или хотя бы представь, что кроме TEdit, на форме есть еще TMyEdit, TEditEX, котрые порождены от TCustomEdit и у всех у них нужно очитстить Text -------------------- С уважением, Вячеслав Ермолаев |
||||||||||||||||||
|
|||||||||||||||||||
Adil' |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 26.8.2004 Где: Питер Репутация: 4 Всего: 15 |
Попробовать собрать VCL-ную прогу с отключенным RTTI можно, да вот только при этом RTTI у VCL не отключится
![]() бо как все оно от TObject идет, и к нему и приходит, а он, родной, объявлен как DELPHICLASS, а значит и он сам, и наследники его автоматом RTTI поддерживают. Так что отключение RTTI в опциях проекта влияет только на "пользовательские" классы, которые без __rtti объявлены. А кто больше замедляет программу - dynamic_cast или сравнение строк с вызовом виртуальных функций еще проверить надо, хотя я процентов на 90 уверен, что первое - быстрее.
А где-то в хэдерах билдера есть такое typedef AnsiString String; Добавлено @ 18:15 О, пока расписывал, Vyacheslav уже отповедь выдал ![]() -------------------- Удачи |
|||
|
||||
Vyacheslav |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
Совершенно верно. И dynamic_cast для VCL классов будет работать в любом случае. А раз тащить его все равно приходится, то грех не воспользоваться -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
azesmcar |
|
||||||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
Пожалуйста
Боже мой???!!! Неужели это то же самое??? Какой ужас??? А если так написать??? ![]() #define String AnsiString Надо же, ты гений!!! ![]() А можно например вот так написать
Все равно в VCL это все уже есть, почему бы не попользоваться?? Грех! Ну разве что потому что медленее...чуточку..а dynamic_cast не очень то чуточку...я не спорю, я предлагаю вариант... А насчет RTTI не знаю, никогда не интересовался конструкцией VCL, я в GUI не люблю работать... Знаю только что пробовал, а вот отключил он или не отключил понятия не имею... |
||||||||
|
|||||||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |