明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 11097|回复: 21

[函数] 最佳的DCL代替方案,轻松实现VBA移植至Vlisp,动态创建、调用VBA窗体通用函数

  [复制链接]
发表于 2009-10-16 12:46 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2009-10-19 10:07:58 编辑

Vlisp动态创建、调用VBA窗体通用函数:c:ysx-make-vbaform ,轻松实现VBA移植至Vlisp

发表于 2018-6-2 10:19 | 显示全部楼层

B

由于CAD的版本更新太夸张。ARX的编译版本太多,所以我一直用VB的DLL来实现。效果很好。不用频繁的更新软件了。
回复 支持 1 反对 0

使用道具 举报

发表于 2018-6-2 17:14 来自手机 | 显示全部楼层
NetBee 发表于 2018-6-2 10:19
由于CAD的版本更新太夸张。ARX的编译版本太多,所以我一直用VB的DLL来实现。效果很好。不用频繁的更新软件 ...

前辈,vb是指vb.net还是指vb6调用DLL用于64位CAD?如果vb6可实现,老师能否给个链接学习学习下,谢谢!
 楼主| 发表于 2022-7-11 12:02 | 显示全部楼层
NetBee 发表于 2018-6-2 10:19
由于CAD的版本更新太夸张。ARX的编译版本太多,所以我一直用VB的DLL来实现。效果很好。不用频繁的更新软件 ...

这是个好办法,但对于64位,好像要用到exe,不能用dll
 楼主| 发表于 2009-10-16 12:46 | 显示全部楼层

格式:(c:ysx-make-vbaform  VbaList)

VbaList--1(list {窗体(组件)列表} 2{窗体和组件属性列表} 3{预留} 4{自定义函数/事件代码列表} 5{API声明列表+Const常数列表+DIM/Private声明列表}

例子:

(defun c:yf()
  (c:ysx-make-vbaform
    (list (list "Form" "ChinaForm"
                (list "Image" "Image1")
                (list "CommandButton" "CommandButton1")
          );窗体组件列表
          (list (list "ChinaForm" "caption" "悬浮窗体" "width" 510 "height" 409)
                (list "Image1" "left" 0 "top" 0 "width" 506 "height" 383 "AutoSize" 1)
                (list "CommandButton1" "left" 260 "top" 250 "width" 75 "height" 20 "caption" "绘制直线")
          ) ;窗体和组件属性列表
          nil
          (list
                (list "Private Sub CommandButton1_Click()" "ThisDrawing.SendCommand \"line \"" "End Sub")
                (list "Private Sub UserForm_Activate()" "ChinaForm.Left = 0" "ChinaForm.top = 80" "End Sub")
                (list "Private Sub Image1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)"
                      "If ChinaForm.Left <> 0 Then" "ChinaForm.Left = 0" "ChinaForm.Top = 80" "End If" "End Sub"
                )
                (list "Private Sub Image1_Click()" "If ChinaForm.Left =0 Then" "ChinaForm.Left = -507" "ChinaForm.top = 80" "End If" "End Sub")
          )
    )
  )
  (princ)
)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2009-10-16 12:58 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2009-10-16 13:05 | 显示全部楼层

(defun c:yf()
  (c:ysx-make-vbaform
    (list (list "Form" "ChinaForm"
                (list "Frame" "Frame1"
                      (list "TextBox" "text1")
                      (list "Frame" "Frame2"
                            (list "TextBox" "text3")
                      )
                )
                (list "TextBox" "text2")
          );窗体组件列表
          (list (list "ChinaForm" "caption" "悬浮窗体" "width" 110 "height" 200 "top" 110 "left" 1300)
                (list "Frame1" "left" 4 "top" 4 "width" 98 "caption" "选项")
                (list "text1" "width" 85 "left" 4 "top" 4 "text" "输入内容")
                (list "Frame2" "width" 88 "height" 100 "left" 4 "top" 30 "caption" "中了")
                (list "text3" "left" 4 "top" 5)
                (list "text2" "left" 4 "top" 220)
          ) ;窗体和组件属性列表
          nil
          (list
                (list "Private Sub text3_Change()" "text3.Text = Time$" "End Sub")
                (list "Private Sub UserForm_Activate()" "ChinaForm.Left = 0" "ChinaForm.top = 60" "End Sub")
                (list "Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)"
                      "If ChinaForm.Left <> 0 Then" "ChinaForm.Left = 0" "ChinaForm.Top = 60" "End If" "End Sub"
                )
                (list "Private Sub UserForm_Click()" "If ChinaForm.Left =0 Then" "ChinaForm.Left = -106" "ChinaForm.top = 60" "End If" "End Sub")
          )
    )
  )
  (princ)
)

 

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2009-10-16 16:03 | 显示全部楼层

把dvb文件用Lisp以二进制文本方式储存

临时写出去转为dvb格式再倒入CAD

就可以实现把图片等信息都弄进Lisp里面!

 楼主| 发表于 2009-10-16 16:32 | 显示全部楼层
nonsmall发表于2009-10-16 16:03:00把dvb文件用Lisp以二进制文本方式储存临时写出去转为dvb格式再倒入CAD就可以实现把图片等信息都弄进Lisp里面!

这样复杂化了,把图片保存在文件夹中,需要时才加载,动态化

 

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2009-10-19 10:00 | 显示全部楼层

即时动态获取输入数据

 

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
明经网友  发表于 2009-10-19 11:54

如何不会vba的,也不调用这个函数。

如果会vba的搞这么复杂还不如直接做个dvb文件得了(可视化)

总结,想法是非常不错的,实用性没有!

回复 支持 反对

使用道具

发表于 2009-10-19 12:06 | 显示全部楼层

如果不会vba也不会调用这个函数。

如何会vba也不会这么复杂的去这么做,还不如直接做个dvb文件得了(可视化)

总结:思路还不错,实用性不强。

 楼主| 发表于 2009-10-19 15:58 | 显示全部楼层

如果不会VBA,那就谈不上VBA移植的问题,讨论这个问题就是以有一定VBA的基础知识为前提的

做个dvb文件(可视化),就我认为,实在也不是那么简单,做好工程后保存,手动或编个VLisp程序调用,也不怎么方便。

Vlisp的优缺点是什么呢?优点:表处理,开发资源和源码,网上多的是,使用方便;缺点:DCL的方便性实在不怎么样;

VBA的特点呢?优点:界面处理绝对是它的一大特色;缺点:相对于Vlisp,VBA方便性要差一些;

如果将两者结合一起,取长补短,于是有了这个函数的产生。

在使用方面,我认为可以这样:

1、Vlisp水平要好一点,VBA水平一般的,不妨着重使用它调用窗体功能,相对于DCL,VBA窗体处理要方便,配合VBA的触发事件,结合使用;

一般来说,掌握好控件的left、top、width、height四个属性就基本OK了

3、Vlisp和VBA水平相对平衡的,最好结合使用,取长补短;

3、VBA高手的,Vlisp不咋的,建议你还是用回VBA吧

每个人的情况不同,对事情的看法也不同,所以只能是见仁见智了

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

本版积分规则

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

GMT+8, 2024-4-25 04:43 , Processed in 1.169145 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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