Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: TOLO68 en Febrero 13, 2017, 05:04:37 pm
-
Hola a todos.
Tengo este codigo pero no me funciona, no dibuja el poligono
ya he hecho arcos, rectangulos, circulos, pero con este no lo consigo
Seguro que me falta algo
Si es posible si me podeis poner el codigo para el relleno con un color, solido me basta, aunque sea sin la funcion, yo ya lo pondre luego en la funcion
///////////////////// Modulo.bas /////////////////////
Private Type PointF
X As Long
Y As Long
End Type
Private Declare Function GdipDrawPolygon Lib "gdiplus" (ByVal Graphics As Long, ByVal Pen As Long, Points As PointF, ByVal count As Long) As GpStatus
'''La funcion para dibujar
'''----------------------------------------------------------
Public Function WDGdiPlusPolygon(dstDC As Long)
Dim Pen As Long
Dim Brush As Long
Dim Graphics As Long
'el declare de estas 2 funciones las tengo en el modulo .bas
GdipCreateFromHDC dstDC, Graphics
GdipCreateSolidFill vbBlue, Brush
Dim m_Points(1 To 10) As PointF
Dim i As Long
i = 1
m_Points(i).X = 93
m_Points(i).Y = 87
i = i + 1
m_Points(i).X = 67
m_Points(i).Y = 36
i = i + 1
m_Points(i).X = 241
m_Points(i).Y = 41
i = i + 1
m_Points(i).X = 189
m_Points(i).Y = 78
i = i + 1
GdipDrawPolygon Graphics, Pen, m_Points(1), 5
End Function
///////////////////// Codigo en el Form /////////////////////
'''Picture1 esta en el Form y tiene autoredraw en True
WDGdiPlusPolygon Picture1.hDC
Muchas gracias!!!!!!
Saludos desde España
-
Hola TOLO68 encontre tres errores a tener en cuenta
PointF debe tener elementos Single no Long
Private Type POINTF
X As Single
Y As Single
End Type
luego creas un Brush pero para GdipDrawPolygon tienes que usar un pen el cual no veo que lo crees en el ejemplo y utilizas un ole color vbBlue (no estoy seguro si se llama asi) para gdi plus tienes que usar un color con el alpha chanel (en algun lugar de la web hay una función para convertirlo)
espero que aclare tus dudas aca el ejemplo corregido
Option Explicit
Private Type POINTF
X As Single
Y As Single
End Type
Private Declare Function GdipCreateSolidFill Lib "GdiPlus.dll" (ByVal mColor As Long, ByRef mBrush As Long) As Long
Private Declare Function GdipCreatePen1 Lib "GdiPlus.dll" (ByVal mColor As Long, ByVal mWidth As Single, ByVal mUnit As Long, ByRef mPen As Long) As Long
Private Declare Function GdipDrawPolygon Lib "GdiPlus.dll" (ByVal mGraphics As Long, ByVal mPen As Long, ByRef mPoints As POINTF, ByVal mCount As Long) As Long
Dim gToken As Long
'''La funcion para dibujar
'''----------------------------------------------------------
Public Function WDGdiPlusPolygon(dstDC As Long)
Dim Pen As Long
Dim Brush As Long
Dim Graphics As Long
GdipCreateFromHDC dstDC, Graphics
GdipCreatePen1 &HFFCCFFCC, 3, UnitPixel, Pen
Dim m_Points(1 To 10) As POINTF
Dim i As Long
i = 1
m_Points(i).X = 93
m_Points(i).Y = 87
i = i + 1
m_Points(i).X = 67
m_Points(i).Y = 36
i = i + 1
m_Points(i).X = 241
m_Points(i).Y = 41
i = i + 1
m_Points(i).X = 189
m_Points(i).Y = 78
i = i + 1
GdipDrawPolygon Graphics, Pen, m_Points(1), 5
GdipDeletePen Pen
Call GdipDeleteGraphics(Graphics)
End Function
Private Sub Command1_Click()
WDGdiPlusPolygon Me.hDC
End Sub
Private Sub Form_Load()
Dim hBmp As Long
Dim GDIsi As GdiplusStartupInput
GDIsi.GdiPlusVersion = GdiPlusVersion
GdiplusStartup gToken, GDIsi
End Sub
Private Sub Form_Unload(Cancel As Integer)
GdiplusShutdown gToken
End Sub
-
Muchas gracias Leandro, ya funcionó con el codigo que me dijiste, la verdad es que antes de pedirlo por aqui lo busqué por google, pero no encontre nada.
Para la api GDI32, hay miles de ejemplos, pero para GDI+ son escasos, y mas en VB6, ya que la mayoria son para .NET.
Voy a ver si ahora consigo lo de rellenar el poligono, que es lo que me falta
Por cierto conoceis alguna web con ejemplos de GDI+ para VB6 ????
Hasta pronto
Saludos
-
hola yo suelo entra en los resultado de google a http://www.jose.it-berater.org no es vb6 es Pure Basic y es muy parecido asi que ayuda mucho.
aca tenes un listado de las apis con ejemplos
http://www.jose.it-berater.org/smfforum/index.php?PHPSESSID=59597ff406090991faac9b38b395f354&board=277.0
para rellenar el poligono tenes que usar GdipFillPolygon las declaraciones las podes sacar del api viewer
aca un ejemplo en esa pagina
http://www.jose.it-berater.org/smfforum/index.php?topic=1887.0