| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Функция события для созданного объекта |
| Автор: Mpak 14.1.2007, 21:06 | ||
Я создаю объект:
И мне нужна функция OnChange() этого объекта. Как, где и что мне нужно опистаь? |
| Автор: Anikmar 14.1.2007, 21:53 |
| Самый простой метод (чтобы руками много не писать) Кидаешь на форму такой компонент, создаешь обработчик события. Пишешь внутри него какой-нить комментарий, чтобы не удалился при солхранении, удаляешь сам объект. У тебя появится метод формы строго соответствующий прототипу нужного обработчика. Затем просто присваиваешь его имя свойству OnChange созданного объекта и пишешь туда собственно реализацию idx->OnChange = // Имя сгенерированного обработчика |
| Автор: Mpak 15.1.2007, 10:23 |
| Хмм......способ интересный....попробую, но меня интересует еще следующее: У меня генерируется объект на сгенерированной форме, А я на сколько знаю, если создается новая форма, создается хедеровский файл и там описываются подобные функции... Добавлено @ 10:32 Anikmar, Понял, что не понял что ты имеешь ввиду.... |
| Автор: Vyacheslav 15.1.2007, 10:39 | ||||||
| А что сложного? Много раз уже обсасывали Декларируешь и определяешь соответствующий опбработчик прямо ручками. Хотя бы в хидере и реализации той же формы
|
| Автор: Mpak 15.1.2007, 10:46 | ||||||
| Vyacheslav, Дело в том, что уже пробовал подобное... В чем у меня различее с Вашим примером?
Добавлено @ 10:48 Пишет ошибку: Undefined simbol 'idxChange' На строку idx->OnChange=idxChange; |
| Автор: Anikmar 15.1.2007, 11:09 | ||
Эта строка точно в методе TFormmes? |
| Автор: Mpak 15.1.2007, 11:26 |
| Anikmar, то есть? Вроде да... |
| Автор: Anikmar 15.1.2007, 11:27 |
Я имел в виду имя, автоматическои сгенерированное при моем подходе. Разницы никакой - я просто не люблю много ручками писать. Можно просто добавить метод - тогда имя из головы. Я предпочитаю автосгенерированное. Добавлено @ 11:29 Вроде или да? Если внутри класса - то idxChange виден, а если нет, то что-то вроде этого: MyForm->idxChange Добавлено @ 11:30 Мой совет: Все динамические компоненты создавая в конструкторе формы - меньше ошибок будет. Лично я динамически компоненты очень редко создаю - только в навороченных диалогах. В большинстве случаев контролы можно предусмотреть заранее и создавать динамически только саму форму. Но это, конечно от задач конкретных зависит. |
| Автор: Mpak 15.1.2007, 12:05 | ||
Я просто учусь Вот где я ее описал:
У меня еще сомнения где ее описать правильнее в __published или в public... |
| Автор: pandrew 15.1.2007, 12:14 | ||
Можно в private, но только не в __published |
| Автор: Mpak 15.1.2007, 12:24 |
| Все равно для него моя функция нехороший символ |
| Автор: GIK 15.1.2007, 12:42 | ||
От руки пишешь? Если делать с помошью програмки, то все нормально выходит.. А в __published : неужно заносить если хочешь чтобы свойства компонента были доступны через окно свойста среды булдера. |
| Автор: Mpak 15.1.2007, 13:01 |
| GIK, а как с помощью программки? Формы то не существует... Я хочу научится так вещи делать... помогут же Вот только застопорился.... |
| Автор: Anikmar 15.1.2007, 13:18 |
Что значит не существует? Будешь всю форму динамически отрисовывать?! Это же муторно! Рисуется форма - такая какая нужна, в опциях проекта она переносится из раздела AutoCreate в раздел Available. Потом динамически создается - все нарисованные на этапе проектирования контролы будут автоматически созданы. |
| Автор: Vyacheslav 15.1.2007, 13:21 | ||||
Судя по ошибке строка
точно располжена не в методах TFormmes. Попробуй так
|
| Автор: Mpak 15.1.2007, 13:34 | ||||
| Anikmar, понимаю, что муторно....но если это возможно, значит надо уметь Vyacheslav, теперь ошибка Cannot convert 'void (_fastcall TFormmes::*)(TObject *)' to 'void (_fastcall *(_closure)(TObject *))(TObject *)' Не могу понять, что неправильно.... вот мой header'овский файл полностью:
Добавлено @ 13:38 Созданные объекты:
|
| Автор: Anikmar 15.1.2007, 13:39 | ||
| Vyacheslav, Я думаю не стоит так делать - теряется прозрачность и читаемость. Если человек учится, то лучше сразу писать по-человечески: Если компонент на форме, то и создавать его надо в конструкторе формы, а обработчик - метод этой формы. Так проще отлаживаться и читать код легче. Например:
|
| Автор: Vyacheslav 15.1.2007, 13:51 | ||
Добавлено @ 14:04 Это не будет работать. При запуске программы получишь ошибку. Resource TFormmes not found |
| Автор: Mpak 15.1.2007, 14:45 |
| Спсасибо за информацию |
| Автор: Vyacheslav 15.1.2007, 15:07 | ||
Все правильно ... Только с учетом того, что эта строка была вывешена за полчаса до этого объяснения, зачем править уже исправленные ошибки? |
| Автор: Anikmar 15.1.2007, 15:18 |
| Vyacheslav, Все правильно, просто иногда посты появляются быстрее, чем набиваешь ответ Я просто это не увидел. |