乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 160|回复: 9

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

[复制链接]

15

主题

70

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
130
发表于 2008-11-7 11:30:00 | 显示全部楼层 |阅读模式
以改变选择字的颜色这个简单的功能为例进行说明。这样,以后可以在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(".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中的文字内容被修改为文本框中的内容。
回复

使用道具 举报

18

主题

150

帖子

11

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
220
发表于 2008-11-7 18:31:00 | 显示全部楼层
很好的想法.
回复

使用道具 举报

10

主题

134

帖子

8

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2008-11-8 16:29:00 | 显示全部楼层
很好,支持了
回复

使用道具 举报

14

主题

404

帖子

13

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
455
发表于 2008-11-9 22:54:00 | 显示全部楼层
如果是用Lisp调用,该如何做?
回复

使用道具 举报

15

主题

70

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
130
发表于 2008-11-10 08:07:00 | 显示全部楼层
能够把DVB做成Lisp命令的,然后通过命令调用。
回复

使用道具 举报

15

主题

70

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
130
发表于 2008-11-19 21:15:00 | 显示全部楼层
非恶意灌水
回复

使用道具 举报

71

主题

462

帖子

10

银币

中流砥柱

Rank: 25

铜币
748
发表于 2009-2-10 16:05:00 | 显示全部楼层
恩 不错
楼主是否能写一个通用DLL
让VBA可以调用任意VB窗体?
回复

使用道具 举报

34

主题

69

帖子

5

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
205
发表于 2009-2-12 13:57:00 | 显示全部楼层
好想法
严重支持
回复

使用道具 举报

15

主题

70

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
130
发表于 2009-2-12 16:45:00 | 显示全部楼层
7楼的朋友,你的想法非常好!
大家也可以修改一下代码看可否实现。
这段时间手头有项目忙,没时间去想。
回复

使用道具 举报

21

主题

97

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
181
发表于 2009-3-5 10:35:00 | 显示全部楼层
这个方法我也有,只是现在唯一让我想知道的就是怎么让VB突破CAD的版本问题.
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-8-8 05:58 , Processed in 2.151067 second(s), 73 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表