Đến nội dung


Hình ảnh
- - - - -

[Hỏi] Cách load menu bằng lisp, không dùng lệnh "Menuload"


  • Please log in to reply
25 replies to this topic

#1 avi612

avi612

    biết lệnh move

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

Đã gửi 07 October 2012 - 10:51 PM

Hiện tại mình đã tạo được cho mình 1 bộ Tool Lisp tương đối hoàn chỉnh và cho vào trong 1 thư mục đặt ở ổ C:\\.
Vướng mắc cuối cùng của mình là viết ra một hàm lisp load cái menu của mình lên khi mình gọi lệnh.
Ví dụ cho rõ ràng chút:
-- Mình tạo một hàm lisp có chức năng thực hiện 3 việc sau:

1. Bước đầu, load 1 lisp tổng có chứa tất cả các lệnh cần thiết. (để lấy đường dẫn cho bước 2).

2. Add vào trong Support File Search Path đường dẫn đến thư mục chứa những thứ kèm theo khi dùng lisp (như: file dwg, dialog...).

3. Load menu đã tạo sẵn lên thanh công cụ của CAD.


------------------------------------------------------------------------------------------------------------------------------------------------------------
Ý 1 và 2 đã giải quyết xong, còn ý 3 nữa là xong mà mò mẫm hoài không ra được. Mọi người giúp giùm nhá.
Àh!!! Nhớ là cả 3 bước này được thực hiện trong 1 lần gọi lệnh nhá. Ví như ta gõ trên command: RUN [enter] ----> Lisp sẽ thực hiện cả 3 bước trên.
---- Đợi comment thôi ...... :)
  • 0

#2 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 08 October 2012 - 12:20 AM

Add support rồi, bạn dùng command Menuload thử chưa ?
  • 1

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


#3 avi612

avi612

    biết lệnh move

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

Đã gửi 08 October 2012 - 12:26 AM

Dùng command "Menuload" thì mình có nghĩ tới nhưng làm sao để brower chọn file *.cui thì mình chịu... Cái này phải sao bạn chỉ dùm....
  • 0

#4 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 08 October 2012 - 04:11 AM

Khi add suport rồi, thì thay vì phải gõ đầy đủ đường dẫn của file, Bạn chỉ cần gõ tên file là được
Cái này bạn tham khảo thêm lisp di động của anh Duy2006
  • 1

#5 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 08 October 2012 - 06:43 AM

Ví dụ về 2 dòng lisp để load và hiện lên menu:
(command "menuload" "Test.cui")
(menucmd "P16=+Tien_ich.POP16")
Từ đó, bạn có thể gom thành 3 trong 1.
Chúc thành cô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.


#6 avi612

avi612

    biết lệnh move

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

Đã gửi 08 October 2012 - 10:17 AM

Ví dụ về 2 dòng lisp để load và hiện lên menu:
(command "menuload" "Test.cui")
(menucmd "P16=+Tien_ich.POP16")
Từ đó, bạn có thể gom thành 3 trong 1.
Chúc thành công.


Hê hê! Đã làm được. Thanks các sư huynh nhìu. Nhưng mà cho hỏi 1 chút về cái dòng
(menucmd "P16=+Tien_ich.POP16")
Dòng này nó có chức năng load menu lên thanh công cụ, nhưng P16 đó là gì vậy, mình thay nó bằng những số khác nhỏ hơn hay lớn hơn có được không.
  • 0

#7 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 08 October 2012 - 10:27 AM

"File" <=> P1
"Edit" <=> P2
"View" <=> P3
...
"Help" <=> P12
Bạn cứ thử đặt nó, VD thay vì P16 thì sửa lại thành P1 hoặc P20, để biết xem nó thế nào nhé!
Cám ơn mà sao quên tick "Like this" hoài nhỉ? :lol:
  • 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.


#8 avi612

avi612

    biết lệnh move

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

Đã gửi 08 October 2012 - 10:54 AM

Mình đưa lên đây file lisp mình dùm để chèn đường dẫn vào Support File Search Path và add menu tự động lên thanh công cụ.
Lisp này còn sai ở chỗ dòng add menuload, vì khi gõ lệnh add xong thì trong hộp thoại Menuload nó đã hiễn thị tên menu cần chèn vào rồi, nhưng trên thanh công cụ nó chưa xuất hiện menu của mình lên trên đó.
Một điều nữa, với trường hợp qua những máy tính khác nhau thì cái P15 (menucmd "P15=+ISO.POP15") nó không giống nhau. Vậy thì làm thế nào để nhận biết được cái này.
Mọi người giúp nhá.

(defun c:add()



(defun lastload( / K)
(setq K (strcat
"HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\"
"CurrentVersion\\Explorer\\ComDlg32\\OpenSaveMRU\\*"
))
(vl-registry-read K (substr (vl-registry-read K "MRUList") 1 1))
);end lastload


(defun addspath(s)
(setenv "ACAD" (strcat (getenv "ACAD") ";" s))
);end addspath

(setvar "cmdecho" 0)
(addspath (vl-filename-directory (LastLoad)))
(addspath (strcat (vl-filename-directory (LastLoad)) "\\Library_shape"))

(load (strcat (vl-filename-directory (LastLoad)) "\\IN_tplot.lsp"))
(load (strcat (vl-filename-directory (LastLoad)) "\\01_VTCo_A3utilities.lsp"))

(command ".menuload" "ISO-Vinx.cui")
(menucmd "P15=+ISO.POP1")
)

  • 1

#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 08 October 2012 - 02:36 PM

Bạn chú ý dòng code này:
(menucmd "P15=+ISO.POP1")
POP1 và ISO phải đúng tên trong file cui. Bạn kiểm tra lại xem nhé (kiểm tra từ file mnu thì dễ hơn).
Trong trường hợp vẫn không được thì bạn post file cui và mnu lên nhé.
P/S: hỏi thêm: bạn đang xài win nào vậy (vista, win7, xp, 98, 95...)?
  • 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 avi612

avi612

    biết lệnh move

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

Đã gửi 08 October 2012 - 05:24 PM

Hiện tại mình sử dụng Cad2007 và Cad2010 trên nền Winxp.
Và mình tạo menu bằng lệnh cui của CAD2007 (để có thể sử dụng luôn cho những CAD lớn hơn).
Thì khi mình tạo file menu (*.cui) và xuất ra nó chỉ có 1 file đuôi là *.cui thôi...chứ mình không thấy file nào là *.mnu cả.
Khi mình dùng lệnh menuload và load bằng tay lên thì nó xuất hiện thêm file cùng tên có đuôi là *.mnr
Mình đem lên đây để bạn xem qua.

http://www.mediafire...vv16uw0kca590av
  • 0

#11 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 08 October 2012 - 06:48 PM

1). Cách viết đúng:
(command ".menuload" "ISO-Vinx.cui")
(menucmd "P15=+ISO-VINX.POP1")
Bạn chú ý các chữ màu đỏ và màu xanh. Nó phải giống 2 dòng dưới đây lấy ra từ *.cui:
<MenuGroup Name="ISO-VINX">
<Alias>POP1</Alias>
Đồng thời, cái hiện lên trên menu là ISO thì được lấy ra từ dòng này:
<Name xlate="true" UID="XLS_0001">ISO</Name>
srr vì ở trên tôi viết nhầm. Nói chung thì hiểu rõ file cui hơi bị... khó!
2). Sở dĩ tôi hỏi bạn phiên bản Win là vì hàm lastload của bạn nó không chạy được trong 1 số Win (VD: Win7).
  • 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.


#12 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 08 October 2012 - 09:08 PM

Hiện tại mình sử dụng Cad2007 và Cad2010 trên nền Winxp.
Và mình tạo menu bằng lệnh cui của CAD2007 (để có thể sử dụng luôn cho những CAD lớn hơn).
Thì khi mình tạo file menu (*.cui) và xuất ra nó chỉ có 1 file đuôi là *.cui thôi...chứ mình không thấy file nào là *.mnu cả.
Khi mình dùng lệnh menuload và load bằng tay lên thì nó xuất hiện thêm file cùng tên có đuôi là *.mnr
Mình đem lên đây để bạn xem qua.

http://www.mediafire...vv16uw0kca590av


Tạo menu thì theo mình nên viết bằng file mns cho nó dể dòm chứ cái cui nó rối ben ngó phát ớn.
-file mns khi load lên cad nó tự dịch ra thành cui
-Cái mnr là file biên dịch của các hình ảnh dùng hiển thị icon trên các thanh công cụ.
Các bài viết về mns trên diển đàn nhiều vô kể bạn lội xem.
  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#13 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 08 October 2012 - 09:19 PM

Bác Duy!
CUI hay MNS/MNU đều có những ưu/nhược riêng:
- Tạo bằng MNS/MNU thì rất dễ đọc, dòm vô là hiểu. Nhưng phải là người biết viết file menu mới kham nổi.
- Tạo bằng CUI thì dòm vô tẩu hỏa nhập ma, nhưng cách tạo thì người không biết viết menu cũng chơi được, lại thêm có thể chèn icon được.
Xin lỗi: xâm phạm tác quyền của bác ở từ "DÒM" một lần nữa nhé! :lol:
  • 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.


#14 avi612

avi612

    biết lệnh move

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

Đã gửi 08 October 2012 - 10:32 PM

Viết menu bằng MNS/MNU là cái hạn chế của mình, mặc dù là có đọc qua những bài viết về cách viết nó nhưng mà chưa định hình được cái sườn của nó như thế nào để viết cho ok hết...

Nên nếu bác Duy có thời gian thì từ cái form menu của em (link mediafile phía trên) bác có thể viết lại giúp em vài dòng bằng file MNS để mình có thể so sánh cấu trúc của nó để mót thêm được tí gì không.
---
Quay lại với chủ đề của topic thì em cảm ơn bác Doan Van Ha nhiều nhiều vì đã hướng dẫn tận tình và nhờ đó mình đã thực hiện được ý đồ...dù rằng chỉ là áp dụng thôi chứ hiểu hết ngọn ngành thì chưa.

Bác cho em hỏi thêm mấy ý, từ file cui của em bác làm cách nào có thể xem được những dòng này, em thử mở file cui bằng trình Vlisp thì nó ra 1 đóng nhìn chóng mặt luôn.


<MenuGroup Name="ISO-VINX">
<Alias>POP1</Alias>
<Name xlate="true" UID="XLS_0001">ISO</Name>

Vấn đề nữa là hàm lastload của em bị hạn chế ở 1 số win như bác nói vậy thì phải sử lý như thế nào thì nó mới tương thích được hết được với những Win như vista, win7, xp, 98, 95...Những vấn đề này hỏi để học thôi nên nếu rỗi thì bác giúp em.
  • 0

#15 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 08 October 2012 - 10:42 PM

1). Câu hỏi 1: nhấn F3 hoặc F4 để xem.
2). Câu hỏi 2: hàm lastload của bạn lỗi với Win7. Hàm lastload dưới đây không lỗi với Win7. Kết hợp cả 2 hàm lastload thì có thể chạy tốt với các Win... cho tới bây giờ. Còn mai mốt có Win mới thì... chịu! Cái này chắc phải hỏi bác Window???
3).Trả lời thay bác Duy: từ file CUI mà viết lại file MNS hoặc MNU thì chắc là quá... Ẹ!

(defun LASTLOAD()
(setq path (vl-registry-read (strcat "HKEY_CURRENT_USER\\" (vlax-product-key) "\\Profiles\\" (vla-get-activeprofile (vla-get-profiles (vla-get-preferences (vlax-get-acad-object)))) "\\Dialogs\\Appload") "MainDialog"))
(if path (setq path (substr path 1 (- (strlen path) 1)))))

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


#16 avi612

avi612

    biết lệnh move

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

Đã gửi 08 October 2012 - 10:49 PM

Hê hê! Thanks bác đã tận tình....
Vậy thì em sẽ giữ chính kiến của mình trung thành với *.cui ...
-----
Àh hỏi bác thêm câu nữa....Sao tick like cho bác thêm nữa mà không được nhỉ. :)
  • 0

#17 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 08 October 2012 - 10:59 PM

1). Tùy quan điểm mà "trung thành" thôi!
2). "Like This" cấp chủ quyền mỗi ngày mấy phát thôi. Để tránh lạm phát mà. Lâu nay vẫn bị người ta nợ hoài, hẹn mai trả, rốt cuộc xù luôn. :D
  • 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.


#18 avi612

avi612

    biết lệnh move

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

Đã gửi 09 October 2012 - 12:47 PM

Hê hê!!! Trả nợ cho bác rồi nhá....Cái này cũng kẹt nhỉ, ví như 10 người góp ý muốn Like this hết 10 người mà không đủ để Like thì thiệt thòi nhỉ..:)
-------------

(defun c:add-contents()

(defun lastload( / K)
(setq K (strcat "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\" "CurrentVersion\\Explorer\\ComDlg32\\OpenSaveMRU\\*" ))
(vl-registry-read K (substr (vl-registry-read K "MRUList") 1 1))
)

(load (strcat (vl-filename-directory (LastLoad)) "\\IN_tplot.lsp"))
(load (strcat (vl-filename-directory (LastLoad)) "\\01_VTCo_A3utilities.lsp"))
)

Bác cho em hỏi thêm cái này.... với cái lisp trên "C:add-contents" thì chức năng của nó là load những lisp đã được chỉ định sẵn, lên trên bản vẽ hiện thời ngay lúc đó...
Vậy như muốn sửa lại chức năng của nó là load luôn vào "Contents", để tiện cho những bản vẽ sau thì mình phải làm như thế nào.
--
Em có mò mẫm trong regidit thì thấy mỗi lần mình add 1 file mới vào "contents" thì nó sẽ lưu lại tại đường dẫn này.
"HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R18.0\ACAD-8001:409\Profiles\Initial Setup Profile\Dialogs\Appload\Startup\....."
Biết rằng dòng này "R18.0\ACAD-8001:409" sẽ thay đổi theo vesion của CAD.
Khi ta add 1 file mới thì file "NumStartup" nó sẽ nhảy lên 1 giá trị và giá trị trước đó sẽ là đường dẫn của file lisp mình vừa load...
Thế nên em muốn bác giúp làm cách nào dùng lisp để có thể đụng đến thằng này....
  • 0

#19 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 09 October 2012 - 02:49 PM

Không biết bạn theo lisp đã lâu chưa, mà toàn đặt ra những câu hỏi khó. Nếu còn khó nữa thì chắc tôi phải nhờ trợ giúp của khán giả hoặc gọi điện thoại cho người thân thôi!
1). Xét về hiệu quả của việc add lisp vào contents tự động thì không hiệu quả lắm. Bởi bạn chỉ cần gom tất cả file lisp vào 1 folder. Sau đó viết hàm load tất cả folder này. Và sau đó nữa là add file chứa hàm này vào contents là xong.
2). Tuy nhiên, vì bạn đã hỏi nên cũng cố tìm tòi mà trả lời: lisp dưới đây dùng để add 1 file lisp vào contents. Có 2 điều xãy ra:
2a). Sau khi add xong, tắt cad khởi động lại thì sẽ thấy nó chình ình trong contens. Nếu sau khi add mà bạn dùng lệnh APPLOAD, rồi mới tắt cad khởi động lại thì dã tràng xa cát biển đông.
2b). Như đã nói ở phần trước, cái này chạy trên Win7 thì OK (máy tôi), còn máy bạn XP thì tôi không bảo hiểm nhân mạng.
2c). Nếu bạn hỏi tôi vì sao có những chuyện "lạ đời" như vậy thì tôi sẽ hỏi Ơi Trồng.

;----- Add 1 file to Startup Suite, EX: (f:appload_startup_add "D:\\HA\\test.lsp")
(defun f:appload_startup_add (f2 / pth lst i)
(if
(and
(findfile f2)
(not (member (strcase f2) (mapcar 'strcase (setq lst (f:appload_startup_files))))))
(progn
(vl-registry-write (setq pth (f:appload_startup_path)) (strcat (setq i (itoa (1+ (length lst)))) "Startup") f2)
(vl-registry-write pth "NumStartup" i)))
i)
(defun f:appload_startup_path ()
(strcat "HKEY_CURRENT_USER\\" (vlax-product-key) "\\Profiles\\"
(vla-get-ActiveProfile (vla-get-Profiles (vla-get-Preferences (vlax-get-acad-object)))) "\\Dialogs\\Appload\\Startup"))
(defun f:appload_startup_files ( / pth lst i f)
(setq pth (f:appload_startup_path)
i 0)
(while (setq f (vl-registry-read pth (strcat (itoa (setq i (1+ i))) "Startup")))
(setq lst (cons f lst)))
lst)

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


#20 avi612

avi612

    biết lệnh move

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

Đã gửi 09 October 2012 - 03:35 PM

Hê! Em theo lisp cũng chưa lâu, khoảng đâu hơn nữa năm....viết còn ẹ lắm...
Em nảy ra những vấn đề trên là khi ngồi mày mò tự dưng trong đầu xuất hiện ra ý tưởng rồi ngồi lượm nhặt các bài trên diễn đàn thôi, cái nào không có thì mới hỏi các cao thủ như bác....
Hề hề...Dù gì cũng thanks bác đã tận tình....Được bác chỉ cho vài chiêu mà thấy công lực lên được chút rồi...:)
-----
Em còn mấy chục câu để hỏi nữa mà thôi, đợi em search trên forum rồi mò trước đã, ko có thì em lại đăng đàn xin thọ giáo vậy :)
Nếu được, bác có cuốn sách nào về lisp, vlisp, dialog... cho em tham khảo với....tự mò mà ra nó mới sướng bác ạh :)
  • 0