- 01: 名前:ミー投稿日:2001/01/30(火) 19:21
- ミーです。
図面のマスタシェイプからそのマスタシェイプを親に持つ(図面上の)シェイプ群を
取得する方法をどなたか知りませんか?
- 02: 名前:りょう投稿日:2001/01/31(水) 09:55
- 直接マスタシェイプから子を得る手段はありません。
通常は全ページの全シェイプをマスタシェイプと照らし合わせる処理になるんですが、これだとオーバーヘッドが気になります。
で、私の場合は荒業を使って問題を回避しています。
まずマスタシェイプにダミーのuserセルを作っておきます。
で、子が知りたくなったらCellChangedイベントを作って予め作っておいたダミーのuserセルに適当な値を放り込みます。
そうするとマスタシェイプを親に持つ子シェイプのuserセルが順次変更されるので、
VisEventProcで拾います。拾い終わったらイベントを削除します。
図面のボリュームにもよりますが、全ループするよりはオーバーヘッドが少ないです(今のところ・・・)
- 03: 名前:ミー投稿日:2001/01/31(水) 19:08
- ミーです。りょうさん今晩は。
直接マスタシェイプから子を得る手段はありません。
やっぱりありませんか・・・。別な掲示板でも同様な事を言われました。
まずマスタシェイプにダミーのuserセルを作っておきます。
で、子が知りたくなったらCellChangedイベントを作って予め作っておいたダミーのuserセルに適
当な値を放り込みます。
そうするとマスタシェイプを親に持つ子シェイプのuserセルが順次変更されるので、
VisEventProcで拾います。拾い終わったらイベントを削除します。
EventProcに非常に弱いのでもう少し詳しく
お教え願えませんか?
宜しくお願いします。
- 04: 名前:りょう投稿日:2001/02/01(木) 10:29
- サンプルを載せますね。
ThisDocumentに
Dim g_Sink As Class1 'シンク
Sub vEventStart()
Dim eventsObj As Visio.EventList
Set g_Sink = New Class1 'シンクオブジェクトの作成
Set eventsObj = ThisDocument.EventList 'この図面のイベントリストを取得
eventsObj.AddAdvise visEvtMod + visEvtCell, g_Sink, "", "" 'セル変更のイベントを追加
End Sub
クラスモジュール(クラス名はClass1)を挿入し
Public Sub VisEventProc(eventCode As Integer, sourceObj As Object, eventID As Long, seqNum As Long, subjectObj As Object, moreInfo As Variant)
Debug.Print
Debug.Print sourceObj.Name
Debug.Print moreInfo
Debug.Print subjectObj.Name
End Sub
vEventStartを実行してからマスタシェイプを変更するとイベントが上がってきて
イミディエイトウィンドウに何ページの何のシェイプが変更されたか表示されます。
こんなので分りますか?
- 05: 名前:ミー投稿日:2001/02/02(金) 14:26
- ミーです。りょうさん、早速のサンプルありがとうございました。
参考にさせていただきます。
■トップに戻る リロード 単独スレ表示
|