Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.06.03;
Скачать: CL | DM;

Вниз

определение MDI-окна, обратившегося к форме   Найти похожие ветки 

 
dubdaze   (2012-01-26 18:05) [0]

У меня есть MDI-приложение. Также есть диалоговое окно, которое может вызываться разными дочерними формами. Как определить, какое дочернее окно из всех вызвало форму диалога? Можно как-то получить его номер в списке всех дочерних форм и т.п., чтобы отправить данные из диалога обратно?


 
Dimka Maslov ©   (2012-01-26 18:08) [1]

Создать глобальную переменную, в которую при вызове формы диалога записывать адрес вызвавшего его дочернего окна


 
dubdaze   (2012-01-26 18:12) [2]

А можно ли определить индекс окна, чтобы потом обратиться к нему через основную форму и её свойство MDIChildren[индекс]?


 
Плохиш ©   (2012-01-26 18:13) [3]


> dubdaze   (26.01.12 18:05)  

ShowModal решит проблему конструктора кривых велосипедов.


 
Dimka Maslov ©   (2012-01-26 18:14) [4]

Зачем индекс, если будет известен непосредственный указатель на объект?


 
Inovet ©   (2012-01-26 18:28) [5]

Диалог надо создавать в дочерней форме, работать с ним в ней и в ней же уничтожать.


 
dubdaze   (2012-01-26 18:33) [6]


> ShowModal решит проблему конструктора кривых велосипедов.


Полёт художественной мысли оценил, полезность информации - не смог из-за её отсутствия.


> Зачем индекс, если будет известен непосредственный указатель
> на объект?
>
>


Поскольку мне известна "структура" формы, то мне очень легко с ней работать. В частности, мне надо забить цифры из диалога в Edit1 на дочерней форме. Для этого я просто напишу (MainForm.MDIChildren[индекс] as TChildForm).Edit1.Text:= и т.д.
Получив же дескриптор окна, мне придётся найти все его дочерние  "окна" и среди них выбирать нужный Edit.


 
Dimka Maslov ©   (2012-01-26 18:40) [7]

Почувствуйте уже разницу между «дескриптором окна» и «указателем на объект»!

var
 CF: TChildForm;

procedure TChildForm.ShowDialog;
begin
 CF := Self;
 DialogForm.ShowModal;
end;

procedure TDialogForm.DoSomething;
begin
 CF.Edit1.Text := "и т.д.";
end;


 
Плохиш ©   (2012-01-26 18:45) [8]


> var
>  CF: TChildForm;
>
> procedure TChildForm.ShowDialog;
> begin
>  CF := Self;
>  DialogForm.ShowModal;
> end;
>
> procedure TDialogForm.DoSomething;
> begin
>  CF.Edit1.Text := "и т.д.";
> end;

Вот это и есть кривой велосипед.


 
Inovet ©   (2012-01-26 18:48) [9]

> [6] dubdaze   (26.01.12 18:33)
> > ShowModal решит проблему конструктора кривых велосипедов.
>
> Полёт художественной мысли оценил, полезность информации - не смог из-за её отсутствия.

Ты суслика не видишь, а он есть.


 
Dimka Maslov ©   (2012-01-26 18:49) [10]


> Вот это и есть кривой велосипед.


Вполне себе допустимое решение, особенно если по ходу работы диалога требуется связь с вызвавшим этот диалог объектом, тем более, если несколько форм может этот диалог вызвать. Согласен, лучше, чтобы переменная была не глобальной, а полем класса диалогового окна.


 
Inovet ©   (2012-01-26 18:50) [11]

> [6] dubdaze   (26.01.12 18:33)
> Поскольку мне известна "структура" формы, то мне очень легко
> с ней работать. В частности, мне надо забить цифры из диалога
> в Edit1 на дочерней форме.

И т.д.. Пример кривого велосипеда. Так что задумайся о наличии суслика и худежественном полёте.


 
dubdaze   (2012-01-26 18:50) [12]

Понял. Спасибо за помощь.


 
dubdaze   (2012-01-26 18:52) [13]


> Ты суслика не видишь, а он есть.


Ракетный окислитель не нюхаю, поэтому в сусликов не верю.


 
Inovet ©   (2012-01-26 19:00) [14]

> [13] dubdaze   (26.01.12 18:52)
> Ракетный окислитель не нюхаю, поэтому в сусликов не верю.

Он есть независимо от веры и нюханья. См мой ответ выше, и "работать с ним" разверни в ShowModal и обмен данными между ним (его полями) и формой. На всякий случай: никаких индексов тут обычно не надо.



Страницы: 1 вся ветка

Текущий архив: 2012.06.03;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.008 c
15-1328025054
Димка На
2012-01-31 19:50
2012.06.03
Что такой ath sin?


2-1327407726
Nucer
2012-01-24 16:22
2012.06.03
try .. finally внутри try .. except


15-1327516969
Псарь
2012-01-25 22:42
2012.06.03
Как вы следите за обновлениями?


4-1257507611
Валигози
2009-11-06 14:40
2012.06.03
Как программно добавить пароль в "хранилище паролей"?


15-1328387403
Юрий
2012-02-05 00:30
2012.06.03
С днем рождения ! 5 февраля 2012 воскресенье