![]() |
|
|
![]()
|
|
| Mal Hack |
|
||||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: нет Всего: 261 |
В делфи такое делал, но описывая класс во втором модуле.
Задача такова. Есть модуль с формой. Хочу сделать отдельный модуль, который программными средствами будет создават кнопочки и т.п. на первой форме. Все описал. Модуль вот так:
модуль с формное начинается так:
Вот на месте ************ хочу вызвать BBCode_Create из второго модуля. Можно ли это как-ть сделать не описывая класса и не создавая объекта с нужной функцией? Задача по русски: хочу вынести генерацию элементов интерфейса в отдельный файл, оставив на файле с формой только рабочий код, основной опять же. |
||||
|
|||||
| Vitalik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Координатор проекта Сообщений: 653 Регистрация: 8.11.2004 Где: Ukraine, Kharkov Репутация: 2 Всего: 12 |
Может добавить объявление функции в h-файл?..
Или во втором файле написать: "#include "Unit1.cpp"? А также можно объявление формы в h-файл засунуть P.S. Билдер очень давно не юзал, поэтому могу ошибаться |
|||
|
||||
| Vitalik |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Координатор проекта Сообщений: 653 Регистрация: 8.11.2004 Где: Ukraine, Kharkov Репутация: 2 Всего: 12 |
Да... Чтобы не было пустых слов - сейчас проверил.
Всё работает 1). Файл Unit1.cpp На форме находится панель с именем BBCodePanel.
2). Файл Unit2.cpp: Только добавил задание свойства Parent. Но это обязательно !
3). файл Unit2.h: Просто добавил объявление нашей функции, чтобы Unit1.cpp её видел
Всё готово Удачи! |
||||||
|
|||||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: нет Всего: 261 |
Vitalik а указание тут:
родителя не достаточно? Хотя в Делфи всегда Parent писал Ща буду тестить, но заранее огромное спасибо. Ты меня еще первым постом навел на мою ошибку. Добавлено @ 00:11 Vitalik огромное спасибо, разобрался. Вот еще два вопросика из этой темы 1. Можно лим обойтись для второго модуля наличием только .cpp файла, или обязательно наличие .h? 2. __fastcall чем отличается от обычной функции. ЗЫ: Есть книжка Архангельского, но толи я не внимательно смотрел, толи там нет этой информации. Может есть сслки под рукой? |
|||
|
||||
| Vitalik |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Координатор проекта Сообщений: 653 Регистрация: 8.11.2004 Где: Ukraine, Kharkov Репутация: 2 Всего: 12 |
При создании vcl-компонента в качестве параметра указывается не родитель, а владелец (Owner). Чтобы новые кнопочки отобразились на форме нужно обязательно самому задать их родителя (Parent)
Теоретически можно Но я попробовал и у меня сразу AV выскочил при обращении к форме...
Та сильно так ничем и не отличается. Только способом передачи параметром (на "низком" уровне). Для функций-обработчиков событий этот сопособ вроде бы как считается быстрее, но это реально мизер Это в основном нужно при написании своих dll-ек. То есть там действительно нужно одинаково задать способ передачи параметров... |
||||||
|
|||||||
| Mal Hack |
|
||||||||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: нет Всего: 261 |
Ах вот оно что... А смысл указания Owner'a тогда? Тут ночью еще два вопроса появилолсь. 1. Есть ли в Си аналог with obj do... как в Делфи? Ман и Архангельский ответа не дали. 2. Как поставить на кнопку свой обработчик OnClick? пишу:
Получаю сообщение:
И еще один Создаю PageControl и Tab'ы - все замечательно.
но табы не видны, хотя Parent я указал. Чую, что надо какое-то свойство включить на PageControl'e... |
||||||||
|
|||||||||
| Vitalik |
|
||||||||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Координатор проекта Сообщений: 653 Регистрация: 8.11.2004 Где: Ukraine, Kharkov Репутация: 2 Всего: 12 |
Справка пишет: "Owner property indicates the component that is responsible for streaming and freeing this component."
Аналога действительно нету
Дело в том, что функция-обработчик должна быть методом класса TForm1:
Всё гораздо проще Нужно просто для вкладок задать свойство PageСontrol:
И еще будет одно замечание Так писать нельзя:
|
||||||||||||||||
|
|||||||||||||||||
| Mal Hack |
|
||||||||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: нет Всего: 261 |
Даже не смотря на то, что кнопку я сам создаю, как-то не очень удобно получается. Может есть возможность обойти каким-ть образом, т.е. перехватить клик на кнопке?
Спасибо еще раз... Моя благодарность не знает границ Добавлено @ 16:44
А как тогда правильно объявить? Пишу char *BBCodeNames[26][6]; - пишет: [C++ Error] Unit2.cpp(50): E2277 Lvalue required |
||||||||
|
|||||||||
| Vitalik |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Координатор проекта Сообщений: 653 Регистрация: 8.11.2004 Где: Ukraine, Kharkov Репутация: 2 Всего: 12 |
Как-то должно быть можно, но сейчас уже поздно, так что быстро не соображу... Утро вечера мудренее
Это что еще такое? Если написать просто:
Покажи ка весь участок кода |
||||||
|
|||||||
| Mal Hack |
|
||||||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: нет Всего: 261 |
Вот на этом и выдавал. Я решил проблемы так: AnsiString BBCodeNames[6];
Буду очень благодарен, если подскажешь. Главное не код, направь куда нужно |
||||||
|
|||||||
| Vitalik |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Координатор проекта Сообщений: 653 Регистрация: 8.11.2004 Где: Ukraine, Kharkov Репутация: 2 Всего: 12 |
Хороший вариант
Хм... Пытался вчера сделать что-нить по этому поводу, но так и не получилось. Единственно могу направить: твоя ф-ция должна быть типа TNotifyEvent, а также к ней (или её адресу) возможно нужно как-то прикрутить __closure. В справке по этому __closure написано много всякой всячины, но я так особо и не понял, что там к чему... Там есть примеры кода, но они хотя и не по теме, но направить могут.
|
||||||||
|
|||||||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: нет Всего: 261 |
Че-то ничего не выходит... лан, будем думать... Спасибо в любом случае.
|
|||
|
||||
![]()
|
| Правила форума "С++ 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. |