図形の内部を塗りつぶす
                                                        玄関へお回り下さい。
三角形の内部を塗りつぶす    (071)
    
フォームにピクチャーコントロールとコマンドボタンを貼付け

宣言セクションに
Option Explicit   'SampleNo=071 WindowsXP VB6.0(SP5) 2002.05.16
'現在選択されているブラシで一定の範囲内を塗りつぶす。(P482)
Private Declare Function ExtFloodFill Lib "gdi32" _
  (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, _
   ByVal crColor As Long, ByVal wFillType As Long) As Long
Private Sub Command1_Click()
'APIを使っての塗りつぶし
  Dim Ret As Long
  With Picture1
  'スケールモードをピクセル単位に
    .Cls       '一旦消去
    .ScaleMode = vbPixels
    '指定しないと境界が解らない
    .ForeColor = QBColor(9)
    '三角形を描画
    '基点から下方向に
    Picture1.Line (10, 10)-(10, 100)
    'その地点から水平方向右側に
    Picture1.Line (10, 100)-(100, 100)
    'その位置から基点を結ぶ
    Picture1.Line (100, 100)-(10, 10)
    .FillStyle = vbFSSolid      '塗りつぶし
    .FillColor = RGB(255, 0, 0)    '赤
    'この位置の他の色の内側部分を塗りつぶす
    Ret = ExtFloodFill(.hdc, 20, 50, .ForeColor, 0&)
    '三角形の外側を塗りつぶす
    .FillColor = RGB(255, 255, 255)  '白
    Ret = ExtFloodFill(.hdc, 80, 10, .ForeColor, 0&)
  End With
End Sub


実行結果
        

限定するなら簡単な方法として      (071)
     Line メソッドを使っての塗りつぶし

Private Sub Command2_Click()
'Line での塗りつぶし
  Dim i As Integer
  Picture1.ScaleMode = vbPixels  'ピクセル単位
  Picture1.BackColor = RGB(255, 227, 240)
  For i = 1 To 45
    Picture1.Line (10 + i, 10 + i)-(10 + i, 100 - i), QBColor(12)
    Picture1.Line (100 - i, 10 + i)-(100 - i, 101 - i), QBColor(9)
    Picture1.Line (10 + i, 10 + i)-(100 - i, 10 + i), QBColor(14)
    Picture1.Line (10 + i, 100 - i)-(100 - i, 100 - i), QBColor(10)
  Next i
End Sub


  結 果
          


円や長方形なら

Private Sub Command3_Click()
  With Picture1
    .FillStyle = vbFSSolid       '塗りつぶし
    .FillColor = RGB(255, 0, 0)     '赤
  End With
   Picture1.Line (100, 100)-(1000, 1000), , B
  With Picture1
    .FillStyle = vbDiagonalCross    '網掛け
    .FillColor = QBColor(9)       '青
  End With
   Picture1.Circle (1600, 600), 400
End Sub




2002/05/16