Chuyển đến nội dung
Diễn đàn CADViet
tramanh2807

[Yêu cầu] lisp tạo menu những lệnh cơ bản

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

Trong topic "Tiếng Việt trong trong hộp thoại Acad - Phần II" tôi đã bàn về vấn đề này. Nay xin tóm lược lại để bạn hiểu:

- File MNU, MNS không thể viết tiếng Việt bằng Unicode vì nó là file ANSI, nhưng file CUI thì viết tiếng Việt bằng Unicode được (dùng phím F4 để mở).

- Dựa vào đó, ta cứ viết file MNU, MNS bình thường. Sau đó tải menu bằng hàm (command “menuload”...), nó sẽ tạo ra file CUI. Trên cơ sở file CUI ta có 2 cách để có tiếng Việt trên Menu như sau:

+ Dùng lệnh CUI để sửa trực tiếp trên khung đối thoại xuất hiện của lệnh. Cách này đơn giản, dễ hình dung.

+ Dùng F4 để mở file CUI, chuyển qua Unicode, sửa lại bằng tiếng Việt, lưu và khởi động lại Cad.

* Chú ý:

1. Trong file CUI, các dòng trình đơn con xuất hiện tới 2 lần, trừ dòng trình đơn chính chỉ xuất hiện 1 lần. Ta chỉ sửa các dòng bắt đầu từ dòng trình đơn chính trở xuống cuối file là được). Cách này hơi rắc rối vì file CUI rất ư... lòng thòng.

2. Từ cad2006, khi tải MNS hoặc MNU thì nó "tự sinh" file CUI. Chính thằng CUI này mới hiển thị trên menu chứ không phải thằng MNS.

Đến giờ tôi vẫn chưa thấy có cách nào tốt hơn nên bạn tạm sử dụng 1 trong 2 cách trên vậy.

thank pro

mò mẫm một chút mình cũng tạo được menu phía trên

cũng tiện phết

cảm ơn nhiều

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

moi nguoi giup em voi!

Nói chung là buồn khi đọc bài này. ko hiểu các bài trên của mình để làm gì 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

moi nguoi giup em voi!

Bạn Duy và tôi đã giúp bạn nhưng hình như bạn chả thèm ngó tới, lại còn than nữa là sao!

Bạn hãy đọc lại các phần trên xem, đừng vô tình như thế thì tội nghiệp cho ai muốn giúp bạn.

  • 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

Bạn Duy và tôi đã giúp bạn nhưng hình như bạn chả thèm ngó tới, lại còn than nữa là sao!

Bạn hãy đọc lại các phần trên xem, đừng vô tình như thế thì tội nghiệp cho ai muốn giúp bạn.

Xin lỗi 2 anh, đã giúp em nhiệt tình, mà bản thân em thì không ngó ngàng đến. do nóng vội mà em chỉ mở đến trang 1, không đọc trang 2.

Thành thật xin lỗi cadviet.

- Em sẽ cố gắng nhiều hơn, mong mọi người giúp đỡ.

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

*Biết rằng nhiều bạn không khuyến khích việc viết lisp phục vụ việc tạo menu. Nhưng đã lỡ theo nên mình làm cho nó ra ngô ra khoai luôn. 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).

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

  • Vote tăng 4

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

Ôi, phong cách code của bác DUy không lẫn đi đâu được ^^ Thì ra bác áp dụng cái Date vào cái này

Phải tick thank gấp với công trình 750 line này của bác thôi. Chúc bác luôn vui khỏe và sáng tạo :wub:

 

P/S : e hỏi mí, sao bác không tạo cái E:\\menu\\ sau khi người dùng load lisp hoặc chạy 1 lệnh nào đó của lisp lần đầu tiê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

*Biết rằng nhiều bạn không khuyến khích việc viết lisp phục vụ việc tạo menu. Nhưng đã lỡ theo nên mình làm cho nó ra ngô ra khoai luôn.

*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.

*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.

1). Rất chia sẻ với Bác vì lòng đam mê!

2). Hình như lsp có hàm delete file mà Bác? Thấy có (vl-file-delete) mà chưa sử dụng.

3). Hình như lsp có thể kiểm tra 1 dòng có tồn tại trong file hay chưa mà Bác?

Thân thương!

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

1). Rất chia sẻ với Bác vì lòng đam mê!

2). Hình như lsp có hàm delete file mà Bác? Thấy có (vl-file-delete) mà chưa sử dụng.

3). Hình như lsp có thể kiểm tra 1 dòng có tồn tại trong file hay chưa mà Bác?

Thân thương!

1. Hi hi thanhk bác.

2. Hồi giờ chưa biết để thử xem.

3. Duy tổ chức theo kiểu mổi menu xếp lớp được lưu ra 1 file txt. nên chỉ cần tìm xem fiel đã tồn tại hay chưa cũng được.

@ALL: Nhưng đoạn này công việc nhiều mà lỡ viết nó nên bám theo mất mấy đêm rồi. Nay coi như tạm ổn, còn vài điểm có thề hoàn thiện thêm như các bác nêu trên nhưng mình tạm dừng lại để cày kiếm chút xiền chứ dạo này chi nhiều thu ít <_< . Khi nào rãnh tiếp tục chỉn theo ý các bác. Nếu code ko quá rồi rắm đối với các bác thì bác nào có hứng nhờ hoạn thiện thêm cho em nó với.

  • 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


×