| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Вопрос Fantomas'у. Object DCL

Вопрос Fantomas'у. Object DCL

Ответ
Поиск в этой теме
Непрочитано 09.06.2004, 13:53 #1
Вопрос Fantomas'у. Object DCL
kos
 
LISP-программист
 
Тутэйшы
Регистрация: 25.08.2003
Сообщений: 238

Дошли, наконец-то ручки...
Однако уже на первом шаге затык: при создании "Вашего первого окна шаг за шагом" (из Help'а) при инициализации формы не происходит обновления Label1, при нажатии на кнопку OK не закрывается форма. Т.е. ни одно из двух событий не обрабатывается. Код выверял посимвольно (благо его немного), тут ошибки исключены. Вопрос, как к спецу по ObjectDCL: где тут могут быть грабли? Использую ObjectDCL 2004 и Autodesk Map 2004 (лицензионный).
__________________
Там все есть для счастья - меня там только нет.
Так это значит, что я там - буду!
Просмотров: 3723
 
Непрочитано 09.06.2004, 18:33
#2
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


К сожалению не помню уже что в "шаг за шагом" было написано, но попробую догадаться в чем дело. Возмем проект с одной кнопкой и одним Label.

Замена стандартной надписи Label1 на Hi, Kos! при инициализации

Код:
[Выделить все]
(defun c:MyForm1_OnInitialize ()
     (Odcl_Control_SetProperty MyPr1_MyForm1_Label1 "Caption" "Hi, Kos!")
)
Код закрытия формы при нажатии кнопки:
Код:
[Выделить все]
(defun c:MyForm1_Cancel_But_OnClicked ()
     (Odcl_Form_Close MyPr1_MyForm1)
)
Возможно при сохранении у вас не стоит "галочка" на обработку этих событий (см. картинку). Потом поподробнее расскажу, сейчас со временем запарка...
[ATTACH]1086791609.gif[/ATTACH]
{Smirnoff} вне форума  
 
Автор темы   Непрочитано 10.06.2004, 10:00
#3
kos

LISP-программист
 
Регистрация: 25.08.2003
Тутэйшы
Сообщений: 238


Fantomas, спасибо. Заработало. Только так и не выяснил почему не работало вчера. Не поменял ни одного символа. Может после того, как сформирован диалог (odc-файл) и обрабатывающая его функция (lsp) необходимо закрыть редактор ObjectDCL и (или) AutoCAD, а затем запустить его снова? Нет таких наблюдений?
__________________
Там все есть для счастья - меня там только нет.
Так это значит, что я там - буду!
kos вне форума  
 
Непрочитано 10.06.2004, 11:23
#4
BOZ (Олег)


 
Сообщений: n/a


Ошибка была следующая (сам когда-то попался)
В функции Odcl_LoadProject кроме имени файла опционально возможен и второй аргумент ForceReload.
При отладке проекта необходимо чтобы ForceReload был t
(Odcl_LoadProject <имя прооекта> t).
В этом случае - кажый раз при загрузке функции будет подчитываться odc-файл с диска.
Если второй аргумент отсутствует - программа обращается к загруженному в память ресурсу диалога, не перечитывая его с диска и никакие изменения сделанные в редакторе диалога (в том числе включение галочки обработки события) не доступны.
Убирать этот аргумент нужно только в окончательно отлаженной программе для ускорения работы.
 
 
Автор темы   Непрочитано 10.06.2004, 17:23
#5
kos

LISP-программист
 
Регистрация: 25.08.2003
Тутэйшы
Сообщений: 238


Цитата:
Сообщение от BOZ (Олег)
Ошибка была следующая (сам когда-то попался)
В функции Odcl_LoadProject кроме имени файла опционально возможен и второй аргумент ForceReload.
При отладке проекта необходимо чтобы ForceReload был t
(Odcl_LoadProject <имя прооекта> t).
В этом случае - кажый раз при загрузке функции будет подчитываться odc-файл с диска.
Если второй аргумент отсутствует - программа обращается к загруженному в память ресурсу диалога, не перечитывая его с диска и никакие изменения сделанные в редакторе диалога (в том числе включение галочки обработки события) не доступны.
Убирать этот аргумент нужно только в окончательно отлаженной программе для ускорения работы.
Да нет, дело не в этом. Т как раз на месте. Грабли в другом. Правда никак не могу понять где именно.
И еще вопрос вдогонку. Любое ли свойство можно менять при помощи функции Odcl_Control_SetProperty?
__________________
Там все есть для счастья - меня там только нет.
Так это значит, что я там - буду!
kos вне форума  
 
Непрочитано 10.06.2004, 18:34
#6
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


>Kos Выберите любой элемент и откройте Object Broswer в контекстном меню. Откроется окно со свойствами, методами и событиями (см. картинку). Как видите после этого Help вам нужен процентов на 10. Там есть все и можно копировать Set и Get в буфер.

По поводу "инцидента" могу сказать следующее. У меня также как и у Олега при наладке стоит T и все изменения в диалоге появляються "налету" при следующем запуске проги без перезагрузок КАДа и документа куда была загружена функция. Так что не знаю причины кроме Т...
[ATTACH]1086878078.gif[/ATTACH]
{Smirnoff} вне форума  
 
Непрочитано 10.06.2004, 19:08
#7
BOZ (Олег)


 
Сообщений: n/a


Цитата:
Сообщение от kos
Любое ли свойство можно менять при помощи функции Odcl_Control_SetProperty?
Большинство, но не любое. При просмотре свойств через Object Browser (а в 3-й версии он уже называется Intelligent Help) указано какие свойства нельзя менять программно, хотя не для всех.
Я скажу так: ObjectDCL имеет свои проблемы, но без него было бы намного хуже.
За последние два месяца разработчик уже устранил около 5-ти ошибок по моим замечаниям и продолжает это делать.
Более того - даже сделал одно усовершенствование по моей просьбе.
 
 
Непрочитано 10.06.2004, 19:31
#8
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Все не соберусь качнуть бесплатно 3-ю версию. А уже пора бы...
{Smirnoff} вне форума  
 
Автор темы   Непрочитано 11.06.2004, 09:36
#9
kos

LISP-программист
 
Регистрация: 25.08.2003
Тутэйшы
Сообщений: 238


Цитата:
Сообщение от Fantomas
Выберите любой элемент и откройте Object Broswer в контекстном меню. Откроется окно со свойствами, методами и событиями (см. картинку). Как видите после этого Help вам нужен процентов на 10. Там есть все и можно копировать Set и Get в буфер.
Цитата:
Сообщение от BOZ (Олег)
Большинство, но не любое. При просмотре свойств через Object Browser (а в 3-й версии он уже называется Intelligent Help) указано какие свойства нельзя менять программно, хотя не для всех.
Большое спасибо за совет. Очень полезно. Я выяснил, что в моем случае This property can only be set at design time only. По поводу изменений "на лету" - пока вроде работает, хотя причину я так и не нашел...
__________________
Там все есть для счастья - меня там только нет.
Так это значит, что я там - буду!
kos вне форума  
 
Непрочитано 11.06.2004, 10:31
#10
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Сразу еще одна штука на которая может вызвать проблемку. В течении работы одной проги если требуется возвращать диалог на экран несколько раз НЕ НАДО писать несколько раз (Odcl_Form_Show My_Dialog), будут проблеммы (откроете вторую копию). Используйте конструкцию подобную этой:

В "головной" функции:

(setq dialShow T)
(while dialShow
(Odcl_Form_Show My_Dialog)
)

Скрыть диалог:

(Odcl_Form_Close My_Dialog)
(setq dialShow nil)

Возвратить диалог:

(setq dialShow T)
{Smirnoff} вне форума  
 
Автор темы   Непрочитано 11.06.2004, 11:20
#11
kos

LISP-программист
 
Регистрация: 25.08.2003
Тутэйшы
Сообщений: 238


Fantomas, спасибо. Действительно ситуация неочевидная.
__________________
Там все есть для счастья - меня там только нет.
Так это значит, что я там - буду!
kos вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Вопрос Fantomas'у. Object DCL

Размещение рекламы