请教怎么用VBA实现在cad图纸中嵌入图片(不是附着,源文件删除也能正常显示的那种)
本帖最后由 mr0810 于 2018-7-31 23:40 编辑在cad图纸中插入图片,用AddRaster方法只能插入链接(代码见附件),当源文件删除或位置发生变化时,图片就不显示了,只显示链接文字;
我想将图片嵌入到cad图纸中,即使源文件删除或位置发生了变化,cad图纸中的图片扔能正常显示,不知这个VBA代码应该怎么写;
请高手们指教,帮忙写一下这个VBA代码,不胜感激!
直接设置剪贴板的数据为图形,就不会提示了
代码如下:
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开发手册,基本不用看别的书了。如果有不知道的,书上也没有,比如这个问题。
dong20030432 发表于 2018-8-1 08:57
用OLE对象不可以吗?
感谢您的关注,想问用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)
也没有反应,这样就造成了程序的中断,我不知道怎么处理了,我不想让程序中断,这个能有什么办法处理吗?
dong20030432 发表于 2018-8-3 14:32
你查看一下用不同方法插入到CAD的图片到底是光栅图像还是OLE对象,确认下是否跟这个有关。我试了很多种方 ...
用截图工具或PrtSC、Alt+PrtSC方法得到的图片,粘贴到cad后,源图片路径变了仍然可以显示;也不跳出对话框;
用windows 自带的画图软件中打开复制或从Excel或word等工具中复制的图片,粘贴到cad后,源图片路径变了仍然可以显示,但会跳出对话框;
直接拷贝文件(选中文件,按Ctrl+c)的方法虽然不显示对话框,但修改原图片路径,cad中就只显示路径文字了;这个应该是栅格文件,跟AddRaster方法插入的图片一样。
你用哪些方法插入,不显示对话框?
用OLE对象不可以吗? mr0810 发表于 2018-8-1 10:14
感谢您的关注,想问用OLE对象怎么用VBA实现?能麻烦您给写个代码吗?
我现在是先用代码把图片放到Exce ...
这一玦的代码我也没写过,不是很了解,不能给出代码。 mr0810 发表于 2018-8-1 10:14
感谢您的关注,想问用OLE对象怎么用VBA实现?能麻烦您给写个代码吗?
我现在是先用代码把图片放到Exce ...
等版主给你解决吧,我也顺便学习下,呵呵!{:1_1:} mr0810 发表于 2018-8-1 10:14
感谢您的关注,想问用OLE对象怎么用VBA实现?能麻烦您给写个代码吗?
我现在是先用代码把图片放到Exce ...
你的代码我也不知道对不对,只是感觉尽量不要使用SENDCOMMAND,这不是正常VBA方法,是一种变相的LISP程序,时常会出现一些不必要的对话框,也可能造成无法确定程序是否完毕的困扰。 dong20030432 发表于 2018-8-1 10:25
你的代码我也不知道对不对,只是感觉尽量不要使用SENDCOMMAND,这不是正常VBA方法,是一种变相的LISP程序 ...
是的,用SendCommand的确不好控制,无法得知命令的运行进度,要是加入循环插入多张图片的话,有时候贴不好,不稳定;而且这种方法只能控制插入点,无法精确控制插入的图片的大小;
我一直想找一个类似AddRaster那样的方法,能精确控制插入点和比例,而且也不会出现对话框。
还期盼各位大神们能出手,多多指教,感激不尽! 用qq截图,然后粘贴。。 @edata,非常感谢您的解答; 我试着用QQ截图的方法操作了一下,粘贴到CAD中,的确可以直接粘贴进去,不显示对话框了;
请问用QQ截图怎么用VBA代码实现?
还有,怎么用VBA代码模拟鼠标选择截屏区域?
粘贴到cad中有没有办法控制图片的大小比例?
谢谢! QQ截图理论上也是放在剪切板上了吧?怎么跟你用程序实现会不一样呢?
页:
[1]
2