Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Определить сужествование MDI Child формы [D7, WinXP]


Ярослав ©   (2005-09-15 09:52:00) 

У меня из одной MDI Child формы вызываеться метод другой MDI Child формы, но та другая форма модет быть уже закрыта и если так то и вызывать ее метод не нужно, как мне организовать такую проверку?

В событии onFormClose MDI Child форм у меня стоит Action:=caFree;
Однако сравнение МуMDIChildForm<>nil дает False


Плохиш   (2005-09-15 12:55:00) [1]


> Ярослав   (15.09.05 12:31) [10]
> МуMDIChildForm - Это переменная типа TForm, полученная при
> создании формы от формы ее вызвавщей, т.е. в ней храниться
> форма которая ее вызвала, и мне нужно из формы вызвать метод
> вызвавшей формы, пока вызвавшея форма существут все нормально,
>  но когда она зарыта я  у же не могу обратиться к ней через
> эту переменную, вот мне и нужно проверить сужествует ли
> она

Проверь наличие этой ссылки в MDIChildren.


msguns   (2005-09-15 12:47:00) [2]

В корне неверный подход.
А если создано 2 экземпляра TМуMDIChildForm ?

Все методы, переменные, константы и прочие объекты, которые могут быть использованы разнымидочками, должны быть либо в главной, либо в датамодуле, либо в другом перманентно существующем блоке кода (юните).
В этом случае все будет вполне реентерабельно и корректно.

Нарушение этого правила неминуемо приведет к "потерям" памяти в лучшем случае и к трудноисправимым глюкам в работе программы.


Reindeer Moss Eater   (2005-09-15 12:44:00) [3]

МуMDIChildForm - Это переменная типа TForm

Почему тогда говорил, что не знаешь имени переменной?


Reindeer Moss Eater   (2005-09-15 12:33:00) [4]

Существование экземпляра класса формы и равенство переменной МуMDIChildForm nil - это две совершенно не связанные с собой явления.


Ярослав   (2005-09-15 12:31:00) [5]

МуMDIChildForm - Это переменная типа TForm, полученная при создании формы от формы ее вызвавщей, т.е. в ней храниться форма которая ее вызвала, и мне нужно из формы вызвать метод вызвавшей формы, пока вызвавшея форма существут все нормально, но когда она зарыта я  у же не могу обратиться к ней через эту переменную, вот мне и нужно проверить сужествует ли она


Reindeer Moss Eater   (2005-09-15 12:27:00) [6]

Существование экземпляра класса формы и равенство переменной МуMDIChildForm nil - это две совершенно не связанные с собой явления.


Плохиш   (2005-09-15 12:24:00) [7]


> Ярослав   (15.09.05 09:52)  
> У меня из одной MDI Child формы вызываеться метод другой
> MDI Child формы


> Ярослав   (15.09.05 12:17) [6]
> > alex_***   (15.09.05 10:33) [4]
> Можно узнать, а как мне присвоить? У меня может быть несколько
> экзапляров этой формы,

И метод должен вызываться для каждого экземпляра "другой MDI Child формы" или какого-то конкретного?

MyForm - у тебя просто указатель, для чего он тебе нужен, знаешь только ты.


Reindeer Moss Eater   (2005-09-15 12:20:00) [8]

>Однако сравнение МуMDIChildForm<>nil дает False

Это имя откуда?
Получено путем прямого соединения с космосом?


Ярослав   (2005-09-15 12:17:00) [9]

> alex_***   (15.09.05 10:33) [4]
Можно узнать, а как мне присвоить? У меня может быть несколько экзапляров этой формы, если я присвою MyForm:=nil; ничего страшного не произойдет?

> Reindeer Moss Eater ©   (15.09.05 10:37) [5]
И в операторе сравнения я не знаю, у меня переменная типа TForm и после того как она уничтожена я ее имя то не узнаю


Reindeer Moss Eater   (2005-09-15 10:37:00) [10]

> В цикле не могу, потому что я ее имени не знаю

А в операторе сравнения тогда откуда знаешь?


alex_***   (2005-09-15 10:33:00) [11]

там же можно и присвоить, где caFree даешь, а лучше в деструкторе написать


Ярослав   (2005-09-15 10:25:00) [12]

Оператору <> я доверяю, но как ей nil присвоить?
В цикле не могу, потому что я ее имени не знаю


Федор   (2005-09-15 10:19:00) [13]

Можно устроить цикл по MDI формам и если нужная найдена, то вызвать метод.

Function FormExist(Name:string):Boolean;
var
i:integer;
begin
for i:=0 to form1.MDIChildCount-1 do
 if form1.MDIChildren[i].Name=name then begin
  result:=true;
  exit;
 end;
 result:=false;
end;


Reindeer Moss Eater   (2005-09-15 10:13:00) [14]

>Однако сравнение МуMDIChildForm<>nil дает False

Потому что нил ей никто не присваивал.
Или ты оператору <> не доверяешь?
:)


Наверх

Титульная страница Поиск, карта сайта Написать письмо