Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
tannguyen291

Hộp thoại nhập nội dung text theo danh sách.

Các bài được khuyến nghị

 

 

 

Hi. Gần đây em đang viết 1 lisp cần hộp thoại nhập nhiều nội dung, nên tiện thể share cho anh em cùng dùng. 

Nhân đây em cũng muốn hỏi các cao nhân làm sao để nhập ENTER từ bàn phím thì trực tiếp chạy.    ;;;;;;;;;;;;;;;Em đã tìm đc phương pháp cho vấn đề này

Các bác giúp đỡ em vụ này với. ;;;;;TKS bác Doan Van Ha đã hỗ trợ rất nhiệt tình.

image.png.e0059dccbc46a259be64f9327431746b.png

;; DiagBox list edit box 
;; Được viết bởi Nguyễn Nhật Tân
;; nguyennhattanpt@gmail.com 

(defun c:test (/ lstbox)
  (setq lstbox '(("Box1" . "item1") ("Box2" . "item2")("Box3" . "item3")("Box4" . "item4")))
  (tan:actioninputlstbox lstbox '(1))
)

(defun tan:actioninputlstbox ( lst lstlock / *error* str dcl_id UserClick x1 x2 i lstin des)
  (defun *error* (msg)
    (done_dialog)
    (vl-file-delete Fdcl)
  )
  (setq i 0 str "ListEditBox : dialog {label = \"Insert Data.\";\n")
  (foreach item (mapcar 'car lst)
    (setq str (strcat 
      str 
      "  : edit_box {\n"
      "    label = \"" item "\";\n"
      "    key = \"Item"  (itoa i) "\";\n"
      "    edit_width = 12;\n"
      "    allow_accept = true;"
      "  }\n"
              )
    )
    (setq i (1+ i))
  )
  (setq str (strcat str 
    "  : row {: spacer { width = 1; }\n"        
    "    : button {label = \"OK\"; is_default = true; key = \"accept\"; width = 8; fixed_width = true;}\n" 
    "    : button {label = \"Cancel\"; is_default = false; is_cancel = true;key = \"cancel\";width = 8;fixed_width = true;}"
    "    : spacer { width = 1;}\n  }\n"
    "}"                
            )
  )
  (setq Fdcl (vl-filename-mktemp "dcllsteditbox.dcl"))
  (setq des (open Fdcl "w"))
  (write-line str des)
  (close des)
  (cond
    ((>= 0 (setq dcl_id (load_dialog Fdcl)))
      (princ "\n--> Dialog Definition not Found.")
    )
    ( (not (new_dialog "ListEditBox" dcl_id))
      (setq dcl_id (unload_dialog dcl_id))
      (princ "\n--> Dialog Definition not Found.")
    )
    (t
      (setq i 0)
      (foreach item (mapcar 'cdr  lst)
        (set_tile (strcat "Item" (itoa i) ) (if item item ""))
        (setq i (1+ i))
      )
      (foreach item lstlock
        (mode_tile (strcat "Item" (itoa item)) 1)
      )
      (action_tile "cancel" "(progn (setq UserClick nil) (done_dialog))")
      (action_tile "accept" 
                   "(progn (setq UserClick T)\n
                      (repeat (setq i (length lst))\n
                        (setq i (1- i) lstin (cons (get_tile (strcat \"Item\" (itoa i))) lstin)))\n
                      (done_dialog))"
      )
      (start_dialog)
    )
  )
  (vl-file-delete Fdcl)
  (if UserClick
    (mapcar '(lambda (a b) (cons (car a) b)) lst lstin)
    nil
  )
)

 

Chỉnh sửa theo tannguyen291
Cập nhật tính năng enter từ bàn phím.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
8 phút trước, Doan Van Ha đã nói:

Bản chất Cad đã có bộ OK_Cancel và đương nhiên nhấn enter thì chạy và cancel thì hủy nên bạn không cần tạo bộ OK_Cancel nữa

Em biết vụ này nhưng để lấy danh sách (list input) sẽ khó khăn hơn khi dùng bộ OK_Cancel;

;người dùng có thể nhập nhiều lần 1 box. action_tile "Item" chạy nhiều lần.

Em vẫn đang thắc mắc vấn đề khi sửa dữ liệu ---- nhấn ENTER từ bàn phím thì không tiếp tục chạy lisp cần phải kích chuột mới chạy chương trình. 

 

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
3 giờ trước, Doan Van Ha đã nói:

Bỏ cái bộ ok_cancel của bạn đi thì enter tốt ngay. VD:  

em làm theo bác nhưng dcl bị lỗi bác ạ.

 image.png.9179cef4da55a1bce58fd1d986ebb705.png

 

 

Nhưng em tìm đc cái này trên afralisp.net. H thì ngon rồi. Tks bác nhé.

allow_accept = true;

 

 

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay
Đăng nhập để thực hiện theo  

×