【API Function】


塗りつぶし

 ある領域を塗りつぶし処理は、Visual Basic標準の機能だけでは難しい ものですが、APIを利用すると簡単に行うことができます。使用する関数も ExtFloodFill関数の1つで、特に複雑な引数指定もありません。 塗りつぶし処理をしやすいプロシージャにまとめておきましたので、 使いやすいと思います。


 この関数の宣言コードと引数についての説明は以下に示すとおりです。

'塗りつぶし描画API
'===========================================================
'ExtFloodFill    ある領域を塗りつぶす
'---------引数----------------------------------------------
'hdc:描画先デバイスコンテキスト
'x,y:塗りつぶし開始座標
'crColor:境界の色、または、塗りつぶす領域の色
'wFillType:塗りつぶし操作の種類、crColorを左右する
'===========================================================
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
    ' wFillType flags
    'crColor で指定した色が囲む範囲を、塗りつぶしの対象とする
    Private Const FLOODFILLBORDER = 0&
    'crColor で指定した色の領域を、塗りつぶしの対象としする。
    Private Const FLOODFILLSURFACE = 1&

 この関数を普通に呼び出しても特に問題ないのですが、塗りつぶす色や 塗りつぶし方はオブジェクトのプロパティで設定するので、その要素も 引数に加えた新たなプロシージャを作成し、処理を一括に行えるように しました。

'===========================================================
'Fill  ある領域を塗りつぶすプロシージャ
'---------引数----------------------------------------------
'hdc:描画先オブジェクト
'x1,y1:塗りつぶし開始座標
'sColor:境界の色、または、塗りつぶす領域の色
'FillColor:塗りつぶし色
'FillType:塗りつぶしタイプ
'FillStyle:塗りつぶし方
'===========================================================
Public Function Fill(Pic As Object, x1 As Long, _
        y1 As Long, sColor As Long, _
        FillColor As Long, FillType As Long, _
        FillStyle As Long) As Long
  Dim oldForeColor As Long '以前の塗りつぶし色
  Dim oldFillStyle As Long '以前の塗りつぶしタイプ
  Dim ret As Long '戻り値
  oldForeColor = Pic.ForeColor
  Pic.FillColor = FillColor '塗りつぶし色を設定
  oldFillStyle = Pic.FillStyle
  Pic.FillStyle = FillStyle '塗りつぶしタイプを設定
  ret = ExtFloodFill(Pic.hdc, x1, y1, sColor, FillType)
  Pic.ForeColor = oldForeColor
  Pic.FillStyle = oldFillStyle
  Fill = ret
End Function

 APIはもともとC++言語で利用される関数なので、たった1つの関数を 呼び出す処理でもこのように1度プロシージャに組み込んで、それを 呼び出す方が効率よく利用しやすくなります。


API Functionインデックス トップ


Copyright(C)2000 Tomoya. All rights reserved.