Đến nội dung


Hình ảnh
- - - - -

AutoCAD .NET


  • Please log in to reply
48 replies to this topic

#21 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 01 October 2011 - 12:45 AM

Các bác cho em hỏi 3 câu với, thời gian tới chuyển sang em này cho hiện đại ^^ :
1- Với 1 file DLL định nghĩa các command methods, khi cung cấp cho người dùng, làm cách nào để người ta có thể thay nó bằng lệnh khác ?
2- Autocad.Net cung cấp khả năng Reactor như VBA ? Và cho e xin 1 ví dụ cách gọi nó ?
3- 1 Private / Public function trong 1 file DLL (đã Load) có thể bị ghi đè bởi 1 Public Function khác cùng tên không ?
  • 0

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


#22 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 01 October 2011 - 08:25 AM

Các bác cho em hỏi 3 câu với, thời gian tới chuyển sang em này cho hiện đại ^^ :
1- Với 1 file DLL định nghĩa các command methods, khi cung cấp cho người dùng, làm cách nào để người ta có thể thay nó bằng lệnh khác ?
2- Autocad.Net cung cấp khả năng Reactor như VBA ? Và cho e xin 1 ví dụ cách gọi nó ?
3- 1 Private / Public function trong 1 file DLL (đã Load) có thể bị ghi đè bởi 1 Public Function khác cùng tên không ?

1.làm cách nào để thay nó bằng lệnh khác ?
- dùng LISP : tương tự như việc định nghĩa lại 1 lệnh CAD

2. Reactor : tương tự như VBA, .Net gọi nó là Event
- Vd từ Help :

Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices

<CommandMethod("AddDocEvent")> _
Public Sub AddDocEvent()
'' Get the current document
Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument

AddHandler acDoc.BeginDocumentClose, AddressOf docBeginDocClose
End Sub

<CommandMethod("RemoveDocEvent")> _
Public Sub RemoveDocEvent()
'' Get the current document
Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument

RemoveHandler acDoc.BeginDocumentClose, AddressOf docBeginDocClose
End Sub

Public Sub docBeginDocClose(ByVal senderObj As Object, _
ByVal docBegClsEvtArgs As DocumentBeginCloseEventArgs)

'' Display a message box prompting to continue closing the document
If System.Windows.Forms.MessageBox.Show( _
"The document is about to be closed." & _
vbLf & "Do you want to continue?", _
"Close Document", _
System.Windows.Forms.MessageBoxButtons.YesNo) = _
System.Windows.Forms.DialogResult.No Then
docBegClsEvtArgs.Veto()
End If
End If

3. Anh không chắc lắm (chưa có th/gian kiểm chứng) nhưng nếu để private khả năng ghi đè là rất khó ?!
Vì muốn làm được điều này phải biết rõ ràng cội nguồn gốc gác của nó (nhưng trong "lý lịch" nó để private làm sao mà tra cứu được)
  • 1

#23 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 01 October 2011 - 08:33 AM

1.làm cách nào để thay nó bằng lệnh khác ?
- dùng LISP : tương tự như việc định nghĩa lại 1 lệnh CAD


2. Reactor : tương tự như VBA, .Net gọi nó là Event
- Vd từ Help :


Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices

<CommandMethod("AddDocEvent")> _
Public Sub AddDocEvent()
'' Get the current document
Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument

AddHandler acDoc.BeginDocumentClose, AddressOf docBeginDocClose
End Sub

<CommandMethod("RemoveDocEvent")> _
Public Sub RemoveDocEvent()
'' Get the current document
Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument

RemoveHandler acDoc.BeginDocumentClose, AddressOf docBeginDocClose
End Sub

Public Sub docBeginDocClose(ByVal senderObj As Object, _
ByVal docBegClsEvtArgs As DocumentBeginCloseEventArgs)

'' Display a message box prompting to continue closing the document
If System.Windows.Forms.MessageBox.Show( _
"The document is about to be closed." & _
vbLf & "Do you want to continue?", _
"Close Document", _
System.Windows.Forms.MessageBoxButtons.YesNo) = _
System.Windows.Forms.DialogResult.No Then
docBegClsEvtArgs.Veto()
End If
End If

3. Anh không chắc lắm (chưa có th/gian kiểm chứng) nhưng khả năng ghi đè là rất khó ?!
Vì muốn làm được điều này phải biết rõ ràng cội nguồn gốc gác của nó (nhưng trong "lý lịch" nó để private làm sao mà tra cứu được)

Cảm ơn bác. Em sẽ xúc tiến dần 1 số lisp sang Net cho nó dân chơi ^^.
3. Vì có thể đọc được code của nó. E ví dụ ở đây là 1 số hàm check lience code dạng Boolean, kết quả trả về True or Flase.
Có khi nào "đè" được nó thành hàm luôn luôn trả True ?
  • 0

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


#24 anhcos

anhcos

    biết lệnh hatchedit

  • Advance Member
  • PipPipPipPip
  • 260 Bài viết
Điểm đánh giá: 170 (tàm tạm)

Đã gửi 01 October 2011 - 08:44 PM

3. Vì có thể đọc được code của nó. E ví dụ ở đây là 1 số hàm check lience code dạng Boolean, kết quả trả về True or Flase.
Có khi nào "đè" được nó thành hàm luôn luôn trả True ?


Nếu sử dụng private thì khó mà bị ghi đè, tuy nhiên phần kết quả trả về như bạn nói vẫn có thể thay đổi được bằng kỹ thuật patch (không cần biết đè hay không)
Nói chung, ứng dụng là để dùng và bảo mật là tránh mấy kẻ tò mò, còn gặp thợ thì cũng thua.
  • 0
Clear sky!

MF Rock collection.

#25 Jin Yong

Jin Yong

    biết lệnh group

  • Vip
  • PipPipPipPipPipPip
  • 498 Bài viết
Điểm đánh giá: 334 (khá)

Đã gửi 02 October 2011 - 10:03 AM

Có khi cần mở hẳn một topic bàn luận về vấn đề bảo vệ bản quyền! Thực sự rất bức xúc vì những gì mình nghĩ mãi mới được thì bị lấy đi một cách dễ dàng!
  • 0

Phát triển phần mềm thiết kế Kết cấu Việt Nam - http://www.ketcausoft.com


#26 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 02 October 2011 - 10:16 AM


Nếu sử dụng private thì khó mà bị ghi đè, tuy nhiên phần kết quả trả về như bạn nói vẫn có thể thay đổi được bằng kỹ thuật patch (không cần biết đè hay không)
Nói chung, ứng dụng là để dùng và bảo mật là tránh mấy kẻ tò mò, còn gặp thợ thì cũng thua.

Có khi cần mở hẳn một topic bàn luận về vấn đề bảo vệ bản quyền! Thực sự rất bức xúc vì những gì mình nghĩ mãi mới được thì bị lấy đi một cách dễ dàng!

Em hỏi câu trên cũng là vì thấy tình trạng NET bây giờ bị phá nhiều quá ^^ Thôi thì đúng là không tránh được kẻ gian, tốt nhất là im ỉm đi dùng 1 mình, bán thì bán đứt bản quyền luôn ^^
  • 0

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


#27 Detailing

Detailing

    biết lệnh imageclip

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

Đã gửi 03 October 2011 - 09:17 AM

Các bác cho em hỏi 3 câu với, thời gian tới chuyển sang em này cho hiện đại ^^ :
1- Với 1 file DLL định nghĩa các command methods, khi cung cấp cho người dùng, làm cách nào để người ta có thể thay nó bằng lệnh khác ?
2- Autocad.Net cung cấp khả năng Reactor như VBA ? Và cho e xin 1 ví dụ cách gọi nó ?
3- 1 Private / Public function trong 1 file DLL (đã Load) có thể bị ghi đè bởi 1 Public Function khác cùng tên không ?

1- Bạn gia_bach đã trả lời rồi
2- Mình bổ sung thêm: có 4 loại event ở cấp độ khác nhau: application, documents, documents collection và object tùy theo từng trường hợp mà sử dụng. Khi add event thì nên có chỗ remove nó ra.
3- câu này phải hiểu về cách mà .NET thực thi thì mới giải thích dc.
nhưng chung quy là trong AutoCAD khi 1 assembly đã dc load thì ko thể load 1 assembly khác cùng namespace vào dc (ko unload assembly đã load dc).
1 command method (public/ static) ko bị "đè" bởi lisp (chưa test với ARX) nhưng có thể bị đè bởi 1 command method khác của 1 namespace khác (cái nào load sau thì chạy cái đó). Cần phân biệt command method (gọi dc trong CAD) và public function (gọi trong chương trình)
.Net quản lý theo các cấp độ namespace -> class -> function (method/function trong VB.NET) có nghĩa là "tên" của 1 function a thuộc class A trong namespace NS trong .NET dc máy hiểu là NS.A.a()
Kiến thức hạn hẹp và vẫn còn đang học hỏi nhiều nhưng biết tới đâu nói tới đó hy vọng các bạn vào bổ sung và sửa chữa giúp.
Thân!
  • 1

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#28 thang605

thang605

    Chưa sử dụng CAD

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

Đã gửi 13 October 2011 - 02:54 PM

Em không biết Autocad.net. Vậy muốn nhờ mọi người giúp 1 file sau (em đoán là Autocad.net)
Bác sửa giúp em chữ bôi đen: 0.01 thành 0.001 với
Nếu được chỉ em cách sửa luôn thì tốt quá
File và hình minh họa đi kèm theo link sau:
http://www.mediafire...ig4ik1rw0py5bue

Nếu em post k đúng chỗ, mọi người bỏ qua nhé. thanks all
  • 0

#29 vuongocanh

vuongocanh

    biết vẽ circle

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

Đã gửi 12 March 2012 - 09:23 PM

Hình đã gửi

F5 thì không chạy được, lỗi như hình.

Nếu Debug>Start without debugging thì chạy được nhưng không debug được cũng không tắt autocad khi end debug
  • 0
vuongocanh@gmail.com

#30 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 13 March 2012 - 08:32 AM

Hình đã gửi

F5 thì không chạy được, lỗi như hình.

Nếu Debug>Start without debugging thì chạy được nhưng không debug được cũng không tắt autocad khi end debug

Vấn đề do tính tuơng thích giữa các phiên bản CAD và .NET Framework version :
- với AutoCAD 2012 : nên sử dụng Microsoft Visual Studio 2010 + Microsoft .NET Framework 4.0

Cách thiết lập như sau:
- Vào menu Tools -> [Tên chương trình] Properties
- Vào tab Application, mục Target Framework, chọn .Net version tương ứng với Cad (như hình dưới)
Hình đã gửi
  • 0

#31 vuongocanh

vuongocanh

    biết vẽ circle

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

Đã gửi 13 March 2012 - 09:17 AM

Cảm ơn gia_bach!

Cho mình hỏi thêm:
Mình đang dùng windows 7 64 bit. không thể kết nối tới Access data base.
Nguyên nhân la do : Microsoft.Jet.OleDb.4.0 provider is not registered on the local machine.
Mình cũng cài Access driver 2007 nhưng vẫn không được.
Không biết làm sao để khắc phục hoặc có giải pháp nào khác để kết nối tới access database không.
vì viết một chương trình mà không hổ trợ được 64bit thì bèo quá
  • 0
vuongocanh@gmail.com

#32 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 13 March 2012 - 10:24 AM

Cảm ơn gia_bach!

Cho mình hỏi thêm:
Mình đang dùng windows 7 64 bit. không thể kết nối tới Access data base.
Nguyên nhân la do : Microsoft.Jet.OleDb.4.0 provider is not registered on the local machine.
Mình cũng cài Access driver 2007 nhưng vẫn không được.
Không biết làm sao để khắc phục hoặc có giải pháp nào khác để kết nối tới access database không.
vì viết một chương trình mà không hổ trợ được 64bit thì bèo quá

vuongocanh chú ý là Cadviet là forum cho anh em sử dụng CAD là chính, do đó các vấn đề về lập trình cơ bản bạn nên tham khảo Google hay các forum chuyên về lập trình.

Đây là 1 kết quả từ Google search :

To resolve this issue open the project in Visual Studio then:
1. From the solution explorer right-click your project then click Properties
2. Click the Build tab
3. Change Platform target from: Any CPU to x86
4. Re-build your solution


Google Dịch
Để giải quyết vấn đề này mở Project trong Visual Studio sau đó:
1. Từ Solution explorer kích chuột phải vào Project của bạn sau đó chọn Properties
2. Nhấp vào tab Build
3. Thay đổi Platform: Any CPU to x86
4. Re-build lại Solution của bạn

  • 1

#33 Jin Yong

Jin Yong

    biết lệnh group

  • Vip
  • PipPipPipPipPipPip
  • 498 Bài viết
Điểm đánh giá: 334 (khá)

Đã gửi 13 March 2012 - 12:35 PM

Đen một điều là AutoCAD 2012 không dùng được file *dll hệ 32 bit
  • 0

Phát triển phần mềm thiết kế Kết cấu Việt Nam - http://www.ketcausoft.com


#34 tiendung89

tiendung89

    biết lệnh move

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

Đã gửi 27 August 2014 - 12:21 PM

các b trên diễn đàn cho mình hỏi cách load file .hcm trong vb.net với ạ( giống như file Help) 

mình tìm trên mạng rất nhiều mà cái thì lỗi, cái thì khó hiểu

trong VB có Help.Showhelp nhưng VB.net không hiểu vì sao mà cấu trúc này không dùng được.

rất mong mọi người giúp đỡ.


  • 0
Tôi không phải là đặc biệt, nhưng tôi là duy nhất ^^

#35 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 27 August 2014 - 02:40 PM

các b trên diễn đàn cho mình hỏi cách load file .hcm trong vb.net với ạ( giống như file Help) 

mình tìm trên mạng rất nhiều mà cái thì lỗi, cái thì khó hiểu

trong VB có Help.Showhelp nhưng VB.net không hiểu vì sao mà cấu trúc này không dùng được.

rất mong mọi người giúp đỡ.

Chắc ý bạn là file .chm ???

 

Có thể dùng Process.Start :

System.Diagnostics.Process.Start("Tên_file")

 

hoặc : Help.ShowHelp :

Help.ShowHelp(me, "Tên_file_help.chm", HelpNavigator.Find, "")


  • 0

#36 tiendung89

tiendung89

    biết lệnh move

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

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

mình viết đoạn code như này: nhưng nó cứ báo lỗi không tìm thấy file

"Private Sub Trogiup_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Trogiup.Click
        System.Diagnostics.Process.Start("htmlhelp.hcm")
    End Sub"

còn cách dùng Help.showhelp thì VB nhận nhưng VB.net lại không nhận, có phải mình đang khai báo thiếu biến gì ko?


  • 0
Tôi không phải là đặc biệt, nhưng tôi là duy nhất ^^

#37 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 28 August 2014 - 08:03 AM

mình viết đoạn code như này: nhưng nó cứ báo lỗi không tìm thấy file

"Private Sub Trogiup_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Trogiup.Click
        System.Diagnostics.Process.Start("htmlhelp.hcm")
    End Sub"

còn cách dùng Help.showhelp thì VB nhận nhưng VB.net lại không nhận, có phải mình đang khai báo thiếu biến gì ko?

Lỗi không tìm thấy file :

- nhắc lại : tên file mở rộng là .hcm hay .chm. Nếu là .hcm thì nhiều khả năng là sẽ không tìm được Application để open file

- nếu tên_file không có đường dẫn thì nó sẽ tìm kiếm trong Environment.CurrentDirectory Application.StartupPath hoặc Resources ...

tốt nhất là nên cung cấp đầy đủ đường dẫn + tên file.

vd : System.Diagnostics.Process.Start("e:\\acad_alr.chm")


  • 0

#38 tiendung89

tiendung89

    biết lệnh move

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

Đã gửi 28 August 2014 - 10:13 AM

thank a

đúng tên file là .chm a gia_bach ạ :)

file .chm này e để trong Resources mà


  • 0
Tôi không phải là đặc biệt, nhưng tôi là duy nhất ^^

#39 phuongdp92

phuongdp92

    Chưa sử dụng CAD

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

Đã gửi 28 August 2014 - 10:48 AM

Ai có link dowload autocard 2014 hok ạ


  • 0

#40 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 28 August 2014 - 12:13 PM

thank a

đúng tên file là .chm a gia_bach ạ :)

file .chm này e để trong Resources mà

Thử xem sao :

Dim filename As String = "htmlhelp.chm"

Dim appPath As String = System.Reflection.Assembly.GetExecutingAssembly.Location()

Dim fullname As String = Path.Combine(appPath , filename )

System.Diagnostics.Process.Start(fullname)

 

Dim filename As String = "htmlhelp.chm"
Dim appPath As String = Path.GetDirectoryName(System.Reflection.Assembly.GetAssembly(GetType(classname)).Location)
Dim fullname As String = Path.Combine(appPath, filename)
 
Dim filename As String = "htmlhelp.chm"
Dim appPath As String = Path.GetDirectoryName(System.Reflection.Assembly.GetAssembly(GetType(classname)).Location)
Dim fullname As String = Path.Combine(appPath, filename)
 
Dim filename As String = "htmlhelp.chm"
Dim appPath As String = Path.GetDirectoryName(System.Reflection.Assembly.GetAssembly(GetType(classname)).Location)
Dim fullname As String = Path.Combine(appPath, filename)
 
Dim filename As String = "htmlhelp.chm"
Dim appPath As String = Path.GetDirectoryName(System.Reflection.Assembly.GetAssembly(GetType(classname)).Location)
Dim fullname As String = Path.Combine(appPath, filename)
 
Dim filename As String = "htmlhelp.chm"
Dim appPath As String = Path.GetDirectoryName(System.Reflection.Assembly.GetAssembly(GetType(classname)).Location)
Dim fullname As String = Path.Combine(appPath, filename)
 
Dim filename As String = "htmlhelp.chm"
Dim appPath As String = Path.GetDirectoryName(System.Reflection.Assembly.GetAssembly(GetType(classname)).Location)
Dim fullname As String = Path.Combine(appPath, filename)

  • 0