Excel VBA GDI32命令による
Turtleグラフィックス描画命令ライブラリの利用例

GDI32命令によるTurtleグラフィックスを使用するための手順例

  1. Module2にGDI32命令によるグラフィックス描画命令ライブラリを貼り付けます。
  2. ユーザーフォームを挿入します。ユーザーフォームのサイズをViewportと同じかそれより大きく設定してください。
  3. Module1にFormを表示するためのプロシージャを記入します。ワークシートにボタンを挿入し、「マクロの登録」でFormを表示するためのプロシージャと関連付けます。

Formを表示するためのプロシージャ

Sub DrawOnForm() 
   UserForm1.Show 
 End Sub
  1. Formにボタンを挿入します。
  2. フォームモジュールのCommandButtonX_Clickプロシージャに、Turtleグラフィックスを表示するプロシージャに対するCALL命令を記入します。

Form上のボタンをクリックした時に起動されるプロシージャ

Private Sub CommandButton1_Click()
    TurtleTest01    ' 多角形を描く
End Sub

Private Sub CommandButton2_Click()
    TurtleTest02    ' スパイラル
End Sub

Private Sub CommandButton3_Click()
    DrawKochCurve    ' Koch曲線
End Sub

Private Sub CommandButton4_Click()
    DrawTree    ' 樹形図(Tree)

End Sub

Private Sub CommandButton5_Click()
  SetViewPort 0, 0, 699, 629
  gClear    ' 画面消去
End Sub
  1. フォームモジュールまたはModule1などに、デバイスコンテキストの取得とTurtleグラフィックスを表示するプロシージャを記入します。

実行結果についてはAddShape命令によるライブラリの利用例の解説を参照してください。

デバイスコンテキストの取得とTurtleグラフィックスの表示

Sub TurtleTest01()
  ' デバイスコンテキストの取得
  monhdc = GetForegroundWindow()
  myhdc = GetDC(monhdc)
  If myhdc = 0 Then Exit Sub

  Dim i, j, side

  InitializeTurtleGraphics
  side = 100
       
  For i = 3 To 9
    For j = 1 To i
        TGMoveL side
        TGTurn 360 / i
      Debug.Print gTGCurrentX, gTGCurrentY
    Next j
  Next i

End Sub

Sub TurtleTest02()
  ' デバイスコンテキストの取得
  monhdc = GetForegroundWindow()
  myhdc = GetDC(monhdc)
  If myhdc = 0 Then Exit Sub

  Dim length, angle, d
       
  InitializeTurtleGraphics

  length = 300
  angle = 89
  d = 2
  TGSetPoint 600, 0
           
   Do While length > d
     TGMoveL length
     TGTurn angle
     length = length - d
   Loop
    
End Sub
   
Sub DrawKochCurve()
  ' デバイスコンテキストの取得
  monhdc = GetForegroundWindow()
  myhdc = GetDC(monhdc)
  If myhdc = 0 Then Exit Sub

  Dim i, length, n

  n = 4           ' コッホ次数
  length = 5          ' 0次の長さ

  InitializeTurtleGraphics
       
  For i = 1 To 3
    Koch n, length
    TGTurn -120
  Next i

End Sub

Sub Koch(n, length)

  If n = 0 Then
    TGMoveL length
  Else
    Koch n - 1, length
    TGTurn 60
    Koch n - 1, length
    TGTurn -120
    Koch n - 1, length
    TGTurn 60
    Koch n - 1, length
  End If
    
End Sub

Sub DrawTree()
  ' デバイスコンテキストの取得
  monhdc = GetForegroundWindow()
  myhdc = GetDC(monhdc)
  If myhdc = 0 Then Exit Sub

  Dim myLength, myTurn, myRatio

  myLength = 200      ' 0次の枝の長さ
  myTurn = 60         ' 折れ曲がりの角度
  myRatio = 0.6       ' 枝の長さの比率
       
  InitializeTurtleGraphics
    
  TreeAll myLength, myTurn, myRatio

End Sub

Sub TreeAll(myLength, myTurn, myRatio)

  If myLength < 5 Then Exit Sub
    
  TGMoveL myLength, vbGreen
  TGTurn -myTurn
   
  TreeAll myLength * myRatio, myTurn, myRatio
    
  TGTurn myTurn
  TGTurn myTurn
    
  TreeAll myLength * myRatio, myTurn, myRatio
  TGTurn -myTurn
    
  TGMoveL -myLength, vbGreen
    
End Sub

  Excelファイル tg-gdi32.xlsmのダウンロード
  Turtleグラフィックス・ライブラリと「多角形を描く」、「スパイラル」、「Koch曲線く」および「樹形図」のプログラムを
含みます。