Запуск одной копии интерфейса
Модераторы: m0p3e, edward_K, Модераторы
Запуск одной копии интерфейса
Может кто знает, как сделать так чтобы запускалась одна копия интерфейса? Т.е. если вызвать RunInterface('Foo') несколько раз, запускалось не n копий интерфейса Foo, а активизировалась только одна уже запущенная?
И вдогонку: как добиться, чтобы после закрытия интерфейса он не выгружался из памяти? cacheable поможет?
И вдогонку: как добиться, чтобы после закрытия интерфейса он не выгружался из памяти? cacheable поможет?
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Пример - фро - интерактивный отчет - больше 3 копий не згарузите. Вроде там через объектный фейс сделано. При первой загрузке он инициализируется и висит в памяти пока все фейсы его юзающие не закроются. Можно еще Notify использовать или семафор. ну или dsk.
Последние 2 варианты ненадежны - при вылете из галки придется чистить.
Последние 2 варианты ненадежны - при вылете из галки придется чистить.
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Notify(cmValue20, 0);
http://www.tyumbit.ru/gal_forum/viewtop ... ght=notify
там написано что если кто-то из фейсов в событии сделает stop то вернет не нулевое значение - этим и можно воспользоваться. Ну или сохранить чаго либо в dsk а в событие переписать чего то другое. Ну еще нужно отловить что это не эта копия фейса. То есть в cminit определить сначала какую то переменную в false а после обработки notify в true и по ней в cmValue20 проверить надо ли stop сделать.
но вообще модальный запуск проще.
http://www.tyumbit.ru/gal_forum/viewtop ... ght=notify
там написано что если кто-то из фейсов в событии сделает stop то вернет не нулевое значение - этим и можно воспользоваться. Ну или сохранить чаго либо в dsk а в событие переписать чего то другое. Ну еще нужно отловить что это не эта копия фейса. То есть в cminit определить сначала какую то переменную в false а после обработки notify в true и по ней в cmValue20 проверить надо ли stop сделать.
но вообще модальный запуск проще.
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
cmValue20 некое произволное событие(могет быть любое - эта просто в ini Объявлена, хоть cmPrintDoc - все фейсы разом запечатают
).
вызывать Notify в cmInit как написано в предыдущем посте -
поможет куда денется. Насчет не создаст - позапускайте отчет в первом моем посте. Да и по ссылке сходите - там автор notify пишет.

вызывать Notify в cmInit как написано в предыдущем посте -
поможет куда денется. Насчет не создаст - позапускайте отчет в первом моем посте. Да и по ссылке сходите - там автор notify пишет.
лучше кода нет помощи, если следовать посту то получается следующее:
что еще сюда воткнуть?
Код: Выделить всё
interface Aa;
const
cmNotify = 6001;
end;
handleEvent
cmInit:
{
if (Notify(cmNotify, ) <> 0)
Abort();
}
cmNotify:
{
Stop();
}
end;
end.
короче, бесполезно все это, не заработает так. Нельзя определить, что это тот же самый экземпляр рассылает cmNotify. Вот если бы можно было с Notify ссылочку передать, тогда да, провели бы на равенство с self. Ну даже ели и прервали cmInit, дальше то все равно надо активировать уже запущенную версию интерфейса
При запуске из меню один экземпляр интерфейса будет получаться сам по себе. Пример запуска через меню есть в примерах из документации
ftp://ftp.galaktika.ru/pub/support/gala ... df/RPP.zip
ищите там файл Example\Src\RC\prj_mng.mnu пояснения читайте здесь
ftp://ftp.galaktika.ru/pub/support/gala ... df/RPP.chm
ftp://ftp.galaktika.ru/pub/support/gala ... df/RPP.zip
ищите там файл Example\Src\RC\prj_mng.mnu пояснения читайте здесь
ftp://ftp.galaktika.ru/pub/support/gala ... df/RPP.chm
Инициализируйте интерфейс через объектную переменную. В одном из методов делайте вызов функции RunWindow (в немодальном режиме). Дергайте этот метод по мере надобности. Ели окно закроется, то объект (он же интерфейс) в памяти останется пока не освободится объектная ссылка.
Если вызывающих объектов много, то создавайте объект в режиме разделяемой копии. Будет тогда только один экземпляр окна открываться.
Если вызывающих объектов много, то создавайте объект в режиме разделяемой копии. Будет тогда только один экземпляр окна открываться.