明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 8178|回复: 11

【原创】VB封装含窗体的DLL,并在CASS中调用它

  [复制链接]
发表于 2008-11-7 11:30:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2008-11-8 8:52:11 编辑

以改变选择字的颜色这个简单的功能为例进行说明。这样,以后可以在VB中设置窗体,然后再VBA中调用它。因为VB中设置窗体和书写代码比在VBA中的窗体方便的多咯。一些控件在VBA中不能用,控件也不能编组。所以有此想法,将窗体和一些代码在VB环境下设好,然后打包为DLL,再在VBA中调用它。

1、在VB环境下:

创建一个ActiveX DLL工程,然后添加一个窗体和模块,这里模块的作用是用于定义全局变量。再在窗体上添加一个按钮与文本框。

在窗体(Form1)中输入如下代码:

Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
Private m_oApp As Object

 
Public Property Set Application(ByVal vNewValue As Object)
    Set m_oApp = vNewValue
End Property

Private Sub Command1_Click()

 
  acadDoc.Utility.GetEntity pTxtObj, pBasePt, vbNewLine & "请选择文字:"
 
  Text1.Text = pTxtObj.TextString
  '修改颜色
  With pTxtObj
    .TrueColor = pColor(0, 255, 0) '修改为绿色
  End With
 
  '刷新
  acadDoc.Application.Update
End Sub

Private Sub Form_Load()
    SetParent Me.hwnd, GetParent(GetParent(m_oApp.ActiveDocument.hwnd))
   
    '获得当前活动文档
    Set acadDoc = m_oApp.ActiveDocument
End Sub

'********************************
'名称:pColor函数
'作者:罗简单
'日期:2008-7-3
'功能:用户自定义颜色,颜色模式为RGB
'********************************
'定义绿色
Public Function pColor(ByRef pRed As Integer, ByRef pGreen As Integer, ByRef pBlue As Integer) As AcadAcCmColor
  Dim icorgreen As AcadAcCmColor
  Set icorgreen = m_oApp.GetInterfaceObject("AutoCAD.AcCmColor.16")
  Call icorgreen.SetRGB(pRed, pGreen, pBlue) '用户自定义颜色
 
  Set pColor = icorgreen
End Function

'文本框内容修改后,双击则将刚才文字的内容修改为文本框中的内容

Private Sub Text1_DblClick()
  pTxtObj.TextString = Text1.Text
  pTxtObj.Update
End Sub

在模块中输入如下代码:

Public acadDoc As AcadDocument         ' 当前活动文档对象
Public pTxtObj As AcadText
Public pBasePt As Variant

在类模块(ChangeTextColor)中输入如下代码:

Private m_oApp As Object

Public Property Set Application(ByVal vNewValue As Object)
    Set m_oApp = vNewValue
End Property

Public Sub ShowForm()
    Set Form1.Application = m_oApp
    Form1.Show
End Sub

最后进行打包,生成ChangeTextColor.dll

2、在CASS中的VBA环境下

引用刚才生成的DLL文件,然后新建过程,输入如下代码:

Sub tt()
  Dim myForm As New ChangeTextColor
  Set myForm.Application = Application
  myForm.ShowForm
End Sub

这个过程只是在CASS环境中把窗体调用出来了,其他操作的代码在窗体中,这样就可以将VB中的窗体和代码在VBA的环境下应用了。

3、程序的运行步骤如下:

运行VBA中的tt过程,调出了VB窗体,然后单击按钮,选择文字,文件颜色将变为绿色,并且文字内容出现在文本框内,修改文本框内的内容,然后双击文本框,这样CAD中的文字内容被修改为文本框中的内容。

发表于 2008-11-7 18:31:00 | 显示全部楼层
很好的想法.
发表于 2008-11-8 16:29:00 | 显示全部楼层
很好,支持了
发表于 2008-11-9 22:54:00 | 显示全部楼层
如果是用Lisp调用,该如何做?
 楼主| 发表于 2008-11-10 08:07:00 | 显示全部楼层
能够把DVB做成Lisp命令的,然后通过命令调用。
 楼主| 发表于 2008-11-19 21:15:00 | 显示全部楼层
非恶意灌水
发表于 2009-2-10 16:05:00 | 显示全部楼层

恩 不错

楼主是否能写一个通用DLL

让VBA可以调用任意VB窗体?

发表于 2009-2-12 13:57:00 | 显示全部楼层

好想法

严重支持

 楼主| 发表于 2009-2-12 16:45:00 | 显示全部楼层

7楼的朋友,你的想法非常好!

大家也可以修改一下代码看可否实现。

这段时间手头有项目忙,没时间去想。

发表于 2009-3-5 10:35:00 | 显示全部楼层
这个方法我也有,只是现在唯一让我想知道的就是怎么让VB突破CAD的版本问题.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 05:33 , Processed in 0.186955 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表