Đến nội dung


Hình ảnh
- - - - -

Hiển thị các đối tượng(Layer, Block...) có trong bản vẽ ACad thông qua hộp thoại UserForm


  • Please log in to reply
11 replies to this topic

#1 ks_chang

ks_chang

    biết vẽ line

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

Đã gửi 17 September 2010 - 11:39 PM

Các bạn cho mình hỏi khi mình sử dụng hộp thoại UserForm, mình muốn thông qua Combobox để hiển thị tên các Block (hoặc Layer...) có trong bản vẽ đang thực hiện thì phải viết code như thế nào nhỉ?
(Đại khái nó hiện danh sách Name các block giống như khi dùng lệnh INSERT trong Cad). Cảm ơn rất nhiều và mong được giúp đỡ!
  • 0

#2 ks_chang

ks_chang

    biết vẽ line

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

Đã gửi 18 September 2010 - 02:52 PM

Mình đã mò ra rồi, các bạn xem coi còn cách nào nữa ko nhé:

Dim ent As AcadBlock
Dim i As Double
Dim n As Double
n = ThisDrawing.Blocks.Count
ReDim BlockNames(1 To n) As String
i = 0
For Each ent In ThisDrawing.Blocks
i = i + 1
BlockNames(i) = ent.Name
With ComboBox1
.AddItem BlockNames(i)
End With
Next

  • 0

#3 ks_chang

ks_chang

    biết vẽ line

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

Đã gửi 18 September 2010 - 02:55 PM

Mình đã mò ra rồi, các bạn xem coi còn cách nào nữa ko nhé?

Dim ent As AcadBlock
Dim i As Double
Dim n As Double
n = ThisDrawing.Blocks.Count
ReDim BlockNames(1 To n) As String
i = 0
For Each ent In ThisDrawing.Blocks
i = i + 1
BlockNames(i) = ent.Name
With ComboBox1
.AddItem BlockNames(i)
End With
Next

  • 0

#4 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 20 September 2010 - 09:52 AM

Mình đã mò ra rồi, các bạn xem coi còn cách nào nữa ko nhé?

Dim ent As AcadBlock
Dim i As Double
Dim n As Double
n = ThisDrawing.Blocks.Count
ReDim BlockNames(1 To n) As String
i = 0
For Each ent In ThisDrawing.Blocks
i = i + 1
BlockNames(i) = ent.Name
With ComboBox1
.AddItem BlockNames(i)
End With
Next

thử cách này xem :
    Dim blk As AcadBlock
For Each blk In ThisDrawing.Blocks
If Left(blk.Name, 1) <> "*" Then
ComboBox1.AddItem blk.Name
End If
Next

  • 0

#5 ks_chang

ks_chang

    biết vẽ line

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

Đã gửi 25 September 2010 - 10:37 PM

thử cách này xem :

    Dim blk As AcadBlock
For Each blk In ThisDrawing.Blocks
If Left(blk.Name, 1) <> "*" Then
ComboBox1.AddItem blk.Name
End If
Next

Cảm on gia_bach, code của bạn ngắn gọn quá, mình làm theo đc rồi :( . Ko biết có cách nào cho tên 1 block (bất kỳ) hiển thị trên ComboBox1 trước khi click vào mũi tên để chọn các block trong userForm ko nhỉ?
  • 0

#6 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 26 September 2010 - 09:04 AM

Cảm on gia_bach, code của bạn ngắn gọn quá, mình làm theo đc rồi :( . Ko biết có cách nào cho tên 1 block (bất kỳ) hiển thị trên ComboBox1 trước khi click vào mũi tên để chọn các block trong userForm ko nhỉ?

Hiển thị tên block đầu tiên trên ComboBox1 trước khi click vào mũi tên:

Dim blk As AcadBlock
For Each blk In ThisDrawing.Blocks
If Left(blk.Name, 1) <> "*" Then
ComboBox1.AddItem blk.Name
End If
Next

If ComboBox1.ListCount > 0 Then
ComboBox1.ListIndex = 0
End If

  • 0

#7 ks_chang

ks_chang

    biết vẽ line

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

Đã gửi 08 October 2010 - 10:49 AM

Thankyou gia_bach, cho mình hòi thêm một vấn đề nữa là:
Trong các hộp thoại Textbox, mình muốn hiển thị 1 giá trị mạc định ban đầu (giá trị này có thể edit) và màu của nó hiển thị trong hộp thoại userForm hơi nhạt 1 chút (màu số 8 chẳng hạn) thì mình phải viết code như thế nào nhỉ?
  • 0

#8 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 08 October 2010 - 12:20 PM

Thankyou gia_bach, cho mình hòi thêm một vấn đề nữa là:
Trong các hộp thoại Textbox, mình muốn hiển thị 1 giá trị mạc định ban đầu (giá trị này có thể edit) và màu của nó hiển thị trong hộp thoại userForm hơi nhạt 1 chút (màu số 8 chẳng hạn) thì mình phải viết code như thế nào nhỉ?

Đặt thuộc tính ForeColor cho Textbox.
VD :
- TextBox1.ForeColor = RGB(128, 128, 128) 'màu xám
- TextBox2.ForeColor = RGB(255, 0, 0) ' màu đỏ
  • 0

#9 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 995 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 13 October 2010 - 10:39 PM

Bác Gia_Bach ơi.
Bác có thể cho em phương thức xóa tất cả các line trong bản vẽ ko? Code VBA đó bác. Cảm ơn bác nhiều lắm
  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#10 nvson

nvson

    biết vẽ ellipse

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

Đã gửi 21 October 2010 - 11:42 AM

Bác Gia_Bach ơi.
Bác có thể cho em phương thức xóa tất cả các line trong bản vẽ ko? Code VBA đó bác. Cảm ơn bác nhiều lắm


Code xóa tất cả các LINE trong bản vẽ như sau:

Public Sub Line_Delete()

Dim ssLine As AcadSelectionSet
Dim ent As AcadEntity

Dim FilterType(0) As Integer
Dim FilterData(0) As Variant

Set ssLine = ThisDrawing.SelectionSets.Add("Line")
FilterType(0) = 0
FilterData(0) = "Line"
ssLine.Select acSelectionSetAll, , , FilterType, FilterData

For Each ent In ssLine
ent.Delete
Next

ssLine.Delete

End Sub

  • 0

#11 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 995 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 21 October 2010 - 02:01 PM

Code xóa tất cả các LINE trong bản vẽ như sau:

Public Sub Line_Delete()

Dim ssLine As AcadSelectionSet
Dim ent As AcadEntity

Dim FilterType(0) As Integer
Dim FilterData(0) As Variant

Set ssLine = ThisDrawing.SelectionSets.Add("Line")
FilterType(0) = 0
FilterData(0) = "Line"
ssLine.Select acSelectionSetAll, , , FilterType, FilterData

For Each ent In ssLine
ent.Delete
Next

ssLine.Delete

End Sub

Cảm ơn bác nhiều. Rất mong sau này bác giúp em chút ạ.
  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#12 huyhoangute

huyhoangute

    biết zoom

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

Đã gửi 01 December 2010 - 08:45 AM

cho em hỏi có cách nào hiển thị block của bản vẽ khác (bản vẽ không hiện hành) ko? ví dụ em đặt file chứa block trong ổ C:\block.dwg
thanks!
  • 0