Форум: "Основная";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];
ВнизПодскажите плиз каким образом можно вернуть значение в переменную Найти похожие ветки
← →
Тучудище (2005-06-30 08:59) [0]Hello All!
Вкратце объясню ситуацию:
Есть MDI приложение. разработан базовый класс для дочерних форм
Вот код для создания дочерней формы
procedure TfmMain.FormControl(var Form:TfmBasicElt; Name, Caption:String; DataSet:TDataSet);
begin
if Form=nil Then begin
Form:=TfmBasicElt.Create(Form,Name,Caption,DataSet);
end else begin
Form.WindowState:=wsNormal;
Form.BringToFront;
end;
end;
После закрытия этой самой Form она равна чему угодно но не Nil, хотя при закрытии у базового класа стоит явное присвоение... Я понимаю что Nil не возвращается в главную форму и не могу понять как ее туда вернуть....
В принципе, сложностей нет, но не могу понять, как в переменную форм вернуть Nil после того как Дочерняя форма будет закрыта...
Помогите плиз всю голову поломал!!!
← →
evvcom © (2005-06-30 09:14) [1]
> хотя при закрытии у базового класа стоит явное присвоение...
Явное присвоение чему?
А вообще возникает сомнение в целесообразности заведения дополнительных переменных. К списку дочерних форм и без этого есть доступ из главной формы.
← →
Digitman © (2005-06-30 09:15) [2]а зачем вообще нужна эта переменная ? только для проверки существования экз-ра доч.формы данного класса, чтобы случайно не продублировать его ?
for i:= 0 to fmMain.MDIChildCount - 1 do
if fmMain.MDIChildren[i] is TfmBasicElt then
....
← →
Тучудище (2005-06-30 09:17) [3]Дочерних форм вообще не стуществует, они динамично создаються из базового класса, вопрос только в том, каким образом можно вернуть в переменную которая описана в главной форме Nil
← →
Тучудище (2005-06-30 09:24) [4]2Digitman
Их может быть много, а смысл действительно в дублировании
← →
-=XP=- © (2005-06-30 09:27) [5]Дочерних форм вообще не стуществует, они динамично создаються из базового класса, вопрос только в том, каким образом можно вернуть в переменную которая описана в главной форме Nil
Как только они "динамично содальись", они уже существуют (фу ты, масло масляное). И получить к ним доступ из основной формы (или, в принципе, из любого места приложения) можно, как показано в [2]. Если же у Вас в главной форме для этой дочерней формы имеется специальная переменная, то кто Вам виноват? Создавайте какой-нибудь Callback или Notify метод для оповещения главной формы.
← →
evvcom © (2005-06-30 09:31) [6]
> Дочерних форм вообще не стуществует, они динамично создаються
> из базового класса
Что значит не существуют? Можно "динамично", можно динамически. И тем не менее [2] поможет тебе в любой момент определить реально существующие формы.
> а смысл действительно в дублировании
А каков критерий дублирования?
← →
Digitman © (2005-06-30 09:31) [7]
> Дочерних форм вообще не стуществует
а зачем тогда вообще MDI-интерфейс тобой задействован, если род. MDI-форма существует, а дочерние MDI-формы не существуют ?
> они динамично создаються из базового класса
значит так или иначе существуют !!
и как только ты создал любую из них (динамически или как угодно иначе), она будет фигурировать в списке доч.форм MDIChildren род.MDI-формы, каковой у тебя, очевидно, является fmMain
← →
Тучудище (2005-06-30 09:44) [8]Thanks, [2] очень даже кстати и от списка переменных избавился, спасибо, все работает нормально! ;-)
← →
msguns © (2005-06-30 11:05) [9]Судя по всему однотипные "дочки" могут быть у "мамашки" в произвольном кол-ве и ассортименте ;) В смысле можно "поднять" сразу как 6 разных справочников (разные классы, но наслендники одного базового - того самого TfmBasicElt), так и 6 раз один и тот же. Или и то и другое одновременно. Не вдаваясь в подробности целесообразности просмотра/правки одного и того же лбъекта БД (справочника) параллельно в нескольких формах, реализацию централизации управления (ух как загнул !) можно реализовать с помощью посылок из главной формы сообщения активной "дочки" по типу
if ActiveMDIChild<>nil then
PostMessage(ActiveMDIChild.Handle,<Константа>,0,0);
При этом можно не "заботиться" о том, что данное сообщение не обрабатывается текущей активной дочкой. Просто в ней не будет соответствующего этой мессаге метода
procedure <Имя процы>(var Msg: TMessage); message <Константа>;
Если интересует пример полного релиза взаимодействия Мамки с дочками, могу выслать проектец.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.095 c