首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

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

2012-02-09 
【妖哥】:C++ Builder操作Word,如何改变paste进去图片的大小?(续)http://topic.csdn.net/u/20090818/22/0915

【妖哥】:C++ Builder操作Word,如何改变paste进去图片的大小?(续)
http://topic.csdn.net/u/20090818/22/0915cd33-09c0-4d83-842a-a3a2ce56a971.html?58035

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

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

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


于是写下了这个函数:

C/C++ code
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


[解决办法]
这个LockAspectRatio(锁定纵横比)可能有些问题,我查了些资料,发现这个属性确实不起作用。所以,粘贴图片并选中后,还是应该同时设置其高和宽才行。
[解决办法]

[解决办法]

[解决办法]

热点排行