IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

 
 Ответить  Открыть новую тему 
> Mdi приложение, Как обратиться к нужному окну?
YurKaluga
сообщение 23.01.2006 11:42
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 53
Пол: Мужской

Репутация: -  0  +


Задача:
В программе открыто несколько одинаковых "дочерних окон" - (А). Из одного из них открывается еще одно "дочернее окно" - (Б). В окне Б вводятся данные, которые нужно записать в переменную, определенную в окне А, из которого запустилось Б. Проблема в том, что данные записываются во все окна А, и как с этим справиться я не знаю.
Найти порядок дочерних окон, и определить нужное окно (т.е. его порядковый номер в списке дочерних окон MainForm) я, в принципе, могу. Но как обратиться к нужной переменной именно в этом окне?

Вопрос вдогонку:
Как из MainForm считать данные компонентов дочернего окна или запустить процедуру дочернего окна?

Сообщение отредактировано: YurKaluga - 23.01.2006 13:36
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
hardcase
сообщение 24.01.2006 17:52
Сообщение #2


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


Цитата(YurKaluga @ 23.01.2006 11:42) *
Задача:
В программе открыто несколько одинаковых "дочерних окон" - (А). Из одного из них открывается еще одно "дочернее окно" - (Б). В окне Б вводятся данные, которые нужно записать в переменную, определенную в окне А, из которого запустилось Б. Проблема в том, что данные записываются во все окна А, и как с этим справиться я не знаю.
Когда ты создаёшь новое окно (Б), то пересылай в него ссылку на окно (А), из которого происходит создание.
Цитата(YurKaluga @ 23.01.2006 11:42) *

Найти порядок дочерних окон, и определить нужное окно (т.е. его порядковый номер в списке дочерних окон MainForm) я, в принципе, могу. Но как обратиться к нужной переменной именно в этом окне?
Вопрос вдогонку:
Как из MainForm считать данные компонентов дочернего окна или запустить процедуру дочернего окна?

Есть у TForm индексное свойство

property MDIChildren[I: Integer]: TForm;


Преобразуешь тип формы - и делаешь с нею что хочешь.

Сообщение отредактировано: hardcase - 24.01.2006 17:52


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
YurKaluga
сообщение 25.01.2006 12:38
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 53
Пол: Мужской

Репутация: -  0  +


hardcase,

"пересылай в него ссылку на окно (А)" - что ты имеешь ввиду?

"Преобразуешь тип формы" -т.е.?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
hardcase
сообщение 25.01.2006 14:06
Сообщение #4


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


Цитата(YurKaluga @ 25.01.2006 12:38) *

"пересылай в него ссылку на окно (А)" - что ты имеешь ввиду?

Я имею в виду, то что при создании нового или (вызове единственного существующего) (Б) окна ты передаёшь в него ссылку на то окно, которое его вызывает, чтоб (Б) было осведомлено о контексте своего выова - иначе нам будет трудно корректно предавать инфу в нужное окно.
Цитата(YurKaluga @ 25.01.2006 12:38) *

"Преобразуешь тип формы" -т.е.?

TMyForm( MainForm.MDIChildren[ Index ] )


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
YurKaluga
сообщение 25.01.2006 14:16
Сообщение #5


Пионер
**

Группа: Пользователи
Сообщений: 53
Пол: Мужской

Репутация: -  0  +


Ну, ладно, с преобразованием формы вроде понятно. А как обратиться к какому-нибудь Edit'у на ней? Главная форма же не знает, что это за форма и какие на ней есть компоненты.

А ссылка на вызывающее окно - это так называемый Handle?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
hardcase
сообщение 25.01.2006 14:39
Сообщение #6


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


Почемуже не знаеть?!
Тыже можешь подключить к главному модулю, в разделе implementation строку
uses MyFormUnit;
- вот она уже и знает тип. А что, кто-то отменил преобразование типов в Делфи?
TMyForm(MainForm.MDIChildren[Index]).Edit1.Text:='Hardcase is ultimate!';

А зачем передавать хэндл? Ссылка - это ссылка, и хэндлы тут ни при чём, - обычный указатель типа TMyForm. (кстати хэндл - это тоже указатель - посмотри, на что он указывает ;-))

Сообщение отредактировано: hardcase - 25.01.2006 14:41


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
YurKaluga
сообщение 25.01.2006 15:25
Сообщение #7


Пионер
**

Группа: Пользователи
Сообщений: 53
Пол: Мужской

Репутация: -  0  +


Делаю так: в вызываемом окне прописал
LoadForm: TForm;

Когда его вызываю пишу:
var Child: TForm3;
begin
Child := TForm3.Create(Application);
LoadForm:=Form2;

Потом в дочернем окне пытаюсь
LoadForm.Edit1.Text:='9';


При компиляции:
[Error] TypeID.pas(66): Undeclared identifier: 'Edit1'
В чем ошибка?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
hardcase
сообщение 25.01.2006 15:51
Сообщение #8


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


У тебя LoadForm типа TForm. А ты пытаешься обращаться к полу Edit1 - там его нету. объяви LoadForm как TForm2, в котором, видимо, у тебя и объявлено поле Edit1.


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Gothic_Snake
сообщение 25.01.2006 19:23
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 45
Пол: Мужской
Реальное имя: Алексей

Репутация: -  0  +


Цитата(YurKaluga @ 25.01.2006 17:16) *

Ну, ладно, с преобразованием формы вроде понятно. А как обратиться к какому-нибудь Edit'у на ней? Главная форма же не знает, что это за форма и какие на ней есть компоненты.

А ссылка на вызывающее окно - это так называемый Handle?

или так...

Код
tlabel(form.findcontrol('Label1')).caption:='Василий пупкин';


тэги!!!

Сообщение отредактировано: GoodWind - 25.01.2006 19:32
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 9.07.2025 1:28
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"