Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1328473805
Юрий
2012-02-06 00:30
2012.06.03
С днем рождения ! 6 февраля 2012 понедельник


2-1327579533
TiBog
2012-01-26 16:05
2012.06.03
выскакиващие подсказки по значению точки в графике tchart


15-1327682610
tesseract
2012-01-27 20:43
2012.06.03
По поводу совместимости Delphi


4-1257417254
Alex_C
2009-11-05 13:34
2012.06.03
Использование COM-порта нескролькими приложениями


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский