Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
9 replies to this topic

#1 toanmda

toanmda

    biết zoom

  • Members
  • Pip
  • 19 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 30 August 2011 - 05:08 PM

Tôi có một hộp thoại như hình và một file dữ liệu data.txt
Hình đã gửi
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!
  • 0

#2 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 30 August 2011 - 10:23 PM

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

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é....
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#3 npham

npham

    biết lệnh rotate

  • Members
  • PipPipPip
  • 136 Bài viết
Điểm đánh giá: 75 (tàm tạm)

Đã gửi 30 August 2011 - 11:14 PM

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)))

)

  • 1

#4 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5678 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 31 August 2011 - 12:40 AM

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
)

  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#5 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 31 August 2011 - 07:47 AM

Đú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)
)

  • 1

#6 toanmda

toanmda

    biết zoom

  • Members
  • Pip
  • 19 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 31 August 2011 - 08:54 AM

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!
  • 0

#7 toanmda

toanmda

    biết zoom

  • Members
  • Pip
  • 19 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 31 August 2011 - 09:24 AM

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!
  • 0

#8 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 31 August 2011 - 05:49 PM

: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??????
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#9 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 31 August 2011 - 09:15 PM

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

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#10 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5678 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 31 August 2011 - 09:23 PM

... 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 ^^
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC