TextBoxのAnchorの解除 – プログラミング – Home

通知
すべてクリア

[解決済] TextBoxのAnchorの解除


mac
 mac
(@mac)
ゲスト
結合: 22年前
投稿: 37
Topic starter  

たびたびすみません、macです。

VC++で作成したプロジェクトにmsword9をインクルードして、
ワードの.doc形式で保存するプログラムを作成しています。

そこで、2つのテキストボックスを追加するために以下のようなコードを
追加しました。

** ここから
// 一つ目のテキストボックスを作成
Range cRange = m_cSelection.GetRange();
Shapes cShapes = m_cDocument.GetShapes();
Shape cShape = cShapes.AddTextbox(msoTextOrientationHorizontal, 200, 150,
500, 45, &_variant_t(cRange));

// テキストボックスの選択
cShape.Select(&_variant_t(true));

// 文字列の記述
TextFrame cTextFrame = cShape.GetTextFrame();
cRange = cTextFrame.GetTextRange();

cRange.SetText(文字列の記述);

// テキストボックスの選択を解除
cShape.Select(&_variant_t(false));

// 二つ目のテキストボックスの作成
// テキストボックスの作成
cShape = cShapes.AddTextbox(msoTextOrientationHorizontal, 500, 400, 200, 60,
&_variant_t(cRange));

* ここまで *****

これを実行すると、二つ目のテキストボックスを作成するときに
「指定したレンジは、作業中の文書、またはストーリーに基づくものではありませ
ん。」
というエラーメッセージが出てしまいます。

テキストボックスの選択状態を解除するだけではなく、Anchorも解除しなくては
ならないのでしょうか?
その場合、どのようにAnchorを解除すればよいでしょうか?

どなたかご教授お願いします。

開発環境
WindowsXP VC++6.0 Office2000


引用未解決
トピックタグ
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

あてずっぽうです。

一つ目が上手く行くのでしたら、
もう一個 cRange を作ってみては?

// 二つ目用に新たに作る。
cRange = m_cSelection.GetRange();

// 二つ目のテキストボックスの作成
...


返信引用
mac
 mac
(@mac)
ゲスト
結合: 22年前
投稿: 37
Topic starter  

dairygoods様、回答ありがとうございます。

一つ目のテキストボックスの選択を解除後、

cRange = m_cSelection.GetRange();

を追加してみましたがうまく動作しませんでした。
同じエラーメッセージが出力して、終了します。


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

> // テキストボックスの選択を解除
> cShape.Select(&_variant_t(false));

これ、変ですね。
引数は、追加選択か排他選択かのフラグですから、
これを使って選択解除はできません。

ですから、その後で Selection.GetRange しても、
やっぱりテキストボックスの Range が得られてしまいます。

Word には恐らく「何も選択していない」という状態は
ないでしょうから、選択解除ではなく、
文書上にフォーカスをあててから、Selection.GetRange するのでしょう。

しかし、そんな回りくどいことはしなくても、
Document.Range で、現在のフォーカスに関係なく
文書の Range が得られますから、それを使えば良いのでは。


返信引用
mac
 mac
(@mac)
ゲスト
結合: 22年前
投稿: 37
Topic starter  

dairygoods様、回答ありがとうございます。

文書にフォーカスを当てて試してみたところ、うまく動作しました。
ありがとうございました。

修正したコードを添付します。

ここから ****
// 一つ目のテキストボックスを作成 ----------
// 文書のRangeを取得
Range cRange = m_cDocument.Range(COleVariant((long)0), COleVariant((long)
0));
cRange.Select();
Shapes cShapes = m_cDocument.GetShapes();
Shape cShape = cShapes.AddTextbox(msoTextOrientationHorizontal, 200, 150,
500, 45, &_variant_t(cRange));

// テキストボックスの選択
cShape.Select(&_variant_t(true));

// 題名を記述
TextFrame cTextFrame = cShape.GetTextFrame();
cRange = cTextFrame.GetTextRange();

cRange.SetText(文字列の記述1);

// フォーカスを文書の先頭に戻す
// 文書のRangeを取得
cRange = m_cDocument.Range(COleVariant((long)0), COleVariant((long)0));
cRange.Select();

// 二つ目のテキストボックスを作成 ----------
// テキストボックスの作成
cShape = cShapes.AddTextbox(msoTextOrientationHorizontal, 200, 300, 200, 60,
&_variant_t(cRange));

// テキストボックスの選択
cShape.Select(&_variant_t(true));

// 題名を記述
cTextFrame = cShape.GetTextFrame();
cRange = cTextFrame.GetTextRange();
cRange.SetText(文字列の記述2);
ここまで **********


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました