Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
toanmda

[Yêu cầu lisp] Lisp lấy số liệu từ hộp thoại

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

toanmda    1

Tôi có một hộp thoại như hình và một file dữ liệu data.txt

hop_thoai.jpg

AISC : dialog {
label = "*** CADVIET.COM ***";
spacer;
: column {
	label = "Chi tiet";	
	fixed_height = True; 
	: row {
		alignment = right;
		fixed_width = true;
		: popup_list {
		  edit_width = 10;
		  fixed_width = Enable;
		  key = "W";
		  list = "Selection\nW1\nW2\nW3";
		}
		: popup_list {
		  edit_width = 15; 
		  fixed_width = Enable;
		  key = "Wx";
		  list = "";
		}
	}
spacer;
	: row {			
		alignment = left;
		: column {
			: edit_box {
			  label = "Depth";
			  edit_width = 8;
			  key = "Depth";
			}
			: edit_box {
			  label = "Flange";
			  edit_width = 8;
			  key = "Flange";
			}																		
		}
	}		
}
spacer; 
ok_cancel;
spacer;
}

Mong anh chị em viết giúp tôi một Lisp có thể thực hiện như sau:

1. Câu lệnh gọi xuất hiện hộp thoại (command: "Ai")

2. Khi hộp thoại xuất hiện, ta lựa chọn danh sach từ list thứ nhất (ở đây là list gồm W1, W2, W3), giả sử chọn W1 thì khi đó ở list_box thứ 2 tự động xuất hiện một list, theo file data.txt với lựa chọn W1 thì list sẽ là W1x1, W1x2, W1x3, W1x4 (tương tự cho các lựa chọn W2, W3, ...)

3. Tiếp theo, khi ta chọn một giá tri từ list thứ 2, thì các giá trị Depth, Flange được tự động load vào text_box.

4. Với các giá trị được load vào hộp thoại, khi bấm nút Ok chở về màn hình AutoCad sẽ yêu cầu nhập một điểm làm điểm đặt đê ghi ra toàn text có nội dung "W1x1 10 5" (các text tương ứng với lựa chọn từ hộp thoại).

Xin cám ơn các ace đã quan tâ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
phamthanhbinh    3.123

Tôi có một hộp thoại như hình và một file dữ liệu data.txt

hop_thoai.jpg

AISC : dialog {
label = "*** CADVIET.COM ***";
spacer;
: column {
	label = "Chi tiet";	
	fixed_height = True; 
	: row {
		alignment = right;
		fixed_width = true;
		: popup_list {
		  edit_width = 10;
		  fixed_width = Enable;
		  key = "W";
		  list = "Selection\nW1\nW2\nW3";
		}
		: popup_list {
		  edit_width = 15; 
		  fixed_width = Enable;
		  key = "Wx";
		  list = "";
		}
	}
spacer;
	: row {			
		alignment = left;
		: column {
			: edit_box {
			  label = "Depth";
			  edit_width = 8;
			  key = "Depth";
			}
			: edit_box {
			  label = "Flange";
			  edit_width = 8;
			  key = "Flange";
			}																		
		}
	}		
}
spacer; 
ok_cancel;
spacer;
}

Mong anh chị em viết giúp tôi một Lisp có thể thực hiện như sau:

1. Câu lệnh gọi xuất hiện hộp thoại (command: "Ai")

2. Khi hộp thoại xuất hiện, ta lựa chọn danh sach từ list thứ nhất (ở đây là list gồm W1, W2, W3), giả sử chọn W1 thì khi đó ở list_box thứ 2 tự động xuất hiện một list, theo file data.txt với lựa chọn W1 thì list sẽ là W1x1, W1x2, W1x3, W1x4 (tương tự cho các lựa chọn W2, W3, ...)

3. Tiếp theo, khi ta chọn một giá tri từ list thứ 2, thì các giá trị Depth, Flange được tự động load vào text_box.

4. Với các giá trị được load vào hộp thoại, khi bấm nút Ok chở về màn hình AutoCad sẽ yêu cầu nhập một điểm làm điểm đặt đê ghi ra toàn text có nội dung "W1x1 10 5" (các text tương ứng với lựa chọn từ hộp thoại).

Xin cám ơn các ace đã quan tâm!

Hề hề hề,

Bạn đã viết được cái DCL này thì việc viết lisp chắc cũng ra trò rồi. Bạn cứ mạnh dạn làm thử rồi vướng đâu hỏi đó sẽ nhanh hơn. Vì cái món DCl này cũng chả ngon ăn lắm mà mình thì cũng ậm tịt nên nếu bạn không sốt ruột thì cứ thủng thẳng để mình mần mò nó xem có được như ý bạn hay không.

Thời gian hoàn thành chắc cũng mất vài bữa. Bạn thông cảm cho cái vốn đi mót của mình nhé.

hề hề hề....

Việc đầu tiên cần làm là tách các dữ liệu trong file data.txt của bạn thành các list tương ứng với các list_bõ của bạn đã.

Sau đó mới đến việc đưa các action_tile cho phù hợp với yêu cầu.

Cuối cùng mới là việc ghép các giá trị trong dialog thành chuỗi để ghi vào CAD.

Hề hề hề, nói vậy chứ để làm được cũng chả ngon tí nào. bạn chịu khó chờ 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
npham    75

Chào bạn !

Bạ thử đoạn code này xem. Kết quả ra 1 list cac giá trị đã chọn. Bạn có thể ghi ra text hoặc xử lý nó theo mong muốn.

 

(defun c:ai (/ id str pos data sublist key De Fl)

     (defun set_list ()
      (start_list "Wx")
      (foreach x
	      (setq sublist
		     (vl-remove-if '(lambda (x) (/= (substr x 1 3) (strcat "W" $value "x"))) data)
		    )
	      (add_list x)
      )
      (end_list)      	
     )

    (defun set_value (/ subdata)
            (if sublist
         (progn
             (setq key (nth (atoi (get_tile "Wx")) sublist))
       	     (setq subdata (member key data))            
             (set_tile "Depth"  (setq De (cadr subdata)))
       	     (set_tile "Flange" (setq Fl (caddr subdata)))
	     (mode_tile "accept" 0)
        )
             (mode_tile "accept" 1)
       )
     ) 


(setq f (open "d:/data.txt" "r"))
(setq str (read-line f))
(close f)
(setq data (append))

(while
(setq pos (vl-string-position 32 str))
(setq data (append data (list (substr str 1 pos))))
(setq str (vl-string-trim " " (substr str (+ pos 1)))) 
)
(setq data (append data (list str)))

(setq id (load_dialog "cadvietlisp")) 
(new_dialog "AISC" id)
  (mode_tile "accept" 1)
  (action_tile "W" "(set_list)(set_value)")
  (action_tile "Wx" "(set_value)")

(setq sta (start_dialog))
(unload_dialog id)

(if (= sta 1) (vl-remove 'nil (list key De Fl)))

)

  • 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
ketxu    2.649

Ketxu mới học DCL nên gà quá, thấy bác npham viết ngắn quá mà ham, nhưng bên mình xài không được, nên sửa lại 1 chút như thế này :

(defun c:RFT(/ sublist key lstdata data);Read File Txt 
(vl-load-com)  
(defun set_list ()
(start_list "Wx")
(foreach x (setq sublist (vl-remove-if '(lambda (x) (/= (substr (car x) 1 2) (strcat "W" $value))) lstdata))
	      (add_list (car x))
)
(end_list)      	
)
(defun set_value ()
            (if sublist
         (progn
             (setq key (nth (atoi (get_tile "Wx")) sublist))	       	                 
             (set_tile "Depth"   (cadr key))
       	     (set_tile "Flange" (caddr key))	     
        )	             
       )
     )

 (defun split (str  delim /    lst i  )	
 (while (setq i (vl-string-search delim str))
   (setq
     lst (cons (substr str 1 i) lst)
     str    (substr str (+ 2 i))
     )
   )
   (setq lst (cons str lst))
 (reverse lst)
 )


(setq f (open (findfile "data.txt") "r"))
  (while (setq Line (read-line f))
(if (not (vl-string-search "Name" Line))
  (progn
    (setq data (split Line "\t"))
	(setq lstData (cons data lstData))
	)
)
)
(setq lstData  (vl-remove '("") (reverse lstData)))

(setq dcl_id (load_dialog "AISC.dcl")) ; Load the DCL file.
 (if (not (new_dialog "AISC" dcl_id))   ; Initialize the dialog.
   (exit)                                ; Exit if this doesn't 
                                         ; work.
 )

 (action_tile "W" "(set_list)(set_value)")
 (action_tile "Wx" "(set_value)")
 (start_dialog)   
 (unload_dialog dcl_id)  
 key
)

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
Tue_NV    3.841

Đúng là Lisp mà bác npham viết chưa chạy được nên Tue_NV cũng tham gia sửa 1 tí ^_^

(defun c:ai (/ id str pos data sublist key De Fl)

     (defun set_list ()
      (start_list "Wx")
      (foreach x
	      (setq sublist
		     (vl-remove-if '(lambda (x) (/= (substr x 1 3) (strcat "W" $value "x"))) data);
		    )
	      (add_list x)
      )
      (end_list)      	
     )

    (defun set_value (/ subdata)
            (if sublist
         (progn
             (setq key (nth (atoi (get_tile "Wx")) sublist))
       	     (setq subdata (member key data))            
             (set_tile "Depth"  (setq De (cadr subdata)))
       	     (set_tile "Flange" (setq Fl (caddr subdata)))
	     (mode_tile "accept" 0)
        )
             (mode_tile "accept" 1)
       )
     ) 

(setq f (open "d:/data.txt" "r"))
(setq data (append))

(while
(setq str (read-line f))
    (Repeat 2
(setq pos (vl-string-position 9 str))
(setq data (append data (list (substr str 1 pos))))
(setq str (vl-string-trim "\t" (substr str (+ pos 1)))) 
    )
(setq data (append data (list str)))
)

(setq id (load_dialog "AISC")) 
(new_dialog "AISC" id)
  (mode_tile "accept" 1)
  (action_tile "W" "(set_list)(set_value)")
  (action_tile "Wx" "(set_value)")

(setq sta (start_dialog))
(unload_dialog id)

(if (= sta 1) (vl-remove 'nil (list key De Fl)))
 (close f)
)

  • 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
toanmda    1

Hề hề hề,

Bạn đã viết được cái DCL này thì việc viết lisp chắc cũng ra trò rồi. Bạn cứ mạnh dạn làm thử rồi vướng đâu hỏi đó sẽ nhanh hơn. Vì cái món DCl này cũng chả ngon ăn lắm mà mình thì cũng ậm tịt nên nếu bạn không sốt ruột thì cứ thủng thẳng để mình mần mò nó xem có được như ý bạn hay không.

Thời gian hoàn thành chắc cũng mất vài bữa. Bạn thông cảm cho cái vốn đi mót của mình nhé.

hề hề hề....

Việc đầu tiên cần làm là tách các dữ liệu trong file data.txt của bạn thành các list tương ứng với các list_bõ của bạn đã.

Sau đó mới đến việc đưa các action_tile cho phù hợp với yêu cầu.

Cuối cùng mới là việc ghép các giá trị trong dialog thành chuỗi để ghi vào CAD.

Hề hề hề, nói vậy chứ để làm được cũng chả ngon tí nào. bạn chịu khó chờ nhé....

phamthanhbinh quá khen rồi, mình chỉ tập tẹo tý thôi, cùng nhau nghiên cứu Lisp của npham, Tue_vn & ketxu nhé, chúc vui!

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
toanmda    1

Chào bạn !

Bạ thử đoạn code này xem. Kết quả ra 1 list cac giá trị đã chọn. Bạn có thể ghi ra text hoặc xử lý nó theo mong muốn.

 

(defun c:ai (/ id str pos data sublist key De Fl)

     (defun set_list ()
      (start_list "Wx")
      (foreach x
	      (setq sublist
		     (vl-remove-if '(lambda (x) (/= (substr x 1 3) (strcat "W" $value "x"))) data)
		    )
	      (add_list x)
      )
      (end_list)      	
     )

    (defun set_value (/ subdata)
            (if sublist
         (progn
             (setq key (nth (atoi (get_tile "Wx")) sublist))
       	     (setq subdata (member key data))            
             (set_tile "Depth"  (setq De (cadr subdata)))
       	     (set_tile "Flange" (setq Fl (caddr subdata)))
	     (mode_tile "accept" 0)
        )
             (mode_tile "accept" 1)
       )
     ) 


(setq f (open "d:/data.txt" "r"))
(setq str (read-line f))
(close f)
(setq data (append))

(while
(setq pos (vl-string-position 32 str))
(setq data (append data (list (substr str 1 pos))))
(setq str (vl-string-trim " " (substr str (+ pos 1)))) 
)
(setq data (append data (list str)))

(setq id (load_dialog "cadvietlisp")) 
(new_dialog "AISC" id)
  (mode_tile "accept" 1)
  (action_tile "W" "(set_list)(set_value)")
  (action_tile "Wx" "(set_value)")

(setq sta (start_dialog))
(unload_dialog id)

(if (= sta 1) (vl-remove 'nil (list key De Fl)))

)

 

 

Ketxu mới học DCL nên gà quá, thấy bác npham viết ngắn quá mà ham, nhưng bên mình xài không được, nên sửa lại 1 chút như thế này :

(defun c:RFT(/ sublist key lstdata data);Read File Txt 
(vl-load-com)  
(defun set_list ()
(start_list "Wx")
(foreach x (setq sublist (vl-remove-if '(lambda (x) (/= (substr (car x) 1 2) (strcat "W" $value))) lstdata))
	      (add_list (car x))
)
(end_list)      	
)
(defun set_value ()
            (if sublist
         (progn
             (setq key (nth (atoi (get_tile "Wx")) sublist))	       	                 
             (set_tile "Depth"   (cadr key))
       	     (set_tile "Flange" (caddr key))	     
        )	             
       )
     )

 (defun split (str  delim /    lst i  )	
 (while (setq i (vl-string-search delim str))
   (setq
     lst (cons (substr str 1 i) lst)
     str    (substr str (+ 2 i))
     )
   )
   (setq lst (cons str lst))
 (reverse lst)
 )


(setq f (open (findfile "data.txt") "r"))
  (while (setq Line (read-line f))
(if (not (vl-string-search "Name" Line))
  (progn
    (setq data (split Line "\t"))
	(setq lstData (cons data lstData))
	)
)
)
(setq lstData  (vl-remove '("") (reverse lstData)))

(setq dcl_id (load_dialog "AISC.dcl")) ; Load the DCL file.
 (if (not (new_dialog "AISC" dcl_id))   ; Initialize the dialog.
   (exit)                                ; Exit if this doesn't 
                                         ; work.
 )

 (action_tile "W" "(set_list)(set_value)")
 (action_tile "Wx" "(set_value)")
 (start_dialog)   
 (unload_dialog dcl_id)  
 key
)

 

 

Đúng là Lisp mà bác npham viết chưa chạy được nên Tue_NV cũng tham gia sửa 1 tí ^_^

(defun c:ai (/ id str pos data sublist key De Fl)

     (defun set_list ()
      (start_list "Wx")
      (foreach x
	      (setq sublist
		     (vl-remove-if '(lambda (x) (/= (substr x 1 3) (strcat "W" $value "x"))) data);
		    )
	      (add_list x)
      )
      (end_list)      	
     )

    (defun set_value (/ subdata)
            (if sublist
         (progn
             (setq key (nth (atoi (get_tile "Wx")) sublist))
       	     (setq subdata (member key data))            
             (set_tile "Depth"  (setq De (cadr subdata)))
       	     (set_tile "Flange" (setq Fl (caddr subdata)))
	     (mode_tile "accept" 0)
        )
             (mode_tile "accept" 1)
       )
     ) 

(setq f (open "d:/data.txt" "r"))
(setq data (append))

(while
(setq str (read-line f))
    (Repeat 2
(setq pos (vl-string-position 9 str))
(setq data (append data (list (substr str 1 pos))))
(setq str (vl-string-trim "\t" (substr str (+ pos 1)))) 
    )
(setq data (append data (list str)))
)

(setq id (load_dialog "AISC")) 
(new_dialog "AISC" id)
  (mode_tile "accept" 1)
  (action_tile "W" "(set_list)(set_value)")
  (action_tile "Wx" "(set_value)")

(setq sta (start_dialog))
(unload_dialog id)

(if (= sta 1) (vl-remove 'nil (list key De Fl)))
 (close f)
)

:rolleyes: Cơ bản với AutoCad (Autodesk) đã chạy ngon, còn ở cty mình dùng Cadian thì chưa chạy được, phải ngâm cứu cái đã. Mà nút thank đâu thế nhỉ, phải thanks các bác bằng lời thế này vậy. Chúc cả nhà chuẩn bị đón quốc khánh thật vui vẻ, hạnh phúc!

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
phamthanhbinh    3.123

:rolleyes: Cơ bản với AutoCad (Autodesk) đã chạy ngon, còn ở cty mình dùng Cadian thì chưa chạy được, phải ngâm cứu cái đã. Mà nút thank đâu thế nhỉ, phải thanks các bác bằng lời thế này vậy. Chúc cả nhà chuẩn bị đón quốc khánh thật vui vẻ, hạnh phúc!

Hề hề hề,

Sau một hồi vọc vạch, mình làm ra cái này. Quả là trâu chậm uống nước đục, mình lọ mọ ra được cái ni tưởng đã oai mà so với các bác khác còn kém quá.

Tuy nó chưa hẳn đã đúng ý bạn, song nó cũng có thể thỏa mãn phần nào cái ý tưởng của bạn.

Mình sử dụng file text của bạn và file DCL của bạn, tuy nhiên có chỉnh sửa tí chút:

1/- bỏ cái dòng trắng trong file text để khi đọc file khỏi bị lỗi.

2/- Bỏ bới thằng Selection trong cái líst của tile "W" vì thấy nó thừa không cần thiết.

 

File lisp dùng lệnh ai như bạn muốn, song khi chọn xong trong tile "W" cái tile "Wx" không thay đổi chi cả mà nó vẫn giữ cái danh sách cũ. (ở đây mình cho nhập cái list là ("1" "2" "3" "4") theo đúng số lượng các thành phần có trong các W?x? của file text bạn gửi. Như vậy tùy trường hợp bạn có thể bổ sung hay thu hẹp cái list này cho phù hợp.

Từ đó việc lấy text ra màn hình bạn có thể kiểm tra trên cả 4 tile của hộp thoại ( chứ không phải chỉ có 3 tile như bạn muốn)

Sở dĩ mình làm vầy là do cái trình độ về DCL còn chuối lắm, chưa biết có cách nào để đổi cái danh sách trong menu xổ xuống của DCL cả. Đọc tài liệu và thử mò mẫm thì thấy rằng việc nhập danh sách cho các tile chứa menu xổ xuống phải nhập trước khi gọi (action_tile .....). Mà muốn có thằng danh sách của tile "Wx" lại phải chạy (action_tile "W" .......) Thế là loay hoay hoài không ra nên mình làm kiểu chuối này cũng thấy dùng được. Bạn hãy test thử xem nhé.

 

(defun c:ai ()
(setq fn (getfiled "Select a text File" "d:\\DATA\\Autolisps\\Librarries\\Testlisps\\" "txt" 4)
       f (open fn "r")
       Str (list)
)
(while (setq S (read-line f))
      (setq L (separate s "\t"))
      (setq str (append str (list L)))
)
(setq str (cdr str) Nlst1 (list) nlst2 (list) nlst3 (list) Dlst (list) Flst (list))
(foreach s str
     (setq dlst (cons (cadr s) dlst) 
             Flst (cons (caddr s) flst) 
     )
     (cond
         ((= (substr (car s) 1 2) "W1") (setq nlst1 (cons (car s) nlst1)))
         ((= (substr (car s) 1 2) "W2") (setq nlst2 (cons (car s) nlst2)))
         ((= (substr (car s) 1 2) "W3") (setq nlst3 (cons (car s) nlst3)))
         ( T nil)
    )
)
(setq dlst (reverse dlst) flst (reverse flst) nlst1 (reverse nlst1) nlst2 (reverse nlst2) nlst3 (reverse nlst3))
;;;(setq myList (list "W1" "W2" "W3"))
(setq sublist (list "1" "2" "3" "4"))
(setq dcl_id (load_dialog "AISC.dcl"))
(if (not (new_dialog "AISC" dcl_id) ) (exit))

;;;(start_list "W" 3)
;;;(mapcar 'add_list myList)
;;;(end_list) 

(start_list "Wx" 3)
(mapcar 'add_list sublist)
(end_list) 

(action_tile "W" "(set_list)")

(action_tile "Wx" "(set_val)")
(action_tile "cancel" "(setq ddiag 1)(done_dialog)")
(action_tile "accept" "(setq ddiag 2)(saveVars)(done_dialog)") 
(start_dialog)
 (if (= ddiag 1)
   (princ "\n \n ...EXAMPLE Cancelled. \n ")
 )
 (if (= ddiag 2)
   (progn
         (setq pt (getpoint "\n Chon diem dat text"))
         (command "text" pt 2 0 txt)    
   ) 
 )
(unload_dialog dcl_id)

(princ)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun set_val ()
(foreach s str
    (if (= (car s) (nth (atoi (get_tile "Wx")) sublist))
        (progn
             (set_tile "Depth" (cadr s))
             (set_tile "Flange" (caddr s))
        )
     )
)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun set_list ()
;;;(mode_tile "Wx" 0) 
;;; (start_list "Wx" 3)
;;; (mapcar 'add_list 
(setq sublist 
                 (cond ((= (nth (atoi (get_tile "W")) myList) "W1") nlst1)
                          ((= (nth (atoi (get_tile "W")) myList) "W2") nlst2)
                          ((= (nth (atoi (get_tile "W")) myList) "W3") nlst3) 
                          ( T nil))
)
;;;)
;;;(end_list) 
)       
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun saveVars()
(setq txt (strcat (nth (atoi (get_tile "Wx")) sublist) " " (get_tile "Depth") " " (get_tile "Flange")))  
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun Separate (S sym / i L ch)
(setq i 0 L nil)
(while (< i (strlen S))
     (setq i (1+ i) ch (substr S i 1))
     (if (= ch sym) 
         (progn
(setq
      L (append L (list (substr S 1 (- i 1))))
      S (substr S (1+ i) (- (strlen S) i))
      i 0
)
         )
     )	
)
(append L (list S))
)     
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
AISC : dialog {
label = "*** CADVIET.COM ***";
spacer;
: column {
	label = "Chi tiet";	
	fixed_height = True; 
	: row {
		alignment = right;
		fixed_width = true;
		: popup_list {
		  edit_width = 10;
		  fixed_width = Enable;
		  key = "W";
		  list = "W1\nW2\nW3";
		}
		: popup_list {
		  edit_width = 15; 
		  fixed_width = Enable;
		  key = "Wx";
		  list = "";
		}
	}
spacer;
	: row {			
		alignment = left;
		: column {
			: edit_box {
			  label = "Depth";
			  edit_width = 8;
			  key = "Depth";
			}
			: edit_box {
			  label = "Flange";
			  edit_width = 8;
			  key = "Flange";
			}																		
		}
	}		
}
spacer; 
ok_cancel;
spacer;
}

 

Chú ý là mình chưa khử biến đâu nhé. Hãy cẩn thận kẻo có xung đột với các lisp khác. Tốt nhất bạn nên load và chạy riêng một mình nó thôi đã. Việc khử biến chắc chẳng quá khó với bạn đâu, nhưng mình hơi vội nên chưa làm thôi.

Chúc bạn vui.

@Bác ketxu, Tue_NV, npham: các bác có võ gì để đổi được cái danh sách trong menu xổ xuống của các tile trong hộp thoại sau khi đã tải nó lên tile rồi thì bày cho mình với. Tức quá làm hoài không ra??????

  • 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
Doan Van Ha    2.676

Hề hề hề,

Sau một hồi vọc vạch, mình làm ra cái này. Quả là trâu chậm uống nước đục, mình lọ mọ ra được cái ni tưởng đã oai mà so với các bác khác còn kém quá.

Tuy nó chưa hẳn đã đúng ý bạn, song nó cũng có thể thỏa mãn phần nào cái ý tưởng của bạn.

Mình sử dụng file text của bạn và file DCL của bạn, tuy nhiên có chỉnh sửa tí chút:

1/- bỏ cái dòng trắng trong file text để khi đọc file khỏi bị lỗi.

2/- Bỏ bới thằng Selection trong cái líst của tile "W" vì thấy nó thừa không cần thiết.

File lisp dùng lệnh ai như bạn muốn, song khi chọn xong trong tile "W" cái tile "Wx" không thay đổi chi cả mà nó vẫn giữ cái danh sách cũ. (ở đây mình cho nhập cái list là ("1" "2" "3" "4") theo đúng số lượng các thành phần có trong các W?x? của file text bạn gửi. Như vậy tùy trường hợp bạn có thể bổ sung hay thu hẹp cái list này cho phù hợp.

Từ đó việc lấy text ra màn hình bạn có thể kiểm tra trên cả 4 tile của hộp thoại ( chứ không phải chỉ có 3 tile như bạn muốn)

Sở dĩ mình làm vầy là do cái trình độ về DCL còn chuối lắm, chưa biết có cách nào để đổi cái danh sách trong menu xổ xuống của DCL cả. Đọc tài liệu và thử mò mẫm thì thấy rằng việc nhập danh sách cho các tile chứa menu xổ xuống phải nhập trước khi gọi (action_tile .....). Mà muốn có thằng danh sách của tile "Wx" lại phải chạy (action_tile "W" .......) Thế là loay hoay hoài không ra nên mình làm kiểu chuối này cũng thấy dùng được. Bạn hãy test thử xem nhé.

Chú ý là mình chưa khử biến đâu nhé. Hãy cẩn thận kẻo có xung đột với các lisp khác. Tốt nhất bạn nên load và chạy riêng một mình nó thôi đã. Việc khử biến chắc chẳng quá khó với bạn đâu, nhưng mình hơi vội nên chưa làm thôi.

Chúc bạn vui.

@Bác ketxu, Tue_NV, npham: các bác có võ gì để đổi được cái danh sách trong menu xổ xuống của các tile trong hộp thoại sau khi đã tải nó lên tile rồi thì bày cho mình với. Tức quá làm hoài không ra??????

Chào bác PTB!

Chà, miệt mài nhất là bác đó!

- Cái dòng trống trong file data.txt vẫn xử được như Ketxu đã xử (bác và bác Tue_NV thì chưa).

- Cái selection tôi thấy cũng hơi thừa, tuy nhiên một số người vẫn để nó là để nhắc user chọn.

- Cái file dcl bác chép vào trong lsp: tôi không hiểu?

- Tôi có biết tí xíu về dcl, muốn giúp bác nhưng câu bác hỏi tôi thật sự không hiểu.

@Ketxu: Ket open mà không close, coi chừng file thất lạc đấy (help bảo thế!)

Thân thương!

  • 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
ketxu    2.649

... võ gì để đổi được cái danh sách trong menu xổ xuống của các tile trong hộp thoại sau khi đã tải nó lên tile rồi thì bày cho mình với. Tức quá làm hoài không ra??????

Em chưa hiểu ý bác, nhưng mà muốn update lại list thì nhét cái đoạn start_list với add_list vào 1 hàm, rồi gọi lại nó trong mỗi action_tile thôi ?

@ bác ĐVH : tks bác, Ketxu đã phát hiện chỗ thiếu này, n sự đã rồi nên cứ để thế, lần sau phải rút kinh nghiệ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

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


×