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

名称 ・・・・・・・

パート内の全ての子のハンドル取得

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

GetChildHandles

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

ハンドルで指定したパートの中に含まれる全ての子(形状,パート)のハンドルを取得して、配列を含むバリアント型の変数に格納して返す。

使用前提 ・・・・・・・

パート内にある子の数を予めGetChildNumで取得しておく。
対象となるパートのハンドルを前もって取得しておく。

依存関係 ・・・・・・・

特に無し

引数説明 ・・・・・・・

PartHandle:対象となるパートのハンドル(識別番号)
ChildNum:対象となるパートに含まれる子の数 GetChildNum(sub-008)で取得する

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

ハンドルデータ(複数)を配列を含むバリアント変数として返す。

変数説明 ・・・・・・・

orgHandle:実行前の選択状態を保持する変数
DSTemp:ダミー変数(一時保管)
DS():プロシージャレベルでハンドルデータを保持する配列
i:ループのカウンター用変数

注意点 ・・・・・・・

下記の使用例ではパートに含まれる子の数を取得するためにsub-008のGetChildNumというfunctionを使用します。
GetChildNumとGetChildHandleの記述には重複するところがあり非効率のようにも見えるが、GetChildNum単独で使用するケースもあるので敢えて別々にした。
ダウンロード用のファイルにはこのfunctionも含まれています。

 
スクリプト
'パートにある子(形状、パート)のハンドルを配列を含むバリアント変数で返す。
Function GetChildHandles(PartHandle,ChildNum)
  dim orgHandle,DSTemp,i,DS()

  orgHandle=XShade.Handle()           '実行前の選択状況を保存
  XShade.SelectByHandle(PartHandle)
  redim DS(ChildNum)
  XShade.selectChild(0)
  for i=0 to ChildNum-1
    DSTemp=XShade.Handle
    DS(i)=DSTemp
    if i<>ChildNum  then XShade.SelectBrother(1)
  next
  GetChildHandles=DS
  XShade.SelectByHandle(orgHandle)    '実行前の選択状況に復帰
end Function
使用例
'選択したパートに含まれる子のハンドルを全て表示する使用例
option explicit

call main()

sub main()
  dim ChildHandles,PartHandle,num,OK,i
  PartHandle=XShade.handle()
  if GetChildNum(PartHandle,num) then
    ChildHandles=GetChildHandles(PartHandle,num)
  else
    OK=XShade.ShowMessageBox("中断します。",false)
    exit sub
  end if
  for i=0 to num-1
    XShade.message(i&"番目のハンドルは"&ChildHandles(i)&"です。")
  next
end sub

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