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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Проблема с диалогом лиспа при переходе ра русифицированный акад

Проблема с диалогом лиспа при переходе ра русифицированный акад

Ответ
Поиск в этой теме
Непрочитано 20.01.2009, 11:36 #1
Проблема с диалогом лиспа при переходе ра русифицированный акад
Main Urod
 
Регистрация: 20.01.2009
Сообщений: 1,170

В свое время я написал несколько функций для работы в автолиспе. Часть функций использовали диалоги для ввода параметров. Функции работали в нелицензионных английских автокадах 2004, 2006, 2008. Сейчас на работе поставили лицензионный русифицированный автокад 2008. Функции все слетели. Те в которых не использовались диалоги, я восстановил. Но диалоге не работают. Они нормально открываются, значения вводятся, но выйти из диалога не происходит. Ни по штатному выходу, ни по кнопке "Cancel". При этом дома в английском автокаде все прекрасно работает. Кто нибудь знает где глюк?

Описание диалога:
Код:
[Выделить все]
provod1:dialog {label="Рисование прводника";
:spacer{width=0;height=1;}
:text{label="Введите тип проводника";alignment=centered;}
:spacer{width=0;height=1;}
:row{
:column{label="Переменный ток";
:button{label="  220 Фаза  ";key="_b11";width=12;}
:button{label="220 Нейтраль";key="_b12";width=12;}
}// конец COLUMN
...
cancel_button;
}
Вызов диалога:
Код:
[Выделить все]
 (action_tile				; Реакция на кнопку "220 фаза"
    "_b11"
    "(progn
(setq protype 1)
(done_dialog)
)")

Последний раз редактировалось Кулик Алексей aka kpblc, 20.01.2009 в 23:21. Причина: Тэг code придуман не просто так.
Просмотров: 2617
 
Непрочитано 20.01.2009, 17:02
#2
Sazanoff_e

А я тут это...погулять вышел...
 
Регистрация: 28.03.2007
Москва - от слова Моск?
Сообщений: 227
<phrase 1=


Думаю проблема в отсутствии "_" перед командами на английском языке в русском ACADe.
__________________
Рожденный проектировать ГОСТов не читает. (с)Туманов А.А.
Sazanoff_e вне форума  
 
Непрочитано 20.01.2009, 18:30
#3
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Цитата:
Сообщение от Sazanoff_e Посмотреть сообщение
Думаю проблема в отсутствии "_" перед командами на английском языке в русском ACADe.
Можно было бы так подумать, однако:
Цитата:
Те в которых не использовались диалоги, я восстановил.
Profan вне форума  
 
Непрочитано 20.01.2009, 20:15
#4
Donhuan

Проектировщик СС
 
Регистрация: 24.06.2008
Минск
Сообщений: 134
<phrase 1=


В фрагменте DCL не хватает закрывающей "}" описания диалога, а так проверил в редакторе VLISP локализованного 2008 AutoCAD - диалог отображается, кнопки работают.
Возможно, что неправильно описана функция (done_dialog), надо:
Код:
[Выделить все]
(action_tile "_b11" "(done_dialog (setq protype код))")
;код >1
Не видя всю программу, трудно делать предположения.

Последний раз редактировалось Donhuan, 20.01.2009 в 22:58. Причина: исправление кода
Donhuan вне форума  
 
Автор темы   Непрочитано 20.01.2009, 22:25
#5
Main Urod


 
Регистрация: 20.01.2009
Сообщений: 1,170


Цитата:
Сообщение от Sazanoff_e Посмотреть сообщение
Думаю проблема в отсутствии "_" перед командами на английском языке в русском ACADe.
Это действительно было проблемой, но только при использовании команды "command", где английские параметры вводимые через командную строку не воспринимались.

А вот в диалоге это ни к чему не привело. при попытке поставить "_" лисп переставал воспринимать их как команды языка.
Main Urod вне форума  
 
Автор темы   Непрочитано 20.01.2009, 22:54
#6
Main Urod


 
Регистрация: 20.01.2009
Сообщений: 1,170


Цитата:
Сообщение от Donhuan Посмотреть сообщение
В фрагменте DCL не хватает закрывающей "}" описания диалога, а так проверил в редакторе VLISP локализованного 2008 AutoCAD - диалог отображается, кнопки работают.
Не хватает "}", потому что я привел не весь диалог, выбросил повторяющиеся фрагменты. А так диалоги работают. Активные слайды по "slide_imade" меняются, значения введенные в "edit_box" сохраняются при переходе между несколькими полями. Только вот выйти я из диалога не могу. Ни по "done_dialog" ни по "cancel_button".

Цитата:
Сообщение от Donhuan Посмотреть сообщение
(action_tile "_b11" "(done_dialog (setq protype 1))")
"_b11" не работает. пробовал.
"(done_dialog (setq protype 1))" завтра попробую. но по идее не поможет, т.к. он не значения незапоминает, а просто не выходит из диалога.

Цитата:
Сообщение от Donhuan Посмотреть сообщение
Не видя всю программу, трудно делать предположения.
Всю программу трудно привести, она очень большая. Приведу полностью самый простой диалог:

Диалог
----------------------------------------------------

Код:
[Выделить все]
// **************************************************************
// *          Окно выбора типа проводника (начало)              *
// **************************************************************
provod1:dialog {label="Рисование прводника";
:spacer{width=0;height=1;}
:text{label="Введите тип проводника";alignment=centered;}
:spacer{width=0;height=1;}
:row{
:column{label="Переменный ток";
:button{label="  220 Фаза  ";key="b11";width=12;}
:button{label="220 Нейтраль";key="b12";width=12;}
}// конец COLUMN
:spacer{width=1;height=0;}
:column{label="Постоянный ток";
:button{label="    + 24    ";key="b21";width=16;}
:button{label="    - 24    ";key="b22";width=12;}
}// конец COLUMN
:spacer{width=1;height=0;}
:column{label="Другое";
:button{label="Неопределено";key="b31";width=12;}
:button{label="   Земля    ";key="b32";width=12;}
}// конец COLUMN
}// конец ROW
:spacer{width=0;height=1;}
cancel_button;
}
// **************************************************************
// *          Окно выбора типа проводника (конец)              *
// **************************************************************
--------------------------------------------

Вызов диалога:

---------------------------------------------
Код:
[Выделить все]
 ;;                                                             
  ;; Загрузка файла диалога (начало)                             
  ;;                                                             
  (if (< (setq dcl_id (load_dialog "САПР.dcl"))
	 0
      )					; проверим наличие файла диалога. нет - выход
    (progn				; файл диалога не найден - выход
      (princ "Файл САПР.dcl не найден")
      (terpri)
  ;; Восстановление системных переменных (начало)                
  (setvar "clayer" oldclayer)		; Восстановить слой
  (setvar "cecolor" oldcecolor)		; Восстановить текущий цвет рисования
  (setvar "celtype" oldceltype)		; Восстановить тип линии
  (setvar "snapmode" oldsnapmode)	; Сохранить текущее состояние шага (вкл/выкл)
  (setvar "osmode" oldosmode)		; Сохранить текущий тип привязки
  (setvar "gridmode" oldgridmode)	; Восстановить состояние сетки
  (setvar "cmdecho" oldcmdecho)		; Восстановить значения переменной "cmdecho"
  ;; Восстановление системных переменных (конец)                 
  (exit)
    )					; конец PROGN файл диалога не найден - выход 
  )					; конец if проверим наличие файла диалога. нет - выход
  ;;                                                             
  ;; Загрузка файла диалога (конец)                              
  ;;                                                             



  ;;                                                             
  ;; Загрузка диалога "Выбор типа проводника" (начало)           
  ;;                                                             
  (if (not
	(new_dialog "provod1" dcl_id)
      )					; Диалог в файле не найден - выход
    (progn				; Диалог не найден - выход
      (princ "Диалог в файле САПР.dcl не найден")
      (terpri)
  ;; Восстановление системных переменных (начало)                
  (setvar "clayer" oldclayer)		; Восстановить слой
  (setvar "cecolor" oldcecolor)		; Восстановить текущий цвет рисования
  (setvar "celtype" oldceltype)		; Восстановить тип линии
  (setvar "snapmode" oldsnapmode)	; Сохранить текущее состояние шага (вкл/выкл)
  (setvar "osmode" oldosmode)		; Сохранить текущий тип привязки
  (setvar "gridmode" oldgridmode)	; Восстановить состояние сетки
  (setvar "cmdecho" oldcmdecho)		; Восстановить значения переменной "cmdecho"
  ;; Восстановление системных переменных (конец)                 
      (exit)
    )					; Конец PROGN  Диалог не найден - выход
  )					; Конец IF Диалог в файле не найден - выход
  ;;                                                             
  ;; Загрузка диалога "Выбор типа проводника" (конец)            
  ;;                                                             



  ;;                                                             
  ;; Реакция диалога на нажатие кнопки (нечало)                  
  ;;                                                             
  (action_tile				; Реакция на кнопку "220 фаза"
    "b11"
    "(progn
(setq protype 1)
(done_dialog)
)")
  (action_tile				; Реакция на кнопку "220 нейтраль"
    "b12"
    "(progn
(setq protype 2)
(done_dialog)
)")
  (action_tile				; Реакция на кнопку "+24"
    "b21"
    "(progn
(setq protype 3)
(done_dialog)
)")
  (action_tile				; Реакция на кнопку "-24"
    "b22"
    "(progn
(setq protype 4)
(done_dialog)
)")
  (action_tile				; Реакция на кнопку "неопределено"
    "b31"
    "(progn
(setq protype 5)
(done_dialog)
)")
  (action_tile				; Реакция на кнопку "земля"
    "b32"
    "(progn
(setq protype 6)
(done_dialog)
)")
  ;;                                                             
  ;; Реакция диалога на нажатие кнопки (конец)                   
  ;;                                                             



  ;;                                                             
  ;; Запуск диалога  (начало)                                    
  ;;                                                             
  (start_dialog)			; запустим диалог
  ;;                                                             
  ;; Запуск диалога  (конец)                                     
  ;;                                                             



  ;;                                                             
  ;; Анализ нажатой кнопки  (начало)                             
  ;;                                                             

  ;; если нажата кнопка "отмена" восстановить переменные и выход
  ;; при нажатии рабочей кнопки настройки производятся перед рисованием линии
  (if (= protype 0)
    (progn				; нажата кнопка отмены
      (princ " Отмена команды ")
      (terpri)
  ;; Восстановление системных переменных (начало)                
  (setvar "clayer" oldclayer)		; Восстановить слой
  (setvar "cecolor" oldcecolor)		; Восстановить текущий цвет рисования
  (setvar "celtype" oldceltype)		; Восстановить тип линии
  (setvar "snapmode" oldsnapmode)	; Сохранить текущее состояние шага (вкл/выкл)
  (setvar "osmode" oldosmode)		; Сохранить текущий тип привязки
  (setvar "gridmode" oldgridmode)	; Восстановить состояние сетки
  (setvar "cmdecho" oldcmdecho)		; Восстановить значения переменной "cmdecho"
  ;; Восстановление системных переменных (конец)                 
      (exit)				; выход из программы
    )					; конец PROGN (нажата кнопка отмены)
  )					; конец IF
  ;;                                                             
  ;; Анализ нажатой кнопки  (конец)                              
  ;;

Последний раз редактировалось Кулик Алексей aka kpblc, 20.01.2009 в 23:22.
Main Urod вне форума  
 
Непрочитано 20.01.2009, 23:23
#7
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Main Urod, тэг code не забывай проставлять...
P.S. Программу пока не смотрел.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.01.2009, 23:43
#8
Donhuan

Проектировщик СС
 
Регистрация: 24.06.2008
Минск
Сообщений: 134
<phrase 1=


Добавь в лисп где перечислены (action_tile)
Код:
[Выделить все]
 (action_tile				; Реакция на кнопку "cancel"
    "cancel"
    "(progn
(setq protype 0)
(done_dialog)
)")
Donhuan вне форума  
 
Автор темы   Непрочитано 21.01.2009, 10:29
#9
Main Urod


 
Регистрация: 20.01.2009
Сообщений: 1,170


Ни один из приведенных методов не работает...
Main Urod вне форума  
 
Непрочитано 21.01.2009, 16:54
#10
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Потому что явно проблем в приведенном коде нет.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Проблема с диалогом лиспа при переходе ра русифицированный акад

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с AutoСAD LT 2008 при сохранении Cерж AutoCAD 8 10.06.2010 11:46
Проблема при печати из acad 2007 и старше (круги вместо чертежа) zaic3k AutoCAD 3 30.01.2009 19:27
проблема при печати TTF-шрифтов beholder AutoCAD 2 06.10.2008 21:28
Проблема с установкой Акад 2005 Денис М. AutoCAD 11 16.08.2004 13:09