KoMaDo   VISIO SQUARE : VB/VBA  ■ Headline ■ HOME    

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

471 :座標、原点を取得するには(07)  472 :文字の位置について(03)  473 :CADのzukei (01)  474 :シェイプ中央に接続されたコネクタの取得(01)  475 :グループ化されたオブジェクトから接続先を取得する方法(02)  476 :子シェイプから親のグループシェイプオブジェクトを取得する方法(04)  477 :ショートカットメニューhe追加するには?(01)  478 :ポリラインの座標値(11)  479 :geometry数分のデータを取得したいのですが・・(03)  480 :VBAで表に行を追加するには?(03)  481 :範囲選択された文字を取得するには?(01)  482 :ローカル座標系の点の変換 (07)  483 :VISIO図面の中の図形やテキストの文字や座標を取得するには?(15)  484 :カスタムプロパティの値をAccessのテーブルにセットするには?(03)  485 :VBAで図形のテキストを設定(02)  486 :グループ図形内の子供シェイプの選択 (04)  487 :document名の英文字(01)  488 :VBAからのアクション設定(03)  489 :Visio/VB間のアクティブウィンドウの制御??(01)  490 :RUNADDONが95では効かない!?(01)  491 :Visio2002よりvisio5.0形式で保存(05)  492 :ステータスバー (04)  493 :VBからのページサイズ設定について(03)  494 :VBからコネクタ線を制御する方法ありますか?(01)  495 :シェイプ回転後の幅と高さを取得したい(04)  496 :VBAで図形の回転を行いたい(03)  497 :Exportメソッドの設定の変更方法?(01)  498 :SetResults メソッド の使い方(03)  499 :VBからShapeをダブルクリックした時のイベントの制御(05)  500 :VBAでdxfを読み込む方法は?(01)  501 :自動で文字列ステンシル配置、LocPinXを求めるには?(01)  502 :ユーザにページの名前を変更させない方法は?(05)  503 :Visioのウィンドウをアクティブにするには?(02)  504 :UMLステンシルのプロパティ設定(01)  505 :Win9X と Visio2000(03)  506 :フォーム内での図形描画(02)  507 :メニューへのマクロの関連付けと引数の渡し方(01)  508 :データベースの内容を図面に自動で反映する方法(03)  509 :SETUP時エラー(01)  510 :VBAの参考書(01) 
ログ検索  リロード  前のページ  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 次のページ  総てのスレッド  スレッド総数 696471 - 480 を表示


471: 座標、原点を取得するには  全レス

01: 名前:ココ投稿日:2002/08/20(火) 10:29
Visio2000で、ある図形を選択状態(クリックかダブルクリックなどのイベントで)
にして、その図形の原点を取得するには、どうしたらいいのでしょうか。

02: 名前:なか投稿日:2002/08/20(火) 11:54
何が解らないのか解らないので一連の処理を記述します。

@ます、ActiveWindowプロパティでWindowオブジェクトを取得
AWindowオブジェクトのSelectionプロパティでSelectionオブジェクトを取得
BSelectionオブジェクトのItem[U]プロパティでShapeオブジェクトを取得
これで選択状態の図形を取得完了
CShapeオブジェクトのXYToPageメソッドで図形の原点を取得
以上で選択した図形の原点座標は取得できます。
但し、選択した図形がグループ内のメンバー図形だと上記だけでは上手くいきません。

03: 名前:ココ投稿日:2002/08/20(火) 14:56
ありがとうございます。
VBAの文法に疎いもので、
申し訳ありませんが、
もう少し、具体的なソースコードで教えていただけないでしょうか。

04: 名前:なか投稿日:2002/08/20(火) 19:19
Dim winObj As Visio.Window
Dim selObj As Visio.Selection
Dim shpObj As Visio.Shape

winObj = ActiveWindow
selObj = winObj.Selection
shpObj = selObj.Item(1)

x = 0.0
y = 0.0
shpObj.XYToPage x, y, xprime, prime


実際に作って動かしたわけではないので正常に動作するか解りませんが
こんな感じのコードになります。

05: 名前:ココ投稿日:2002/08/21(水) 11:51
ありがとうございます。
もう1つお尋ねしたいのですが、
図形をダブルクリックしたときに、
選択された図形の座標を取得したいのですが、
どのようにすればよいのでしょうか。
よろしくお願いします。

06: 名前:なか投稿日:2002/08/22(木) 08:48
質問の意味がいまいち解らないんですが、
図形をダブルクリックした時にマクロをどのように実行指したら良いか
ってことですかね?

@シェープシートを表示します。
AイベントセクションのEventDblClickセルに
CALLTHIS("ThisDocument.マクロ名")
を記述します。

07: 名前:ココ投稿日:2002/08/26(月) 14:03
ありがとうございます。
いままで、AutoCADでのVBAを想定していたので、
Documentオブジェクトに、DoubleCliclイベントが存在していたので、
そこで、カレントの図形の座標を取得できたのですが、
Visioの場合は、DoubleClicllイベントが存在しないので、
イベントセクションを利用すれば、代用になるのでしょうか。
よろしくお願いします。

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



472: 文字の位置について  全レス

01: 名前:ほし投稿日:2002/08/17(土) 10:39
Visioでは文字の位置がテキストBOXに対して
中央とか右揃え等指定できますが
文字の開始位置(開始座標)は取得出来ないのでしょうか?
ワードラップなどあるのでやっぱり取得できないのでしょうか?
どなたか、お願いします。

02: 名前:oki投稿日:2002/08/17(土) 11:05
文字の開始位置は直接は取得できないと思います。
余白やインデント等の文字に関する情報を取得して、自分で計算するしかないみたいです。

03: 名前:ほし投稿日:2002/08/20(火) 08:30
なるほど・・・
確かに文字は設定項目が多いので
その設定によって大きく変わるものもあるようですし。
地道に計算していきます。
ありがとうございました。

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



473: CADのzukei  全レス

01: 名前:名無しさん投稿日:2002/08/19(月) 14:41
はじめましてVisio初心者です。
CADで作成された図面の、図形情報(幅や高さ、原点)を
Visio2000のVBAより取得したいのですが、
どのようにしたらいいのでしょうか。
よろしくお願いします。

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



474: シェイプ中央に接続されたコネクタの取得  全レス

01: 名前:CHERRY投稿日:2002/08/15(木) 17:06
シェイプの枠にある接続ポイントに接着されたコネクタは、
FromConnectで取得できるのですが、
コネクタの終点(又は始点)をシェイプの中央あたりまでドラックし
接着した場合(ドラック中にシェイプ枠が赤くなる+コネクタの
始点マーク、終点マークがただの赤■表示になる)の接続では、
FromConnectで接続が取得できません。。。

上記、シェイプ中央付近にコネクタをドラックした接続は
どのようにして取得すればよろしいのでしょうか。
ご存知の方がおられましたら、ご教示いただけませんか?

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



475: グループ化されたオブジェクトから接続先を取得する方法  全レス

01: 名前:CHERRY投稿日:2002/08/13(火) 18:04
グループ化されたShapeオブジェクトからConnectsコレクションを取得する方法
をご存知の方がおられましたら、その方法をご教示いただけませんか。

具体的には、
ShapeAとShapeBをグループ化し、ShapeCを作ります。ShapeCに接続ポイントを
追加し、そこへコネクタを接着します。
このとき、ShapeCのConnectsコレクション、FromConnectsコレクションは
空となってしまいます。
グループ化されたシェイプから、接続先の情報を取得する為に、Connects
コレクションを取得しようと考えています。

02: 名前:CHERRY投稿日:2002/08/15(木) 17:00
本件解決いたしました。お騒がせいたしました。

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



476: 子シェイプから親のグループシェイプオブジェクトを取得する方法  全レス

01: 名前:CHERRY投稿日:2002/08/08(木) 15:39
コネクタから接続先のシェイプオブジェクトは取得できましたが、
取得したシェイプが含まれるグループシェイプは取得可能でしょうか?

どなたか取得の方法をご存知でしたら、ご教示いただけませんか。
宜しくお願いいたします。

02: 名前:CHERRY投稿日:2002/08/08(木) 19:09
解決しました。お騒がせいたしました。

03: 名前:なか投稿日:2002/08/08(木) 19:11
ShapeオブジェクトのContainingShapeプロパティを使用すれば
取得できるはずです。

04: 名前:CHERRY投稿日:2002/08/13(火) 17:55
なかさん
ご回答ありがとうございます。

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



477: ショートカットメニューhe追加するには?  全レス

01: 名前:たまご投稿日:2002/08/08(木) 17:05
いつもお世話になってます。
Visio2000を使ってます。

マスタシェイプを新規作成し、そのマスタを右クリックした時に
ショートカットメニューにカスタムプロパティ定義を表示したいのですが出来ますか?
(シェイプでは出来たんですけど・・・マスタだと出来なくて。)
しかも、カスタムプロパティ定義を設定していないマスタの場合でも
「定義しますか?」ではなく任意のラベルで表示させたいのですが出来るでしょうか?

ご指導宜しくお願い致します。

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



478: ポリラインの座標値  全レス

01: 名前:ほし投稿日:2002/07/23(火) 16:48
ポリラインの数値を取得したいのですが
どのようにすればいいのでしょうか?

式ではなく、値そのものがほしいのですが・・・

03: 名前:ほし投稿日:2002/07/24(水) 08:29
ええ。C++です。
あまりみかけないようですが・・・

getResultでは終点座標とポリライン式というのが取れるんですが
値そのものではないようです。,
NURBStoとかも同様です。
GetPolylineData()というのを見つけましたが
うまく値が取得できない(?使い方が悪いのか)ところです。

04: 名前:ほし投稿日:2002/07/24(水) 08:32
あ、すみません。
CVisioCellクラスですね・・・
CVisioShapeクラスの話でした。
試してみます、ありがとうございました。

05: 名前:ほし投稿日:2002/07/24(水) 11:50
やはり、成功しません。…
CVisioCellクラスのgetResult()の引数がおかしいのかな?
行き詰まってしまいました。
使い方の分かる方、ご教授お願いします。

06: 名前:なか投稿日:2002/07/24(水) 14:02
なかです。
ポリラインのこと知らずに適当なこと言ってすいません。
getResultで取得できるのはセルが存在するものだけですから
ポリラインの座標の取得は根本的にできませんね。
取得するにはGetPolylineData()を使うしかないようです。

07: 名前:なか投稿日:2002/07/25(木) 12:39
なかです。
GetPolylineData()を使えばポリラインの座標が取得できる
こと確認しました。
もう解決したかも知れませんが一応
以下にサンプルソースを記載します。

CVisioSection section;
CVisioRow row;

hr = shape.Section(visSectionFirstComponent, section);
check_valid(hr, section);
hr = section.Row(2, row);
check_valid(hr, row);
SAFEARRAY FAR* xyArray;
hr = row.GetPolylineData(visGeomWHPct, &xyArray);
if ( !SUCCEEDED(hr) ) goto CU;
double HUGEP *pdb;
hr = SafeArrayAccessData(xyArray, (void HUGEP* FAR*)&pdb);
if ( !SUCCEEDED(hr) ) goto CU;
for (ULONG i = 0; i < xyArray->cbElements; i++)
{
double dbData = pdb[i];
}
SafeArrayUnaccessData(xyArray);
SafeArrayDestroy(xyArray);

08: 名前:ほし投稿日:2002/07/25(木) 13:35
ありがとうございます。
なかなか出来ないので嫌になって
少し距離をおいてたんです。

使わせていただきます。

09: 名前:なか投稿日:2002/07/25(木) 16:09
なかです。

記載したサンプルソースに一部誤りがありましたので修正版を記載します。

CVisioSection section;
CVisioRow row;

hr = shape.Section(visSectionFirstComponent, section);
check_valid(hr, section);
hr = section.Row(2, row);
check_valid(hr, row);
SAFEARRAY FAR* xyArray;
hr = row.GetPolylineData(visGeomWHPct, &xyArray);
if ( !SUCCEEDED(hr) ) goto CU;

double HUGEP *pdb;
hr = SafeArrayAccessData(xyArray, (void HUGEP* FAR*)&pdb);
if (FAILED(hr))
goto CU;
// 以下修正箇所
long lBound, uBound;
if ( NOERROR == SafeArrayGetLBound(xyArray, 1, &lBound) &&
NOERROR == SafeArrayGetUBound(xyArray, 1, &uBound) )
{
long cElements = uBound-lBound+1;
for (long i = 0; i < cElements; i++)
// ここまで
{
double dbData = pdb[i];
}
}
SafeArrayUnaccessData(xyArray);

10: 名前:ほし投稿日:2002/07/25(木) 16:31
わざわざありがとうございます。

ちょうど、トラぶってたのでこちらでやってみます。

11: 名前:ほし投稿日:2002/08/02(金) 16:34
やっと、できました。
随分時間がかかってしまいましたが成功ししました。

ありがとうございます。

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



479: geometry数分のデータを取得したいのですが・・  全レス

01: 名前:ほし投稿日:2002/08/01(木) 18:47
図形座標について質問です。

Document->Pages->Page->Shapes->Shape
でアクセス後、
shape.GeometryCount( &nGeo );
でShapeに含まれるGeometry数を取得しています。
この数分ループして実際の線文等の座標値を取得していますが
Geometry2番目以降のデータが取れません。

どのようにすれば正常に取得できるのでしょうか?

C++なので分かりづらいかもしれませんがお願いします。

for (i=0 ;i<nGeo ;i++){
shape.RowCount( &nRow);
for(j=0;j<nRow;j++){
shape.GetResults(&SRCStream, visGetFloats , &UnitsArray, &formulaArray);
}
}

02: 名前:なか投稿日:2002/08/02(金) 09:36
なかです。
特にコード上問題はないと思いますがSRCStreamのデータが
正しくセットされているか確認して見て下さい。
例えば
>Geometry2番目以降のデータが取れません。
とのことですがコード上何らかのデータを取得しいますよね。
もし、全てGeometry1と同じ値が取れるなら
selectionidxを更新していない可能性があります。
Geometryの2番目以降のidxはvisSectionFirstComponent+i
となっています。

03: 名前:ほし投稿日:2002/08/02(金) 16:31
ありがとうございます。
そのとおりでした。

ちょっと、考えが足りなかったですね。
申し訳ないです。

今、楕円弧の解析をしているのですが
この楕円弧はかなり曲者でして、、、EllipticalArcToで取得できるのは
終点・制御点・x 軸を基準とした、円弧の長軸の角度・長軸と短軸の比率
なんです。

ここから計算で楕円弧の中心・長軸と短軸・開始角などなど得たいですが
計算方法が思いつかないです。

どなたかお願いします。

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



480: VBAで表に行を追加するには?  全レス

01: 名前:Fukui投稿日:2002/07/30(火) 16:20
VBAで描画ページ上に配置した表に行を追加するマクロを作成したいのですが、
WordのようなInsertRow関数が用意されていません。
どの様に実装したら宜しいでしょうか?

ご存知の方がいらしたら、ぜひ教えて頂きたいのです。
よろしくお願いします。

02: 名前:なか投稿日:2002/07/31(水) 12:31
なかです。

いまいち状況が解らないので詳しいことはいえませんが
参考程度にして下さい。

VBAで描画ページ上に配置した表って言うのがチャートとグラフ
またはビジネスフォームステンシル内にある表のことなら
表のアクションに使われているアドオンをVBAから実行して
やればできると思います。(AddonオブジェクトのRunメソッドを
使えばできるはず(使ったことないんで詳しいことは言えません))

また、表がオリジナルなら行を挿入するアドオンを自作するしか
方法はありません。

余談
私も仕事でオリジナルの表に行の挿入等のアドオンを作成していますが
かなり大変です。表が大きければ大きいほどVisioで表を作成するのは
大変です。(表は10×10程度までのものだけにしといた方が無難、
それ以上のものはその他のツールを使って作ることをお勧めします。)

03: 名前:Fukui投稿日:2002/07/31(水) 13:48
解答ありがとうございます。

現在行いたい処理は、VBAで描画ページ上にビジネスフォームステンシル内にある
表を配置し、其の表に対し行を追加するというものです。
なので,表のアクションに使われているアドオンをVBAから実行するという事ですね。

ありがとうございました。
早速実装してみます。

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


ログ検索  リロード  前のページ  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 次のページ  総てのスレッド  スレッド総数 696471 - 480 を表示