VB 在ACADWIN中的使用
2008-02-23 06:56:05来源:互联网 阅读 ()
VB 在ACADWIN 的 应 用 文 件
因 为ACADWIN R12 不 支 持 如 PastLink 的 直 接DDE 方 法, 所 以 要 有 一 个 控 件 与VB 相 联 系, 以 进 行 数 据 传 递。 这 里 主 要 用 到 以 下 几 个 文 件:
1):DDEBAS.EXE 这 是VB/DDE 服 务 器 程 序, 必 须 在 运 行VB 应 用 程 序 前 调 入, 在 命 令 行 下 键 入:(XLOAD“DDEBAS”)。
2):ACADVB.DLL,VB 应 用 程 序 的 动 态 连 接 库。
3):GLOBAL.BAS,VB 应 用 程 序 的 全 程 变 量 的 定 义 文 件。
4):ADSFUNCS.BAS,VB 应 用 程 序 对ADS 库 标 准 函 数 的 调 用。
5):ADSFUNCS.FRM, 标 准ACADWIN 的 初 始VB 窗 口。
6):NEW.FRM, 用 于 新 建 标 准 初 始VB 窗 口。
后4 个 文 件 在ACADWIN/VB/NEW 目 录 下, 编 程 时 只 要 打 开NEWPROJ.MAK 就 都 有 了, 但NEW.FRM 可 以 不 要, 只 要 把 启 动 文 件 定 为ADSFUNC.FRM 即 可。
VB 在ACADWIN 的 使 用 方 法
为 了 实 现DDE 通 讯, 先 要 在ADSFUNCS.FRM 中 增 加 一 个 用 于 通 讯 的TEXT( 文 本 框) 控 件, 并 在 特 性 表 中 将 其NAME 命 名 为ACADTEXT,TEXT 的CAPTION 置 为 空 串( 减 少 窗 体 不 必 要 的 信 息),VISIBLE 特 性 呈 为TURE。 用linkapp 函 数 初 始 化 并 关 闭 连 接。
过 程 linkapp 代 码 如 下:
sub linkapp(link as contonl,appname as string,topic as string)
link.linkmode=0' 关 闭 通 讯
link.linktopic=appname “|” topic ' 置 通 讯 主 题
link.linkmode=2 ' 手 工 通 讯
end sub
增 加 一 个 过 程unlinkapp, 其 代 码 如 下:
sub unlinkapp(link as contonl)
link.linkmode=0' 关 闭 通 讯
end sub
在 窗 体 事 件 中, 增 加 如 下 代 码:
sub form_load()
LINKAPP ACADTEXT,“AUTOCAD.DDE”,“SYSTEM”
end sub
sub form_unload(cancel as integer)
UNLINKAPP ACADTEXT
end sub
如 画 圆“CIRCLE”, 先 在ADSFUNC.FRM 中 增 加 一 个 命 令 钮COMMAND1, 将 其CAPTION 置 为“C
IRCLE”, 在 子 过 程 中 增 加 以 下 代 码:
SUB COMMAND1_CLICK()
ACADTEXT.LINKEXECUTE “[^3^3 CIRCLE]”
END SUB
至 此 可 以 实 现 绘 图 命 令。 如 果 要 实 现 复 杂 的 功 能, 如 捕 捉 特 征 点, 获 得 特 性, 参 数 化 绘 图, 等 能 否 让 完 成 界 面 及 计 算 功 能, 把 参 数 传 给 一 个Lisp 程 序, 然 后 再 将 程 序 调 入 环 境 中 完 成 绘 图 呢 ? 答 案 是 肯 定 的 这 就 要 用 到“SendKey" 语 句。 该 语 句 功 能 是 向 具 有 焦 点 的 窗 口 发 送 字 符, 就 象 从 键 盘 中 键 入 一 样。 这 时 先 用 函 数FindACAD() 找 到ACADWIN 的 句 柄, 再 用AcadACTIVE 函 授 激 活ACADWIN, 使 其 具 有 焦 点, 这 时 就 可 以 用SendKey 了。
如 有 一 个Lisp 程 序YZ.LSP, 主 函 数 为“C:YZ()”, 可 先 在ADSFUNC.FRM 中 增 加 一 个 命 令 钮COMMAND2, 将 其CAPTION 置 为“YZ”, 在 子 过 程 中 增 加 以 下 代 码:
SUB COMMAND2_CLICK()
hwndAcad%=FindAcad()
AcadActivate(hwndAcad%)
SendKeys “{(}load ‘yz '{)}”, -1
SendKeys “{enter}”, -1
SendKeys “yz”, -1
END SUB
以 上 方 法 可 以 实 现 通 过VB 的 界 面 选 取 参 数, 进 行 计 算; 用Lisp 进 行 绘 图。 有 两 个 问 题 值 得 注 意: 一: 如 要 进 行 参 数 的 传 递, 可 以 先 用VB 写 临 时 数 据 文 件, 再 用Lisp 读 此 临 时 数 据 文 件。 二: 因 为 与 窗 体 布 置 不 一 定 使ACADWIN 和VB 应 用 程 序 两 者 同 时 可 见,Lisp 程 序 执 行 完 毕, 不 能 自 动 返 回 到VB 应 用 程 序, 这 时 可 以 通 过 调 用Windows API 函 数SetWindowPos 来 使 应 用 程 序 总 浮 在 最 上 面, 避 免 了 来 回 切 换 窗 口。 这 种 技 术 的 实 现 在 本 报 已 有 介 绍.
在ADSFUNCS.BAS 中 也 定 义 了 很 多ADS 函 数 可 供 调 用。 如ACADWIN\VB\ASVU 中 有 一 个 例 子ASVU.EXE, 就 是 应 用Ads_getvar 及Ads_setvar 函 数, 在SYSVARS.MAK 的intervai.bas 可 以 看 到。 但DDE 的 链 接 方 式 要 改 变, 在 启 动 窗 体 或 函 授 中 加 上:
DDE_TIMEOUT=-1 ' 等 待 一 个DDE 事 件
openDDE 'ADSFUNCS.BAS 中 一 个 函 数, 初 始 化DDE 链 接
上一篇: 如何充分扩充VB功能
下一篇: 巧用VISUAL BASIC的RND()函数
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash