¿Qué paso con la sentencia
Paint?
¿Recuerdan aquella sentencia Paint de los
primeros lenguajes Basic?. Siempre me he preguntado porque Visual
Basic no la incorpora. Aquí les presento una alternativa «La
sentencia Paint»
'Función API usada en el procedimiento Paint
Declare Function FloodFill Lib "GDI32" (ByVal hDC, ByVal x, ByVal y, _
ByVal crColor As Long)
'----------------------------------------------------------------------
' Sentencia Paint
' Basado en FloodFill API function
' Los parámetros x e y deben ser un punto dentro de la figura cerrada
'----------------------------------------------------------------------
Public Sub Paint(P As PictureBox, x, y, FillClr As Long, Optional FillStyle As Variant)
If IsMissing(FillStyle) Then
P.FillStyle = vbFSSolid
Else
P.FillStyle = Int(FillStyle)
End If
P.FillColor = FillClr
If FloodFill(P.hDC, x, y, P.ForeColor) = 0 Then
MsgBox "Error Sub Paint..."
End If
End Sub
Como Usarla
Vean el siguiente y sencillo ejemplo. Solo
creen un Form con un Picture Box y pegar este código:
DefInt A-Z
Option Explicit
Private Sub Picture1_Paint()
Me.ScaleMode = vbPixels
Picture1.ScaleMode = vbPixels
'Figura de muestra
Picture1.Width = 200
Picture1.Height = 200
Picture1.Line (0, 100)-(100, 100)
Picture1.Line -Step(-50, -50)
Picture1.Line -Step(-50, 50)
'Relleno con color
Paint Picture1, 60, 90, vbYellow
End Sub
Condiciones y Notas
Los módulos se deben trabajar bajo la cláusula DefInt A-Z. | |
La Figura debe ser cerrada y estar dentro del Picture Box | |
La API requiere que el punto sea Integer. Por lo tanto al usar Paint debe usar escala Pixeles (si emplea otra escala, retorne a ella después del Paint) | |
Si quiere declarar la API en un Form,
simplemente preceda la declaración con la palabra Private |
Puede emplear el siguiente conjunto de
constantes para el parámetro FillStyle de Paint (no necesita
declarar la constante):
Constante Estándar | Valor | Descripción |
VbFSSolid | 0 | Sólido |
VbFSTransparent | 1 | Transparente |
VbHorizontalLine | 2 | Línea horizontal |
VbVerticalLine | 3 | Línea vertical |
VbUpwardDiagonal | 4 | Diagonal hacia arriba |
VbDownwardDiagonal | 5 | Diagonal hacia abajo |
VbCross | 6 | Cruzado |
vbDiagonalCross | 7 | Cruzado diagonal |
Por Harvey Triana, Petrosoft.Co, Santafé de Bogotá / Colombia
Cualquier sugeriencia, [email protected]