Страница 1 из 1

Как закрыть интерфейс, не имеющий визуальных элементов?

Добавлено: 24 янв 2011, 16:34
Robis
Добрый день. Заранее извиняюсь за возможное плождение похожих тем, т.к. на форуме они присутствуют, но решения я так и не нашёл из них.

У меня есть интерфейс вида:

Interface ne_test;
create view
;
handleEvent
cmInit:
{
CloseInterface(cmDefault);
abort;
exit;
}
end;
end.

Если его вызвать 10 раз, то в дебаге я увижу 10 экземпляров этого фейса с 0 кол-вом ссылок на каждый. Если закоментить всё в cmInit и добавить даже пустой скрин, то при нажатии на крестик интерфейс корректно убивается из памяти. Я перебрал уже всё, что нашёл в документации и на форуме, всевозможные комбинации stop, abort, exit, closeinterface, putcommand.. всё тщетно. Может ли кто-нибудь раскрыть тайну, что же происходит при нажатии на крестик? Как мне это эмулировать из кода?

Заранее спасибо :|

Re: Как закрыть интерфейс, не имеющий визуальных элементов?

Добавлено: 24 янв 2011, 17:32
LaaLaa
По идее должен сработать вариант

Код: Выделить всё

Interface ne_test;
create view;
handleEvent
cmInit:
{
  CloseInterface(cmDefault);
}
end;
end.
Но такой способ использования невизуальных интерфейсов - это не очень хороший тон (пережиток, устаревший метод). Если вам надо делать просто вычисления, без визуальных элементов. Используйте объектные возможности языка VIP. Примеры поищите на форуме или вот здесь http://laalaa.googlecode.com/files/Comp ... ts2006.rar.

Re: Как закрыть интерфейс, не имеющий визуальных элементов?

Добавлено: 24 янв 2011, 18:09
Robis
Same shit. Висит в памяти:)

За документацию спасибо, но переписывать уже сделанное не очень горю желанием. Память засорять тоже не нравится, нужен выход:)

Re: Как закрыть интерфейс, не имеющий визуальных элементов?

Добавлено: 24 янв 2011, 18:20
Robis
Методом научного тыка выяснил сл-щее:

Код: Выделить всё

Interface ne_test;
create view;

screen main 'sdf';
Fields
<<
>>
end;

handleEvent
cmInit:
{
  PutCommand(cmKill);
}
cmkill:
{
CloseInterface(cmDefault);
}
end;
end.
Отрабатывает как надо, но наблюдается "мигание" этого самого скрина... если закоментить скрин, то обьект в памяти не разрушается. Если вынести CloseInterface в cmInit, тоже объект не разрушается... какой-то бред, почему CloseInterface не работает без скрина?

Re: Как закрыть интерфейс, не имеющий визуальных элементов?

Добавлено: 24 янв 2011, 18:52
RAJAH
А если так попробовать?

Код: Выделить всё

interface I1
...
handleevent
  cminit:
  {
     ...
     closeinterface(0);
     abort;
     exit;
  }
end;

end.

Re: Как закрыть интерфейс, не имеющий визуальных элементов?

Добавлено: 24 янв 2011, 19:01
galover
Посмотри ПИР 101.45035. Память течет если интерфейс вызвали с помощью RunInterfaceNoModal и в cmInit сделали прерывание. Если вызвать с помощью RunInterface, то экземпляр должен высвобождаться нормально

Re: Как закрыть интерфейс, не имеющий визуальных элементов?

Добавлено: 25 янв 2011, 17:07
Robis
galover, Спасибо.