乐筑天下

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

请教怎么用VBA实现在cad图纸中嵌入图片(不是附着,源文件删除也能正常显示的那种)

[复制链接]

2

主题

6

帖子

1

银币

初来乍到

Rank: 1

铜币
14
发表于 2018-7-31 23:15:00 | 显示全部楼层 |阅读模式
在cad图纸中插入图片,用AddRaster方法只能插入链接(代码见附件),当源文件删除或位置发生变化时,图片就不显示了,只显示链接文字;
我想将图片嵌入到cad图纸中,即使源文件删除或位置发生了变化,cad图纸中的图片扔能正常显示,不知这个VBA代码应该怎么写;
请高手们指教,帮忙写一下这个VBA代码,不胜感激!

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

13

主题

59

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
111
发表于 2018-9-30 18:48:00 | 显示全部楼层
直接设置剪贴板的数据为图形,就不会提示了
代码如下:
Dim objPic As Picture
Dim File As String
'设置图片文件路径
File = "D:\test.jpg"
'加载图片
Set objPic = LoadPicture(File)
'清空剪贴板
Clipboard.Clear
'设置剪贴板数据
Clipboard.SetData objPic, 2
'在CAD文档中粘贴
'...............
'代码结束
VB参考手册中关于Clipboard.SetData的解释
作用:用以使用指定的图形格式将图片放到 Clipboard 对象上。
语法:object.SetData data, format
data 必需的。被放置到 Clipboard 对象中的图形。
format  可选的。一个常数或数值,按照下列“设置值”中的描述,指定 Visual Basic 识别的 Clipboard 对象格式。如果省略 format,则 SetData 自动决定图形格式。
用于 format 的设置值有:
常数:vbCFBitmap, 值=2 含义:位图(.bmp 文件)
Clipboard.SetData objPic, 2,2的含义就是format的设置值
也就是说在CAD中保存的图象是BMP格式,不是压缩的,即使你的源图是很小体积JPG格式,也会使文件体积猛增。
插入图片,还可以使用相对路径,也就是图片文件与DWG文件在同一目录,这样就可以避免分发、复制文件的时候丢失图片带来的影响,而且文件体积也不会增大。
插入图片可以使用AddRaster方法,详细解释与例子请参阅乐筑天下的CAD编程参考手册。有了这个手册与CAD自带的VBA开发手册,基本不用看别的书了。如果有不知道的,书上也没有,比如这个问题。
回复

使用道具 举报

2

主题

6

帖子

1

银币

初来乍到

Rank: 1

铜币
14
发表于 2018-8-1 10:14:00 | 显示全部楼层

感谢您的关注,想问用OLE对象怎么用VBA实现?能麻烦您给写个代码吗?
我现在是先用代码把图片放到Excel中,然后复制到粘贴板,再用下面的代码可以粘贴到CAD中:
InsertPnt(0) = 4699.1082
InsertPnt(1) = 9911.5235
lspPnt = InsertPnt(0) & "," & InsertPnt(1)
ThisDrawing.SendCommand ("_pasteclip" & vbCr & lspPnt & vbCr)
这样就会跳出“OLE文字大小”的对话框,用下面的代码模拟ESC键:
Call keybd_event(27, 1, 0, 0)
Call keybd_event(27, 0, KEYEVENTF_KEYUP, 0)
也没有反应,这样就造成了程序的中断,我不知道怎么处理了,我不想让程序中断,这个能有什么办法处理吗?
回复

使用道具 举报

2

主题

6

帖子

1

银币

初来乍到

Rank: 1

铜币
14
发表于 2018-8-3 17:00:00 | 显示全部楼层

用截图工具或PrtSC、Alt+PrtSC方法得到的图片,粘贴到cad后,源图片路径变了仍然可以显示;也不跳出对话框;
用windows 自带的画图软件中打开复制或从Excel或word等工具中复制的图片,粘贴到cad后,源图片路径变了仍然可以显示,但会跳出对话框;
直接拷贝文件(选中文件,按Ctrl+c)的方法虽然不显示对话框,但修改原图片路径,cad中就只显示路径文字了;这个应该是栅格文件,跟AddRaster方法插入的图片一样。
你用哪些方法插入,不显示对话框?
回复

使用道具 举报

16

主题

129

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
196
发表于 2018-8-1 08:57:00 | 显示全部楼层
用OLE对象不可以吗?
回复

使用道具 举报

16

主题

129

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
196
发表于 2018-8-1 10:21:00 | 显示全部楼层

这一玦的代码我也没写过,不是很了解,不能给出代码。
回复

使用道具 举报

16

主题

129

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
196
发表于 2018-8-1 10:22:00 | 显示全部楼层

等版主给你解决吧,我也顺便学习下,呵呵!
回复

使用道具 举报

16

主题

129

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
196
发表于 2018-8-1 10:25:00 | 显示全部楼层

你的代码我也不知道对不对,只是感觉尽量不要使用SENDCOMMAND,这不是正常VBA方法,是一种变相的LISP程序,时常会出现一些不必要的对话框,也可能造成无法确定程序是否完毕的困扰。
回复

使用道具 举报

2

主题

6

帖子

1

银币

初来乍到

Rank: 1

铜币
14
发表于 2018-8-1 11:18:00 | 显示全部楼层

是的,用SendCommand的确不好控制,无法得知命令的运行进度,要是加入循环插入多张图片的话,有时候贴不好,不稳定;而且这种方法只能控制插入点,无法精确控制插入的图片的大小;
我一直想找一个类似AddRaster那样的方法,能精确控制插入点和比例,而且也不会出现对话框。
还期盼各位大神们能出手,多多指教,感激不尽!
回复

使用道具 举报

29

主题

743

帖子

11

银币

中流砥柱

Rank: 25

铜币
858
发表于 2018-8-1 23:21:00 | 显示全部楼层
用qq截图,然后粘贴。。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 03:51 , Processed in 0.579466 second(s), 77 queries .

© 2020-2025 乐筑天下

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