Autor Tema: No puedo dibujar poligono con GDI+ en VB6  (Leído 2141 veces)

0 Usuarios y 1 Visitante están viendo este tema.

TOLO68

  • Kilobyte
  • **
  • Mensajes: 60
  • Reputación: +2/-0
    • Ver Perfil
No puedo dibujar poligono con GDI+ en VB6
« 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


LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
Re:No puedo dibujar poligono con GDI+ en VB6
« Respuesta #1 en: Febrero 13, 2017, 08:44:40 pm »
Hola TOLO68 encontre  tres errores a tener en cuenta

PointF debe tener elementos Single no Long
Código: [Seleccionar]
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
Código: [Seleccionar]
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

TOLO68

  • Kilobyte
  • **
  • Mensajes: 60
  • Reputación: +2/-0
    • Ver Perfil
Re:No puedo dibujar poligono con GDI+ en VB6
« Respuesta #2 en: Febrero 14, 2017, 11:35:18 am »
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


LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
Re:No puedo dibujar poligono con GDI+ en VB6
« Respuesta #3 en: Febrero 14, 2017, 12:22:09 pm »
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