![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Определить сужествование 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
Потому что нил ей никто не присваивал.
Или ты оператору <> не доверяешь?
:)