Chuyển đến nội dung
Diễn đàn CADViet
Duong Nhat Duy

Hỏi về hàm vl-princ-to-string

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

Mình có đoạn code sau:

(setq flag 2)
(vl-princ-to-string '(done_dialog flag))

Hàm trả về "(done_dialog flag)", mình mong muốn nó trả về "(done_dialog 2)" thì phải làm ntn ? Mong các bạn giúp đỡ, mình cảm ơn !

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

Phải có hàm này:

(setq flag (start_dialog))

VD 1 đoạn:

(action_tile "cancel" "(done_dialog 0)") (action_tile "xuat" "(done_dialog 1)") (action_tile "chon" "(done_dialog 2)")
(setq flag (start_dialog))
(cond 
 ((= flag 0) (HUY))
 ((= flag 2) (LAM_GI_DO_1))
 ((= 1 flag)  (LAM_GI_DO_2)))
 

  • Like 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

Để trả lời cái câu hỏi một cách máy móc thì

với dấu sổ ngắn:  '   bác không thể biến flag thành 2 được. 

Cần dùng (vl-princ-to-string (read (strcat "(done_dialog " (itoa flag) ")")))    <=== cái này vô nghĩa chả hiểu để làm gì

Tuy nhiên bác đang viết dialog thì nên làm như bác Hạ bên trên là chuẩn nhất.

 

 

 

  • Like 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ại có đoạn action_tile mình ko muốn dùng hàm con nên thử xài vl-prin1-to-string, mà chưa dùng bao giờ nên ko biết làm ntn. Hàm read của bạn cũng ko đúng ý mình lắm. Chắc là quay về dùng hàm con vậy. Cảm ơn các bạn 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
Vào lúc 7/2/2023 tại 16:37, Duong Nhat Duy đã nói:

Tại có đoạn action_tile mình ko muốn dùng hàm con nên thử xài vl-prin1-to-string, mà chưa dùng bao giờ nên ko biết làm ntn. Hàm read của bạn cũng ko đúng ý mình lắm. Chắc là quay về dùng hàm con vậy. Cảm ơn các bạn nhé !

Để cả đoạn code của hàm con vào action_tile mà không muốn thêm các "/" thì mình hay dùng

(action_tile "cancel" (vl-prin1-to-string '(progn  Cac_Cau_Lenh_Viet_Nhu_Binh_Thuong))) 

Ví dụ 1 đoạn code của mình:

    (action_tile 
        "option" 
           (vl-prin1-to-string
            '(progn 
                (setq lstOption (DCL:Option (get_tile "luachon")))
                (if lstOption
                    (progn
                        (cond
                            ((= (car lstOption) "1")
                                (set_tile "luachon" "Normal")
                            )
                            ( (and (wcmatch (cadr lstOption) "left,right")  (= (caddr lstOption) "off2"))
                                (set_tile "luachon" (cadr lstOption))
                            )
                            ( 
                                (set_tile "luachon" "off")
                            )      
                        )
                        (set_tile "SortOption" SortMsg)
                    )
                )
            )

        )
    )

VD2:

(defun c:test nil
    (setq DCL_Main (load_dialog "name.dcl")) 
    (if    (not (new_dialog "name" DCL_Main)) (princ))
    (action_tile
      "ok"
      (vl-prin1-to-string
            '(progn 
                (setq ddiag 6)
                (done_dialog ddiag)
            )
        )
    )

    (setq flag (start_dialog))
    (unload_dialog DCL_Main)
    (princ flag)
)

  • Like 1
  • Vote tăng 2

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
18 giờ trước, Hoanghung97 đã nói:

(action_tile "cancel" (vl-prin1-to-string '(progn  Cac_Cau_Lenh_Viet_Nhu_Binh_Thuong))) 

Bây giờ mình mới biết có cách dùng hay như này. :)) đỡ đi bao nhiêu "\n" "\"" ...

Rất hay!

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

×