Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
ntluyen

Vẽ Line trên Form

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

Tôi đang cần vẽ một vài đoạn thẳng trên Form mà chưa biết cách thực hiện. Trong VB thì có hỗ trợ chỉ cần lệnh LINE

còn trong VBA thì tôi chưa tìm ra

Mong các bác chỉ giù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
Tôi đang cần vẽ một vài đoạn thẳng trên Form mà chưa biết cách thực hiện. Trong VB thì có hỗ trợ chỉ cần lệnh LINE

còn trong VBA thì tôi chưa tìm ra

Mong các bác chỉ giùm

 

Đáng tiếc là VBA không hỗ trợ Tool này, bạn thử tìm kiếm trong tham chiếu Reference xem sao?

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 chào các bác.

Em thấy trong VBA help đây là ví dụ về vẽ line. Nhưng cái này chỉ có vẽ cho 2 điểm và dừng lại. Em không biết cách vẽ liên tiếp từ điểm thứ nhất đến điểm chọn thứ n thì sử dụng hàm for như thế nào. Các ví dụ của Autodesk thì toàn vẽ line qua 2 điểm có tọa độ cho trước (..chán). Bác nào biết làm ơn giúp em với.

Public Sub Line()

Dim lineObj As AcadLine

Dim startPoint As Variant

Dim endPoint As Variant

' Vẽ line qua 2 điểm được pick trên màn hình AutoCAD

startPoint = ThisDrawing.Utility.GetPoint(, "Enter a first point: ")

endPoint = ThisDrawing.Utility.GetPoint(, "Enter a second point: ")

Set lineObj = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint)

End Sub

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
Đáng tiếc là VBA không hỗ trợ Tool này, bạn thử tìm kiếm trong tham chiếu Reference xem sao?

 

Thực ra ta có thể dùng mẹo được vì đoạn thẳng có thể thể hiện là hình chữ nhật với 1 cạnh rất hẹp. Do vậy có thể sử dụng đối tượng khác và cho heigh thật nhỏ 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

Ta có thể dùng hàm API của Windows cho form của VBA.

Dim dc As Long

Private Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, Optional lpPoint As Any = 0) As Long
Private Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long

Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long

Private Sub CommandButton1_Click()
 LineTo dc, TextBox1.Text, TextBox2.Text
End Sub

Private Sub UserForm_Initialize()
 dc = GetDC(FindWindow("", Me.Caption))
 MoveToEx dc, 0, 0, 0
End Sub

file nguồn: http://www.cadviet.com/upfiles/DrawLine.dvb

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 chào các bác.

Em thấy trong VBA help đây là ví dụ về vẽ line. Nhưng cái này chỉ có vẽ cho 2 điểm và dừng lại. Em không biết cách vẽ liên tiếp từ điểm thứ nhất đến điểm chọn thứ n thì sử dụng hàm for như thế nào. Các ví dụ của Autodesk thì toàn vẽ line qua 2 điểm có tọa độ cho trước (..chán). Bác nào biết làm ơn giúp em với.

Public Sub Line()

Dim lineObj As AcadLine

Dim startPoint As Variant

Dim endPoint As Variant

' Vẽ line qua 2 điểm được pick trên màn hình AutoCAD

startPoint = ThisDrawing.Utility.GetPoint(, "Enter a first point: ")

endPoint = ThisDrawing.Utility.GetPoint(, "Enter a second point: ")

Set lineObj = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint)

End Sub

 

Đoạn code này chắc thỏa mãn yêu cầu của bạn, chỉ thêm vòng lặp và phép gán:

 

Sub LineVBA()
Dim LineObj As AcadLine
Dim StartPoint As Variant
Dim EndPoint As Variant

On Error GoTo Thoat

StartPoint = ThisDrawing.Utility.GetPoint(, "Chon diem dau:")
Do
	EndPoint = ThisDrawing.Utility.GetPoint(StartPoint, "Chon dem tiep theo:")
	Set LineObj = ThisDrawing.ModelSpace.AddLine(StartPoint, EndPoint)
	StartPoint = EndPoint
Loop

Set LineObj = Nothing
Thoat:
End Sub

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ôi đang cần vẽ một vài đoạn thẳng trên Form mà chưa biết cách thực hiện. Trong VB thì có hỗ trợ chỉ cần lệnh LINE

còn trong VBA thì tôi chưa tìm ra

Mong các bác chỉ giùm

Bạn hãy thử đoạn Code này đi không biết có phải ý bạn hỏi là vậy không.

Đây là một đoạn code của 1 button trên Form1:

 

Private Sub CommandButton1_Click()

Form1.Hide

Dim LineObj As AcadLine

Dim StartPoint As Variant

Dim EndPoint As Variant

 

On Error GoTo Thoat

 

StartPoint = ThisDrawing.Utility.GetPoint(, "Chon diem dau:")

Do

EndPoint = ThisDrawing.Utility.GetPoint(StartPoint, "Chon dem tiep theo:")

Set LineObj = ThisDrawing.ModelSpace.AddLine(StartPoint, EndPoint)

StartPoint = EndPoint

Loop

 

Set LineObj = Nothing

Thoat:

Form1.Show

End Sub

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

Đăng nhập để thực hiện theo  

×