Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-1117799689
GekaNaz
2005-06-03 15:54
2005.07.18
MySQL


3-1117914399
Inquisitor
2005-06-04 23:46
2005.07.18
как создать поле выбора в таблице


14-1119507902
ntman
2005-06-23 10:25
2005.07.18
Закачка файла


8-1111145721
Anger
2005-03-18 14:35
2005.07.18
MainForm преобразовать в градации серого


1-1120325184
Hamsterman
2005-07-02 21:26
2005.07.18
Автозаполнение HTML-форм





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский