Đến nội dung


Hình ảnh
- - - - -

Tạo menu và toolbar


  • Please log in to reply
53 replies to this topic

#41 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 06 January 2012 - 10:26 AM

Trước hết xin cảm ơn bác Detailing, Tôi đã làm đúng như bác chỉ dẫn:
Trong AutoCAD nếu NETLOAD file DLL thủ công (dùng lệnh netload) thì menu được hiển thị NHƯNG nếu làm tự động (chạy qua REGISTER hoặc STARTUP) thì menu lại không hiển thị.
Nhờ bác chỉ giúp cách làm tự động.
Thanks,

Câu hỏi này ko khó đối với bạn nên mình sẽ hướng dẫn bạn cách tìm ra lỗi.Trước hết bạn add register để chương trình tự load sau đó bạn debug chương trình sẽ hiểu vì sao nó ko load dc. Nhớ đặt break point tại dòng Try
Nếu muốn biết lỗi sinh ra là gì bạn sửa phần Catch của code thành

Catch ex As Exception
Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog(ex.Message)
End Try

  • 0

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#42 nvson

nvson

    biết vẽ ellipse

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

Đã gửi 06 January 2012 - 04:20 PM

Hi Detailing,
Nếu chạy AutoCad trước, sau đó đánh lệnh NETLOAD thì tạo được menu (KHÔNG CÓ THÔNG BÁO LỖI)
Nếu Register vào Registry để cho AutoCAD tự động load thì hiện thông báo lỗi:
"Cannot create ActiveX component".
Nhờ bác chỉ giúp cách khắc phục.
Dưới đây là code mà tôi dùng để tạo menu:

Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.EditorInput
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.Geometry
Imports Microsoft.Win32
Imports System.Reflection
Imports System.IO
<Assembly: ExtensionApplication(GetType(AutoLoad))>
Public Class AutoLoad
Implements IExtensionApplication
Public Sub Initialize() Implements IExtensionApplication.Initialize
AddMenuGeoTools()
End Sub
Public Sub Terminate() Implements IExtensionApplication.Terminate
End Sub
Protected Overrides Sub Finalize()
MyBase.Finalize()
End Sub
<CommandMethod("AddmenuGeoTools")> _
Public Sub AddMenuGeoTools()
Dim Acad
Try
[color=#ff0000][b]Acad = GetObject(, "AutoCad.Application")[/b][/color]
Dim currMenuGroup As Object
currMenuGroup = Acad.MenuGroups.Item(0)
MsgBox("nvson")
' Create the new menu
Dim newMenu As Object
newMenu = currMenuGroup.Menus.Add("Geo Tools")
' Add the submenu
Dim FileSubMenu As Object

' Add a menu item to the new menu
Dim newMenuItem As Object
Dim openMacro As String
FileSubMenu = newMenu.AddSubMenu("", "Print...")
' Add a separator
newMenu.AddSeparator(newMenu.Count)
openMacro = Chr(3) & Chr(3) & Chr(95) & "Print_Boreholes" & Chr(32)
newMenuItem = FileSubMenu.AddMenuItem(newMenu.Count + 1, "In t&#7915; h&#236;nh tr&#7909; th&#7913; 1 &#273;&#7871;n th&#7913; i", openMacro)
openMacro = Chr(3) & Chr(3) & Chr(95) & "Print_Borehole" & Chr(32)
newMenuItem = FileSubMenu.AddMenuItem(newMenu.Count + 1, "In t&#7915; h&#236;nh tr&#7909; th&#7913; i &#273;&#7871;n th&#7913; j", openMacro)
openMacro = Chr(3) & Chr(3) & Chr(95) & "Print_Boreholes_Point" & Chr(32)
newMenuItem = FileSubMenu.AddMenuItem(newMenu.Count + 1, "Ch&#7885;n c&#225;c &#273;i&#7875;m b&#234;n trong h&#236;nh tr&#7909; c&#7847;n in", openMacro)
'Print Frame
openMacro = Chr(3) & Chr(3) & Chr(95) & "Print_Frame" & Chr(32)
newMenuItem = FileSubMenu.AddMenuItem(newMenu.Count + 1, "Theo &#273;&#7889;i t&#432;&#7907;ng KHUNG", openMacro)
'Print Array
openMacro = Chr(3) & Chr(3) & Chr(95) & "Print_Array" & Chr(32)
newMenuItem = FileSubMenu.AddMenuItem(newMenu.Count + 1, "Theo m&#7843;ng &#273;&#7889;i t&#432;&#7907;ng", openMacro)
'Boring logs
openMacro = Chr(3) & Chr(3) & Chr(95) & "nklk" & Chr(32)
newMenuItem = newMenu.AddMenuItem(newMenu.Count + 1, "H&#236;nh tr&#7909; l&#7895; khoan", openMacro)
'Mat cat DCCT
openMacro = Chr(3) & Chr(3) & Chr(95) & "mc" & Chr(32)
newMenuItem = newMenu.AddMenuItem(newMenu.Count + 1, "M&#7863;t c&#7855;t &#273;&#7883;a ch&#7845;t c&#244;ng tr&#236;nh", openMacro)
'Ly trinh
openMacro = Chr(3) & Chr(3) & Chr(95) & "lytrinh" & Chr(32)
newMenuItem = newMenu.AddMenuItem(newMenu.Count + 1, "L&#253; tr&#236;nh theo m&#7863;t c&#7855;t", openMacro)
'InsertLK (theo t&#7885;a &#273;&#7897; file Excel
openMacro = Chr(3) & Chr(3) & Chr(95) & "Insert_LK" & Chr(32)
newMenuItem = newMenu.AddMenuItem(newMenu.Count + 1, "Ch&#232;n v&#7883; tr&#237; l&#7895; khoan v&#224;o b&#236;nh &#273;&#7891; theo t&#7885;a &#273;&#7897;", openMacro)
'Ch&#232;n v&#7883; tr&#237; l&#7895; khoan theo l&#253; tr&#236;nh Km...
openMacro = Chr(3) & Chr(3) & Chr(95) & "station_LK" & Chr(32)
newMenuItem = newMenu.AddMenuItem(newMenu.Count + 1, "Ch&#232;n v&#7883; tr&#237; l&#7895; khoan v&#224;o b&#236;nh &#273;&#7891; theo l&#253; tr&#236;nh", openMacro)
' Add a separator
newMenu.AddSeparator(newMenu.Count)
'Register Product
openMacro = Chr(3) & Chr(3) & Chr(95) & "Registernvson" & Chr(32)
newMenuItem = newMenu.AddMenuItem(newMenu.Count + 1, "Register Product...", openMacro)
'Help About
openMacro = Chr(3) & Chr(3) & Chr(95) & "Helpnvson" & Chr(32)
newMenuItem = newMenu.AddMenuItem(newMenu.Count + 1, "Help About", openMacro)
' Display the menu on the menu bar
newMenu.InsertInMenuBar(Acad.MenuBar.Count + 1)
''Catch ex As Exception
''Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog(ex.Message)
Catch
MsgBox(Err.Description)
End Try
End Sub
<CommandMethod("RemoveMenuGeoTools")> _
Public Sub removeMenu()
'this macro removes the submenu created by the addMenuItem macro
Dim Acad
Try
Acad = GetObject(, "AutoCad.Application")
Dim oPopup As Object
''Dim oPopupItem As Object
For Each oPopup In Acad.MenuBar
If oPopup.TagString = "ID_mnuGeo Tools" Then
oPopup.RemoveFromMenuBar()
'oPopup.Delete
End If
'MsgBox oPopup.TagString
Next oPopup
Catch
End Try
End Sub
<CommandMethod("RegisterMyApp1")> _
Public Sub RegisterMyApp()
'' Get the AutoCAD Applications key
Dim sProdKey As String = HostApplicationServices.Current.RegistryProductRootKey
Dim sAppName As String = "GeoTools1"
Dim regAcadProdKey As RegistryKey = Registry.CurrentUser.OpenSubKey(sProdKey)
Dim regAcadAppKey As RegistryKey = regAcadProdKey.OpenSubKey("Applications", True)
'' Check to see if the "MyApp" key exists
Dim subKeys() As String = regAcadAppKey.GetSubKeyNames()
For Each sSubKey As String In subKeys
'' If the application is already registered, exit
If (sSubKey.Equals(sAppName)) Then
regAcadAppKey.Close()
Exit Sub
End If
Next
'' Get the location of this module
Dim sAssemblyPath As String = Assembly.GetExecutingAssembly().Location
'' Register the application
Dim regAppAddInKey As RegistryKey = regAcadAppKey.CreateSubKey(sAppName)
regAppAddInKey.SetValue("DESCRIPTION", sAppName, RegistryValueKind.String)
regAppAddInKey.SetValue("LOADCTRLS", 14, RegistryValueKind.DWord)
regAppAddInKey.SetValue("LOADER", sAssemblyPath, RegistryValueKind.String)
regAppAddInKey.SetValue("MANAGED", 1, RegistryValueKind.DWord)
regAcadAppKey.Close()
End Sub
<CommandMethod("UnregisterMyApp1")> _
Public Sub UnregisterMyApp()
'' Get the AutoCAD Applications key
Dim sProdKey As String = HostApplicationServices.Current.RegistryProductRootKey
Dim sAppName As String = "GeoTools1"
Dim regAcadProdKey As RegistryKey = Registry.CurrentUser.OpenSubKey(sProdKey)
Dim regAcadAppKey As RegistryKey = regAcadProdKey.OpenSubKey("Applications", True)
'' Delete the key for the application
regAcadAppKey.DeleteSubKeyTree(sAppName)
regAcadAppKey.Close()
End Sub

End Class

Thanks,
  • 0

#43 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 09 January 2012 - 01:09 PM

Hi Detailing,
Nếu chạy AutoCad trước, sau đó đánh lệnh NETLOAD thì tạo được menu (KHÔNG CÓ THÔNG BÁO LỖI)
Nếu Register vào Registry để cho AutoCAD tự động load thì hiện thông báo lỗi:
"Cannot create ActiveX component".
Nhờ bác chỉ giúp cách khắc phục.
Dưới đây là code mà tôi dùng để tạo menu:


<CommandMethod("RegisterMyApp1")> _
Public Sub RegisterMyApp()
'' Get the AutoCAD Applications key
Dim sProdKey As String = HostApplicationServices.Current.RegistryProductRootKey
Dim sAppName As String = "GeoTools1"
Dim regAcadProdKey As RegistryKey = Registry.CurrentUser.OpenSubKey(sProdKey)
Dim regAcadAppKey As RegistryKey = regAcadProdKey.OpenSubKey("Applications", True)
'' Check to see if the "MyApp" key exists
Dim subKeys() As String = regAcadAppKey.GetSubKeyNames()
For Each sSubKey As String In subKeys
'' If the application is already registered, exit
If (sSubKey.Equals(sAppName)) Then
regAcadAppKey.Close()
Exit Sub
End If
Next
'' Get the location of this module
[color=#ff0000] Dim sAssemblyPath As String = Assembly.GetExecutingAssembly().Location[/color]
'' Register the application
Dim regAppAddInKey As RegistryKey = regAcadAppKey.CreateSubKey(sAppName)
regAppAddInKey.SetValue("DESCRIPTION", sAppName, RegistryValueKind.String)
regAppAddInKey.SetValue("LOADCTRLS", 14, RegistryValueKind.DWord)
regAppAddInKey.SetValue("LOADER", [color=#ff0000]sAssemblyPath[/color], RegistryValueKind.String)
regAppAddInKey.SetValue("MANAGED", 1, RegistryValueKind.DWord)
regAcadAppKey.Close()
End Sub

Chào bạn,
Bạn định nghĩa event CommandEnded rồi gọi sub AddMenuGeoTools trong đó.
p/s: Bạn nhớ lọc Global command name là COMMANDLINE hay RIBBON hay REGEN, ... và tạo và lưu Flag isLoaded để nó khỏi load tiếp khi đã có rồi.
Chú ý: Nếu user ko xài command palette và ribbon thì load ko dc menu vào. Để tránh trường hợp đó bạn dùng lisp gọi hàm lên bằng command regen
Đó là 1 cách, mình nghĩ sẽ còn nhiều cách khác. Bạn kiểm tra lại biến sAssemblyPath trong sub RegisterMyApp
Good luck!
  • 0

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#44 duy267

duy267

    biết vẽ point

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

Đã gửi 06 March 2013 - 09:49 PM

Mình thì không biết VB.net hay C#
Mình thấy Icon tạo bằng lệnh Cui của CAD đâu có lằng nhằng chi đâu bạn?
Bạn có thể tìm kiếm trên diễn đàn CADVIET. Có 1 số bài nói về cái này rồi.

 

Anh Tuệ, anh Duy và các anh em có thể hướng dẫn cách tạo các icon không vì em cũng thử dùng lệnh CUI mà không thể tạo các icon cho riêng mình. Xin cảm ơn.


  • 0

#45 cancer_xd

cancer_xd

    biết lệnh fillet

  • Members
  • PipPipPipPip
  • 207 Bài viết
Điểm đánh giá: 45 (tàm tạm)

Đã gửi 07 March 2013 - 09:12 AM

icon thì bạn tìm trên mạng , không thì bạn dùng paint hoặc photoshop tạo cũng được mà :)


  • 0

#46 duy267

duy267

    biết vẽ point

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

Đã gửi 31 March 2013 - 12:48 AM


tccduy.jpg

 

 

Em đã tạo được Icon bằng phần mểm Icon Craft nhưng hình ảnh bị bể, không sắc nét(kích thước 16x16). Anh Duy tạo bằng phần mềm gì mà thấy Icon đẹp quá có thể cho em biết được không. Cảm ơn anh.


  • 0

#47 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 31 March 2013 - 06:51 AM

Em đã tạo được Icon bằng phần mểm Icon Craft nhưng hình ảnh bị bể, không sắc nét(kích thước 16x16). Anh Duy tạo bằng phần mềm gì mà thấy Icon đẹp quá có thể cho em biết được không. Cảm ơn anh.

 

Mình thì tạo các Image bằng phần mềm AutoCAD (Các menu chứa image trong bài #4 của mình trong topic này)

Lệnh cui có chức năng tạo Image đó


  • 0

#48 xhung0602

xhung0602

    Chưa sử dụng CAD

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

Đã gửi 11 April 2013 - 09:48 AM

Tue_NV cho tớ dùng thử em nó được không?  :)


  • 0

#49 duy267

duy267

    biết vẽ point

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

Đã gửi 24 April 2013 - 11:29 PM

Thì cụ thể là cứ tạo Toolbar với các icon vẽ vời ok hết đi (theo mình thì lạo nó khác acad để ko ảnh hưởng tới anh cad gốc nhà ta), khi copy đi máy khác thì ko cần copy các icontheo mà chỉ cần copy *.mnr (file này được tự động tạo ra) đi là có icon thôi.

 

Em đã tạo Menu và xuất ra được File *.Cui và File*. mnr nhưng khi mang 2 File đó sang máy khác thì không còn nhận ra các Icon nửa, các icon biến thành dấu hỏi. Em đã làm sai bước nào? Anh em nào biết xin chỉ giúp. Cảm ơn nhiều.


  • 0

#50 nguyenbd1

nguyenbd1

    biết lệnh text

  • Members
  • PipPipPipPip
  • 276 Bài viết
Điểm đánh giá: 13 (tàm tạm)

Đã gửi 27 December 2013 - 01:11 PM

có cách nào ko copy cac file .bmp vào trong file setup cad mà vẫn load lên dc ko. y em nój ở đây là cáj toobar bác duy vjết đó
  • 0

#51 nguyenbd1

nguyenbd1

    biết lệnh text

  • Members
  • PipPipPipPip
  • 276 Bài viết
Điểm đánh giá: 13 (tàm tạm)

Đã gửi 07 August 2014 - 07:21 AM

cho e hỏi cách nào tạo icon rõ a. e tao rồi khi hien thi tren toobar ko thay j
  • 0

#52 tranwebmaster

tranwebmaster

    Chưa sử dụng CAD

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

Đã gửi 07 August 2014 - 01:14 PM

Bác hướng dẫn chi tiết em được ko? Em ko biết cách tạo file .mnu kiểu gì.

Có hướng dẫn trên kìa :( đọc dùm chút :(


  • 0

Chuyên tư vấn và tuyển sinh du học Nhật Bản tại Việt Nam năm 2015. Mercedes Trường Chinh, Xe dap tap, máy chạy bộ điện, may tap the duc được cập nhật bởi diễn đàn rao vặtcông ty SEO.


#53 nguyenbd1

nguyenbd1

    biết lệnh text

  • Members
  • PipPipPipPip
  • 276 Bài viết
Điểm đánh giá: 13 (tàm tạm)

Đã gửi 09 August 2014 - 08:30 PM

http://www.cadviet.c...69_new_folder.r  AI RÀNH VỀ ICON TRÊN TOOBAR, KIỂM TRA DÙM EM VỚI EM LÀM 1 CÁI .MNU VÀ 1 SỐ CÁI ICON MÀ CHỈ 1 SỐ ICON HIỆN TRÊN TOOBAR, CÒN 1 SỐ KHONG HIỆN. CẢM ƠN ANH EM TRƯỚC


  • 0

#54 TV_Anh

TV_Anh

    biết vẽ line

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

Đã gửi 02 March 2016 - 09:52 AM

Mình thì không biết VB.net hay C#
Mình thấy Icon tạo bằng lệnh Cui của CAD đâu có lằng nhằng chi đâu bạn?
Bạn có thể tìm kiếm trên diễn đàn CADVIET. Có 1 số bài nói về cái này rồi.
Đây là menu và Toolbar:
toolbarvamenu_1.jpgCHÀO

CHÀO BÁC @

 

Thật sự là em rất cố gắng tự tìm hiểu, và làm theo hướng dẫn trên diễn đàn, nhưng em là một kẻ chậm tiêu, nên không tài nào hiểu hết.

em cũng biết rõ về nội quy ảu diễn đàn và chủ đề này thì cũng đã có nhiều người post rồi,

Nay em dùng sự ngu muội của mình, thành khẩn mong bác và mọi người, làm một cái video ngắn nói về nội dung và các bước tạo một cái menu bằng lệnh CUI một cách chi tiết, để em và một số bạn khác có nhu cầu học hỏi nhưng chưa hiểu thì có cơ hội được thông não.

hoặc bác nào tốt bụng có thể chỉ em thông qua Skype : vjettahnhdat  >>>> Tran Viet Anh

sdt :0938969790

email : vietanh.tran8@gmail.com

 

Xin mọi người giúp đỡ !


  • 0