Форум: "Начинающим";
Текущий архив: 2012.06.03;
Скачать: [xml.tar.bz2];
Внизопределение 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.003 c