図形の内部を塗りつぶす |
三角形の内部を塗りつぶす (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