word2003のConvertToShape

[戻る]
mac 2006/01/06(金) 19:03:15
いつもお世話になっております、macです。

開発環境
WindowsXP VC++6.0 msword9.h word2000 word2003
(word2000で開発し、その後word2003をインストールしました)

VC++でワードファイルを保存するプログラムを作成しています。
任意の位置に画像を貼り付けるために以下のようなコードを記述しました。

**** 画像の貼り付け ***********
Range    cRange = m_cSelection.GetRange();
cRange.Select();

// 画像の作成
InlineShapes    cInlineShapes = m_cDocWordFile.GetInlineShapes();
InlineShape    cInlineShape = cInlineShapes.AddPicture(
                       "F:\\image.jpg",
                       &_variant_t(true),
                       &_variant_t(true),
                       &_variant_t(cRange));

// 移動する
cInlineShape.Select();
Shape    cShape = cInlineShape.ConvertToShape();

cShape.SetLeft(100);
cShape.SetTop(200);
*******************************

貼り付ける画像は、ワードファイル保存後に削除します。
ファイルに貼り付けないと消えてしまうので、InlineShapeを使用しています。

word2000では問題なく動作しますが、word2003ではConvertToShapeを行うと
エラーが起き終了します。
そのエラーもメッセージが表示されず、どのようなエラーが起こっているのか
わかりません。

2000と2003では、画像の貼り付け方法が異なるのでしょうか?
どなたかご教授お願いします。

ITO 2006/01/08(日) 17:11:28
msword9.hが違うのでは、

http://support.microsoft.com/kb/178749/JA
を参照してみてください。

mac 2006/01/10(火) 11:35:48
ITO様、回答ありがとうございます。

word2000用のmsword9.hではなく、word2003用のmsword.hを使用して
見ましたが、結果は変わらず、ConvertToShapeでエラーが起きてしまいます。

word2003で「描画キャンバス」上に画像を貼り付けると、位置を固定しない
図形として貼り付けられます。
この「描画キャンバス」はどのように作成するのでしょうか?

私の環境ではマクロが見れません。

ITO 2006/01/11(水) 19:01:35
僕は、この件は実際に組んだことがないのでよくわかりません。
Office関連は、「サポート情報」を調べると何か情報があるかもしれません。

mac 2006/01/12(木) 15:58:44
[[解決]]
ITO様、回答ありがとうございます。

以下のように描画キャンバスを追加し、イメージファイルを追加したところ
うまく動作しました。
ありがとうございました。

** ここから *****************
Selection cSelection = m_cAppliWord.GetSelection();
Range cRange = cSelection.GetRange();

// 描画キャンバスを作成 ------------
Shapes    cShapes = m_cDoc.GetShapes();
Shape    cShape = cShapes.AddCanvas(0, 0, 300, 200, &_variant_t(cRange));

// 描画キャンバス内に画像を作成 ----
// キャンバスアイテムを取得
CanvasShapes cCanvasItems = cShape.GetCanvasItems();

// キャンバスに画像を追加
cShape = cCanvasItems.AddPicture("F:\\image.bmp",
     &_variant_t(false), &_variant_t(true),
    &_variant_t((float)0), &_variant_t((float)0),
    &_variant_t((float)100), &_variant_t((float)150));
** ここまで *****************

古いスレッドには追加発言できません。