【妖哥】:C++ Builder操作Word,如何改变paste进去图片的大小?(续)

yf2100 2009-08-19 10:29:55
http://topic.csdn.net/u/20090818/22/0915cd33-09c0-4d83-842a-a3a2ce56a971.html?58035

上一贴非常感谢啦,按你的方法已经搞定并结贴的说

由于很多地方要用到缩放图片,就把你的代码改写成一个函数,综合考虑保持图片比例的问题,在office_xp.h中查到了

typedef enum MsoTriState
{
msoTrue = 0xFFFFFFFF,
msoFalse = 0,
msoCTrue = 1,
msoTriStateToggle = 0xFFFFFFFD,
msoTriStateMixed = 0xFFFFFFFE
} MsoTriState;


于是写下了这个函数:

bool SetWordPicSize(Variant vSel,const unsigned int uWidth, const unsigned int uHeight, bool bKeepRatio)
{
Variant vShape;

if((uWidth!=0 && uHeight!=0 && bKeepRatio) || (uWidth==0 && uHeight==0)) return false;
vSel.OleProcedure("MoveLeft");
vSel.OleProcedure("MoveRight",
1, // Unit:=wdCharacter,
1, // Count:=1,
1 // Extend:=wdExtend
);
if (int(vSel.OlePropertyGet("Range").OlePropertyGet("InlineShapes").OlePropertyGet("Count"))>0)
{
// 获取到这个图像
vShape=vSel.OlePropertyGet("Range").OlePropertyGet("InlineShapes").OleFunction("item",1);
// 更改其高度和宽度
if(bKeepRatio)
{
// 按比例缩放
vShape.OlePropertySet("LockAspectRatio",0xFFFFFFFF); // msoTrue
if(uWidth==0) vShape.OlePropertySet("Height",uHeight);
else vShape.OlePropertySet("Width",uWidth);
}
else
{
// 不按比例缩放
vShape.OlePropertySet("LockAspectRatio",0); // msoFalse
vShape.OlePropertySet("Height",uHeight);
vShape.OlePropertySet("Width",uWidth);
}
}
else return false;
return true;
}


问题在于,按比例缩放好像不起作用,Word会仅仅设置一个方向的尺寸,是不是我漏写了什么?

我的开发环境:
Windows XP / C++ Builder 2007 / Office 2003
...全文
257 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yf2100 2009-08-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ccrun 的回复:]
这个LockAspectRatio(锁定纵横比)可能有些问题,我查了些资料,发现这个属性确实不起作用。所以,粘贴图片并选中后,还是应该同时设置其高和宽才行。
[/Quote]
哦,看来还是要根据图片本身尺寸自己算纵横比了
ccrun.com 2009-08-21
  • 打赏
  • 举报
回复
是的,先获取到图片的宽和高,自己算一个纵横比,再更改新的大小。
ccrun.com 2009-08-20
  • 打赏
  • 举报
回复
这个LockAspectRatio(锁定纵横比)可能有些问题,我查了些资料,发现这个属性确实不起作用。所以,粘贴图片并选中后,还是应该同时设置其高和宽才行。

703

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder ActiveX/COM/DCOM
社区管理员
  • ActiveX/COM/DCOM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧