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

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

 

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

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

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!

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

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

Untitled.png

 

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

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

Untitled.png

 

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)

targetframework.jpg

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

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á

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

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

  • 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

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 đỡ.

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

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

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

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?

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

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

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

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)

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

a gia_bach cho e hỏi thêm về đường dẫn tương đối trong VB.net với ạ

ví dụ về cách dùng nó như thế nào?

e có file .chm trong Resources bây giờ muốn copy sang máy khác mà vẫn chạy được thì e phải dùng đường dẫn như thê nào

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

a gia_bach cho e hỏi thêm về đường dẫn tương đối trong VB.net với ạ

ví dụ về cách dùng nó như thế nào?

e có file .chm trong Resources bây giờ muốn copy sang máy khác mà vẫn chạy được thì e phải dùng đường dẫn như thê nào

Nếu dùng : Dim appPath As String = System.Reflection.Assembly.GetExecutingAssembly.Location()

 

thì copy các file trong Resources vào cùng thư mục với file *.dll hay *.exe là đượ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

các bác hướng dẫn cho em cách đổi từ chuỗi sang dạng số thập phân  và từ số thập phân sang dạng chuỗi với ạ. Em giờ mới đang bắt đầu ngâm cứu.

P/S: Thêm cả phần điền số thập phân với ạ.

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

các bác hướng dẫn cho em cách đổi từ chuỗi sang dạng số thập phân  và từ số thập phân sang dạng chuỗi với ạ. Em giờ mới đang bắt đầu ngâm cứu

1. đổi từ chuỗi sang số :

 - dùng Parse https://msdn.microsoft.com/en-us/library/system.int32.parse(v=vs.110).aspx

   hay https://msdn.microsoft.com/en-us/library/system.double.parse(v=vs.110).aspx

- TryParse https://msdn.microsoft.com/en-us/library/system.int32.tryparse(v=vs.110).aspx

   hay https://msdn.microsoft.com/en-us/library/system.double.tryparse(v=vs.110).aspx

 

2. đổi từ số sang chuỗi 

 - dùng Convert https://msdn.microsoft.com/en-us/library/system.convert(v=vs.110).aspx

  • 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ó code thế này

Public Class Class1
    Sub Add_Line(ByVal X1, ByVal Y1, ByVal X2, ByVal Y2)
        '' Get the current document and database
        Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
        Dim acCurDb As Database = acDoc.Database

        '' Start a transaction
        Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()

            '' Open the Block table for read
            Dim acBlkTbl As BlockTable
            acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, DatabaseServices.OpenMode.ForRead)

            '' Open the Block table record Model space for write
            Dim acBlkTblRec As BlockTableRecord
            acBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), DatabaseServices.OpenMode.ForWrite)

            '' Create a line that starts at 5,5 and ends at 12,3
            Dim acLine As Line = New Line(New Point3d(X1, Y1, 0), New Point3d(X2, Y2, 0))

            acLine.SetDatabaseDefaults()

            '' Add the new object to the block table record and the transaction
            acBlkTblRec.AppendEntity(acLine)
            acTrans.AddNewlyCreatedDBObject(acLine, True)

            '' Save the new object to the database
            acTrans.Commit()
        End Using
    End Sub
    <CommandMethod("caotrinh")> Public Sub Dien_cao_trinh()
        '' Get the current database and start the Transaction Manager
        Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
        Dim acCurDb As Database = acDoc.Database
        Dim P1 As PromptPointResult
        Dim P2 As PromptPointResult
        Dim pPtOpts As PromptPointOptions = New PromptPointOptions("")

        ''Nhap ty le ban ve
        Dim tlvOpts As PromptDoubleOptions = New PromptDoubleOptions(vbLf & "Nhập tỷ lệ khung bản vẽ: (1/...10, 20, 50, 100, ...): ")
        Dim tlbv As PromptDoubleResult = acDoc.Editor.GetDouble(tlvOpts)
        Dim TLV = tlbv.Value / 1000

        '' Prompt for the start point
        pPtOpts.Message = vbLf & "Pick điểm mốc: "
        P1 = acDoc.Editor.GetPoint(pPtOpts)

        '' Exit if the user presses ESC or cancels the command
        If P1.Status = PromptStatus.Cancel Then Exit Sub

        '' Nhap cao do moc
        Dim CDMOC_Opts As PromptDoubleOptions = New PromptDoubleOptions(vbLf & "Nhập cao độ mốc: ")
        Dim CDMOC As PromptDoubleResult = acDoc.Editor.GetDouble(CDMOC_Opts)

        While CDMOC.Value + P1.Value.Y <> 0
            '' Prompt for the end point
            pPtOpts.Message = vbLf & "Pick điểm điền cao độ: "
            pPtOpts.UseBasePoint = True
            pPtOpts.BasePoint = P1.Value
            P2 = acDoc.Editor.GetPoint(pPtOpts)

            If P2.Status = PromptStatus.Cancel Then Exit Sub

            '' Start a transaction
            Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()
                Dim acBlkTbl As BlockTable
                Dim acBlkTblRec As BlockTableRecord

                '' Open Model space for write
                acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, DatabaseServices.OpenMode.ForRead)
                acBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), DatabaseServices.OpenMode.ForWrite)

                Dim pKeyOpts As PromptKeywordOptions = New PromptKeywordOptions("")
                pKeyOpts.Message = vbLf & "Chọn hướng điền "
                pKeyOpts.Keywords.Add("Trai")
                pKeyOpts.Keywords.Add("Phai")
                pKeyOpts.AllowNone = False
                Dim pKeyRes As PromptResult = acDoc.Editor.GetKeywords(pKeyOpts)
                If pKeyRes.Status = PromptStatus.Cancel Then Exit Sub
                If pKeyRes.StringResult = "Phai" Then
                    '' Vẽ ký hiệu cao trình
                    Add_Line(P2.Value.X, P2.Value.Y, P2.Value.X + 3.6 * TLV, P2.Value.Y)
                    Add_Line(P2.Value.X + 3 * TLV, P2.Value.Y, P2.Value.X + 3 * TLV, P2.Value.Y + 7.5 * TLV)
                    Add_Line(P2.Value.X + 1.6 * TLV, P2.Value.Y + 3.8 * TLV, P2.Value.X + 10.6 * TLV, P2.Value.Y + 3.8 * TLV)
                    Add_Line(P2.Value.X + 3.0 * TLV, P2.Value.Y, P2.Value.X + 2.6 * TLV, P2.Value.Y + 2 * TLV)
                    Add_Line(P2.Value.X + 2.6 * TLV, P2.Value.Y + 2 * TLV, P2.Value.X + 3.4 * TLV, P2.Value.Y + 2 * TLV)
                    Add_Line(P2.Value.X + 3.4 * TLV, P2.Value.Y + 2 * TLV, P2.Value.X + 3 * TLV, P2.Value.Y)
                    '' Điền cao trình
                    Dim acText As DBText = New DBText()
                    acText.SetDatabaseDefaults()
                    acText.Position = New Point3d(P2.Value.X + 3.9 * TLV, P2.Value.Y + 4.1 * TLV, 0)
                    acText.Height = TLV * 2
                    acText.TextString = Format(CDMOC.Value - P1.Value.Y + P2.Value.Y, "00.00") ''ChuoiRes.StringResult
                    acBlkTblRec.AppendEntity(acText)
                    acTrans.AddNewlyCreatedDBObject(acText, True)
                    If P2.Status = PromptStatus.Cancel Then Exit Sub
                Else
                    '' Vẽ ký hiệu cao trình
                    Add_Line(P2.Value.X, P2.Value.Y, P2.Value.X - 3.6 * TLV, P2.Value.Y)
                    Add_Line(P2.Value.X - 3 * TLV, P2.Value.Y, P2.Value.X - 3 * TLV, P2.Value.Y + 7.5 * TLV)
                    Add_Line(P2.Value.X - 1.6 * TLV, P2.Value.Y + 3.8 * TLV, P2.Value.X - 10.6 * TLV, P2.Value.Y + 3.8 * TLV)
                    Add_Line(P2.Value.X - 3.0 * TLV, P2.Value.Y, P2.Value.X - 2.6 * TLV, P2.Value.Y + 2 * TLV)
                    Add_Line(P2.Value.X - 2.6 * TLV, P2.Value.Y + 2 * TLV, P2.Value.X - 3.4 * TLV, P2.Value.Y + 2 * TLV)
                    Add_Line(P2.Value.X - 3.4 * TLV, P2.Value.Y + 2 * TLV, P2.Value.X - 3 * TLV, P2.Value.Y)

                    '' Điền cao trình
                    Dim acText As DBText = New DBText()
                    acText.SetDatabaseDefaults()
                    acText.HorizontalMode = TextHorizontalMode.TextRight
                    acText.AlignmentPoint = New Point3d(P2.Value.X - 3.9 * TLV, P2.Value.Y + 4.1 * TLV, 0)
                    acText.Height = TLV * 2
                    acText.TextString = Format(CDMOC.Value - P1.Value.Y + P2.Value.Y, "00.00") 
                    acBlkTblRec.AppendEntity(acText)
                    acTrans.AddNewlyCreatedDBObject(acText, True)
                    If P2.Status = PromptStatus.Cancel Then Exit Sub
                End If
                '' Commit the changes and dispose of the transaction
                acTrans.Commit()
            End Using
        End While
    End Sub
End Class

Các bác thêm giúp em phần cao độ mốc nếu không nhập trực tiếp thì có thể lấy giá trị trên màn hình với. 

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

Bác gia_bach chỉ em cách lấy số và chữ từ màn hình với. Em cảm ơn bác!!!

Tham khảo :

    Public Shared caodoValue As Double
    <CommandMethod("InputDoubleOrGet")> Public Shared Sub InputDoubleOrGet()
        If caodoValue = New Double() Then
            caodoValue = 0
        End If
        Dim doc As Document = Application.DocumentManager.MdiActiveDocument
        Dim db As Database = doc.Database
        Dim ed As Editor = doc.Editor

        Dim pIntOpts As New PromptDoubleOptions("")
        pIntOpts.Message = vbLf & "Nhập cao độ: "
        pIntOpts.Keywords.Add("Pick point")
        pIntOpts.Keywords.Add("Selec Text")
        pIntOpts.DefaultValue = caodoValue
        pIntOpts.AllowNone = True

        ' Get the value entered by the user
        Dim pDouRes As PromptDoubleResult = ed.GetDouble(pIntOpts)
        If pDouRes.Status = PromptStatus.Keyword Then
            If pDouRes.StringResult.StartsWith("Pick") Then
                Dim insPt As New Point3d()
                Dim opt As New PromptPointOptions(vbLf & "Chọn điểm lấy cao độ:")
                opt.AllowNone = False
                Dim ppr As PromptPointResult = ed.GetPoint(opt)
                If ppr.Status = PromptStatus.OK Then
                    insPt = ppr.Value.TransformBy(ed.CurrentUserCoordinateSystem)
                    caodoValue = insPt.Y
                End If
            ElseIf pDouRes.StringResult.StartsWith("Selec") Then
                Dim peo As New PromptEntityOptions(vbLf & "Chọn Text cao độ : ")
                peo.SetRejectMessage("Đối tượng không phải là Text!")
                peo.AddAllowedClass(GetType(DBText), False)
                Dim per As PromptEntityResult = ed.GetEntity(peo)
                If per.Status = PromptStatus.OK Then
                    Using tr As Transaction = db.TransactionManager.StartTransaction()
                        Dim btr As BlockTableRecord = DirectCast(tr.GetObject(db.CurrentSpaceId, OpenMode.ForRead), BlockTableRecord)
                        Dim txt As DBText = DirectCast(tr.GetObject(per.ObjectId, OpenMode.ForRead), DBText)
                        Dim doubleVal As Double
                        If Double.TryParse(txt.TextString, doubleVal) Then
                            caodoValue = doubleVal
                        End If
                    End Using
                End If
            End If
        Else
            caodoValue = pDouRes.Value
        End If

        Application.ShowAlertDialog("Cao độ: " + caodoValue.ToString())
    End Sub

  • 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

×