Как закрыть интерфейс, не имеющий визуальных элементов?
Модераторы: m0p3e, edward_K, Модераторы
Как закрыть интерфейс, не имеющий визуальных элементов?
Добрый день. Заранее извиняюсь за возможное плождение похожих тем, т.к. на форуме они присутствуют, но решения я так и не нашёл из них.
У меня есть интерфейс вида:
Interface ne_test;
create view
;
handleEvent
cmInit:
{
CloseInterface(cmDefault);
abort;
exit;
}
end;
end.
Если его вызвать 10 раз, то в дебаге я увижу 10 экземпляров этого фейса с 0 кол-вом ссылок на каждый. Если закоментить всё в cmInit и добавить даже пустой скрин, то при нажатии на крестик интерфейс корректно убивается из памяти. Я перебрал уже всё, что нашёл в документации и на форуме, всевозможные комбинации stop, abort, exit, closeinterface, putcommand.. всё тщетно. Может ли кто-нибудь раскрыть тайну, что же происходит при нажатии на крестик? Как мне это эмулировать из кода?
Заранее спасибо
У меня есть интерфейс вида:
Interface ne_test;
create view
;
handleEvent
cmInit:
{
CloseInterface(cmDefault);
abort;
exit;
}
end;
end.
Если его вызвать 10 раз, то в дебаге я увижу 10 экземпляров этого фейса с 0 кол-вом ссылок на каждый. Если закоментить всё в cmInit и добавить даже пустой скрин, то при нажатии на крестик интерфейс корректно убивается из памяти. Я перебрал уже всё, что нашёл в документации и на форуме, всевозможные комбинации stop, abort, exit, closeinterface, putcommand.. всё тщетно. Может ли кто-нибудь раскрыть тайну, что же происходит при нажатии на крестик? Как мне это эмулировать из кода?
Заранее спасибо
Re: Как закрыть интерфейс, не имеющий визуальных элементов?
По идее должен сработать вариант
Но такой способ использования невизуальных интерфейсов - это не очень хороший тон (пережиток, устаревший метод). Если вам надо делать просто вычисления, без визуальных элементов. Используйте объектные возможности языка VIP. Примеры поищите на форуме или вот здесь http://laalaa.googlecode.com/files/Comp ... ts2006.rar.
Код: Выделить всё
Interface ne_test;
create view;
handleEvent
cmInit:
{
CloseInterface(cmDefault);
}
end;
end.
Re: Как закрыть интерфейс, не имеющий визуальных элементов?
Same shit. Висит в памяти:)
За документацию спасибо, но переписывать уже сделанное не очень горю желанием. Память засорять тоже не нравится, нужен выход:)
За документацию спасибо, но переписывать уже сделанное не очень горю желанием. Память засорять тоже не нравится, нужен выход:)
Re: Как закрыть интерфейс, не имеющий визуальных элементов?
Методом научного тыка выяснил сл-щее:
Отрабатывает как надо, но наблюдается "мигание" этого самого скрина... если закоментить скрин, то обьект в памяти не разрушается. Если вынести CloseInterface в cmInit, тоже объект не разрушается... какой-то бред, почему CloseInterface не работает без скрина?
Код: Выделить всё
Interface ne_test;
create view;
screen main 'sdf';
Fields
<<
>>
end;
handleEvent
cmInit:
{
PutCommand(cmKill);
}
cmkill:
{
CloseInterface(cmDefault);
}
end;
end.
Re: Как закрыть интерфейс, не имеющий визуальных элементов?
А если так попробовать?
Код: Выделить всё
interface I1
...
handleevent
cminit:
{
...
closeinterface(0);
abort;
exit;
}
end;
end.
Re: Как закрыть интерфейс, не имеющий визуальных элементов?
Посмотри ПИР 101.45035. Память течет если интерфейс вызвали с помощью RunInterfaceNoModal и в cmInit сделали прерывание. Если вызвать с помощью RunInterface, то экземпляр должен высвобождаться нормально
Re: Как закрыть интерфейс, не имеющий визуальных элементов?
galover, Спасибо.