aloy 发表于 2022-7-5 16:21:09

编辑框的验证

大家好,
下面是李·麦克对lisp对话代码的改编。我想用提供的代码验证编辑框。但是,初始化后提供的值无法验证。
 
有什么问题吗?。
 
提前感谢,
芦荟

samp11 : dialog {                                //dialog name
   label = "Pipe Lines" ;      //give it a label

      : row {                                        //define row

      :boxed_column {                        //define radio column
      label = "Pipe diameters used (mm)" ; //give it a label

       : toggle {                        //define toggle
              key = "tog1" ;                                //give it a name
              label = "150" ;                      //give it a label
                                             
              }                                       

            : toggle {                        //define toggle
              key = "tog2" ;                                //give it a name
              label = "200" ;                //give it a label
            }                               

            : toggle {                        //define toggle
              key = "tog3" ;                                //give it a name
              label = "225" ;                      //give it a label
              }                                       

            : toggle {                        //define toggle
              key = "tog4" ;                                //give it a name
              label = "250" ;                        //give it a label
            }                                       

            : toggle {                        //define toggle
              key = "tog5" ;                                //give it a name
              label = "300" ;                       //give it a label
              }                                       

            : toggle {                        //define toggle
              key = "tog6" ;                                //give it a name
              label = "375" ;                      //give it a label
            }

            : toggle {                        //define toggle
              key = "tog7" ;                                //give it a name
              label = "450" ;                      //give it a label
            }

            : toggle {                        //define toggle
              key = "tog8" ;                                //give it a name
              label = "600" ;                       //give it a label
            }

       }                                        //end toggle collumn

       : boxed_column {                        //define boxed column
       label = "Variables" ;
      
      

            : edit_box {                                //edit box
       key = "eb1" ;
       label = "Manning 'n'" ;                  
       edit_width = 10 ;                               
      
      
       }

       : edit_box {                                //edit box
       key = "eb2" ;                                  
       label = "% part full" ;
       edit_width = 10 ;               
       }

      }                                        //end boxed collumn
      

   
       }                               

    ok_cancel ;                                //predifined OK/Cancel
   
                                           //end text

(defun c:samp14 ( / bit cnt dch rtn lst )
   (setq lst
      '(
         ((150.0 120.0) (150.0 110.0) (150.0 100.0))
         ((200.0 150.0) (200.0 140.0) (200.0 120.0))
         ((225.0 180.0) (225.0 170.0) (225.0 160.0) (225.0 150.0))
         ((250.0 200.0) (250.0 180.0) (225.0 170.0) (225.0 160.0))
         ((300.0 300.0) (300.0 280.0) (300.0 260.0) (300.0 250.0) (300.0 240.0) (300.0 220.0) (300.0 200.0) (300.0 180.0))
         ((375.0 350.0) (375.0 320.0) (375.0 300.0) (375.0 280.0))
         ((450.0 400.0) (450.0 370.0) (450.0 350.0) (450.0 320.0))
         ((600.0 500.0) (600.0 450.0) (600.0 420.0) (600.0 400.0))
       )
   )
   (if
          (<= (setq dch (load_dialog "samp11.dcl")) 0)
         (princ "\nsamp11.dcl not found or could not be loaded.")
       )
   
   (if      (not (new_dialog "samp11" dch))
         (princ "\nError in samp11.dcl file.")
      )
      (my_init_dialog)      
         (setq bit 1 cnt 1 rtn 0)
         (repeat (length lst)
               (action_tile
                   (strcat "tog" (itoa cnt))
                   (strcat "(setq rtn (boole (+ 4 (* 3 (atoi $value))) " (itoa bit) " rtn))")
               )
               (setq bit (lsh bit 1) cnt (1+ cnt))
         )
         (if (= 1 (start_dialog))
               (setq bit 1
                     lst
                   (vl-remove-if
                      '(lambda ( x / flg ) (setq flg (zerop (logand bit rtn)) bit (lsh bit 1)) flg)
                     lst
                   )
               )
         )
      
   (my_init_dialog)
(action_tile "eb1" "(update_manning (setq man $value))")
(action_tile "eb2" "(update_percentage (setq pf $value))")

   (if (< 0 dch) (unload_dialog dch))
(setq dl lst)
(setq dl(apply 'append dl))
   (princ)
)

(defun my_init_dialog ()      
   (setq man "0.013"
         pf"50")
   (set_tile "eb1" man)
   (set_tile "eb2" pf)
   
   )
(defun update_manning (val)
   (cond
((equal (distof val) nil) (progn (set_tile "eb1" "invalid" (setq man "invalid")))
         ((<= (distof val) 0.009) (progn (set_tile "eb1" "invalid") (setq man "invalid")))
         ((>= (distof val) ) 0.018) (progn (set_tile "eb1" "invalid") (setq man "invalid")))
         (t (progn (set_tile "eb1" val) (setq man val)))))
(defun update_percentage (val)
   (cond
((equal (distof val) nil) (progn (set_tile "eb2" "invalid" (setq pf "invalid")))
         ((< (distof val) 50) (progn (set_tile "eb2" "invalid") (setq pf "invalid")))
         ((> (distof val) ) 66) (progn (set_tile "eb2" "invalid") (setq pf "invalid")))
         (t (progn (set_tile "eb2" val) (setq man val)))))
   

aloy 发表于 2022-7-5 16:55:00

在消除验证定义函数括号中的错误并按如下方式重新定位初始化函数后,其工作正常:

(defun C:samp16 ()
(setq lst
      '(
         ((150.0 120.0) (150.0 110.0) (150.0 100.0))
         ((200.0 150.0) (200.0 140.0) (200.0 120.0))
         ((225.0 180.0) (225.0 170.0) (225.0 160.0) (225.0 150.0))
         ((250.0 200.0) (250.0 180.0) (225.0 170.0) (225.0 160.0))
         ((300.0 300.0) (300.0 280.0) (300.0 260.0) (300.0 250.0) (300.0 240.0) (300.0 220.0) (300.0 200.0) (300.0 180.0))
         ((375.0 350.0) (375.0 320.0) (375.0 300.0) (375.0 280.0))
         ((450.0 400.0) (450.0 370.0) (450.0 350.0) (450.0 320.0))
         ((600.0 500.0) (600.0 450.0) (600.0 420.0) (600.0 400.0))
       )
   )
(setq dcl_id% (load_dialog "samp11.dcl"))
   (if(not(new_dialog "samp11" dcl_id%)
      )
   (exit)
   )
(my_init_dialog)
(action_tile "eb1" "(update_manning (setq man $value))")
(action_tile "eb2" "(update_percentage (setq pf $value))")
(action_tile "cancel" "(done_dialog) (setq userclick nil)")
(action_tile "accept" "(done_dialog) (setq userclick T)")

(setq bit 1 cnt 1 rtn 0)
         (repeat (length lst)
               (action_tile
                   (strcat "tog" (itoa cnt))
                   (strcat "(setq rtn (boole (+ 4 (* 3 (atoi $value))) " (itoa bit) " rtn))")
               )
               (setq bit (lsh bit 1) cnt (1+ cnt))
         )
         (if (= 1 (start_dialog))
               (progn(setq bit 1
                     lst
                   (vl-remove-if
                      '(lambda ( x / flg ) (setq flg (zerop (logand bit rtn)) bit (lsh bit 1)) flg)
                     lst
                   )                          
               )               
         )   
          )
(setq dl lst)
(setq dl(apply 'append dl))
(unload_dialog dcl_id%)
)
(princ)
(defun my_init_dialog ()      
   (setq man "0.013"
         pf"50")
   (set_tile "eb1" man)
   (mode_tile "eb1" 2)
   (set_tile "eb2" pf)
   (mode_tile "eb2" 2)
   
   )
(defun update_manning (val)
   (cond
((equal (distof val) nil) (progn (set_tile "eb1" "invalid") (setq man "invalid")))
         ((<= (distof val) 0.009) (progn (set_tile "eb1" "invalid") (setq man "invalid")))
         ((>= (distof val) 0.018) (progn (set_tile "eb1" "invalid") (setq man "invalid")))
         (t (progn (set_tile "eb1" val) (setq man val)))))
(defun update_percentage (val)
   (cond
((equal (distof val) nil) (progn (set_tile "eb2" "invalid") (setq pf "invalid")))
         ((< (distof val) 50) (progn (set_tile "eb2" "invalid") (setq pf "invalid")))
         ((> (distof val) 66) (progn (set_tile "eb2" "invalid") (setq pf "invalid")))
         (t (progn (set_tile "eb2" val) (setq man val)))))
   

我感谢那些看过帖子的人。
芦荟

aloy 发表于 2022-7-5 17:25:27

可能已经注意到,我的帖子2中的lisp代码只验证了这两个变量,没有选择管道尺寸;它返回管道的完整列表。为了消除错误,我必须遵循李的方法,如下所示:

samp11 : dialog {                                //dialog name
   label = "Pipe Lines" ;      //give it a label

      : row {                                        //define row

      :boxed_column {                        //define radio column
      label = "Pipe diameters used (mm)" ; //give it a label

       : toggle {                        //define toggle
              key = "tog1" ;                                //give it a name
              label = "150" ;                      //give it a label
                                             
              }                                       

            : toggle {                        //define toggle
              key = "tog2" ;                                //give it a name
              label = "200" ;                //give it a label
            }                               

            : toggle {                        //define toggle
              key = "tog3" ;                                //give it a name
              label = "225" ;                      //give it a label
              }                                       

            : toggle {                        //define toggle
              key = "tog4" ;                                //give it a name
              label = "250" ;                        //give it a label
            }                                       

            : toggle {                        //define toggle
              key = "tog5" ;                                //give it a name
              label = "300" ;                       //give it a label
              }                                       

            : toggle {                        //define toggle
              key = "tog6" ;                                //give it a name
              label = "375" ;                      //give it a label
            }

            : toggle {                        //define toggle
              key = "tog7" ;                                //give it a name
              label = "450" ;                      //give it a label
            }

            : toggle {                        //define toggle
              key = "tog8" ;                                //give it a name
              label = "600" ;                       //give it a label
            }

       }                                        //end toggle collumn

       : boxed_column {                        //define boxed column
       label = "Variables" ;
      
      

            : edit_box {                                //edit box
       key = "eb1" ;
       label = "Manning 'n'" ;                  
       edit_width = 10 ;                               
      
      
       }

       : edit_box {                                //edit box
       key = "eb2" ;                                  
       label = "% part full" ;
       edit_width = 10 ;               
       }

      }                                        //end boxed collumn
      

   
       }                               

    ok_cancel ;                                //predifined OK/Cancel
   
                                           //end text
(defun C:samp16 ()
(setq lst
      '(
         ((150.0 120.0) (150.0 110.0) (150.0 100.0))
         ((200.0 150.0) (200.0 140.0) (200.0 120.0))
         ((225.0 180.0) (225.0 170.0) (225.0 160.0) (225.0 150.0))
         ((250.0 200.0) (250.0 180.0) (225.0 170.0) (225.0 160.0))
         ((300.0 300.0) (300.0 280.0) (300.0 260.0) (300.0 250.0) (300.0 240.0) (300.0 220.0) (300.0 200.0) (300.0 180.0))
         ((375.0 350.0) (375.0 320.0) (375.0 300.0) (375.0 280.0))
         ((450.0 400.0) (450.0 370.0) (450.0 350.0) (450.0 320.0))
         ((600.0 500.0) (600.0 450.0) (600.0 420.0) (600.0 400.0))
       )
   )

(cond
    ((<= (setq dcl_id% (load_dialog "samp11.dcl")) 0)
       (princ "\nNo File"))   
    ((not(new_dialog "samp11" dcl_id%))
       (princ "\nError"))      
    ((action_tile "eb1" "(update_manning (setq man $value))")
       (action_tile "eb2" "(update_percentage (setq pf $value))")
       (my_init_dialog)
       (setq bit 1 cnt 1 rtn 0)
         (repeat (length lst)
               (action_tile
                   (strcat "tog" (itoa cnt))
                   (strcat "(setq rtn (boole (+ 4 (* 3 (atoi $value))) " (itoa bit) " rtn))")
               )
               (setq bit (lsh bit 1) cnt (1+ cnt))
         )
         (if (= 1 (start_dialog))
               (setq bit 1
                     lst
                   (vl-remove-if
                      '(lambda ( x / flg ) (setq flg (zerop (logand bit rtn)) bit (lsh bit 1)) flg)
                     lst
                   )                  
      
   
        )
         )
      )      
    )
      
(if (< 0 dcl_Id%) (unload_dialog dcl_Id%))
(setq dl lst)
(setq dl(apply 'append dl))

)
(princ)
(defun my_init_dialog ()      
   (setq man "0.013"
         pf"50")
   (set_tile "eb1" man)      
   (set_tile "eb2" pf)
   
   )
(defun update_manning (val)
   (cond
((equal (distof val) nil) (progn (set_tile "eb1" "invalid") (setq man "invalid")))
         ((<= (distof val) 0.009) (progn (set_tile "eb1" "invalid") (setq man "invalid")))
         ((>= (distof val) 0.018) (progn (set_tile "eb1" "invalid") (setq man "invalid")))
         (t (progn (set_tile "eb1" val) (setq man val)))))
(defun update_percentage (val)
   (cond
((equal (distof val) nil) (progn (set_tile "eb2" "invalid") (setq pf "invalid")))
         ((< (distof val) 50) (progn (set_tile "eb2" "invalid") (setq pf "invalid")))
         ((> (distof val) 66) (progn (set_tile "eb2" "invalid") (setq pf "invalid")))
         (t (progn (set_tile "eb2" val) (setq pf val)))))


)
 
现在它工作正常。我为这个错误道歉。
 
芦荟
页: [1]
查看完整版本: 编辑框的验证