Đến nội dung


Hình ảnh
- - - - -

[Nhờ viết LISP] Gọi Tool Bar trong CUI vừa Add


  • Please log in to reply
26 replies to this topic

#1 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 992 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 23 July 2014 - 02:38 PM

Chào các bác

Em đang loay hoay việc khi mình load Menu từ CUI thì sẽ hiện lên luôn thanh Tool Bar nhưng không được.

Em cũng nhờ bác Tot77 giúp đỡ nhưng chắc bác ấy bận nên nhờ các bác góp ý hoặc viết Code cho em 1 đoạn.

Hiện tại em cũng đã xong việc Load Menu từ CUI, nhờ các bác viết thêm cho em 1 đoạn để khi chạy LISP thì các Tool Bar trong đó sẽ hiện lên màn hình.

(defun c:loadit (/ cui_database mnbar flag)
  (vl-load-com)
  (setq cui_database (list "ISO-VINX" "C:\\ISO-Vinx.cui" "ISO")
flag nil)
  (vlax-for n  (setq all_menus (vla-get-MenuGroups  (vlax-get-Acad-Object)))
    (if (= (strcase (vla-get-name n)) (car cui_database)) (setq flag T))
  )
  (if (null flag)
    (progn
      (vla-load all_menus (cadr cui_database))
      (setq MnBar (vla-get-MenuBar (vlax-get-Acad-Object)))
      (vla-InsertInMenuBar
(vla-Item (vla-get-Menus (vla-Item (vla-get-MenuGroups (vlax-get-Acad-Object)) (car cui_database))) (caddr cui_database)) 
(1- (vla-get-Count MnBar))
      )
    )
    (princ "\n>>..MENU IS ALREADY LOADED..<<")
  )
  (princ)
)

Đây là file CỦI và MNS

http://www.cadviet.c..._load_cui_1.rar

Cảm ơn các bác sẽ xem và đóng góp 


  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#2 phamhuy1

phamhuy1

    biết vẽ rectang

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

Đã gửi 23 July 2014 - 03:00 PM

Làm cách nào tạo file iso-vinx.mnr vậy bạn :o


  • 0

#3 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 992 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 23 July 2014 - 03:05 PM

Hiii. Cái đó đơn giản lắm. Tạo từ CUI bạn ạ.


  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#4 phamhuy1

phamhuy1

    biết vẽ rectang

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

Đã gửi 23 July 2014 - 03:13 PM

chẳng lẻ nó tư tạo khi mình chạy file ISO-Vinx.cui  sao :wub:


  • 0

#5 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 992 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 23 July 2014 - 03:17 PM

File ISO-Vinx.cui là file được tạo ra do mình thiết lập từ Autocad. Sau khi thiết lập ta sẽ có được File đó.


  • 1



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#6 phamhuy1

phamhuy1

    biết vẽ rectang

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

Đã gửi 23 July 2014 - 03:21 PM

à... ra thế, cám ơn bạn!


  • 0

#7 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 23 July 2014 - 06:38 PM

Chào các bác

Em đang loay hoay việc khi mình load Menu từ CUI thì sẽ hiện lên luôn thanh Tool Bar nhưng không được.

Em cũng nhờ bác Tot77 giúp đỡ nhưng chắc bác ấy bận nên nhờ các bác góp ý hoặc viết Code cho em 1 đoạn.

Hiện tại em cũng đã xong việc Load Menu từ CUI, nhờ các bác viết thêm cho em 1 đoạn để khi chạy LISP thì các Tool Bar trong đó sẽ hiện lên màn hình.


 

Chào thanhduan!

Khi chạy Lisp thì Toolbar đã hiện rồi mà !


  • 0

#8 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 992 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 23 July 2014 - 09:52 PM

Chào thanhduan!

Khi chạy Lisp thì Toolbar đã hiện rồi mà !

Dạ, nó chỉ được lần đầu tiên load thôi ạ. Em vào CUI, gỡ nó ra và load lại thì nó lại không hiện lên nữa.

Em rất muốn khi mình load menu thì tool bar hiện lên cùng luôn.

Em cũng đang tìm hiểu cách là: Làm sao dùng Lisp để cho cái Tool Bar của CUI mới nó nhảy vào Tool Bar của Autocad mà ko cần phải gắp cho vào.

Cảm ơn bác Tuệ quan tâm. Hii


  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#9 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 24 July 2014 - 05:29 AM


Dạ, nó chỉ được lần đầu tiên load thôi ạ. Em vào CUI, gỡ nó ra và load lại thì nó lại không hiện lên nữa.

Em rất muốn khi mình load menu thì tool bar hiện lên cùng luôn.

Em cũng đang tìm hiểu cách là: Làm sao dùng Lisp để cho cái Tool Bar của CUI mới nó nhảy vào Tool Bar của Autocad mà ko cần phải gắp cho vào.

Cảm ơn bác Tuệ quan tâm. Hii

Trong lệnh CUI remove Toolbar bằng cách nào nhỉ?

Theo mình biết thì chỉ có remove các Command trong Toolbar .....

thanh duan có thể nói rõ ý ở dòng chữ tô màu xanh đậm không?


  • 0

#10 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 992 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 24 July 2014 - 08:13 AM

Dạ. Đánh lệnh CUI. Trong phần Partial CUI files thì chọn CUI cần gỡ bỏ. Nhấn chuột phải vào nó và chọn Unload CUI.

da_zpsa1f8e922.jpg


  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#11 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 24 July 2014 - 08:43 AM

Dạ. Đánh lệnh CUI. Trong phần Partial CUI files thì chọn CUI cần gỡ bỏ. Nhấn chuột phải vào nó và chọn Unload CUI.

 

Khi Unload CUI file bằng cách đó thì dùng Lisp Loadit thì Toolbar vẫn hiện

Trừ khi em đã tắt "dấu X " của thanh Toolbar trước đó rồi unload file CUI -> Sau đó dùng Lisp loadit thì Toolbar sẽ không hiện...

Phải chăng ý của em là với bất kì Trường hợp nào -> cũng muốn hiện thanh Tool bar lên khi chạy Lisp?


  • 0

#12 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 992 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 24 July 2014 - 10:38 AM

Em cảm ơn bác Tuệ nhiều.

Thật xấu hổ khi em nhờ cả 2 người giúp đỡ.

Em cũng nhờ bác Tot77 giúp đỡ.

Đây là mã Code bác ấy viết hiện lên Tool Bar khi load CUI.

(defun c:loadit (/ cui_database mnbar flag)
  (vl-load-com)
  (setq cui_database (list "ISO-VINX" "C:\\ISO-Vinx.cui" "ISO")
flag nil)
  (vlax-for n  (setq all_menus (vla-get-MenuGroups  (vlax-get-Acad-Object)))
    (if (= (strcase (vla-get-name n)) (car cui_database)) (setq flag T))
  )
  (if (null flag)
    (progn
      (vla-load all_menus (cadr cui_database))
      (setq MnBar (vla-get-MenuBar (vlax-get-Acad-Object)))
      (vla-InsertInMenuBar
(setq mewPopUpMenu (vla-Item (vla-get-Menus
  (setq newMenuGroup (vla-Item (vla-get-MenuGroups (vlax-get-Acad-Object)) (car cui_database))))
 (caddr cui_database)))
(1- (vla-get-Count MnBar))
      )
     )
     (princ "\n>>..MENU IS ALREADY LOADED..<<")
   )
   (setq newToolBar (vla-item (vla-get-Toolbars newMenuGroup) 0))
   (vla-put-Visible newToolBar :vlax-true)
 
   (setq ltb nil lpm nil)
   (vlax-for item newToolBar (setq ltb (cons (vla-get-name item) ltb)))
   (vlax-for item NewPopUpMenu
     (setq lpm (cons (list (vla-get-Index item) (vla-get-TagString item) (vla-get-Caption item) (vla-get-Macro item)) lpm))
   )
   (setq lpm (vl-sort lpm '(lambda(x y) (car x) (car y))))
  (princ)
)

Nó tương đối ổn rồi.

Em đang mong muốn dùng LISP để điều khiển nó. Khi mình dùng lisp load CUI thì cái Tool Bar của CUI mới nó sẽ nhảy vào Tool Bar của AUtocad mà không cần phải gắp từ cái này sang cái khác.

Chân thành cảm ơn sự nhiệt tình của 2 bác


  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#13 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 24 July 2014 - 02:16 PM

Em đang mong muốn dùng LISP để điều khiển nó. Khi mình dùng lisp load CUI thì cái Tool Bar của CUI mới nó sẽ nhảy vào Tool Bar của AUtocad mà không cần phải gắp từ cái này sang cái khác.

Chân thành cảm ơn sự nhiệt tình của 2 bác

Tại mình không hiểu ý của thanhduan : Thanh Toolbar của ACAD có nhiều thanh Toolbar thì không biết nhảy Tool Bar của CUI mới nó sẽ nhảy vào Toolbar nào? Rồi gắp cái này sang cái khác là sao nhỉ??


  • 1

#14 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 992 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 24 July 2014 - 02:26 PM

Dạ nó như này anh ạ.

36665_55_2.png


  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#15 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 24 July 2014 - 03:57 PM

Dạ nó như này anh ạ.

36665_55_2.png

 

Em tham khảo 2 đoạn code này, anh copy nhặt được trên mạng, vì quá bận nên chưa nghiên cứu nhiều ^ _ ^

 

(vl-load-com)
(defun c:test()
    (setq acadObj (vlax-get-acad-object))
    (setq currMenuGroup (vla-Item (vla-get-MenuGroups acadObj) "ACAD"))
 
    ;; Create the new toolbar
    (setq newToolBar (vla-Add (vla-get-Toolbars currMenuGroup) "HA1"))
 
    ;; Assign the macro string the VB equivalent of "ESC ESC _open "
    (setq openMacro (strcat (Chr 3) (Chr 3) (Chr 95) "open" (Chr 32)))
    (setq newButton1 (vla-AddToolbarButton newToolBar "" "NewButton1" "Open a file." openMacro))
 
    ;; Display the toolbar
    (vla-put-Visible newToolBar :vlax-true)
 
    (vla-put-CommandDisplayName newButton1 "Open a File")
 
    ;; Read the current value of the Help string
    (alert (strcat "The current CommandDisplayName for the toolbar button is: " (vla-get-CommandDisplayName newButton1)))
 
    ;; Change the value of the CommandDisplayName
    (vla-put-CommandDisplayName newButton1 "Open File")
 
    ;; Read the new value of the CommandDisplayName
    (alert (strcat "The new CommandDisplayName for the toolbar button is: " (vla-get-CommandDisplayName newButton1)))
)

(defun C:VBATOOLBARMENU (/ fn acadobj thisdoc menus flag currMenuGroup
newToolbar newToolbarButton openMacro
SmallBitmapName LargeBitmapName)
 
(vl-load-com)
 
;;; CreateToolbar is called if the Toolbar in question doesn't exist
  (defun createToolbar ()
    (setq newToolbar (vla-add (vla-get-toolbars currMenuGroup) "VBA Menu"))
    ;;------------------------------------------------------------------
    ;; create the first Toolbar Button, VbaLoad
    (setq openMacro (strcat (chr 3) (chr 3) (chr 95) "vbaload" (chr 32)))
    (setq newToolbarButton (vla-addToolbarButton
             newToolbar
             (1+ (vla-get-count newToolbar))
             "VBA Load" "VBA Load" openMacro
           )
    )
    (setq SmallBitmapName "VbaLoad.bmp")
    (setq LargeBitmapName "VbaLoad.bmp")   
    (vla-setBitmaps newToolbarButton SmallBitmapName LargeBitmapName)
 
    (vla-put-helpString newToolbarButton "Load a VBA Application")
    ;;------------------------------------------------------------------
    ;; create the second Toolbar Button, Vbaide
    (setq openMacro (strcat (chr 3) (chr 3) (chr 95) "vbaide" (chr 32)))
    (setq newToolbarButton (vla-addToolbarButton
             newToolbar
             (1+ (vla-get-count newToolbar))
             "VBA Editor" "VBA Editor" openMacro
           )
    )
    (setq SmallBitmapName "Vbaide.bmp")
    (setq LargeBitmapName "Vbaide.bmp")   
    (vla-setBitmaps newToolbarButton SmallBitmapName LargeBitmapName)
 
    (vla-put-helpString newToolbarButton "Switch to the VBA Editor")
    ;;------------------------------------------------------------------
    ;; create the third Toolbar Button, Vbarun
    (setq openMacro (strcat (chr 3) (chr 3) (chr 95) "vbarun" (chr 32)))
    (setq newToolbarButton (vla-addToolbarButton
             newToolbar
             (1+ (vla-get-count newToolbar))
             "VBA Macro" "VBA Macro" openMacro
           )
    )
    (setq SmallBitmapName "Vbamacro.bmp")
    (setq LargeBitmapName "Vbamacro.bmp")   
    (vla-setBitmaps newToolbarButton SmallBitmapName LargeBitmapName)
 
    (vla-put-helpString newToolbarButton "Run a VBA Macro")
    ;;------------------------------------------------------------------
    ;; create the fourth Toolbar Button, Vbaman
    (setq openMacro (strcat (chr 3) (chr 3) (chr 95) "vbaman" (chr 32)))
    (setq newToolbarButton (vla-addToolbarButton
             newToolbar
             (1+ (vla-get-count newToolbar))
             "VBA Manager" "VBA Manager" openMacro
           )
    )
    (setq SmallBitmapName "Vbaman.bmp")
    (setq LargeBitmapName "Vbaman.bmp")   
    (vla-setBitmaps newToolbarButton SmallBitmapName LargeBitmapName)
 
    (vla-put-helpString newToolbarButton "Display the VBA Manager")
    ;;------------------------------------------------------------------
 
    ;; re-compile the VBATOOLBARMENU menu - VBATOOLBARMENU.MNC
    (vla-save currMenuGroup acMenuFileCompiled)
    ;; save it as a MNS file
    (vla-save currMenuGroup acMenuFileSource)
  )
 
  (setq flag nil)
  (if (not (findfile "VbaToolbarMenu.mns"))
    (progn
      (setq fn (open "VbaToolbarMenu.mns" "w"))
      (close fn)
    )
  )
  ;; get hold of the application object
  ;; we'll use it to reference the menuGroups collection
  (setq acadobj (vlax-get-acad-object))
  ;; .. and get the active document
  (setq thisdoc (vla-get-activeDocument acadobj))
  ;; get all menu groups loaded into AutoCAD
  (setq menus (vla-get-menuGroups acadobj))
  (princ "\nLoaded menus: ")
  (vlax-for n menus
    (if (= (vla-get-name n) "VbaToolbarMenu")
      (setq flag T)
    )
    (terpri)
    (princ (vla-get-name n))
  )
  ;; if VbaToolbarMenu wasn't among the loaded menus then load it
  (if (null flag)
    (vla-load menus "VbaToolbarMenu.mns")
  )
  (setq currMenuGroup (vla-item menus "VbaToolbarMenu"))
  ;; if no Toolbars exist in VbaToolbarMenu then go create one
  ;; otherwise exit with grace
  (if (<= (vla-get-count (vla-get-menus currMenuGroup)) 0)
    (createToolbar)
    (princ "\nThe Vba Toolbar Menu is already loaded")
  )
  (princ)
)
 
(princ)
(vl-load-com)
(defun c:test()
    (setq acadObj (vlax-get-acad-object))
    (setq currMenuGroup (vla-Item (vla-get-MenuGroups acadObj) "ACAD"))
 
    ;; Create the new toolbar
    (setq newToolBar (vla-Add (vla-get-Toolbars currMenuGroup) "HA1"))
 
    ;; Assign the macro string the VB equivalent of "ESC ESC _open "
    (setq openMacro (strcat (Chr 3) (Chr 3) (Chr 95) "open" (Chr 32)))
    (setq newButton1 (vla-AddToolbarButton newToolBar "" "NewButton1" "Open a file." openMacro))
 
    ;; Display the toolbar
    (vla-put-Visible newToolBar :vlax-true)
 
    (vla-put-CommandDisplayName newButton1 "Open a File")
 
    ;; Read the current value of the Help string
    (alert (strcat "The current CommandDisplayName for the toolbar button is: " (vla-get-CommandDisplayName newButton1)))
 
    ;; Change the value of the CommandDisplayName
    (vla-put-CommandDisplayName newButton1 "Open File")
 
    ;; Read the new value of the CommandDisplayName
    (alert (strcat "The new CommandDisplayName for the toolbar button is: " (vla-get-CommandDisplayName newButton1)))
)

  • 1

#16 leicatc1201

leicatc1201

    Chưa sử dụng CAD

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

Đã gửi 24 July 2014 - 05:05 PM

anh oi em muon chuyen toa do thiet ke gia dinh ve toa do gps thuc thi lam tn ha anh


  • 0

#17 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 992 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 24 July 2014 - 05:17 PM

Em cảm ơn anh Tuệ.

Cái trên chỉ tạo ra được Menu và Tool Bar. Cái này em cũng nghịch rùi, cơ mà ko biết cách add Toolbar từ CUI mới vào Toolbar của Cad. 

@@. Băn khoăn mãi anh ạ.


  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#18 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 992 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 26 July 2014 - 11:37 AM

HIện tại em đã gom cách thức để Add Menu và Tool Bar vào Autocad.

Tuy nhiên, nếu CUI có nhiều menu và nhiều Tool Bar thì chưa Load được hết ạ. 

Mong được các bác chỉ giáo cho em với ạ.

(defun C:LCUI ( / menu acadobj  menus  MnBar flag n PD1 )
(progn
	(setq menu  "C:\\Program Files\\AutoCAD 2007\\Template\\ISO-Vinx.cui")
	(setq acadobj (vlax-get-acad-object))
	(setq menus (vla-get-menuGroups acadobj))
  	(setq MnBar
	     (vla-get-MenuBar
	       (vlax-get-Acad-Object)
	     ) 
	)
	(setq flag nil)
	(vlax-for n menus
		(if (= (vla-get-name n) "ISO-Vinx")
			(setq flag T)
		)
		(terpri)
	)
	(if (= flag nil)
		(progn
			(vla-load menus menu)
			(setq PD1 (vla-item (vla-get-menus (vla-item menus "ISO-Vinx")) 0))
		  	(vla-InsertInMenubar PD1  (vla-get-Count MnBar))
		)
	)
  	(setq newMenuGroup (vla-Item (vla-get-MenuGroups (vlax-get-Acad-Object)) "ISO-Vinx"))
	(setq newToolBar (vla-item (vla-get-Toolbars newMenuGroup) 0))
	(vla-put-Visible newToolBar :vlax-true)
	(setq ltb nil lpm nil)
	(vlax-for item newToolBar (setq ltb (cons (vla-get-name item) ltb)))
	(vlax-for item PD1
	     (setq lpm (cons (list (vla-get-Index item) (vla-get-TagString item) (vla-get-Caption item) (vla-get-Macro item)) lpm))
	)
  	(setq lpm (vl-sort lpm '(lambda(x y) (car x) (car y))))
)
(princ)
)


  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#19 phamhuy1

phamhuy1

    biết vẽ rectang

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

Đã gửi 12 August 2014 - 04:08 PM

Em định làm cái menu riêng, anh thanhduan2407 có thể share cái file menu.mns để e làm mẫu :)


  • 0

#20 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 992 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 12 August 2014 - 04:31 PM

Mình up lên rồi mà


  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn