Тема: Проверка Диалога

Как сделать так, чтоб при нажатии OK, выполнялась проверка значений в edit_box и т.п. и вслучае если что не так, возвращала диалог и значения в форме оставались

Re: Проверка Диалога

Не вызывать (done_dialog) если проверка не прошла.

Re: Проверка Диалога

Через action_tile проще см код,
; DEM
;
(defun C:setka1 (/ dcl_id step pt d1 d2)
  (setq dcl_id (load_dialog "proba.dcl"))
  (setq step 2)
  (setq L1 0)
  (setq L2 0)
  (setq d1 0)
  (setq d2 0)
  (setq sh1 0)
  (setq sh2 0)
  (setq b1 0)
  (while (>= step 2)
    (if (null (new_dialog "proba" dcl_id))(exit))
    (set_tile "LD1" (rtos L1 2 0))
    (set_tile "LD2" (rtos L2 2 0))
    (set_tile "d1" (rtos d1 2 0))
    (set_tile "d2" (rtos d2 2 0))
    (set_tile "sh1" (rtos sh1 2 0))
    (set_tile "sh2" (rtos sh2 2 0))
    (set_tile "b1" (rtos b1 2 0))
    (action_tile "accept"
      (strcat
        "(setq L1 (atoi (get_tile \"LD1\")))"
        "(setq L2 (atoi (get_tile \"LD2\")))"
        "(setq d1 (atoi (get_tile \"d1\")))"
        "(setq d2 (atoi (get_tile \"d2\")))"
        "(setq sh1 (atoi (get_tile \"sh1\")))"
        "(setq sh2 (atoi (get_tile \"sh2\")))"
        "(done_dialog 1)"
      );strcat
    );action_tile
    (action_tile "mousep2"
      (strcat
        "(setq L1 (atoi (get_tile \"LD1\")))"
        "(setq L2 (atoi (get_tile \"LD2\")))"
        "(setq d1 (atoi (get_tile \"d1\")))"
        "(setq d2 (atoi (get_tile \"d2\")))"
        "(setq sh1 (atoi (get_tile \"sh1\")))"
        "(setq sh2 (atoi (get_tile \"sh2\")))"
        "(done_dialog 4)"
      );strcat
    );action_tile
    (action_tile "mousep3"
      (strcat
        "(setq L1 (atoi (get_tile \"LD1\")))"
        "(setq L2 (atoi (get_tile \"LD2\")))"
        "(setq d1 (atoi (get_tile \"d1\")))"
        "(setq d2 (atoi (get_tile \"d2\")))"
        "(setq sh1 (atoi (get_tile \"sh1\")))"
        "(setq sh2 (atoi (get_tile \"sh2\")))"
        "(done_dialog 5)"
      );strcat
    );action_tile
    (action_tile "mousep4"
      (strcat
        "(setq L1 (atoi (get_tile \"LD1\")))"
        "(setq L2 (atoi (get_tile \"LD2\")))"
        "(setq d1 (atoi (get_tile \"d1\")))"
        "(setq d2 (atoi (get_tile \"d2\")))"
        "(setq sh1 (atoi (get_tile \"sh1\")))"
        "(setq sh2 (atoi (get_tile \"sh2\")))"
        "(done_dialog 6)"
      );strcat
    );action_tile
    (action_tile "b1"
      (strcat
        "(setq b1 (atoi (get_tile \"b1\")))"
        "(cond
        ((= b1 0) (mode_tile \"sh2\" 1))
        ((= b1 1) (mode_tile \"sh1\" 1))
        ((= b1 2) (mode_tile \"LD2\" 1))
        ((= b1 3) (mode_tile \"LD1\" 1))
        )";cond
      );strcat
    );action_tile
    (setq step (start_dialog))
    (cond
      ((= step 4) (setq L1 (getdist "\nВведите длину вертикальных стержней: ")));step4
      ((= step 5) (setq L2 (getdist "\nВведите длину горизонтальных стержней: ")));step5
      ((= step 6) (setq pt1 (getpoint "\nНачальная точка: "))
                 (setq pt2 (getpoint pt1 "\nКонечная точка: "))
                 (setq L1 (- (nth 1 pt2) (nth 1 pt1)))
                 (setq L2 (- (nth 0 pt2) (nth 0 pt1)))
               );step6
    );cond
  );while
  (unload_dialog dcl_id)
  (princ)
  )
Он клнечно не такой чистый как у не которых но все же

Re: Проверка Диалога

Я возможно где то скобку проглотил так что код скорее всего не рабоий

Re: Проверка Диалога

> DEM
Что проще? Проще, чем что?