KoMaDo   VISIO SQUARE : VB/VBA  ■ Headline ■ HOME    

VB/VBAトップへ ▼カッ飛び最後 

  マスタシェイプ

01: 名前:ほし投稿日:2002/07/18(木) 10:43
はじめまして。

VISIOでかかれた線や円の座標を取得することは出来たのですが
マスタシェイプを使って書かれたものの図形情報・図形座標は
どのように得ることができるのでしょう?

02: 名前:oki投稿日:2002/07/18(木) 20:17
同じやり方で出来ます。
たぶん、マスターからドラッグしてくるとグループ化されているので戸惑って
おられるのではないでしょうか?
もし、そうであればこちらをご参照ください。

http://www.mster.co.jp/visiosquare/cgi-bin/visbbs/mibbs.cgi?mo=p&fo=zukei&tn=0102 [source] [check]

03: 名前:ほし投稿日:2002/07/19(金) 11:45
ありがとうございます。
が、初心者な者でうまく理解できません。
以下はリンク先の文章ですが…

-----------------------------------------
グループ化してもVBAから操作可能です。
例)
shpObj→親のシェイプ
subshpObj→子のシェイプ
Set subshpObj=shpObj.Shapes(1)
----------------------------------------

親のシェイプ・子のシェイプの認識が出来ないのですが、
こちらでは
親のシェイプー>オブジェクトタイプがグループのオブジェクト
         (座標数が0となっているものです)
子のシェイプー>?::どのようにしゅとくしていいのか分からないです。

上記を参考に、プログラムしてますがうまくいきません。
C++ですが以下に貼り付けます。

shpObj shape
shpsObj shapes

shape.Type(&Type);
if Type== Groupe
shape.Shapes(shapes);
という感じにしてみました。

04: 名前:oki投稿日:2002/07/19(金) 13:34
すいません、C++は無知ですが、
shape.Shapes(ID または シェイプ名);
になるんではないかと思います。
例えば、3つのシェイプで構成されているグループでは、IDは1〜3になります。
シェイプ名がわかっているのであれば、シェイプ名を直接指定しても取得できる筈です。

05: 名前:ほし投稿日:2002/07/19(金) 16:08
そうですか・・・
問題のデータはマスタシェイプをドラッグしています。
このためApp->Doc->Page->shapeのオブジェクトの種類は
”グループ”となっています。
このshapeに対してGeometryCountとかで図形の数を取っているんですが
これが0又はマイナス値になってしまいます。
App->Doc->master->shapeでも同様の結果です。
以上のような原因からグループ内の図形の座標を取得できないのかな
とおもったんですが・・・・
VBAとVC++では異なっているのでしょう・・・。

もう少し試してみます。
早いお返事ありがとうございます。

06: 名前:なか投稿日:2002/07/19(金) 17:44
C++でグループの子シェープを取得するには、
shapesコレクションを取得してからでないと出来ません。
以下に記述例を付加します。
試して見て下さい。

CVisioShapes shapes;
shape.Shapes(shapes);
long count;
shapes.Count(&count);
for (i=1; i<=count; i++)
{
shapes.Item(i, shape);
// 実際の操作

}

07: 名前:ほし投稿日:2002/07/22(月) 09:21
書き方が悪かったようですね。
Pages->Page->Shapes->Shapeです

Shapesのカウンタを取るとこまでは一緒ですがその後が異なっていました。
shapes.ItemFromID( i,shape)
としていました。

週末で問題も解決し、グループの子シェイプも取れるようになりました。

ご意見・アドバイスありがとうございました。


VB/VBAトップへ ▲カッ飛び先頭