Тема: Пример со скользящей шкалой

Если у кого есть, выложите, пожалуйста, пример lsp и dcl-файла, где в диалоговом окне будет текст, который можно просматривать с помощью бегунка

Re: Пример со скользящей шкалой

> qwerty
А хотя бы так мона:
LSP:

;;slide.lsp
(defun c:test (/ dcl_id )
  (setq dcl_id (load_dialog "slide.dcl"))
  (new_dialog "begun" dcl_id)
  (set_tile "dia" " К примеру...")
  (set_tile "beg" "1")
  (setq const (get_tile "txt"))
  (action_tile "beg" (strcat
               "(progn (setq position (atoi $value))"
               "(cut_text position \"txt\")"
               "(if (= position 1)(set_tile \"txt\" const)))"
               )
    )
  (action_tile "accept" "(done_dialog)(setq hit T)")
  (action_tile "cancel" "(done_dialog)(setq hit nil)")
  (setq result (start_dialog))
  (unload_dialog dcl_id)
  (princ)
)
(defun cut_text (pos txt)
(set_tile txt (substr (get_tile txt) (1+ pos))
)
)

DCL:

//slide.dcl
begun : dialog {
  key = "dia";
  label = "";
  spacer;
  : row {
      : edit_box {label = "See the text:";
      key = "txt";
      value = "I am adjusting a lisp program. I have to make the slider into an edit_box if this will be possible to do.";
      edit_width = 40;
      }
  }
  : row {
    height = 2.0;
    : text_part {
      key = "empty";
      label = "";
    }
    : slider {
      key = "beg";
      min_value = 1;
      max_value = 95; <==строго соответствует длине строки текстбокса
      small_increment = 1;
      big_increment = 2;
      width = 42;
      fixed_width = true;
      is_tab_stop = false;
    }
  }
  ok_cancel;
}

~'J'~

Re: Пример со скользящей шкалой

благодарю)))

Re: Пример со скользящей шкалой

а чтобы вертикально бегунок перемещался, что поменять?

Re: Пример со скользящей шкалой

> qwerty
Просто изменить свойство layout и
просчитать геометрию бегуна:

    : slider {
      layout = vertical;//по умолчанию горизонтальный, тогда можно не указывать
      key = "beg2";
      min_value = 1;
      max_value = 10;
      small_increment = 1;
      big_increment = 2;
      height = 12;//<==вертикальный размер (примерно: max_value + размеры стрелок)
... далее те же опции что и для горизонтального

~'J'~

Re: Пример со скользящей шкалой

еще одна проблема.
У меня зависает ADT из-за строчки:

(action_tile "KLT0" "(KLT)"),

где KLT-программа. То есть при нажатии кнопки с кодом "KLT0", должна начинать работать программа "KLT". Надо как-то по-другому задавать это действие?

Re: Пример со скользящей шкалой

> qwerty
Синтаксис правильный, если функция KLT
написана правильно проблем быть не должно
Протестируй функцию отдельно вне контекста
общего файла
Еще лучше выложи код этой функции, тогда проще
разобраться
Еще один возможный вариант отказа, если
при откликe на "accept" эта функция игнорируется
Все зависит как у тебя там все заложено
в смысле алгоритма программы...
(по-моему больше запутал чем помог :)
~'J'~

Re: Пример со скользящей шкалой

а по-другому как-то можно задать?
У меня если в командной строке набрать (KLT),странно, но не загружает, а если (load "KLT")(KLT), то все ок

Re: Пример со скользящей шкалой

( Defun KLT (/)
   ( Setq DL1  ( getint   "\n 4 опорные точки <старые>-0   нет-1 :"))
   ( if (/= Dl1 nil)( KLA ))
   ( Setq DL1 nil )
   ( Setq DL2 nil )
   ( Setq DL3 nil )
             ;  Н А Ч А Л О    Ц И К Л
     ( while (= DL1 nil)
     ( command "_zoom" "_window" L2K L1K )
     ( if (/= DL3 nil)( command "_erase" TT10 ""))
     ( Setq TT10  ( getpoint   "\n 1 точка  поле 1 <Б/У>):"))
     ( if (= TT10 nil)
       (progn
         ( Setq TT101   ( getpoint   "\n 1 точка направления ):"))
         ( Setq TT102   ( getpoint   "\n 2 точка направления):"))
       )
       ( progn (Setq TT101 nil)(Setq TT102 nil))
     )
     (if (/= TT10 nil)(command "_point" TT10))
     ( Setq TT20 ( KL  KP1 KP2 KP3 KP31 KP32 KP4 KP41 KP42
                   KR1 KR2 KR3 KR31 KR32 KR4 KR41 KR42 TT10 TT101 TT102))
     ( command "_zoom" "_window" LL2K LL1K )
     ( if (/= TT20 nil )(command "_point" TT20))
     ( Setq DL3  ( getint   "\n <сохранить>-0   нет-1 :"))
     ( if (/= DL3 nil)( command "_ERASE" TT20 ""))
     ( Setq DL1  ( getint   "\n   <продолжить >-0   нет-1  :"))
   )
             ;  К О Н Е Ц       Ц И К Л
 )
;End of the KLT function

Re: Пример со скользящей шкалой

> qwerty
Потому что это у тебя отдельный файл
Просто скопируй код оттуда и вставь
эту функцию в твой рабочий файл:

;; начало файла
;; локальные фунции
(defun KLT ()
...
)
(defun A()
...
)
(defun B ()
...
)
;; окончание блока локальных функций
;; основная программа
(defun C:abcd()
;; load dcl
;; working with dcl
;; working with result
(princ)
)

~'J'~