![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
определение MDI-окна, обратившегося к форме
dubdaze © (2012-01-26 18:05:00)У меня есть MDI-приложение. Также есть диалоговое окно, которое может вызываться разными дочерними формами. Как определить, какое дочернее окно из всех вызвало форму диалога? Можно как-то получить его номер в списке всех дочерних форм и т.п., чтобы отправить данные из диалога обратно?
Inovet (2012-01-26 19:00:00) [1]> [13] dubdaze (26.01.12 18:52)
> Ракетный окислитель не нюхаю, поэтому в сусликов не верю.
Он есть независимо от веры и нюханья. См мой ответ выше, и "работать с ним" разверни в ShowModal и обмен данными между ним (его полями) и формой. На всякий случай: никаких индексов тут обычно не надо.
dubdaze (2012-01-26 18:52:00) [2]
> Ты суслика не видишь, а он есть.
Ракетный окислитель не нюхаю, поэтому в сусликов не верю.
Inovet (2012-01-26 18:50:00) [3]> [6] dubdaze (26.01.12 18:33)
> Поскольку мне известна "структура" формы, то мне очень легко
> с ней работать. В частности, мне надо забить цифры из диалога
> в Edit1 на дочерней форме.
И т.д.. Пример кривого велосипеда. Так что задумайся о наличии суслика и худежественном полёте.
dubdaze (2012-01-26 18:50:00) [4]Понял. Спасибо за помощь.
Dimka Maslov (2012-01-26 18:49:00) [5]
> Вот это и есть кривой велосипед.
Вполне себе допустимое решение, особенно если по ходу работы диалога требуется связь с вызвавшим этот диалог объектом, тем более, если несколько форм может этот диалог вызвать. Согласен, лучше, чтобы переменная была не глобальной, а полем класса диалогового окна.
Inovet (2012-01-26 18:48:00) [6]> [6] dubdaze (26.01.12 18:33)
> > ShowModal решит проблему конструктора кривых велосипедов.
>
> Полёт художественной мысли оценил, полезность информации - не смог из-за её отсутствия.
Ты суслика не видишь, а он есть.
Плохиш (2012-01-26 18:45:00) [7]
> var
> CF: TChildForm;
>
> procedure TChildForm.ShowDialog;
> begin
> CF := Self;
> DialogForm.ShowModal;
> end;
>
> procedure TDialogForm.DoSomething;
> begin
> CF.Edit1.Text := 'и т.д.';
> end;
Вот это и есть кривой велосипед.
Dimka Maslov (2012-01-26 18:40:00) [8]Почувствуйте уже разницу между «дескриптором окна» и «указателем на объект»!
var
CF: TChildForm;
procedure TChildForm.ShowDialog;
begin
CF := Self;
DialogForm.ShowModal;
end;
procedure TDialogForm.DoSomething;
begin
CF.Edit1.Text := 'и т.д.';
end;
dubdaze (2012-01-26 18:33:00) [9]
> ShowModal решит проблему конструктора кривых велосипедов.
Полёт художественной мысли оценил, полезность информации - не смог из-за её отсутствия.
> Зачем индекс, если будет известен непосредственный указатель
> на объект?
>
>
Поскольку мне известна "структура" формы, то мне очень легко с ней работать. В частности, мне надо забить цифры из диалога в Edit1 на дочерней форме. Для этого я просто напишу (MainForm.MDIChildren[индекс] as TChildForm).Edit1.Text:= и т.д.
Получив же дескриптор окна, мне придётся найти все его дочерние "окна" и среди них выбирать нужный Edit.
Inovet (2012-01-26 18:28:00) [10]Диалог надо создавать в дочерней форме, работать с ним в ней и в ней же уничтожать.
Dimka Maslov (2012-01-26 18:14:00) [11]Зачем индекс, если будет известен непосредственный указатель на объект?
Плохиш (2012-01-26 18:13:00) [12]
> dubdaze (26.01.12 18:05)
ShowModal решит проблему конструктора кривых велосипедов.
dubdaze (2012-01-26 18:12:00) [13]А можно ли определить индекс окна, чтобы потом обратиться к нему через основную форму и её свойство MDIChildren[индекс]?
Dimka Maslov (2012-01-26 18:08:00) [14]Создать глобальную переменную, в которую при вызове формы диалога записывать адрес вызвавшего его дочернего окна