Тема: OpenDCL vs DCL

Здравствуйте!
Незнаю, может в силу своего моло-знания в OpenDCL(далее ODCL), но попробовав перевести свою программку с DCL в ODCL я столкнулся с проблемой невозможности ее реализации. А именно я не смог использовать переменные основной функции,
которые мне необходимы для хранения важных для работы программы данных, так как они обнуляются в связи с завершением работы этой(основной) функции.
Т.е.(как я понимаю) основная функция необходима только для загрузки arx библиотеки, самого диалогового окна и его отображения?
А как же быть, если мне нужно перед появлением диалогового окна произвести выбор объектов в набор, запомнить этот набор, необходимо проверить обрабатывались ли уже выделенные данные этой программой и еще куча условий(и на все это адекватно отреагировать), а потом, относительно того, что выберет пользователь в программе(там есть и списки и текстовые поля и т.д) произвести необходимые действия.
Все это можно просто реализовать используя обычный DCL, но писать его неудобнее, да и возможности не сравнить(хотелось сделать окно немодальным)
Вопрос: возможно ли пользоваться ODCL и работать с этим диалогом как и с простым DCL(т.е. возможно ли чтобы функции диалога были не отдельными/самостоятельными функциями, а подфункциями основной функции и в них были бы доступны переменные основной функции и возможно ли чтобы основная функция не завершала свою работу, а находилась, как бы, в
режиме ожидания)? есть ли примеры сложных программ с использованием ODCL?
заранее спасибо
с уважением, Сергей

Re: OpenDCL vs DCL

Если вы хотите использовать OblectDCL с немодальными диалогами, то это означает, что основная функция после вызова окна будет обязательна закрыта. Окно себе висит, а вы используете любые команды Автокада и т.п. В этот момент основная функция которая инициализировала окно естественно закрыта. Если бы она выполнялась, то вы бы не могли производить никаких действий и теряется смысл немодального окна.
Каждое событие для элементов управления немодального окна обрабатывается независимой функцией. Для передачи данных в этом случае Вам придется иметь какое-то глобальное хранилище, решайте сами - глобальные переменные, словарь чертежа и т.п. в зависимости от задачи.

Re: OpenDCL vs DCL

ааа... вот оно что..! я как-то упустил это из виду..( теперь-то мне все стало понятно!)
Скажите, а если использовать модальное окно(ODCL), там обработка событий будет производиться локальными функциями? т.е. разницы между стандартным DCL и ODCL, с точки зрения принципа работы(грубо говоря конечно), не будет?

Re: OpenDCL vs DCL

и еще: "глобальные переменные" - я думал, что глобальных переменных в lisp нету! или я ошибался? а где можно схоронить набор содержащий более 20 000 объектов?

Re: OpenDCL vs DCL

Если окно модальное, то функции могут быть локальными и переменные тоже - могут быть объявленными в главной функции.
Глобальные переменные в лиспе есть, просто для этого вообще не надо их задавать в заголовочной части defun. Это считается некраивым тоном, но смотрите по задаче.
Вместо глобальных переменных Можете использовать словари или что-то типа vlax-ldata-put, vlax-ldata-get

Re: OpenDCL vs DCL

Ок! Вот и разобрались..
Спасибо Вам большое!
с уважением, Сергей