KoMaDo   VISIO SQUARE : VB/VBA  ■ Headline ■ HOME    

 KoMaDo / Headline / category :  【VISIO全般】  【News/宣伝】  【図形・操作】  【ファイル変換】  【ShapeSheet】  【VB/VBA】  【雑談その他】 ;

281 :他の形式で保存(04)  282 :カスタムのエクスプローラライクなビューの作り方(02)  283 :図形作成後、特定レイヤーへ配置する方法について(09)  284 :[C#]CommandBarButtonの画像について(13)  285 :ステンシルのキーワード取得について(07)  286 :フィールド名のユーザ定義式の一括修正方法について(18)  287 :レイヤー名の取得(03)  288 :コネクタの始点・終点どちらが接続されているのか?(04)  289 :矩形範囲内のシェイプを取得(09)  290 :図形を重ねたときの処理(16)  291 :VBAによるページ設定およびグリッド/ルーラー設定について(01)  292 :シェイプをダブルクリック時のイベント(02)  293 :アドインのイベントが変です・・・(04)  294 :レイヤーの表示/非表示の切り替え(08)  295 :シェイプを右クリックした時のカスタムのメニュー(アドオン)(05)  296 :Visio2003の作業ウインドウに自作ヘルプの目次を表示させたい。(01)  297 :PNT関数について(04)  298 :Unicodeに変換した文字をカスタムプロパティに設定したい(10)  299 :特定のシェイプを選択(06)  300 :カスタマイズしたメニューでのチェック表示(08)  301 :BeforeDocumentClose時に渡されるパラメータについて(06)  302 :コネクタの経路取得について(05)  303 :マクロの実行について(04)  304 :特定のシェイプを削除されないように保護する方法(10)  305 :Visioのキーイベント取得について(07)  306 :複数のブックのデータを取得する(03)  307 :シェイプの選択状態の解除(03)  308 :Visioへ値を渡す方法(04)  309 :DXFの変換(09)  310 :visio終了処理の回避(04)  311 :vb.netのフォームにvisioの図貼れますか(01)  312 :図形のテキスト取得(03)  313 :VCからVisioのマクロを起動したいのですが・・・(12)  314 :IMEの入力モードが無効になってしまいます。(03)  315 :モードレスにおけるシェイプシートの制御(07)  316 :コネクタについて(07)  317 :Visio2003+ステンシルの参照設定+読み込み専用=エラー?(06)  318 :グループの中のシェイプ取得について(03)  319 :グループ図形の線の色などを変更する方法(07)  320 :VBとVBAのメリットとデメリット(04) 
ログ検索  リロード  前のページ  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 次のページ  総てのスレッド  スレッド総数 696281 - 290 を表示


281: 他の形式で保存  全レス

01: 名前:てるてる投稿日:2004/10/06(水) 21:10
VBまたは、VBAでVisio形式の図面を他の形式で保存したいのですがどのようにしたらよいのでしょうか。
保存したい形式は、DXF,メタファイルなんですけれども。
よろしく、お願いします。

02: 名前:yoda投稿日:2004/10/07(木) 02:45
exportメソッドがよいようです。
詳しくは、helpを参照してください。
2003なら、マクロの記録を取って、
見て下さい。

03: 名前:てるてる投稿日:2004/10/08(金) 18:32
yodaさん、ありがとうございます。
VBAでexportメソッドを実行することで、他の形式で保存が出来ました。
ただ、VBからexportを実行しますと、うまくいきませんでした。

04: 名前:yoda投稿日:2004/10/08(金) 19:36
>ただ、VBからexportを...
そうですか。

この場合、exportはvisioの
メソッドですから、Visio application
オブジェクトについて、実行する
必要があるのではないでしょうか?

もしかして、VBには、全く別の意味
のexportメソッドがあるのかも知れ
ませんね。

■トップに戻る リロード  単独スレ表示



282: カスタムのエクスプローラライクなビューの作り方  全レス

01: 名前:あひゃ投稿日:2004/10/03(日) 17:49
いつもお世話になっております。
VisioでUMLモデル図を描くとき、左部に『モデルエクスプローラ』
なるものが表示されていると思いますが、このような
エクスプローラライクなツリービューを自前で作成することは可能なのでしょうか?
色々探してみたのですが、有効な情報は見つかりませんでした。
なにかヒントとなるWebサイトをご存知でしたら、教えて頂けないでしょうか。
キーワードだけでも結構です。
宜しくお願い致します!

02: 名前:あひゃ投稿日:2004/10/03(日) 20:55
自己レスですいません。
Visio2003 SDKのCode Librarian Viewなるものに
サンプルコードが載っていました。
他にも参考になりそうなサンプルが多数載っていました。
これはかなりの情報かも知れません〜
みなさんも良かったら一度見てみてください^^

■トップに戻る リロード  単独スレ表示



283: 図形作成後、特定レイヤーへ配置する方法について  全レス

01: 名前:VISIO初心者投稿日:2004/09/27(月) 19:06
いつもお世話になっています。

教えて頂きたいのですが、図形配置後にあらかじめ新規に作成した
レイヤーに配置することは可能なのでしょうか?

図形毎に自動でレイヤーに割り当てられてしまいますが、
これを図形配置(選択状態)→マクロ?で指定レイヤーに割当を行いたいのです。

リファレンスを参照していますと、ShapeAddedというイベント後に
できそうなのですが・・・。

どなたかお分かりになりますでしょうか?

02: 名前:yoda投稿日:2004/09/27(月) 21:03
ActivePage.Layers("name").Add shp, 0
でよいと思います。
詳しくは、Layer.AddのHELPを
参照してください。

03: 名前:VISIO初心者投稿日:2004/09/27(月) 22:18
早速のご返答ありがとう御座いました。
なんとかできるようになりました。

いまい一つお教え願えないでしょうか。
シェイプ毎に自動で割り当てられるレイヤーが不必要で
図形配置後に割り当てられないようにしたいのですが、
これは、回避可能なのでしょうか?

今のところ不必要なレイヤーは個別に削除するしか方法しか
思い浮かびません。(方法はこれから考えますが…)

04: 名前:yoda投稿日:2004/09/28(火) 04:53
どうも、もう一つ、
意味が、よくわかりません。
1行で書くと、どういうことでしょうか?

05: 名前:VISIO初心者投稿日:2004/09/28(火) 11:19
すみません。
図形を配置すると、自動でレイヤーが作成されるのですが、
これを辞めることは可能でしょうか?

06: 名前:yoda投稿日:2004/09/28(火) 12:31
>図形を配置すると、自動でレイヤーが...
どんな図形でも自動的にレイヤが出来る
わけではないので、AECの部屋について
検討します。

部屋のシェイプのEventDropの式を消去して
しまえば、よいのかと思い、試してみましたが、
レイヤが出来てしまいます。
なぜできるのか、さらに調べる必要があります。

07: 名前:M2号投稿日:2004/09/28(火) 13:02
ステンシル内のマスターシェイプにレイヤが設定されていると、ドロップされる
ページにレイヤも継承します。
ステンシル内のマスタシェイプからレイヤを削除すると、ドロップしてもレイヤが
作成されません。

08: 名前:yoda投稿日:2004/09/28(火) 13:43
なるほど、マスタシェイプからレイヤを削除する、が正解ですね。

09: 名前:VISIO初心者投稿日:2004/09/28(火) 19:08
ありがとう御座いました。
マスタシェイプからレイヤを削除するで解決することができました。
個別にシェイプからレイヤーを削除するしか現状無いようですね。
本当に助かりました。また何かありましたらよろしくお願い致します。

■トップに戻る リロード  単独スレ表示



284: [C#]CommandBarButtonの画像について  全レス

01: 名前:あひゃ投稿日:2004/09/18(土) 23:48
いつも参考にさせて頂いています。
C#でVisioのアドインを作成しています。
ツールバーに自前のボタンを追加しました。
実装には、CommandBarButtonクラスを利用しました。
CommandBarButtonのMask、もしくはPictureプロパティに
画像データをセットしようと思ったのですが、これらのプロパティは
stdole.IPictureDispのインターフェースをもったクラスのオブジェクト
でしか設定できないようです。
VBマクロの場合は、LoadPictureメソッドを使用するらしいのですが、
C#でそのメソッドに該当するようなメソッドを見つけることができません
でした。
どなたか知っておられましたら、教えて頂きたく。
よろしくお願いします。゜(゚´Д`゚)゜。

05: 名前:あひゃ投稿日:2004/09/21(火) 08:49
いつも詳しい情報をありがとうございます!
なるほど、Officeのヘルプを調べないとだめなのですね^^;
yodaさんに教えて頂いたHPも参考にしながら、
調べていきたいと思います。
>VBAでは、自前のcommandbarbutton
>の場合、設定は出来ませんが、
VBAでも設定できないんですか〜
むむむ・・・

06: 名前:M3号投稿日:2004/09/21(火) 20:30
もし、Visioのみで良くて自前のアイコンの物理ファイルにアクセス
可能であれば、Visioの
ToolbarSets・ToolbarSet・Toolbars・Toolbar・ToolbarItems・
ToolbarItem・UIObjectの使用で同様の物が作成できます。
その場合、ToolbarItemオブジェクトにIconFileNameメソッド
が用意されているので簡単に設定できます。
詳細は、開発者用リファレンスのIconFileNameメソッドの
サンプルで確認できます。
また、試してませんがFaceIDプロパティを設定可能のようです。

07: 名前:あひゃ投稿日:2004/09/22(水) 00:09
>>06
なるほど!どうもです^^
ちなみに、僕がなぜCommandBarを使用したかというと、
ボタンClickのイベントがあったからです。
ToolbarItemにはなぜかClickのイベントがなく、Action?プロパティで
ほかのアドオンやマクロを呼ぶことしかできなかったような・・・
う〜ん、、、難しい・・・(;´Д`)

08: 名前:yoda投稿日:2004/09/22(水) 05:19
>>06
そう、管理人さんのアップ
した秀作(修作だったかな)
では、icoファイルで、設定が
できてましたね。

09: 名前:あひゃ投稿日:2004/09/24(金) 15:14
FaceIDで設定できました!
どうもありがとうございました!
こちらのサイトでアップロードされていた、
「Visio2003のツールバーアイコンとFaceIDの一覧」を
拝見させて頂きました。(素晴らしいです)
さっそく、この一覧にあったFaceIDをそのままCommandBarButton
オブジェクトのFaceIdプロパティに設定してみたのですが、どうも
こちらの期待したアイコンが表示されませんでした。
出るには出たのですが、どうも予期せぬアイコンが表示されます・・・
やはり、CommandBarButtonはToolbarItemのようにいかないのでしょうか?

10: 名前:M3号投稿日:2004/09/24(金) 18:22
FaceIDには2種類あるので表示したいアイコンが出ていないのかも

「Visio2003のツールバーアイコンとFaceIDの一覧」
は、Visio2003が持っているFaceIDです。
→ToolbarItemに反映できます。VisUIIconIDs の定数

CommandBarButtonに設定するFaceIDは、Officeが
持っているFaceIDですので異なります。
補足ですが、なぜかActionセルのButtonFaceは、
CommandBarButtonのFaceIDと同一です。?なぜOffice資産!

11: 名前:yoda投稿日:2004/09/24(金) 20:24
そうそう、VisioのFaceIDは、たしか、
Visioのバージョンによっても違うと思いました。
要注意ですね。

12: 名前:あひゃ投稿日:2004/09/24(金) 21:35
統一して欲しいですよね・・・
仕方ないので、一気に全部のFaceIDのアイコンを出してみました。^^;
このアイコンって、自前のアドインツールのボタンに使っても良いんですかねぇ?
ちなみに、今作っているアドインは、他社に売るつもりらしいです(課長が)
(((( ;゚д゚)))アワワワワ

13: 名前:yoda投稿日:2004/09/25(土) 02:13
FaceIDを指定するだけなので、
問題ないと思いますよ。
アイコンは、ユーザのシステム
のものを使うのですから。

■トップに戻る リロード  全レスを表示



285: ステンシルのキーワード取得について  全レス

01: 名前:ポポ投稿日:2004/09/10(金) 20:06
お世話になります。
マスタシェイプのプロパティで表示されるキーワードの内容を
VBAで取得し書き換えしたいのですがエラーとなって取得できません。

For a = 1 To MastersObj.Count
Set Masterobj = MastersObj(a)
Debug.Print Masterobj.Name
Debug.Print Masterobj.Prompt
Debug.Print Masterobj.Keywords
Next b

上記のコードで名前とプロンプトは取得できるのですが、
キーワードは取れないのでしょうか?
VISIO2002です。宜しくお願い致します。

02: 名前:yoda投稿日:2004/09/10(金) 21:17
どうも取れませんね。
Keywordsは、Document
のみです。
蛇足ですが、上記コードは、
For each 文を使うとすっきりします。

Dim Masterobj As Visio.Master
For Each Masterobj In ThisDocument.Masters
With Masterobj
Debug.Print .Name
Debug.Print .Prompt
End With
Next

03: 名前:ポポ投稿日:2004/09/11(土) 08:01
yoda 様

早速ありがとうございます。
やはりだめなんですね。ドロップ後は取得できますので
一回ドロップしてから確認して、登録しなおす・・・
って処理になるんですかね?
ありがとうございました。

P.S.蛇足の件、ありがとうございます。
中年(老年?)プログラマーは昔からの癖が抜けなくて。(^^;)

04: 名前:yoda投稿日:2004/09/11(土) 09:43
>ドロップ後は取得できますので
どうするのか、ぜひ、教えていただけませんか?

05: 名前:ポポ投稿日:2004/09/11(土) 13:38
yoda 様

ドロップ後の図面上シェイプのユーザー定義セルに、マスタシェイプのキーワードが
書き込まれていましたのでこれを以下のように取得しています。

shapeObj.Cells("User.visKeywords").Formula

これで判断するしかないかと考えたのですがいかがでしょうか?
しかしなぜkeywordsは取れないのでしょうかね?

06: 名前:yoda投稿日:2004/09/11(土) 23:46
ステンシルをXMLステンシル
として保存し、拡張子をXMLに
かえてから、IEビューアで開くと、
<ShapeKeywords>タグに、マスタ
のキーワードがあります。
ここから取得する方法もありそうです。

07: 名前:ポポ投稿日:2004/09/12(日) 19:53
前処理がちょっと面倒ですが、キーワード以外にも
かなりの情報が読みとれそうです。
これらを上手く組み合わせてやってみます。
ありがとうございました。

■トップに戻る リロード  単独スレ表示



286: フィールド名のユーザ定義式の一括修正方法について  全レス

01: 名前:RR投稿日:2004/06/29(火) 19:30
いつも参考にさせていただいております。

マクロ作成で難儀しておりますので、ご教授いただけると幸いです。

シェイプにカスタムプロパティを登録し、それぞれのフィールドに"Prop.Row_1&Prop.Row_2"と
いったようにユーザ定義式を入力し、カスタムプロパティの値を各シェイプ上に表示させています。

このユーザ定義式の内容を一括で"Prop.Row_1&Prop.Row_2"から"Prop.Row_2&Prop.Row_3"という感じで
変更したいのですが、うまくいきません。

良い方法ございましたらご教授いただけますでしょうか。よろしくお願いいたします。

10: 名前:kk投稿日:2004/08/31(火) 11:02
早速のご返事ありがとうございます。yodaさまの書いたとおりにマクロを変更しましたが、
案の定失敗に終わりました。
一つのページの全てのシェイプのテキストフィールドを一括変更したいですが、
テキストフィールドの参照の仕方などがわかりません。テキストフィールドで
表示させたいの全シェイプ共通のテキストとカスタムプロパティからのデータです。

shp.Cells("Fields.Value").Formula = "Prop.Row_2 & Prop.Row_3"
上の行をそのまま使いますとFields.Valueで引っかかりますが、何が原因でしょうか?
因みにshp.Text = "Prop.Row_2 & Prop.Row_3"と書きますと全シェイプに
"Prop.Row_2 & Prop.Row_3"をそのとおりに埋めてくれますので、テキストを
表示させたいときには使えそうですが、カスタムプロパティからのデータは
どうやって表示できますでしょうか?

初歩的な質問で申し訳ないですが、どうかご教授をお願いします。

11: 名前:yoda投稿日:2004/08/31(火) 19:31
できるだけ簡単な図面で
テストする事をお勧めします。
最初は、シェイプが1つしかない
図面で、それがうまく行ったら
2つという具合に。
08のマクロでうまく動区と思いますよ。

12: 名前:yoda投稿日:2004/09/01(水) 02:06
新規図面(白紙)に
直線又は長方形を
一コだけ書き、
テキストフィールドと
カスタムプロパティを
定義しと言う具合に、
出来るだけシンプルにです。

13: 名前:kk投稿日:2004/09/02(木) 17:15
一つのシェイプだったら、エラーも出ないんですが、変更もテキストフィールドに反映されません…
自分で調べて、では勉強しなおしますが、いろいろと教えていただいて、ありがとうございました。

14: 名前:yoda投稿日:2004/09/02(木) 19:58
まずそこで、丹念に原因を調べる
ことをお勧めします。
シェイプシートとVBAのコード
との間に、セル名などの
食い違いなどが、ないかどうか。

15: 名前:yoda投稿日:2004/09/03(金) 09:17
すみません。
大きな間違いをしていたようです。
以下のマクロを参考にしてください。

セルに式として評価できない文字列
を入れる場合はダブルコーテーション
にする必要があります。
また、セルから読み取った文字列は、
ダブルコーテーションになっているので、
連結する前に、シングルコーテーション
になおす必要があります。

Sub test()
Dim objShp As Visio.Shape
Dim strFormula1 As String
Dim strFormula2 As String
Set objShp = ActivePage.Shapes(1)
With objShp
strFormula1 = .Cells("Prop.Row_1").Formula
strFormula2 = .Cells("Prop.Row_2").Formula
.Cells("Fields.Value").Formula = WQ(SQ(strFormula1) & SQ(strFormula2))
End With
End Sub

Function WQ(Word As String) As String
WQ = Chr(34) & Word & Chr(34)
End Function
Function SQ(DQWord As String) As String
If Left(DQWord, 1) = Chr(34) Then
If Right(DQWord, 1) = Chr(34) Then
SQ = Mid(DQWord, 2, Len(DQWord) - 2)
End If
End If
End Function

16: 名前:yoda投稿日:2004/09/03(金) 19:33
一部訂正します。
.Cells("Fields.Value").Formula = WQ(SQ(strFormula1) & SQ(strFormula2))
の後に、
.Cells("Fields.Format").Formula = "FIELDPICTURE(0)"
を入れましょう。
formatセルがnoformatだと、テキストが表示されません。

17: 名前:yoda投稿日:2004/09/04(土) 05:54
蛇足ですが、

FIELDPICTURE(0)を使うと、
ダブルコーテーションなど
考えなくてもよく、
.Cells("Fields.Value").Formula = strFormula1 & strFormula2
または、
.Cells("Fields.Value").Formula = strFormula1 + strFormula2
で、テキストフィールドに
表示できますが、
以下のように間に
「"」が入っしまいます。
text1"text2

その他、
objhp.characters.textは、
テキストフィールドの
テキストの取得しか
できないので、むりに
設定すると、普通の
テキストが表示されて
しまいます。

18: 名前:kk投稿日:2004/09/08(水) 10:49
yodaさま
返信がおくれ、申し訳ありません。
ご返信いただいた内容をもとに、作成してみます。
今回はありがとうございました。

■トップに戻る リロード  全レスを表示



287: レイヤー名の取得  全レス

01: 名前:ポポ投稿日:2004/09/02(木) 06:01
選択したある図形を総なめしながら処理をしようと思いますが、
下記のような処理でIDや名前は取得できるのですが、所属する
レイヤーがどうやっても取れません。
根本的に考え方が違うのでしょうか?
宜しくお願いします。

Sub test()
Dim a As Integer
Dim selobj As Visio.Selection
Dim shpobj As Visio.Shape

Set selobj = Visio.ActiveWindow.Selection
For a = 1 To selobj.Count
Set shpobj = selobj(a)
Debug.Print shpobj.ID
Debug.Print shpobj.Name
Next a
End Sub

上記のコードで
Debug.Print shpobj.leyer
を追加するとエラーとなります。レイヤー名は取れないのでしょうか?
VISIO2002です。宜しくお願いします。

02: 名前:M3号投稿日:2004/09/02(木) 09:33
ShapeのLayerオブジェクトを参照するにはインデックスが
まずshpobj.LayerCountでシェイプに割り当てられている
Layer数を取得し、1以上の場合は、
set vsoLayer = shpobj.leyer(n)
のようにインデックスを用いLayerオブジェクト取得します。

03: 名前:ポポ投稿日:2004/09/03(金) 09:11
M3号 様

複数のレイヤーにシェイプを割り振れる事を考えていませんでした。
試しに複数のレイヤーに割り当てて、nの値を変えていったら、
所属するすべてのレイヤー名も取得できました。
ありがとうございました。助かりました。

■トップに戻る リロード  単独スレ表示



288: コネクタの始点・終点どちらが接続されているのか?  全レス

01: 名前:あひゃ投稿日:2004/08/29(日) 19:19
いつも拝見させてもらってます。
アドインを作っているのですが、コネクタのShapeオブジェクトの
なかに、コネクタの始点・終点のどちらで他のシェイプと接続されているのか?
といった情報を入手することは可能でしょうか?

ShapeオブジェクトのFromConnectsやConnectsプロパティの中に
接続ポイントに関する情報が含まれているのですが、
始点・終点のどちらで接続されているのかの情報が入手することが
できないようです。
誰か知っている方がおられましたら、教えてください〜〜
情報は

02: 名前:yoda投稿日:2004/08/29(日) 21:10
.FromCell.Nameが,BeginXかEndXかで
区別ができるかもしれません。

03: 名前:あひゃ投稿日:2004/08/30(月) 00:50
よださんのおっしゃる通りでした!
かなり助かりました!
いつもありがとうございます。 。゜(゚´Д`゚)

04: 名前:yoda投稿日:2004/08/30(月) 11:38
.FromPartでもできるかもしれません。
この場合、値はvisBeginかvisEndかで、
区別するのでしょうか。この場合、
visBeginX、visBeginY、visEndX、visEndY
もあり、実際にどうなるのか、調べる必要が
ありそうです。

■トップに戻る リロード  単独スレ表示



289: 矩形範囲内のシェイプを取得  全レス

01: 名前:やま投稿日:2004/08/27(金) 15:24
お世話になっています。

矩形範囲内のシェイプを取得するロジックを作成中です。
現在は、すべてのページオブジェクトが矩形範囲内に存在するか
どうか判定を行い情報を取得しています。この方法では、ページ内に
データが多くある場合処理に時間がかかるため改善方法がないか
検討を行っています。理想は、ActivewindowのSelectに矩形範囲
を指定して取得できれば一番良いのですが...
どなたか良い方法をご存知の方がおられましたら教えてください。

02: 名前:yoda投稿日:2004/08/27(金) 16:15
使ったことがないのですが、
HitTest メソッドは、どうでしょう。

03: 名前:yoda投稿日:2004/08/27(金) 16:28
HitTest メソッドでは、
解決にならないようですね。

04: 名前:yoda投稿日:2004/08/27(金) 19:27
2番のスレッドで、話題の
SpatialRelation プロパティ
を使ったら、よさそうですね。

05: 名前:yoda投稿日:2004/08/28(土) 08:47
ウーム、どれも決定的では
ありませんね。
結局は、少しでも早い
メソッドを使い、コードの
見直しで無駄を省き、
それでもだめなら、
早い系を使うということでしょうか。

06: 名前:yoda投稿日:2004/08/28(土) 16:27
これは、できるかどうか、わからないのですが、
Windows API を使って、
矩形に沿って領域を選択する
マウス操作を、させたらどうでしょう。
「プログラムからマウスを操作」については、
ここが、参考になるかも知れません。
http://hp.vector.co.jp/authors/VA017912/winapi/musevent.html [source] [check]

07: 名前:yoda投稿日:2004/08/29(日) 08:58
その他、ここも参考になるかも知れません。
http://homepage1.nifty.com/MADIA/delphi/delphi_bbs/200207_02070020.html [source] [check]

08: 名前:yoda投稿日:2004/08/29(日) 09:53
上のサイトを参考にして
仮に作ったものを、
ここにアップロードしました。
http://www.mster.co.jp/visiosquare/cgi-bin/upload/image/092.lzh [source] [check]
ただ、このままでは、ウィンドウの
サイズによって、選択される領域
が、変わってしまいますので、
dx,dyの与え方について、
さらに、検討する必要があります。

09: 名前:やま投稿日:2004/08/30(月) 08:41
みなさん、いろいろとありがとうございます。
マウス動作については、一度検討したのですがアイコン状態での動作
の問題を解決することができず挫折してしまいました。
もう少し検討をしてみます。何か良い方法が見つかった場合は紹介したいと
思います。

■トップに戻る リロード  単独スレ表示



290: 図形を重ねたときの処理  全レス

01: 名前:P−太投稿日:2004/08/24(火) 14:53
お世話になります。
教えてください。ステンシルから 図形を貼り付けます。
その図形の上に別の図形を重ねます。
重ねたときに 下の図形のテキストを取得し
上の図形のカスタムプロパティに
セットしたいのですが 出来ますか?
重なった時 と言うイベントがあるのでしょうか教えてください。

08: 名前:P−太投稿日:2004/08/27(金) 09:55
はい。
・VisioのVersion→Enterprise Architects を使用。(バージョン情報を見て)
・実行時のintSpatialRelationの値→7
・vsoSelobj.Countはいつでもゼロですか?
それともある重ね方の時ですか?→
取得出来ました!!!
下の図形を □と線 で作るのではなく
□と□(図形と図形)をつなげて作ってみました。
その上に図形を置くと ちゃんと下の図形のテキスト
が取得できました〜
ありがとうございます!!!

09: 名前:P−太投稿日:2004/08/27(金) 10:06
すいません〜
下の図形のカスタムプロパティに 取得したテキストが入ってしまってます。
上の図形のカスタムプロパティに テキストをセットしたいんですが。
教えてください。

10: 名前:名無しさん投稿日:2004/08/27(金) 11:37
確かに下の図形に線がある場合で、
・上にのせる図形が□には重ならずその線だけに重なる時
・上にのせる図形がその線を完全に含む大きさでない時
には取得できませんね。この場合は intSpatialRelation の値に
visSpatialTouching を加えればOKです!
ただし、下の図形がグループの場合、メンバがどんな図形
(□でも線でも)であろうと、上に置く図形がメンバに重ならない時は
ダメですね。(グループの図形枠内でもメンバの無い場所だと取得
できないようです) これを解消するには、グループの図形枠と同じ
になる□をメンバに加えて、線と塗りつぶしは”無し”に設定すると
よいと思います。

11: 名前:名無しさん投稿日:2004/08/27(金) 12:06
09:について
カスタムプロパティをセットするオブジェクトは vsoShape になって
いますか? vsoShp になってませんか?
vsoShape.Cells("Prop.Row_1").Formula = strMoji

12: 名前:P−太投稿日:2004/08/27(金) 13:57
vsoShape にしています・・・
下の図形□のカスタムプロパティに値がセットされていました。
グループ化でない図形の場合は ちゃんとできました。

13: 名前:P−太投稿日:2004/08/27(金) 14:27
できました〜ちょっと長いですが 書きます〜

Sub TextSet(vsoShape As Visio.Shape)

Dim vsoSelobj As Selection
Dim strMoji As String
Dim intSpatialRelation As VisSpatialRelationCodes

Dim vsoShape_x As Visio.Shape

intSpatialRelation = visSpatialContainedIn + visSpatialContain + visSpatialOverlap
Set vsoSelobj = vsoShape.SpatialNeighbors(intSpatialRelation, 0, 0)

Set vsoShape_x = vsoShape
If vsoSelobj.Count = 0 Then
strMoji = Chr(34) & "" & Chr(34)
Else
strMoji = Chr(34) & vsoSelobj(1).Text & Chr(34)
'
If vsoSelobj(1).Text <> "" Then
strMoji = Chr(34) & vsoSelobj(1).Text & Chr(34)
Else
strMoji = Chr(34) & "" & Chr(34)
For Each vsoShape In vsoSelobj(1).Shapes
If vsoShape.Text <> "" Then
strMoji = Chr(34) & vsoShape.Text & Chr(34)
Exit For
End If
Next
End If
End If
vsoShape_x.Cells("Prop.Row_11").Formula = strMoji
End Sub
どうでしょうか?

14: 名前:名無しさん投稿日:2004/08/27(金) 14:28
う〜ん、なぜでしょうか・・・
マクロの Sub〜End Sub までをコピー&ペーストして見せて
もらえると分かると思うのですが。

15: 名前:名無しさん投稿日:2004/08/27(金) 14:53
分かりました。For Each〜Nextで vsoShape を使ってるのが原因です。
ここで上の図形をあらわす vsoShape を、下の図形のメンバをあらわす
オブジェクトに置きかえてしまっています。サンプルでは vsoShp と
していたのですが、分かりにくかったですね・・・
For Next内の vsoShape を vsoShp に置き換えれば、vsoShape_x に
保存しておく必要はないですよ。
また、最初のIf文のElseの次の行
strMoji = Chr(34) & vsoSelobj(1).Text & Chr(34)
は要らないですね。
あと 10: でも書いたように、intSpatialRelation に visSpatialTouching を
加えればOKではないでしょうか。

16: 名前:P−太投稿日:2004/08/27(金) 15:03
ありがとうございました。とっても勉強になりました。

■トップに戻る リロード  全レスを表示


ログ検索  リロード  前のページ  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 次のページ  総てのスレッド  スレッド総数 696281 - 290 を表示