![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() ![]() |
![]() |
YurKaluga |
![]()
Сообщение
#1
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 53 Пол: Мужской Репутация: ![]() ![]() ![]() |
Задача:
В программе открыто несколько одинаковых "дочерних окон" - (А). Из одного из них открывается еще одно "дочернее окно" - (Б). В окне Б вводятся данные, которые нужно записать в переменную, определенную в окне А, из которого запустилось Б. Проблема в том, что данные записываются во все окна А, и как с этим справиться я не знаю. Найти порядок дочерних окон, и определить нужное окно (т.е. его порядковый номер в списке дочерних окон MainForm) я, в принципе, могу. Но как обратиться к нужной переменной именно в этом окне? Вопрос вдогонку: Как из MainForm считать данные компонентов дочернего окна или запустить процедуру дочернего окна? Сообщение отредактировано: YurKaluga - 23.01.2006 13:36 |
hardcase |
![]()
Сообщение
#2
|
![]() code warrior ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: ![]() ![]() ![]() |
Задача: Когда ты создаёшь новое окно (Б), то пересылай в него ссылку на окно (А), из которого происходит создание.В программе открыто несколько одинаковых "дочерних окон" - (А). Из одного из них открывается еще одно "дочернее окно" - (Б). В окне Б вводятся данные, которые нужно записать в переменную, определенную в окне А, из которого запустилось Б. Проблема в том, что данные записываются во все окна А, и как с этим справиться я не знаю. Найти порядок дочерних окон, и определить нужное окно (т.е. его порядковый номер в списке дочерних окон MainForm) я, в принципе, могу. Но как обратиться к нужной переменной именно в этом окне? Вопрос вдогонку: Как из MainForm считать данные компонентов дочернего окна или запустить процедуру дочернего окна? Есть у TForm индексное свойство
Преобразуешь тип формы - и делаешь с нею что хочешь. Сообщение отредактировано: hardcase - 24.01.2006 17:52 -------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
YurKaluga |
![]()
Сообщение
#3
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 53 Пол: Мужской Репутация: ![]() ![]() ![]() |
hardcase,
"пересылай в него ссылку на окно (А)" - что ты имеешь ввиду? "Преобразуешь тип формы" -т.е.? |
hardcase |
![]()
Сообщение
#4
|
![]() code warrior ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: ![]() ![]() ![]() |
"пересылай в него ссылку на окно (А)" - что ты имеешь ввиду? Я имею в виду, то что при создании нового или (вызове единственного существующего) (Б) окна ты передаёшь в него ссылку на то окно, которое его вызывает, чтоб (Б) было осведомлено о контексте своего выова - иначе нам будет трудно корректно предавать инфу в нужное окно. "Преобразуешь тип формы" -т.е.? TMyForm( MainForm.MDIChildren[ Index ] ) -------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
YurKaluga |
![]()
Сообщение
#5
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 53 Пол: Мужской Репутация: ![]() ![]() ![]() |
Ну, ладно, с преобразованием формы вроде понятно. А как обратиться к какому-нибудь Edit'у на ней? Главная форма же не знает, что это за форма и какие на ней есть компоненты.
А ссылка на вызывающее окно - это так называемый Handle? |
hardcase |
![]()
Сообщение
#6
|
![]() code warrior ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: ![]() ![]() ![]() |
Почемуже не знаеть?!
Тыже можешь подключить к главному модулю, в разделе implementation строку uses MyFormUnit;- вот она уже и знает тип. А что, кто-то отменил преобразование типов в Делфи? TMyForm(MainForm.MDIChildren[Index]).Edit1.Text:='Hardcase is ultimate!'; А зачем передавать хэндл? Ссылка - это ссылка, и хэндлы тут ни при чём, - обычный указатель типа TMyForm. (кстати хэндл - это тоже указатель - посмотри, на что он указывает ;-)) Сообщение отредактировано: hardcase - 25.01.2006 14:41 -------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
YurKaluga |
![]()
Сообщение
#7
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 53 Пол: Мужской Репутация: ![]() ![]() ![]() |
Делаю так: в вызываемом окне прописал
LoadForm: TForm; Когда его вызываю пишу: var Child: TForm3;Потом в дочернем окне пытаюсь LoadForm.Edit1.Text:='9'; При компиляции: [Error] TypeID.pas(66): Undeclared identifier: 'Edit1' В чем ошибка? |
hardcase |
![]()
Сообщение
#8
|
![]() code warrior ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: ![]() ![]() ![]() |
У тебя LoadForm типа TForm. А ты пытаешься обращаться к полу Edit1 - там его нету. объяви LoadForm как TForm2, в котором, видимо, у тебя и объявлено поле Edit1.
-------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
Gothic_Snake |
![]()
Сообщение
#9
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 45 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
Ну, ладно, с преобразованием формы вроде понятно. А как обратиться к какому-нибудь Edit'у на ней? Главная форма же не знает, что это за форма и какие на ней есть компоненты. А ссылка на вызывающее окно - это так называемый Handle? или так... Код tlabel(form.findcontrol('Label1')).caption:='Василий пупкин'; тэги!!! Сообщение отредактировано: GoodWind - 25.01.2006 19:32 |
![]() ![]() |
![]() |
Текстовая версия | 9.07.2025 1:28 |