| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Проблема с общей формой |
| Автор: bazzzman 18.9.2006, 05:26 | ||||
| Вот такая проблема. Есть 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 18.9.2006, 07:22 |
| Подозрительно, что не определяет правельно, тип, но если это точно форма, то в наглую использовать преобразование типов (Application.MainForm.Controls[0] as TControl).caption := 'hdfhd'; |
| Автор: Fedia 18.9.2006, 07:37 | ||
А если экспортировать не процедуру, а функцию:
Ну а далее с результатом функции производить нужные действия. |
| Автор: bazzzman 18.9.2006, 08:32 | ||||||
(Application.MainForm.Controls[0] as TControl) дает ошибку.
Этого вообще делать нельзя. Тоже ошибку получаем. Добавлено @ 08:43 Вот что я нашел:
Похоже придется использовать .bpl вместо .dll |
| Автор: Fedia 18.9.2006, 09:18 |
C "не дочерними" работает. С дочерними не пробовал. |
| Автор: bazzzman 18.9.2006, 10:24 | ||
Можно source? |
| Автор: Fedia 18.9.2006, 10:54 |
Конечно ! Добавлено @ 10:56 В папке "DLL" - библиотека, в папке "DLL\Form" - проект, вызывающий форму из библиотеки. |
| Автор: Alexeis 18.9.2006, 10:58 |
Код ошибки если не сложно. |
| Автор: bazzzman 18.9.2006, 11:50 | ||||||||||||
| Fedia, твой пример в самом деле работает. Но мне нужен маленько другой фунционал. Как получить ошибку в примере Федора 1. В Lib.dpr после:
добавляем:
т.е. делаем форму в форме. 2. В Project1.dpr после:
добавляем:
Вот теперь если после показа формы в Project1.dpr сделать:
То мы увидим только второй ShowMessage. Т.е. мы не можем обратится к созданной форме через Controls[x]. Получаем всегда TControl вместо TForm. А вот:
Вернет: ![]() И is тоже не работает. Как проверить Controls[1] - это форма или нет? |
| Автор: bazzzman 19.9.2006, 02:28 | ||||
Не работает:
Работает отлично:
Как проверить что Controls[1] именно форма? Подскажите плз. |
| Автор: Akella 19.9.2006, 08:05 | ||
|
| Автор: bazzzman 19.9.2006, 08:48 | ||||||||
Akella, читай мой предыдущий пост.
Не работает.
Тоже не работает.
Выдает ошибку. Но!
Работает отлично. Но использовать TForm(Controls[1]) не безопасно, т.к. это может быть и не форма. Это какая-та особенность vcl? Как проверить Controls[1] - это форма или нет? |
| Автор: bazzzman 20.9.2006, 02:11 | ||
Я сам нашел решение. Если кому-то интересно:
|