Private Declare Function ExtFloodFill Lib "GDI32" (ByVal hDC As Long, _
ByVal X As Long, ByVal Y As Long, ByVal colorCode As Long, _
ByVal fillType As Long) As Long
Const FLOODFILLBORDER = 0
Const FLOODFILLSURFACE = 1
' Fill a region using the current color or brush
' OBJ can be a form or a control that exposes
' a device context (eg a picture box)
' X,Y are given in the current system coordinates
'
' If BORDERCOLOR is specified, fills the area
' enclosed by a border of that color
' If BORDERCOLOR is omitted, the area is filled with
' the color now at coordinates (x,y), and any
' different color is considered to a the border
Sub AreaFill(obj As Object, ByVal X As Long, ByVal Y As Long, _
ByVal colorCode As Long, Optional borderColor As Variant)
Dim x2 As Long, y2 As Long
Dim saveFillStyle As Long
Dim saveFillColor As Long
With obj
' convert into pixel coordinates
x2 = .ScaleX(X, .ScaleMode, vbPixels)
y2 = .ScaleY(Y, .ScaleMode, vbPixels)
' save FillStyle and FillColor properties
saveFillStyle = .FillStyle
saveFillColor = .FillColor
' enforce new properties
.FillStyle = 0
.FillColor = colorCode
If IsMissing(borderColor) Then
' get color at given coordinates
borderColor = .Point(X, Y)
' change all the pixels with that color
ExtFloodFill .hDC, x2, y2, borderColor, FLOODFILLSURFACE
Else
ExtFloodFill .hDC, x2, y2, borderColor, FLOODFILLBORDER
End If
' restore properties
.FillStyle = saveFillStyle
.FillColor = saveFillColor
End With
End Sub
Private Sub Form_Load()
AreaFill Picture1, 20, 20, RGB(13, 168, 252), RGB(123, 234, 176)
Picture1.Refresh
End Sub