¿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, psoft@latino.net.co


ir al índice