BorderRemove example for Visual Basic

Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
Public hRgnAll As Long
Private Const RGN_OR = 2

'Declare the RasterProcess object WithEvents
Public WithEvents RasterProc As LEADRasterProcess

'Create the RasterProcess object and UnlockSupport
Private Sub Form_Load()
'.....
    Set RasterProc = CreateObject("LEADRasterProcess.LEADRasterProcess. ")
    LEADRasterView1.Raster.UnlockSupport L_SUPPORT_DOCUMENT, "TestKey"
'.....
End Sub

Private Sub Command59_Click()
'Border Remove
'This example returns a region corresponding to the borders of a bitmap
'For the example, windows regions are returned in the BorderRemove Event and combined.
'In practice it would be easier and faster to just return a LEAD region representing the changes
'The border is removed from the image

Dim nRet As Integer

'Enable the doc clean event
RasterProc.EnableDocCleanEvents = True

'Create a NULL region
hRgnAll = CreateRectRgn(0, 0, 0, 0)
nRet = RasterProc.BorderRemove(LEADRasterView1.Raster, _
                               BORDER_CALLBACK_REGION + BORDER_USE_VARIANCE, _
                               BORDER_ALL, 20, 9, 3)
If (nRet = 0) Then
    LEADRasterView1.Raster.FreeRgn
    LEADRasterView1.Raster.SetRgnHandle hRgnAll, 0, 0, L_RGN_SET
    LEADRasterView1.RgnFrameType= RGNFRAME_COLOR
End If
'delete the Windows Rgn
DeleteObject hRgnAll
End Sub

Private Sub RasterProc_BorderRemove(ByVal hRgn As Long, ByVal uBorderToRemove As Long, ByVal fBoundingRectLeft As Single, ByVal fBoundingRectTop As Single, ByVal fBoundingRectWidth As Single, ByVal fBoundingRectHeight As Single)
    Dim szBorder As String
    CombineRgn hRgnAll, hRgnAll, hRgn, RGN_OR
    Select Case (uBorderToRemove)
        Case BORDER_TOP:
            szBorder = "Top"
        Case BORDER_LEFT:
            szBorder = "Left"
        Case BORDER_RIGHT:
            szBorder = "Right"
        Case BORDER_BOTTOM:
            szBorder = "Bottom"
    End Select
    Debug.Print "Border - " & szBorder & " Bounds:" & CStr(fBoundingRectLeft) & ", " & CStr(fBoundingRectTop) & ", " & CStr(fBoundingRectWidth) & ", " & CStr(fBoundingRectHeight); ""
    RasterProc.DocCleanSuccess = SUCCESS_REMOVE
End Sub