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

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

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

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.com/upfiles/3/36665_load_cui_1.rar

Cảm ơn các bác sẽ xem và đóng gó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

 

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à !

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

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

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

 

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?

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

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?

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

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

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

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ỉ??

  • 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

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

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

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

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

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

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

Bạn thử thêm 2 dòng này:    (menucmd "P14=+ISO-VINX.pop1")

(menucmd "P15=+ISO-VINX.pop2")         sau dòng (vla-load menus menu)

  • 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

×