ミニスクリプト集MENUへ戻る

名称 ・・・・・・・

パートの子の数を取得する

ルーチン名 ・・・・・・・

GetChildNum

スクリプトNo ・・・・・・・ sub- 008
file名 ・・・・・・・ script008.vbs(右クリックのコンテクストメニューでダウンロードできます。(windowsのみ)
修正(2003/05/26)UTF-8からANSIに統一。
概略 ・・・・・・・

ハンドルで指定されたパートに含まれる子(パート,形状)の数を引数で取得する。

使用前提 ・・・・・・・

調べたいパートのハンドルを事前に確保しておく。

依存関係 ・・・・・・・

特に無し

引数説明 ・・・・・・・

PartHandle:調べたいパートのハンドル
ChildNum:処理結果を受けるための引数。パート内の子の数を返す。

戻り値説明 ・・・・・・・

true(成功)、false(失敗)

変数説明 ・・・・・・・

orgHandle:実行前の選択状態を保持する変数
jdg:パート内に子がないとき0を返す。子が存在しないときの処理の分岐に使用する。
DSTemp:ダミー変数(一時保管)
ShTyp:形状のタイプを保管する。(パートかどうか判定するときに使用)
OK:メッセージボックスの反応を受けるもの(ダミー)
i:ループのカウンター用変数

注意点 ・・・・・・・

今回はハンドル利用例、不正な引数の排除例を含んでます。
もし引数が確実にパートのハンドルを示すことが判っているときはCheck1〜Check3を削除してください。また、メッセージが必要なければメッセージの行だけ削除してください。
ハンドルを使用するとより確実な制御が可能になります。

 
スクリプト
'--------------------指定されたハンドルのパート内の線形状の数を返す
Function GetChildNum(PartHandle,ChildNum)
'ハンドルで指定されたパートに含まれているパート、形状の数を返す。
' (注)このサブルーチンを使う前にパートのハンドルを取得しておく。

  dim orgHandle,jdg,DSTemp,i,ShTyp,OK
  orgHandle=XShade.Handle()     '処理前の選択状況を保持

'----check1----
  if XShade.CheckHandle(PartHandle) then
    XShade.SelectByHandle(PartHandle)
  else
      OK=XShade.ShowMessageBox ("ハンドルが存在しません。"&CHR(13)&_
         "ハンドルを確認して、"&CHR(13)&"やり直してください ",False)
      GetChildNum=false:exit function
  end if
'----check2----
  ShTyp=XShade.ShapeType
  if ShTyp<>2 then
    OK=XShade.ShowMessageBox ("パートのハンドルが指定されていません。"&CHR(13)&_
       "パートのハンドルを指定して、"&CHR(13)&"もう一度やり直してください ",False)
    GetChildNum=false:exit function
  end if
'----check3----
  jdg=XShade.SelectChild(1)
  if jdg=0 then
    OK=XShade.ShowMessageBox ("指定のパートには子がありません。"&CHR(13)&_
       "もう一度確認してください ",False)
    GetChildNum=false:Exit Function
  end if

  i=0
  Do
    DSTemp=XShade.Handle()
    i=i+1
    jdg=XShade.SelectBrother(1)
  Loop While jdg<>0
  ChildNum=i
  XShade.SelectByHandle(orgHandle)    '処理前の選択状況に復帰
  GetChildNum=true
end Function
使用例
'選択したパートに子がいくつあるか調べるサンプル
option explicit

call main()

sub main()
  dim Handle,Num,OK
  Handle=XShade.Handle()
  if not GetChildNum(Handle,Num) then
    OK=XShade.ShowMessageBox("中断します。",false)
    exit sub
  end if
  XShade.message("パートの中には"&Num&"個の形状またはパートがあります。")
end sub

ミニスクリプト集MENUへ戻る