Thứ Năm, 8 tháng 9, 2011

Hoàn thiện Lisp tạo và chỉnh sửa menu.

Nay mình hoàn thiện lisp tạo nemu giúp các bạn ko rành vẩn tạo được menu bằng thao tác trực quan và dể hiểu.
-Bạn load file này về và copy vào thư mục menu trong ổ E. (do mình gặp trở ngại trong việc xoá file bằng lisp nên bị hạn chế phải thư mục cố định mới được).
-Load nó lên gỏ lệnh VMN thì sẽ có 1 menu mới cho bạn: Ban đầu nó có tên duy782006 (quảng cáo tí) bạn dùng lệnh DTMN hoặc chọn trên menu để đổi tên theo ý bạn.
-Khi load lên nó sẽ xuất hiện menu sử dụng:
+Ban đầu nó chỉ có 1 mục đó là giới thiệu lisp menu (trong quá trình biên tập bạn nên đổi nó sang chức năng khác vì đây là mục khởi thuỷ mình tạo để có đường vào chức năng biên tập)
+Phía dưới menu sử dụng có chức năng gọi menu biên tập (mục này là cố định lisp không hổ trợ chỉnh sửa mục này).
-Khi gọi menu biên tập lisp sẽ tắt menu sử dụng và thay menu biên tập vào:
+Menu biên tập có các mục giống hệt menu sử dụng trong phần hiển thị tiêu đề chỉ khác phía sau có chử biên tập bạn chọn mục nào thì chức năng biên tập sẽ cho các lựa chọn:
Gỏ C: Chèn mục đơn vào bên trên vị trí mục vừa chọn.
Gỏ L: Chèn mục xếp lớp vào vào bên trên vị trí mục vừa chọn (lưu ý rằng lisp hổ trợ việc lồng các mục xếp lớp vào nhau nhưng chỉ giới hạn trong 5 cấp vì mình nghỉ như thế là quá đủ cho nhu cầu) có một hạn chế là lisp ko kiểm tra tính sẳn có của 1 menu xếp lớp nên nếu bạn tạo 1 mục xếp lớp có tiêu đề trùng tiêu đề menu xếp lớp hiện có thì menu cũ sẽ được thay thế bằng menu mới. Mổi mục xếp lớp tại menu biên tập sẽ có 1 mục hổ trợ xoá bỏ menu này (mục này bạn không thể thay đổi nội dung và không xuất hiện bên menu sử dụng).
Gỏ P: Chèn đường phân cách bên trên vị trí mục vừa chọn. Trên mổi đường phân cách trong menu biên tập sẽ có 1 mục xoá đường phân cách giúp việc xoá đường phân cách bêb dưới mà không ảnh hưởng đến các đường phân cách khác (mục này bạn không thể thay đổi nội dung và không xuất hiện bên menu sử dụng).
Gỏ S: Sửa mục chọn bằng cách nhập nội dung hiển thị và tên lệnh mới.
Gỏ X: Xoá bỏ mục chọn (lưu ý rằng kkhông nên xoá bỏ toàn bộ các mục đơn vì như thế sẽ ko có mục khởi thuỷ giúp bạn thực hiện chức năng biên tập).
*Tại menu biên tập còn hổ trợ các chức năng:
-ĐTNM: Đổi tên menu chính.
-SLMN: Sao lưu menu hiện hành.
-GLMN: Gọi lại menu đã sao lưu.
-TLMN: Tạo mới menu (lúc này menu quay về trạng thái ban đầu như khi vừa mới gọi lệnh VMN).
-XBMN: Xoá bỏ hoàn toàn menu khỏi cad của bạn
*Khi nào cần sử dụng chức năng biên tập thì bạn hãy load lisp còn bình thường menu hoạt động mà ko cần lip (chỉ là chức năng gọi menu biên tập sẽ không thực hiện được).
Bạn copy nội dung và tạo file lisp hay tải file về cũng được!

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun docghigiuapop1xl ()
(setq filemenuchinhp1xl (open (strcat dauduongdan tenfilemodoc) "r"))
(while (setq noidungmenuchinhp1xl (read-line filemenuchinhp1xl))
(setq noidungnguyen noidungmenuchinhp1xl)
(setq dodainguyen (strlen noidungnguyen))
(setq dodainguyenl dodainguyen)
(doc@)

(cond
((= ndsau "menuxeplop") (setq tenfilemodoc (strcat "/menuxl" ndtruoc ".txt")) (write-line (strcat "[->" ndtruoc "]") filemns) (docghigiuapop1xla))
((/= ndsau "menuxeplop")

(cond
((= ndsau "mnduongphancach") (write-line "[---]" filemns))
((/= ndsau "mnduongphancach")

(write-line (strcat "[" ndtruoc "\t(" ndsau ")]^C^C_" ndsau) filemns))
))
))

(close filemenuchinhp1xl)
(write-line (strcat "[<---]") filemns)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun docghigiuapop1xla ()
(setq filemenuchinhp1xla (open (strcat dauduongdan tenfilemodoc) "r"))
(while (setq noidungmenuchinhp1xla (read-line filemenuchinhp1xla))
(setq noidungnguyen noidungmenuchinhp1xla)
(setq dodainguyen (strlen noidungnguyen))
(setq dodainguyenl dodainguyen)
(doc@)

(cond
((= ndsau "menuxeplop") (setq tenfilemodoc (strcat "/menuxl" ndtruoc ".txt")) (write-line (strcat "[->" ndtruoc "]") filemns) (docghigiuapop1xlb))
((/= ndsau "menuxeplop")

(cond
((= ndsau "mnduongphancach") (write-line "[---]" filemns))
((/= ndsau "mnduongphancach")

(write-line (strcat "[" ndtruoc "\t(" ndsau ")]^C^C_" ndsau) filemns))
))
))

(close filemenuchinhp1xla)
(write-line (strcat "[<---]") filemns)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun docghigiuapop1xlb ()
(setq filemenuchinhp1xlb (open (strcat dauduongdan tenfilemodoc) "r"))
(while (setq noidungmenuchinhp1xlb (read-line filemenuchinhp1xlb))
(setq noidungnguyen noidungmenuchinhp1xlb)
(setq dodainguyen (strlen noidungnguyen))
(setq dodainguyenl dodainguyen)
(doc@)

(cond
((= ndsau "menuxeplop") (setq tenfilemodoc (strcat "/menuxl" ndtruoc ".txt")) (write-line (strcat "[->" ndtruoc "]") filemns) (docghigiuapop1xlc))
((/= ndsau "menuxeplop")

(cond
((= ndsau "mnduongphancach") (write-line "[---]" filemns))
((/= ndsau "mnduongphancach")

(write-line (strcat "[" ndtruoc "\t(" ndsau ")]^C^C_" ndsau) filemns))
))
))

(close filemenuchinhp1xlb)
(write-line (strcat "[<---]") filemns)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun docghigiuapop1xlc ()
(setq filemenuchinhp1xlc (open (strcat dauduongdan tenfilemodoc) "r"))
(while (setq noidungmenuchinhp1xlc (read-line filemenuchinhp1xlc))
(setq noidungnguyen noidungmenuchinhp1xlc)
(setq dodainguyen (strlen noidungnguyen))
(setq dodainguyenl dodainguyen)
(doc@)

(cond
((= ndsau "menuxeplop") (setq tenfilemodoc (strcat "/menuxl" ndtruoc ".txt")) (write-line (strcat "[->" ndtruoc "]") filemns) (docghigiuapop1xld))
((/= ndsau "menuxeplop")

(cond
((= ndsau "mnduongphancach") (write-line "[---]" filemns))
((/= ndsau "mnduongphancach")

(write-line (strcat "[" ndtruoc "\t(" ndsau ")]^C^C_" ndsau) filemns))
))
))

(close filemenuchinhp1xlc)
(write-line (strcat "[<---]") filemns)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun docghigiuapop1xld ()
(setq filemenuchinhp1xld (open (strcat dauduongdan tenfilemodoc) "r"))
(while (setq noidungmenuchinhp1xld (read-line filemenuchinhp1xld))
(setq noidungnguyen noidungmenuchinhp1xld)
(setq dodainguyen (strlen noidungnguyen))
(setq dodainguyenl dodainguyen)
(doc@)

(cond
((= ndsau "menuxeplop") (setq tenfilemodoc (strcat "/menuxl" ndtruoc ".txt")) (write-line (strcat "[->" ndtruoc "]") filemns) (docghigiuapop1xle))
((/= ndsau "menuxeplop")

(cond
((= ndsau "mnduongphancach") (write-line "[---]" filemns))
((/= ndsau "mnduongphancach")

(write-line (strcat "[" ndtruoc "\t(" ndsau ")]^C^C_" ndsau) filemns))
))
))

(close filemenuchinhp1xld)
(write-line (strcat "[<---]") filemns)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun docghigiuapop1xle ()
(setq filemenuchinhp1xle (open (strcat dauduongdan tenfilemodoc) "r"))
(while (setq noidungmenuchinhp1xle (read-line filemenuchinhp1xle))
(setq noidungnguyen noidungmenuchinhp1xle)
(setq dodainguyen (strlen noidungnguyen))
(setq dodainguyenl dodainguyen)
(doc@)

(cond
((= ndsau "mnduongphancach") (write-line "[---]" filemns))
((/= ndsau "mnduongphancach")

(write-line (strcat "[" ndtruoc "\t(" ndsau ")]^C^C_" ndsau) filemns))
))

(close filemenuchinhp1xle)
(write-line (strcat "[<---]") filemns)
)


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun docghigiuapop2xl ()
(setq filemenuchinhp2xl (open (strcat dauduongdan tenfilemodoc) "r"))
(while (setq noidungmenuchinhp2xl (read-line filemenuchinhp2xl))
(setq noidungnguyen noidungmenuchinhp2xl)
(setq dodainguyen (strlen noidungnguyen))
(setq dodainguyenl dodainguyen)
(doc@)

(cond
((= ndsau "menuxeplop")
(setq tenfilemodoca (strcat "/menuxl" ndtruoc ".txt"))
(write-line (strcat "[->" ndtruoc "]") filemns)
(setq tenmnxlhthia ndtruoc)
(docghigiuapop2xla))
((/= ndsau "menuxeplop")

(cond
((= ndsau "mnduongphancach") (write-line (strcat "[Xoa duong phan cach]^C^C_" "xmn" "\;" "\"" noidungmenuchinhp2xl "\"" "\;" "\"" tenfilemodoc "\"" "\;" "\"" "x" "\"" "\;") filemns) (write-line "[---]" filemns))
((/= ndsau "mnduongphancach")

(write-line (strcat "[" ndtruoc "\t--Bien Tap]^C^C_" "xmn" "\;" "\"" noidungmenuchinhp2xl "\"" "\;" "\"" tenfilemodoc "\"" "\;") filemns))
))
))

(close filemenuchinhp2xl)
(write-line (strcat "[---]") filemns)
(write-line (strcat "[<-Xoa menu xep lop " tenmnxlhthi " nay]^C^C_" "xmnxl" "\;" "\"" tenmnxlhthi "@menuxeplop" "\"" "\;" "\"" "/menuchinh.txt" "\"" "\;") filemns)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun docghigiuapop2xla ()
(setq filemenuchinhp2xla (open (strcat dauduongdan tenfilemodoca) "r"))
(while (setq noidungmenuchinhp2xla (read-line filemenuchinhp2xla))
(setq noidungnguyen noidungmenuchinhp2xla)
(setq dodainguyen (strlen noidungnguyen))
(setq dodainguyenl dodainguyen)
(doc@)

(cond
((= ndsau "menuxeplop")
(setq tenfilemodocb (strcat "/menuxl" ndtruoc ".txt"))
(write-line (strcat "[->" ndtruoc "]") filemns)
(setq tenmnxlhthib ndtruoc)
(docghigiuapop2xlb))
((/= ndsau "menuxeplop")

(cond
((= ndsau "mnduongphancach") (write-line (strcat "[Xoa duong phan cach]^C^C_" "xmn" "\;" "\"" noidungmenuchinhp2xla "\"" "\;" "\"" tenfilemodoca "\"" "\;" "\"" "x" "\"" "\;") filemns) (write-line "[---]" filemns))
((/= ndsau "mnduongphancach")

(write-line (strcat "[" ndtruoc "\t--Bien Tap]^C^C_" "xmn" "\;" "\"" noidungmenuchinhp2xla "\"" "\;" "\"" tenfilemodoca "\"" "\;") filemns))
))
))

(close filemenuchinhp2xla)
(write-line (strcat "[---]") filemns)
(write-line (strcat "[<-Xoa menu xep lop " tenmnxlhthia " nay]^C^C_" "xmnxl" "\;" "\"" tenmnxlhthia "@menuxeplop" "\"" "\;" "\"" tenfilemodoc "\"" "\;") filemns)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun docghigiuapop2xlb ()
(setq filemenuchinhp2xlb (open (strcat dauduongdan tenfilemodocb) "r"))
(while (setq noidungmenuchinhp2xlb (read-line filemenuchinhp2xlb))
(setq noidungnguyen noidungmenuchinhp2xlb)
(setq dodainguyen (strlen noidungnguyen))
(setq dodainguyenl dodainguyen)
(doc@)

(cond
((= ndsau "menuxeplop")
(setq tenfilemodocc (strcat "/menuxl" ndtruoc ".txt"))
(write-line (strcat "[->" ndtruoc "]") filemns)
(setq tenmnxlhthic ndtruoc)
(docghigiuapop2xlc))
((/= ndsau "menuxeplop")

(cond
((= ndsau "mnduongphancach") (write-line (strcat "[Xoa duong phan cach]^C^C_" "xmn" "\;" "\"" noidungmenuchinhp2xlb "\"" "\;" "\"" tenfilemodocb "\"" "\;" "\"" "x" "\"" "\;") filemns) (write-line "[---]" filemns))
((/= ndsau "mnduongphancach")

(write-line (strcat "[" ndtruoc "\t--Bien Tap]^C^C_" "xmn" "\;" "\"" noidungmenuchinhp2xlb "\"" "\;" "\"" tenfilemodocb "\"" "\;") filemns))
))
))

(close filemenuchinhp2xlb)
(write-line (strcat "[---]") filemns)
(write-line (strcat "[<-Xoa menu xep lop " tenmnxlhthib " nay]^C^C_" "xmnxl" "\;" "\"" tenmnxlhthib "@menuxeplop" "\"" "\;" "\"" tenfilemodoca "\"" "\;") filemns)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun docghigiuapop2xlc ()
(setq filemenuchinhp2xlc (open (strcat dauduongdan tenfilemodocc) "r"))
(while (setq noidungmenuchinhp2xlc (read-line filemenuchinhp2xlc))
(setq noidungnguyen noidungmenuchinhp2xlc)
(setq dodainguyen (strlen noidungnguyen))
(setq dodainguyenl dodainguyen)
(doc@)

(cond
((= ndsau "menuxeplop")
(setq tenfilemodocd (strcat "/menuxl" ndtruoc ".txt"))
(write-line (strcat "[->" ndtruoc "]") filemns)
(setq tenmnxlhthid ndtruoc)
(docghigiuapop2xld))
((/= ndsau "menuxeplop")

(cond
((= ndsau "mnduongphancach") (write-line (strcat "[Xoa duong phan cach]^C^C_" "xmn" "\;" "\"" noidungmenuchinhp2xlc "\"" "\;" "\"" tenfilemodocc "\"" "\;" "\"" "x" "\"" "\;") filemns) (write-line "[---]" filemns))
((/= ndsau "mnduongphancach")

(write-line (strcat "[" ndtruoc "\t--Bien Tap]^C^C_" "xmn" "\;" "\"" noidungmenuchinhp2xlc "\"" "\;" "\"" tenfilemodocc "\"" "\;") filemns))
))
))

(close filemenuchinhp2xlc)
(write-line (strcat "[---]") filemns)
(write-line (strcat "[<-Xoa menu xep lop " tenmnxlhthic " nay]^C^C_" "xmnxl" "\;" "\"" tenmnxlhthic "@menuxeplop" "\"" "\;" "\"" tenfilemodocb "\"" "\;") filemns)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun docghigiuapop2xld ()
(setq filemenuchinhp2xld (open (strcat dauduongdan tenfilemodocd) "r"))
(while (setq noidungmenuchinhp2xld (read-line filemenuchinhp2xld))
(setq noidungnguyen noidungmenuchinhp2xld)
(setq dodainguyen (strlen noidungnguyen))
(setq dodainguyenl dodainguyen)
(doc@)

(cond
((= ndsau "menuxeplop")
(setq tenfilemodoce (strcat "/menuxl" ndtruoc ".txt"))
(write-line (strcat "[->" ndtruoc "]") filemns)
(setq tenmnxlhthie ndtruoc)
(docghigiuapop2xle))
((/= ndsau "menuxeplop")

(cond
((= ndsau "mnduongphancach") (write-line (strcat "[Xoa duong phan cach]^C^C_" "xmn" "\;" "\"" noidungmenuchinhp2xld "\"" "\;" "\"" tenfilemodocd "\"" "\;" "\"" "x" "\"" "\;") filemns) (write-line "[---]" filemns))
((/= ndsau "mnduongphancach")

(write-line (strcat "[" ndtruoc "\t--Bien Tap]^C^C_" "xmn" "\;" "\"" noidungmenuchinhp2xld "\"" "\;" "\"" tenfilemodocd "\"" "\;") filemns))
))
))

(close filemenuchinhp2xld)
(write-line (strcat "[---]") filemns)
(write-line (strcat "[<-Xoa menu xep lop " tenmnxlhthid " nay]^C^C_" "xmnxl" "\;" "\"" tenmnxlhthid "@menuxeplop" "\"" "\;" "\"" tenfilemodocc "\"" "\;") filemns)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun docghigiuapop2xle ()
(setq filemenuchinhp2xle (open (strcat dauduongdan tenfilemodoce) "r"))
(while (setq noidungmenuchinhp2xle (read-line filemenuchinhp2xle))
(setq noidungnguyen noidungmenuchinhp2xle)
(setq dodainguyen (strlen noidungnguyen))
(setq dodainguyenl dodainguyen)
(doc@)

(cond
((= ndsau "mnduongphancach") (write-line (strcat "[Xoa duong phan cach]^C^C_" "xmn" "\;" "\"" noidungmenuchinhp2xle "\"" "\;" "\"" tenfilemodoce "\"" "\;" "\"" "x" "\"" "\;") filemns) (write-line "[---]" filemns))
((/= ndsau "mnduongphancach")

(write-line (strcat "[" ndtruoc "\t--Bien Tap]^C^C_" "xmnkxl" "\;" "\"" noidungmenuchinhp2xle "\"" "\;" "\"" tenfilemodoce "\"" "\;") filemns))
))

(close filemenuchinhp2xle)
(write-line (strcat "[---]") filemns)
(write-line (strcat "[<-Xoa menu xep lop " tenmnxlhthie " nay]^C^C_" "xmnxl" "\;" "\"" tenmnxlhthie "@menuxeplop" "\"" "\;" "\"" tenfilemodocd "\"" "\;") filemns)
)

;;;;;;;;;;;;;;;;;
(defun c:vmn ()
(doanvmn))
;;;;;;;;;;;;;
(setq dauduongdan "E:/menu")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun doanvmn ()

(setq filemns (open (strcat dauduongdan "/dslenh.mns") "w"))

;;;;;;;;;;;;;;;;;;;;;;;;;;;taofilechuamenuchinh
(setq tinhtrangfilechinh (findfile (strcat dauduongdan "/menuchinh.txt")))
(cond
((= nil tinhtrangfilechinh)
(setq taofilemenuchinh (open (strcat dauduongdan "/menuchinh.txt") "w"))
(write-line "Gioi thieu menu @gtmn" taofilemenuchinh)
(close taofilemenuchinh)
))

;;;;;;;;;;;;;;;;;;;;;;;;;;;taofilechuatenmenu
(setq tinhtrangfilechinh (findfile (strcat dauduongdan "/tenmenu.txt")))
(cond
((= nil tinhtrangfilechinh)
(setq taofiletenmenu (open (strcat dauduongdan "/tenmenu.txt") "w"))
(write-line "Menu Duy782006" taofiletenmenu)
(close taofiletenmenu)
))

;;;;;;;;;;;;;;;;;;;;;;;;;;;vietdaupop1
(setq mofiletieude (open (strcat dauduongdan "/tenmenu.txt") "r"))
(setq noidungtieude (read-line mofiletieude))
(close mofiletieude)
(write-line "***MENUGROUP=DSLenh" filemns)
(write-line "***POP1" filemns)
(write-line (strcat "ID_tieude [" noidungtieude "]") filemns)

;;;;;;;;;;;;;;;;;;;;;;;;;;;vietgiuapop1
(setq filemenuchinhp1 (open (strcat dauduongdan "/menuchinh.txt") "r"))
(while (setq noidungmenuchinhp1 (read-line filemenuchinhp1))
(setq noidungnguyen noidungmenuchinhp1)
(setq dodainguyen (strlen noidungnguyen))
(setq dodainguyenl dodainguyen)
(doc@)

(cond
((= ndsau "menuxeplop") (setq tenfilemodoc (strcat "/menuxl" ndtruoc ".txt")) (write-line (strcat "[->" ndtruoc "]") filemns) (docghigiuapop1xl))
((/= ndsau "menuxeplop")

(cond
((= ndsau "mnduongphancach") (write-line "[---]" filemns))
((/= ndsau "mnduongphancach")

(write-line (strcat "[" ndtruoc "\t(" ndsau ")]^C^C_" ndsau) filemns))
))
))
(close filemenuchinhp1)

;;;;;;;;;;;;;;;;;;;;;;;;;;;vietcuoipop1
(write-line "[---]" filemns)
(write-line "[Goi menu bien tap \t(BTMN)]^C^C_btmn" filemns)

;;;;;;;;;;;;;;;;;;;;;;;;;;;vietdaupop2
(write-line "***POP2" filemns)
(write-line (strcat "ID_tieude [" noidungtieude "]") filemns)

;;;;;;;;;;;;;;;;;;;;;;;;;;;vietgiuapop2
(setq filemenuchinhp2 (open (strcat dauduongdan "/menuchinh.txt") "r"))
(while (setq noidungmenuchinhp2 (read-line filemenuchinhp2))
(setq noidungnguyen noidungmenuchinhp2)
(setq dodainguyen (strlen noidungnguyen))
(setq dodainguyenl dodainguyen)
(doc@)

(cond
((= ndsau "menuxeplop")
(setq tenfilemodoc (strcat "/menuxl" ndtruoc ".txt"))
(write-line (strcat "[->" ndtruoc "]") filemns)
(setq tenmnxlhthi ndtruoc)
(setq tenfilemoxoa "/menuchinh.txt")
(docghigiuapop2xl))
((/= ndsau "menuxeplop")

(cond
((= ndsau "mnduongphancach") (write-line (strcat "[Xoa duong phan cach]^C^C_" "xmn" "\;" "\"" noidungmenuchinhp2 "\"" "\;" "\"" "/menuchinh.txt" "\"" "\;" "\"" "x" "\"" "\;") filemns) (write-line "[---]" filemns))
((/= ndsau "mnduongphancach")

(write-line (strcat "[" ndtruoc "\t--Bien Tap]^C^C_" "xmn" "\;" "\"" noidungmenuchinhp2 "\"" "\;" "\"" "/menuchinh.txt" "\"" "\;") filemns))
))
))
(close filemenuchinhp2)

;;;;;;;;;;;;;;;;;;;;;;;;;;;vietcuoipop2
(write-line "[---]" filemns)
(write-line "[DOI TEN MENU CHINH \t(DTMN)]^C^C_dtmn" filemns)
(write-line "[xOA BO MENU \t(XBMN)]^C^C_xbmn" filemns)
(write-line "[LAM LAI MENU \t(TLMN)]^C^C_tlmn" filemns)
(write-line "[LUU MENU HIEN TAI \t(SLMN)]^C^C_slmn" filemns)
(write-line "[LOAD MENU DA LUU \t(GLMN)]^C^C_glmn" filemns)
(write-line "[---]" filemns)
(write-line "[Goi menu su dung \t(SDMN)]^C^C_sdmn" filemns)


;;;;;;;;;;;;;;;;;;;;;;;;;;;ketthucvietmns
(close filemns)

(command "_menuload" (strcat dauduongdan "/dslenh.mns"))
(menucmd "P13=+DSlenh.pop1")
(princ)
)


;;;;;;;;;;;;;;
;;;;;;;;;;;;;;
;;;;;;;;;;;;;;
(Defun doc@ ( )

(setq dodainguyen (- dodainguyen 1))
(setq noidungdocdc (substr noidungnguyen dodainguyen 1))
(if (/= noidungdocdc "@")
(doc@)
)
(IF (= noidungdocdc "@") (PROGN
(setq ndtruoc (substr noidungnguyen 1 (- dodainguyen 1)))
(setq ndsau (substr noidungnguyen (+ dodainguyen 1) (- dodainguyenl dodainguyen)))
)
)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:xbmn ()
(command "_menuunload" "DSLenh")
(command "SHELL" (strcat "del " "E:\\menu\\dslenh.*" ))
(command "DELAY" "3000" "")
(command "SHELL" (strcat "del " "E:\\menu\\*.txt" ))
(command "DELAY" "3000" "")
(Princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:tlmn ()
(command "_menuunload" "DSLenh")
(command "SHELL" (strcat "del " "E:\\menu\\dslenh.*" ))
(command "DELAY" "3000" "")
(command "SHELL" (strcat "del " "E:\\menu\\*.txt" ))
(command "DELAY" "3000" "")
(doanvmn)
(Princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:slmn ()
(command "SHELL" "MD E:\\menu\\saoluumenu" )
(command "DELAY" "1000" "")
(command "SHELL" "copy E:\\menu\\*.txt E:\\menu\\saoluumenu\\" )
(Princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:glmn ()
(command "_menuunload" "DSLenh")
(command "SHELL" (strcat "del " "E:\\menu\\dslenh.*" ))
(command "DELAY" "3000" "")
(command "SHELL" (strcat "del " "E:\\menu\\*.txt" ))
(command "DELAY" "3000" "")
(command "SHELL" "copy E:\\menu\\saoluumenu\\*.txt E:\\menu\\" )
(command "DELAY" "3000" "")
(doanvmn)
(Princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:btmn ()
(command "_menuunload" "DSLenh")
(command "_menuload" (strcat dauduongdan "/dslenh.mns"))
(menucmd "P13=+DSlenh.pop2")
(Princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:sdmn ()
(command "_menuunload" "DSLenh")
(command "_menuload" (strcat dauduongdan "/dslenh.mns"))
(menucmd "P13=+DSlenh.pop1")
(Princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:dtmn ()
(setq tenmoi (getstring "\nNhap ten menu:"))
(command "_menuunload" "DSLenh")
(setq mofiletieude (open (strcat dauduongdan "/tenmenu.txt") "w"))
(write-line tenmoi mofiletieude)
(close mofiletieude)
(doanvmn)
(Princ)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:xmn ()
(setq noidungtimxoa (getstring "\nNhap:"))
(setq filedocsua (getstring "\nNhap:"))

(setq mofilegiua (open (strcat dauduongdan filedocsua) "r"))
(setq mofiletrunggian (open (strcat dauduongdan "/trunggian.txt") "w"))
(setq kieutacdongmenu (strcase (getstring "\nChen muc don/ chen muc xep Lop/ Sua muc/ Xoa muc/ chen duong Phan cach:")))

(cond
((= kieutacdongmenu "X")
(while (setq noidunggiua (read-line mofilegiua))
(if (/= noidungtimxoa noidunggiua)
(write-line noidunggiua mofiletrunggian)
)
)
);dongcondxoamenu
((= kieutacdongmenu "S")
(setq noidunghienthi (getstring 5"\nNhap noi dung hien thi tren menu:"))
(setq tenlenh (getstring "\nNhap ten lenh:"))
(setq chuoivietthem (strcat noidunghienthi "@" tenlenh))

(while (setq noidunggiua (read-line mofilegiua))
(if (/= noidungtimxoa noidunggiua)
(write-line noidunggiua mofiletrunggian)
)
(if (= noidungtimxoa noidunggiua)
(write-line chuoivietthem mofiletrunggian)
)
)
);dongcondchinhmenu
((= kieutacdongmenu "C")
(setq noidunghienthi (getstring 5"\nNhap noi dung hien thi tren menu:"))
(setq tenlenh (getstring "\nNhap ten lenh:"))
(setq chuoivietthem (strcat noidunghienthi "@" tenlenh))

(while (setq noidunggiua (read-line mofilegiua))
(if (= noidungtimxoa noidunggiua)
(write-line chuoivietthem mofiletrunggian)
)
(write-line noidunggiua mofiletrunggian)
)
);dongcondthemmenu

((= kieutacdongmenu "L")
(setq noidunghienthi (getstring 5"\nNhap tieu de menu xep lop nay:"))
(setq chuoivietthem (strcat noidunghienthi "@menuxeplop"))

(while (setq noidunggiua (read-line mofilegiua))
(if (= noidungtimxoa noidunggiua)
(write-line chuoivietthem mofiletrunggian)
)
(write-line noidunggiua mofiletrunggian)
)
(setq mofilexeplopghi (open (strcat dauduongdan "/menuxl" noidunghienthi ".txt") "w"))
(write-line "Gioi thieu menu xep lop@gtmnxl" mofilexeplopghi)
(close mofilexeplopghi)
);dongcondthemmenuxeplop

((= kieutacdongmenu "P")
(setq thoigianhienhanh (menucmd "M=$(getvar, date)"))
(setq chuoivietthem (strcat thoigianhienhanh "@mnduongphancach"))

(while (setq noidunggiua (read-line mofilegiua))
(if (= noidungtimxoa noidunggiua)
(write-line chuoivietthem mofiletrunggian)
)
(write-line noidunggiua mofiletrunggian)
)
);dongcondthemmenuphancach



);dongcond

(close mofilegiua)
(close mofiletrunggian)

(setq mofilegiua (open (strcat dauduongdan filedocsua) "w"))
(setq mofiletrunggian (open (strcat dauduongdan "/trunggian.txt") "r"))
(while (setq noidunggiua (read-line mofiletrunggian))
(write-line noidunggiua mofilegiua)
)
(close mofilegiua)
(close mofiletrunggian)
(command "SHELL" (strcat "del " "E:\\menu\\trunggian.txt" ))
;(command "SHELL" (strcat "del " dauduongdan "/trunggian.txt" ))

(command "_menuunload" "DSLenh")
(doanvmn)

(Princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:xmnkxl ()
(setq noidungtimxoa (getstring "\nNhap:"))
(setq filedocsua (getstring "\nNhap:"))

(setq mofilegiua (open (strcat dauduongdan filedocsua) "r"))
(setq mofiletrunggian (open (strcat dauduongdan "/trunggian.txt") "w"))
(setq kieutacdongmenu (strcase (getstring "\nChen muc don/ Sua muc/ Xoa muc/ chen duong Phan cach:")))

(cond
((= kieutacdongmenu "X")
(while (setq noidunggiua (read-line mofilegiua))
(if (/= noidungtimxoa noidunggiua)
(write-line noidunggiua mofiletrunggian)
)
)
);dongcondxoamenu
((= kieutacdongmenu "S")
(setq noidunghienthi (getstring 5"\nNhap noi dung hien thi tren menu:"))
(setq tenlenh (getstring "\nNhap ten lenh:"))
(setq chuoivietthem (strcat noidunghienthi "@" tenlenh))

(while (setq noidunggiua (read-line mofilegiua))
(if (/= noidungtimxoa noidunggiua)
(write-line noidunggiua mofiletrunggian)
)
(if (= noidungtimxoa noidunggiua)
(write-line chuoivietthem mofiletrunggian)
)
)
);dongcondchinhmenu
((= kieutacdongmenu "C")
(setq noidunghienthi (getstring 5"\nNhap noi dung hien thi tren menu:"))
(setq tenlenh (getstring "\nNhap ten lenh:"))
(setq chuoivietthem (strcat noidunghienthi "@" tenlenh))

(while (setq noidunggiua (read-line mofilegiua))
(if (= noidungtimxoa noidunggiua)
(write-line chuoivietthem mofiletrunggian)
)
(write-line noidunggiua mofiletrunggian)
)
);dongcondthemmenu

((= kieutacdongmenu "P")
(setq thoigianhienhanh (menucmd "M=$(getvar, date)"))
(setq chuoivietthem (strcat thoigianhienhanh "@mnduongphancach"))

(while (setq noidunggiua (read-line mofilegiua))
(if (= noidungtimxoa noidunggiua)
(write-line chuoivietthem mofiletrunggian)
)
(write-line noidunggiua mofiletrunggian)
)
);dongcondthemmenuphancach


);dongcond

(close mofilegiua)
(close mofiletrunggian)

(setq mofilegiua (open (strcat dauduongdan filedocsua) "w"))
(setq mofiletrunggian (open (strcat dauduongdan "/trunggian.txt") "r"))
(while (setq noidunggiua (read-line mofiletrunggian))
(write-line noidunggiua mofilegiua)
)
(close mofilegiua)
(close mofiletrunggian)
(command "SHELL" (strcat "del " "E:\\menu\\trunggian.txt" ))
;(command "SHELL" (strcat "del " dauduongdan "/trunggian.txt" ))

(command "_menuunload" "DSLenh")
(doanvmn)

(Princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:xmnxl ()
(setq noidungtimxoa (getstring "\nNhap:"))
(setq filedocsua (getstring "\nNhap:"))

(setq mofilegiua (open (strcat dauduongdan filedocsua) "r"))
(setq mofiletrunggian (open (strcat dauduongdan "/trunggian.txt") "w"))

(while (setq noidunggiua (read-line mofilegiua))
(if (/= noidungtimxoa noidunggiua)
(write-line noidunggiua mofiletrunggian)
)
)

(close mofilegiua)
(close mofiletrunggian)

(setq mofilegiua (open (strcat dauduongdan filedocsua) "w"))
(setq mofiletrunggian (open (strcat dauduongdan "/trunggian.txt") "r"))
(while (setq noidunggiua (read-line mofiletrunggian))
(write-line noidunggiua mofilegiua)
)
(close mofilegiua)
(close mofiletrunggian)
(command "SHELL" (strcat "del " "E:\\menu\\trunggian.txt" ))
;(command "SHELL" (strcat "del " dauduongdan "/trunggian.txt" ))

(command "_menuunload" "DSLenh")
(doanvmn)

(Princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(Defun c:gtmn ( )
(alert "*Tien ich bien tap va su dung menu truc quan.
*Co hai menu song song voi cac de muc giong nhau:
-Menu su dung: Dung nhu menu binh thuong.
-Menu bien tap: Co chuc nang bien tap, khi ban chon bien tap muc nao thi co 5 lua chon cho ban:
+Go C: Chen muc menu don tren muc vua chon.
+Go L: Chen muc menu xep lop tren muc vua chon.
+Go P: Chen duong phan cach tren muc vua chon.
+Go S: Chinh sua muc vua chon.
+Go X: Xoa bo muc vua chon khoi menu.
*Menu su dung co muc cuoi cung dung goi menu bien tap.
*Menu bien tap co muc cuoi cung dung goi menu su dung va cac chuc nang:
-Doi ten menu chinh.
-Xoa bo menu.
-Sao luu menu.
-Goi menu da luu.
-Khoi tao lai menu ban dau")
(princ))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(Defun c:gtmnxl ( )
(alert "-Khi khoi tao mot menu xep lop minh mac dinh cho no mot muc don hien hanh.
-Tu muc don nay ban dung chuc nang bien tap de co duoc menu ung y.
-Minh ho tro ban viec tao ra cac menu xep lop long trong nhau.
-Gioi han long menu xep lop o day minh goi han trong 5 cap.
-Khi ban tao 2 menu xep lop co ten trung nhau thi noi dung cua menu tao sau se thay the menu truoc.")
(princ))

8 nhận xét:

  1. Chào anh Duy.
    Em mới tìm hiểu về Lisp. Thấy anh có nhiều tài liệu và nhiều kinh nghiệm quá.
    Anh cho em hỏi chút nhé. Em đang có một thư viện block ( mỗi block là một file dwg). Em muốn viết một menu trên thanh toolbar, để khi click vào đó thì chọn được block mình mong muốn.
    Em mới thử làm theo hướng dẫn của anh, cụ thể:
    (defun c:nn ()
    (setq a (getpoint))
    (command ".insert" "D:\\3.dwg" a 1 1 0)
    (princ))
    Với câu lệnh này, em gọi được block 3.dwg ra và bắt điểm theo dạng click chuột. Tuy nhiên theo phương pháp này, block không hiện ra trước khi mình bắt điểm.
    Giả sử người khác dùng, họ sẽ không biết điểm mình chọn để pick block ở đâu.
    Anh giúp em nhé

    Trả lờiXóa
  2. mình có một hệ thống bloc các mẫu tiêu chuẩn dùng làm thư viện. Do không có hiểu biết về autolisp nên loay hoay mãi vẫn chưa tạo được một menu dạng như Tool pallete nhưng yếu điểm của TP lại không có dạng hình cây nên có quá nhiều bloc để chọn (rất rối mắt). Ban có thể tạo cho mình 1 file lsp tao thành menu dạng hình cây tiện cho việc insert file nhưng mình có thể thay đổi tên các menu. Trong file lsp tao menu trước mình không biết làm sao để thay đổi tên cho phù hợp với nhu cầu của mình cả.
    Rất mong bạn ra tay giúp đỡ. email:tri.hanminh@gmail.com

    Trả lờiXóa
  3. http://duy782006.blogspot.com/2010/10/tien-ich-bien-tap-va-su-dung-thu-vien.html
    Xem cái này thử xem!

    Trả lờiXóa
  4. Mình đã xem rất nhiều lần rồi nhưng làm sao để đổi tên các tap ví dụ chi tiết 1 thành cửa đi loại 1 chẳng hạn. về cơ bản là nếu thay đổi tên được thì sẽ dễ nhớ hơn. mong bạn chỉ giáo.

    Trả lờiXóa
  5. Bạn đang nói về lisp nào chứ ko phải lisp này phải không. Mình đoán là lisp biên tập và sử dụng thư viện thì phải?

    Trả lờiXóa
  6. Nếu là lisp thư viện thì bạn sử dụng lệnh tvdd thử xem nhé!

    Trả lờiXóa
  7. anh Duy ơi, hôm nay em doc975 được bài viết của anh , thật su rất hay, em đã thử và bị báo lỗi như sau:
    Command: AP APPLOAD TaoMenu.lsp successfully loaded.
    Command:
    Command:
    Command: VMN
    Gioi thieu menu @gtmn
    ; error: bad argument type: streamp nil

    anh giúp em với

    Trả lờiXóa
  8. Mình đã nói rỏ trong đầu bài là:
    -Bạn load file này về và copy vào thư mục menu trong ổ E. (do mình gặp trở ngại trong việc xoá file bằng lisp nên bị hạn chế phải thư mục cố định mới được).

    Trả lờiXóa

Khi viết nhận xét mong bạn không đứng vai trò nặc danh! Bạn có thể chọn Name/Url trong đó Url là http://duy782006.blogspot.com/ như vậy hay hơn nặc danh bạn nhé.