![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
bazzzman |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 24.7.2006 Репутация: 0 Всего: 2 |
Вот такая проблема. Есть exe и dll.
В dll есть функция:
Fr_Lang - это обычная форма со своим набором контролов. Она хронится в dll. Exe вызывает эту функцию с параметром - главная форма приложения:
Т.е. мы просто создаем дочернюю форму из dll. Если в главной форме Exe через Application.MainForm.Controls[0] попытаться обратится к форме созданной в dll, то (Application.MainForm.Controls[0] is TControl) = True а вот (Application.MainForm.Controls[0] is TWinControl) = False Как в Exe обратиться к свойствам и методам формы созданной в Dll? |
||||
|
|||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Подозрительно, что не определяет правельно, тип, но если это точно форма, то в наглую использовать преобразование типов (Application.MainForm.Controls[0] as TControl).caption := 'hdfhd';
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Fedia |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 465 Регистрация: 2.8.2006 Где: первым встречаю р ассвет Репутация: 8 Всего: 13 |
А если экспортировать не процедуру, а функцию:
Ну а далее с результатом функции производить нужные действия. -------------------- Накануне решающей битвы Я иду, и надеждою зыбкой Озаряется эта дорога, Я мечтаю увидеть улыбку На лице победившего Бога… |
|||
|
||||
bazzzman |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 24.7.2006 Репутация: 0 Всего: 2 |
(Application.MainForm.Controls[0] as TControl) дает ошибку.
Этого вообще делать нельзя. Тоже ошибку получаем. Добавлено @ 08:43 Вот что я нашел:
Похоже придется использовать .bpl вместо .dll |
||||||
|
|||||||
Fedia |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 465 Регистрация: 2.8.2006 Где: первым встречаю р ассвет Репутация: 8 Всего: 13 |
C "не дочерними" работает. С дочерними не пробовал. -------------------- Накануне решающей битвы Я иду, и надеждою зыбкой Озаряется эта дорога, Я мечтаю увидеть улыбку На лице победившего Бога… |
|||
|
||||
bazzzman |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 24.7.2006 Репутация: 0 Всего: 2 |
Можно source? |
|||
|
||||
Fedia |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 465 Регистрация: 2.8.2006 Где: первым встречаю р ассвет Репутация: 8 Всего: 13 |
Конечно ! Добавлено @ 10:56 В папке "DLL" - библиотека, в папке "DLL\Form" - проект, вызывающий форму из библиотеки. Присоединённый файл ( Кол-во скачиваний: 3 ) ![]() -------------------- Накануне решающей битвы Я иду, и надеждою зыбкой Озаряется эта дорога, Я мечтаю увидеть улыбку На лице победившего Бога… |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Код ошибки если не сложно. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
bazzzman |
|
||||||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 24.7.2006 Репутация: 0 Всего: 2 |
Fedia, твой пример в самом деле работает. Но мне нужен маленько другой фунционал.
Как получить ошибку в примере Федора ![]() 1. В Lib.dpr после:
добавляем:
т.е. делаем форму в форме. 2. В Project1.dpr после:
добавляем:
Вот теперь если после показа формы в Project1.dpr сделать:
То мы увидим только второй ShowMessage. Т.е. мы не можем обратится к созданной форме через Controls[x]. Получаем всегда TControl вместо TForm. А вот:
Вернет: ![]() И is тоже не работает. Как проверить Controls[1] - это форма или нет? Это сообщение отредактировал(а) bazzzman - 18.9.2006, 11:51 |
||||||||||||
|
|||||||||||||
bazzzman |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 24.7.2006 Репутация: 0 Всего: 2 |
Не работает:
Работает отлично:
Как проверить что Controls[1] именно форма? Подскажите плз. ![]() |
||||
|
|||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
||||
|
||||
bazzzman |
|
||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 24.7.2006 Репутация: 0 Всего: 2 |
Akella, читай мой предыдущий пост.
Не работает.
Тоже не работает.
Выдает ошибку. Но!
Работает отлично. Но использовать TForm(Controls[1]) не безопасно, т.к. это может быть и не форма. Это какая-та особенность vcl? Как проверить Controls[1] - это форма или нет? |
||||||||
|
|||||||||
bazzzman |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 24.7.2006 Репутация: 0 Всего: 2 |
Я сам нашел решение. Если кому-то интересно:
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |