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

Вниз

Подскажите плиз каким образом можно вернуть значение в переменную   Найти похожие ветки 

 
Тучудище   (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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.043 c
3-1118267577
highlander
2005-06-09 01:52
2005.07.18
Работа с БД Firebird, Interbase в Делфи


6-1113119643
DimDim
2005-04-10 11:54
2005.07.18
Системный каталог на соседнем компьютере?


10-1096828319
Wolverrum
2004-10-03 22:31
2005.07.18
COM и консольный режим


9-1112693249
MaxAir
2005-04-05 13:27
2005.07.18
Помогите запустить паровозик по синусоиде :)


1-1119682185
syte_ser78
2005-06-25 10:49
2005.07.18
проверка на наличие в списке комбобокса записи