FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour actualizar o substituto de gdiplus de canalfive
Posts: 408
Joined: Sun Aug 13, 2006 05:38 AM
actualizar o substituto de gdiplus de canalfive
Posted: Thu Jan 16, 2014 06:10 PM

Hola, estoy retomando la programaci贸n en fivewin despues de un breve descanso, realmente cre铆 que ser铆a mas tiempo, si no permamente, pero estamos de regreso, y aprovecho para un comercial antes de la consulta, si alguien esta interesado en mi ide, y tiene alg煤na sugerencia o comentario, ser谩 bien venido aprovechando que retomo fivewin.

Bueno, el problema, la empresa para la que estoy trabajando tiene programas en la versi贸n 8.10 de fwh, y por consiguiente, una versi贸n de xharbour de aquellas fechas, lo que se quiere es actualizar a una versi贸n m谩s reciente fw y xharbour, inclusive tal vez a 64 bits y/o migrar a harbour. El problema es que hay algunas librer铆as de terceros, entre ellas gdiplus de canalfive, la cual provoca la caida del sistema al compilar con una versi贸n mas reciente de fw y xharbour 驴alguien sabe donde puedo conseguir una versi贸n mas reciente de est谩 librer铆a o que podr铆a usar en susbstituci贸n de ella?

Saludos

Quique
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: actualizar o substituto de gdiplus de canalfive
Posted: Thu Jan 16, 2014 10:26 PM

Bienvenido Quique.
Actualmente fwh incluye muchas funciones propias de CanaFive, hay almenos tres ficheros conteniendo muchas funciones de canalfive
\classes\c5tooltip.prg
\functios\c5cnew.c
\functios\c5lib.c

tendrias que revisar cuales de las que usas actualmente ya estan en esos fuentes.

salu2
carlos vargas

Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 711
Joined: Thu Oct 06, 2005 09:57 PM
Re: actualizar o substituto de gdiplus de canalfive
Posted: Fri Jan 17, 2014 05:33 AM

Carlos, gracias por la informaci贸n. 驴Pero est谩n documentadas? He visitado la Wiki y no veo ninguna referencia.

Un saludo



Manuel
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: actualizar o substituto de gdiplus de canalfive
Posted: Fri Jan 17, 2014 08:32 AM

Tambien
..\clases\vistamnu.prg

No?

Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noci贸n del tiempo

El secreto de la felicidad no est谩 en hacer lo que te gusta, sino en que te guste lo que haces
Posts: 711
Joined: Thu Oct 06, 2005 09:57 PM
Re: actualizar o substituto de gdiplus de canalfive
Posted: Sun Jan 19, 2014 04:01 AM
cnavarro wrote:Tambien
..\clases\vistamnu.prg

No?


Cristobal, 驴existe alguna documentaci贸n de ayuda?
Un saludo



Manuel
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: actualizar o substituto de gdiplus de canalfive
Posted: Sun Jan 19, 2014 12:03 PM

Manuel,
Puedes mirar estos ejemplos
\Fwh\samples\vistamn1.prg
\Fwh\samples\c5toolti.prg

Quique, seguramente para las funciones que necesites podamos echarte una mano

http://msdn.microsoft.com/en-us/library ... 98(v=vs.85).aspx

Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noci贸n del tiempo

El secreto de la felicidad no est谩 en hacer lo que te gusta, sino en que te guste lo que haces
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: actualizar o substituto de gdiplus de canalfive
Posted: Sun Jan 19, 2014 01:56 PM

Quique,

FWH incluye desde la versi贸n 11.10 la Clase TGdiPlus.

Tienes ejemplos de uso en samples/gdiplus.prg y gdiplus2.prg

En cuanto a la documentaci贸n del wiki, Manuel tienes toda la raz贸n, esas clases que se han comentado no se han documentado a煤n, puesto que las cedi贸 Paco Garcia y entre todos tendremos que ir aprendiendo a usarlas y documentarlas :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 711
Joined: Thu Oct 06, 2005 09:57 PM
Re: actualizar o substituto de gdiplus de canalfive
Posted: Sun Jan 19, 2014 03:28 PM
cnavarro wrote:Manuel,
Puedes mirar estos ejemplos
\Fwh\samples\vistamn1.prg
\Fwh\samples\c5toolti.prg

Quique, seguramente para las funciones que necesites podamos echarte una mano
http://msdn.microsoft.com/en-us/library ... 98(v=vs.85).aspx


"http://msdn.microsoft.com/en-us/library/ms533895(v=VS.85).aspx"

Gracias
Un saludo



Manuel
Posts: 408
Joined: Sun Aug 13, 2006 05:38 AM
Re: actualizar o substituto de gdiplus de canalfive
Posted: Fri Jan 24, 2014 05:22 AM

Gracias por las respuestas y perd贸n por la tardanza, pero asi es esto de tomar programas asi de repente y que el jefe te pida modificaciones en mas de uno a la vez, hay que ir resolviendo lo que va saliendo.

He quitado la librer铆a de canalfive pero me marca que no encuentra las funciones TIMAGEGDIPLUS e IMAGE, ambas son clases 驴alguien tiene alguna idea?

Saludos

Quique
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: actualizar o substituto de gdiplus de canalfive
Posted: Sun Jan 26, 2014 01:02 PM

Quique,

Sabes que DATAs y M茅todos tienen esas clases ? gracias

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 408
Joined: Sun Aug 13, 2006 05:38 AM
Re: actualizar o substituto de gdiplus de canalfive
Posted: Mon Jan 27, 2014 01:24 AM
Este es el fuente donde se encuentra la clase timagegdiplus (TImageGdiPlus.prg)

Code (fw): Select all Collapse
#include "hbclass.ch"
#include "GdiPlus.ch"

#define VK_CONTROL 17
#define VK_SHIFT 聽 16
#define VK_TAB 聽 聽 聽9
#define CRLF 聽 聽 聽 Chr( 9 ) + Chr( 13 )

#xcommand DEFAULT <uVar> := <uVal> => IF <uVar> == NIL; <uVar> := <uVal>; ENDIF

//-----------------------------------------------------------------------------------------------//
INIT PROC C5ImageGdiPlus
聽 聽RegisterClass()
聽 聽RETURN

//-----------------------------------------------------------------------------------------------//
CLASS TImageGdiPlus From TControl

聽 聽DATA oImage
聽 聽DATA nLeft 聽 聽 聽 聽 聽 聽 聽 INIT 010
聽 聽DATA nTop 聽 聽 聽 聽 聽 聽 聽 聽INIT 010
聽 聽DATA nWidth 聽 聽 聽 聽 聽 聽 聽INIT 200
聽 聽DATA nHeight 聽 聽 聽 聽 聽 聽 INIT 200

聽 聽DATA nX 聽 聽 聽 聽 聽 聽 聽 聽 聽INIT 000
聽 聽DATA nY 聽 聽 聽 聽 聽 聽 聽 聽 聽INIT 000
聽 聽DATA nZoom 聽 聽 聽 聽 聽 聽 聽 INIT 001
聽 聽DATA nStep 聽 聽 聽 聽 聽 聽 聽 INIT 010 聽 聽 // pixeles que se va a mover cada que presionas una tecla de movimiento
聽 聽DATA nFactSpeed 聽 聽 聽 聽 聽INIT 003 聽 聽 // Factor por el que se va a multiplicar cuando hagas GoXXXX( .T. )
聽 聽DATA nFactZoom 聽 聽 聽 聽 聽 INIT 0.005
聽 聽DATA nMaxZoom 聽 聽 聽 聽 聽 聽INIT 002
聽 聽DATA nMinZoom 聽 聽 聽 聽 聽 聽INIT 0.500

聽 聽DATA nColorRect 聽 聽 聽 聽 聽INIT 0x10FF0000
聽 聽DATA aColorRect 聽 聽 聽 聽 聽INIT { 0, 0, 0, 0 }

聽 聽DATA nAjusteX 聽 聽 聽 聽 聽 聽INIT 0
聽 聽DATA nAjusteY 聽 聽 聽 聽 聽 聽INIT 0

聽 聽DATA nAngle 聽 聽 聽 聽 聽 聽 聽INIT 0
聽 聽DATA nFactAngle 聽 聽 聽 聽 聽INIT 0.10

聽 聽METHOD New()
聽 聽METHOD SetImage( oImage, lEnd )
聽 聽Method SetImage2( cImage )
聽 聽METHOD OnPaint()

聽 聽METHOD GoLeft()
聽 聽METHOD GoRight()
聽 聽METHOD GoUp()
聽 聽METHOD GoDown()

聽 聽METHOD ZoomPlus() 聽 聽 聽 聽INLINE ::nZoom += Min( ::nFactZoom, ::nMaxZoom - ::nZoom )
聽 聽METHOD ZoomMinus() 聽 聽 聽 INLINE ::nZoom -= Min( ::nFactZoom, ::nZoom - ::nMinZoom )

聽 聽METHOD SetPos( nX, nY ) 聽INLINE ::nX := nX, ::nY := nY, ::Refresh()

聽 聽DATA bKeyDown

聽 聽METHOD OnKeyDown()

聽 聽METHOD Redefine()
聽 聽METHOD Initiate()
聽 聽METHOD Link()

聽 聽DATA lMouseMark 聽 聽 聽 聽 聽INIT .F.
聽 聽DATA aMouseMark 聽 聽 聽 聽 聽INIT { 0, 0, 0, 0 }
聽 聽DATA nMouseMark 聽 聽 聽 聽 聽INIT 0x40FF0000
聽 聽DATA lButtonDown 聽 聽 聽 聽 INIT .F.
聽 聽DATA nMouseX 聽 聽 聽 聽 聽 聽 INIT 0
聽 聽DATA nMouseY 聽 聽 聽 聽 聽 聽 INIT 0
聽 聽DATA lDestroy 聽 聽 聽 聽 聽 聽INIT .T.

聽 聽METHOD OnMouseMove()
聽 聽METHOD OnLButtonDown()
聽 聽METHOD OnLButtonUp()
聽 聽METHOD OnRButtonUp()

聽 聽METHOD AllPage()

聽 聽Method OnNCDestroy()

聽 聽Method SetImage()

ENDCLASS

//-----------------------------------------------------------------------------------------------//
Method OnNCDestroy()
聽 聽if ::oImage != NIL .AND. ::lDestroy
聽 聽 聽 ::oImage:End()
聽 聽Endif

聽 聽RETURN NIL

//-----------------------------------------------------------------------------------------------//
METHOD OnLButtonUp()

聽 聽IF ::lMouseMark
聽 聽 聽 ::lButtonDown := .F.
聽 聽ENDIF

聽 聽IF GetKeyState( VK_CONTROL )

聽 聽 聽 ::nX 聽 聽:= ::aMouseMark[01] * -1
聽 聽 聽 ::nY 聽 聽:= ::aMouseMark[02] * -1
聽 聽 聽 ::nZoom := 1

聽 聽 聽 ::Refresh()

聽 聽ENDIF

聽 聽RETURN NIL

//-----------------------------------------------------------------------------------------------//
METHOD OnRButtonUp()
聽 聽IF ::lMouseMark

聽 聽 聽 IF ::aMouseMark[03] != 0

聽 聽 聽 聽 聽::nX := ::aMouseMark[01] * -1
聽 聽 聽 聽 聽::nY := ::aMouseMark[02] * -1

聽 聽 聽 聽 聽::nZoom := 1

聽 聽 聽 聽 聽::nZoom := Min( ::GetCliRect:nWidth() / ::aMouseMark[03],;
聽 聽 聽 聽 聽 聽 ::GetCliRect():nHeight() / ::aMouseMark[04] )

聽 聽 聽 聽 聽::aMouseMark := { 0, 0, 0, 0 }

聽 聽 聽 ENDIF

聽 聽 聽 ::Refresh()

聽 聽ENDIF

聽 聽RETURN NIL

//-----------------------------------------------------------------------------------------------//
METHOD AllPage()
聽 聽::nX := 0
聽 聽::nY := 0
聽 聽::nZoom := Min( ::GetCliRect():nWidth / ::oImage:GetWidth(),;
聽 聽 聽 ::GetCliRect():nHeight / ::oImage:GetHeight )
聽 聽RETURN NIL

//-----------------------------------------------------------------------------------------------//
METHOD OnLButtonDown()
聽 聽IF ::lMouseMark
聽 聽 聽 ::aMouseMark[01] := ::nMouseX
聽 聽 聽 ::aMouseMark[02] := ::nMouseY
聽 聽 聽 ::lButtonDown 聽 聽:= .T.
聽 聽ENDIF
聽 聽RETURN NIL

//-----------------------------------------------------------------------------------------------//
METHOD OnMouseMove( nX, nY )
聽 聽LOCAL a

聽 聽IF ::lMouseMark

聽 聽 聽 ::nMouseX := ( ::nX * -1 ) + ( nX / ::nZoom )
聽 聽 聽 ::nMouseY := ( ::nY * -1 ) + ( nY / ::nZoom )

聽 聽 聽 IF ::lButtonDown
聽 聽 聽 聽 聽::aMouseMark[03] := ::nMouseX - ::aMouseMark[01]
聽 聽 聽 聽 聽::aMouseMark[04] := ::nMouseY - ::aMouseMark[02]
聽 聽 聽 聽 聽::Refresh()
聽 聽 聽 ENDIF

聽 聽 聽 a := ::aMouseMark

聽 聽ENDIF

聽 聽RETURN NIL

//-----------------------------------------------------------------------------------------------//
METHOD Redefine( oWnd, nId )
聽 聽::oWnd := oWnd
聽 聽::nId 聽:= nId
聽 聽::oWnd:AddControl( SELF )
聽 聽RETURN SELF

//-----------------------------------------------------------------------------------------------//
METHOD Initiate()
聽 聽::hWnd := GetDlgItem( ::oWnd:hWnd, ::nId )
聽 聽::Link( ::hWnd )
聽 聽RETURN NIL

//-----------------------------------------------------------------------------------------------//
METHOD OnKeyDown( nKey )
聽 聽LOCAL lSpeed

聽 聽IF nKey == 119 // VK_F8
聽 聽 聽 ::GoLeft( .T. )
聽 聽 聽 ::Refresh()
聽 聽ENDIF

聽 聽IF nKey == 120 // VK_F9
聽 聽 聽 ::GoRight( .T. )
聽 聽 聽 ::Refresh()
聽 聽ENDIF

聽 聽IF !GetKeyState( VK_CONTROL )
聽 聽 聽 RETURN NIL
聽 聽ENDIF

聽 聽IF GetKeyState( VK_CONTROL ) .AND. GetKeyState( 65 )
聽 聽 聽 DO CASE
聽 聽 聽 聽 聽CASE nKey == 37
聽 聽 聽 聽 聽 聽 ::nAjusteX += 05
聽 聽 聽 聽 聽CASE nKey == 38
聽 聽 聽 聽 聽 聽 ::nAjusteY += 05
聽 聽 聽 聽 聽CASE nKey == 39
聽 聽 聽 聽 聽 聽 ::nAjusteX -= 05
聽 聽 聽 聽 聽CASE nKey == 40
聽 聽 聽 聽 聽 聽 ::nAjusteY -= 05
聽 聽 聽 聽 聽CASE nKey == 107
聽 聽 聽 聽 聽 聽 IF ::nAngle < 聽45; ::nAngle += ::nFactAngle; ENDIF
聽 聽 聽 聽 聽CASE nKey == 109
聽 聽 聽 聽 聽 聽 IF ::nAngle > -45; ::nAngle -= ::nFactAngle; ENDIF
聽 聽 聽 ENDCASE
聽 聽 聽 ::Refresh()
聽 聽 聽 RETURN NIL
聽 聽ENDIF

聽 聽IF GetKeyState( VK_SHIFT )
聽 聽 聽 lSpeed := .T.
聽 聽ENDIF

聽 聽DO CASE
聽 聽 聽 CASE nKey == 80
聽 聽 聽 聽 聽::AllPage()
聽 聽 聽 CASE nKey == 37
聽 聽 聽 聽 聽::GoLeft ( lSpeed )
聽 聽 聽 CASE nKey == 38
聽 聽 聽 聽 聽::GoUp 聽 ( lSpeed )
聽 聽 聽 CASE nKey == 39
聽 聽 聽 聽 聽::GoRight( lSpeed )
聽 聽 聽 CASE nKey == 40
聽 聽 聽 聽 聽::GoDown ( lSpeed )
聽 聽 聽 CASE nKey == 107 // +
聽 聽 聽 聽 聽::ZoomPlus()
聽 聽 聽 CASE nKey == 109 // -
聽 聽 聽 聽 聽::ZoomMinus()
聽 聽ENDCASE

聽 聽::Refresh()
聽 聽RETURN NIL

//-----------------------------------------------------------------------------------------------//
METHOD GoLeft( lSpeed )
聽 聽LOCAL nSt
聽 聽DEFAULT lSpeed := .F.
聽 聽nSt := ::nStep * IF( lSpeed, ::nFactSpeed, 1 )
聽 聽::nX += Min( nSt, Abs( ::nX ) )
聽 聽RETURN NIL

//-----------------------------------------------------------------------------------------------//
METHOD GoRight( lSpeed )
聽 聽LOCAL oRC := ::GetCliRect()
聽 聽LOCAL nSt
聽 聽DEFAULT lSpeed := .F.
聽 聽nSt := ::nStep * IF( lSpeed, ::nFactSpeed, 1 )

聽 聽::nX -= Min( nSt, ::oImage:GetWidth() - Abs( ::nX ) - ( oRC:nWidth / ::nZoom ) )

聽 聽RETURN NIL

//-----------------------------------------------------------------------------------------------//
METHOD GoUp( lSpeed )
聽 聽LOCAL nSt
聽 聽DEFAULT lSpeed := .F.
聽 聽nSt := ::nStep * IF( lSpeed, ::nFactSpeed, 1 )
聽 聽::nY += Min( nSt, Abs( ::nY ) )
聽 聽RETURN NIL

//-----------------------------------------------------------------------------------------------//
METHOD GoDown( lSpeed )
聽 聽LOCAL oRC := ::GetCliRect()
聽 聽LOCAL nSt
聽 聽DEFAULT lSpeed := .F.
聽 聽nSt := ::nStep * IF( lSpeed, ::nFactSpeed, 1 )
聽 聽::nY -= Min( nSt, ::oImage:GetHeight() - Abs( ::nY ) - ( oRC:nHeight / ::nZoom ) )
聽 聽RETURN NIL


//-----------------------------------------------------------------------------------------------//
METHOD SetImage( oImage, lEnd )
聽 聽LOCAL oImageTmp
聽 聽DEFAULT lEnd := .T.

聽 聽IF ::oImage != NIL
聽 聽 聽 oImageTmp := ::oImage
聽 聽ENDIF

聽 聽::oImage := oImage

聽 聽IF lEnd .AND. oImageTmp != NIL
聽 聽 聽 oImageTmp:END()
聽 聽ENDIF

聽 聽RETURN SELF


//-----------------------------------------------------------------------------------------------//
METHOD SetImage2( cImage )
聽 聽Local oImage, oImageTmp
聽 聽oImage := Image( cImage )
聽 聽if ::oImage != NIL
聽 聽 聽 oImageTmp := ::oImage
聽 聽Endif
聽 聽::oImage := oImage:GetThumbnailImage( oImage:GetWidth(), oImage:GetHeight() )
聽 聽if oImageTmp != NIL
聽 聽 聽 oImageTmp:End()
聽 聽Endif
聽 聽oImage:End()
聽 聽Return NIL



//-----------------------------------------------------------------------------------------------//
METHOD New( oWnd, nLeft, nTop, nWidth, nHeight )

聽 聽::oWnd := oWnd

聽 聽DEFAULT nLeft 聽 := ::nLeft
聽 聽DEFAULT nTop 聽 聽:= ::nTop
聽 聽DEFAULT nWidth 聽:= ::nWidth
聽 聽DEFAULT nHeight := ::nHeight

聽 聽::nLeft 聽 := nLeft
聽 聽::nTop 聽 聽:= nTop
聽 聽::nWidth 聽:= nWidth
聽 聽::nHeight := nHeight

聽 聽::hWnd := CreateWindowEx( ::nLeft, ::nTop, ::nWidth, ::nHeight, ::oWnd:hWnd, SELF )

聽 聽::bKeyDown := { |nKey| ::OnKeyDown( nKey ) }

聽 聽RETURN SELF

//-----------------------------------------------------------------------------------------------//
METHOD OnPaint( hDC )
聽 聽LOCAL oG, oRC, oBM, FontFamily, Font, RectF, stringformat, solidbrush, string, aPoints, nAngle
聽 聽LOCAL nL, nT, nW, nH, nRadA, nRadB, oBitmap, oGraphics
聽 聽oRC := ::GetCliRect()

聽 聽// Doble Buffer
聽 聽oBitmap := BITMAP( oRC:nWidth, oRC:nHeight )
聽 聽oG := Graphics( oBitmap )
聽 聽// Eof Doble Buffer

聽 聽oG:Clear( oG:Color( 255, 230, 230, 230 ) )

聽 聽IF ::oImage != NIL

聽 聽 聽 IF ::nAngle == 0
聽 聽 聽 聽 聽oG:DrawImage( ::oImage, ( ::nX + ::nAjusteX ) * ::nZoom, ( ::nY + ::nAjusteY ) * ::nZoom, ::oImage:GetWidth() * ::nZoom,;
聽 聽 聽 聽 聽 聽 ::oImage:GetHeight() * ::nZoom )
聽 聽 聽 ELSE
聽 聽 聽 聽 聽// Rotacion de la imagen -45 a 45 Grados
聽 聽 聽 聽 聽nAngle := ::nAngle

聽 聽 聽 聽 聽nL 聽 聽 := ( ::nX + ::nAjusteX ) * ::nZoom
聽 聽 聽 聽 聽nT 聽 聽 := ( ::nY + ::nAjusteY ) * ::nZoom
聽 聽 聽 聽 聽nW 聽 聽 := ::oImage:GetWidth() 聽 * ::nZoom
聽 聽 聽 聽 聽nH 聽 聽 := ::oImage:GetHeight() 聽* ::nZoom

聽 聽 聽 聽 聽IF nAngle > 0
聽 聽 聽 聽 聽 聽 nRadB 聽:= nAngle * ( 3.14159265 / 180 )
聽 聽 聽 聽 聽 聽 nRadA 聽:= ( 180 - nAngle - 90 ) * ( 3.14159265 / 180 )

聽 聽 聽 聽 聽 聽 aPoints := { { nL, nT },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ nL + ( nW * sin( nRadA ) ), nT + ( nW * sin( nRadB ) ) },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ nL - ( nH * sin( nRadB ) ), nT + ( nH * sin( nRadA ) ) } }

聽 聽 聽 聽 聽ELSE
聽 聽 聽 聽 聽 聽 nAngle := nAngle * - 1
聽 聽 聽 聽 聽 聽 nRadB 聽:= nAngle * ( 3.14159265 / 180 )
聽 聽 聽 聽 聽 聽 nRadA 聽:= ( 180 - nAngle - 90 ) * ( 3.14159265 / 180 )

聽 聽 聽 聽 聽 聽 aPoints := { { nL, nT },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ nL + ( nW * sin( nRadA ) ), nT - ( nW * sin( nRadB ) ) },;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ nL + ( nH * sin( nRadB ) ), nT + ( nH * sin( nRadA ) ) } }

聽 聽 聽 聽 聽ENDIF

聽 聽 聽 聽 聽oG:DrawImage( ::oImage, aPoints, 3 )

聽 聽 聽 ENDIF

聽 聽ENDIF

聽 聽// Cuadro
聽 聽IF ::aColorRect != NIL
聽 聽 聽 oG:FillRectangle( oG:SolidBrush( oG:Color( ::nColorRect ) ),;
聽 聽 聽 聽 聽oG:RectF( ( ::aColorRect[1] + ::nX ) * ::nZoom, ( ::aColorRect[2] + ::nY ) * ::nZoom,;
聽 聽 聽 聽 聽::aColorRect[3] * ::nZoom, ::aColorRect[4] * ::nZoom ) )
聽 聽ENDIF

聽 聽// Marca
聽 聽IF ::lMouseMark
聽 聽 聽 oG:FillRectangle( oG:SolidBrush( oG:Color( ::nMouseMark ) ),;
聽 聽 聽 聽 聽oG:RectF( ( ::aMouseMark[1] + ::nX ) * ::nZoom, ( ::aMouseMark[2] + ::nY ) * ::nZoom,;
聽 聽 聽 聽 聽::aMouseMark[3] * ::nZoom, ::aMouseMark[4] * ::nZoom ) )
聽 聽ENDIF

聽 聽IF GetKeyState( VK_TAB ) .AND. GetKeyState( VK_CONTROL )
聽 聽 聽 fontFamily 聽 聽 := oG:FontFamily( "Arial" )
聽 聽 聽 font 聽 聽 聽 聽 聽 := oG:Font( fontFamily, 12, FontStyleBold, UnitPoint )
聽 聽 聽 rectF 聽 聽 聽 聽 聽:= oG:RectF( 0, 0, oRC:nWidth, oRC:nHeight )
聽 聽 聽 stringFormat 聽 := StringFormat()
聽 聽 聽 solidBrush 聽 聽 := SolidBrush( oG:Color( 255, 255, 0, 0 ) )
聽 聽 聽 stringFormat:SetAlignment( StringAlignmentCenter )
聽 聽 聽 stringFormat:SetLineAlignment( StringAlignmentCenter )
聽 聽 聽 string := ;
聽 聽 聽 聽 聽 聽 聽 聽 "Step:" + Str( ::nStep ) + " Factor Speed:" + Str( ::nFactSpeed ) + CRLF +;
聽 聽 聽 聽 聽 聽 聽 聽 "Posicion X:" + Str( ::nX ) + " Posicion Y:" + Str( ::nY ) + CRLF +;
聽 聽 聽 聽 聽 聽 聽 聽 "Zoom: " + Str( ::nZoom ) + " Zoom Minimo: " + Str( ::nMinZoom ) + " Zoom Maximo: " + Str( ::nMaxZoom )


聽 聽 聽 oG:DrawString( string, -1, font, rectF, stringFormat, solidBrush )
聽 聽ENDIF

聽 聽oG:END()

聽 聽// Volcado DobleBuffer
聽 聽oGraphics := Graphics( hDC )
聽 聽oGraphics:DrawImage( oBitmap, 0, 0, oRC:nWidth, oRC:nHeight )
聽 聽oGraphics:END()
聽 聽oBitmap:END()
聽 聽// Eof Volcado Doble Buffer

聽 聽RETURN NIL

//-----------------------------------------------------------------------------------------------//
#pragma BEGINDUMP
聽 聽#include <hbvm.h>
聽 聽#include <hbapi.h>
聽 聽#include <windows.h>
聽 聽#include <hbapiitm.h>

/*-----------------------------------------------------------------------------------------------*/
聽 聽LRESULT CALLBACK ImageGdiPlus_WindowProcedure( HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam )
聽 聽{
聽 聽 聽 switch( iMsg )
聽 聽 聽 {

聽 聽 聽 聽 聽case WM_NCCREATE:
聽 聽 聽 聽 聽{
聽 聽 聽 聽 聽 聽 if ((PHB_ITEM)(((LPCREATESTRUCT)lParam)->lpCreateParams))
聽 聽 聽 聽 聽 聽 {
聽 聽 聽 聽 聽 聽 聽 聽PHB_ITEM pSelf = hb_itemNew( ( PHB_ITEM ) ( ( ( LPCREATESTRUCT ) lParam ) -> lpCreateParams ) );
聽 聽 聽 聽 聽 聽 聽 聽SetProp( hWnd, "C5OBJECT", pSelf );
聽 聽 聽 聽 聽 聽 聽 聽return TRUE;
聽 聽 聽 聽 聽 聽 }
聽 聽 聽 聽 聽 聽 else
聽 聽 聽 聽 聽 聽 聽 聽return FALSE;
聽 聽 聽 聽 聽}

聽 聽 聽 聽 聽case WM_PAINT:
聽 聽 聽 聽 聽{

聽 聽 聽 聽 聽 聽 PHB_ITEM pSelf;
聽 聽 聽 聽 聽 聽 HDC hdc;
聽 聽 聽 聽 聽 聽 PAINTSTRUCT ps;

聽 聽 聽 聽 聽 聽 pSelf = 聽(PHB_ITEM) GetProp( hWnd, "C5OBJECT" );

聽 聽 聽 聽 聽 聽 hdc = BeginPaint( hWnd, &ps );

聽 聽 聽 聽 聽 聽 if( pSelf )
聽 聽 聽 聽 聽 聽 {

聽 聽 聽 聽 聽 聽 聽 聽hb_vmPushSymbol( hb_dynsymSymbol( hb_dynsymFind( "ONPAINT" ) ) );
聽 聽 聽 聽 聽 聽 聽 聽hb_vmPush( pSelf );
聽 聽 聽 聽 聽 聽 聽 聽hb_vmPushLong( (long) hdc );
聽 聽 聽 聽 聽 聽 聽 聽hb_vmDo( 1 );

聽 聽 聽 聽 聽 聽 }

聽 聽 聽 聽 聽 聽 EndPaint( hWnd, &ps );

聽 聽 聽 聽 聽 聽 return 1;
聽 聽 聽 聽 聽}

聽 聽 聽 聽 聽case WM_ERASEBKGND:
聽 聽 聽 聽 聽 聽 return 1;

聽 聽 聽 聽 聽case WM_RBUTTONUP:
聽 聽 聽 聽 聽{
聽 聽 聽 聽 聽 聽 PHB_ITEM pSelf;
聽 聽 聽 聽 聽 聽 pSelf = 聽(PHB_ITEM) GetProp( hWnd, "C5OBJECT" );
聽 聽 聽 聽 聽 聽 if( pSelf )
聽 聽 聽 聽 聽 聽 {
聽 聽 聽 聽 聽 聽 聽 聽hb_vmPushSymbol( hb_dynsymSymbol( hb_dynsymFind( "ONRBUTTONUP" ) ) );
聽 聽 聽 聽 聽 聽 聽 聽hb_vmPush( pSelf );
聽 聽 聽 聽 聽 聽 聽 聽hb_vmDo( 0 );
聽 聽 聽 聽 聽 聽 }
聽 聽 聽 聽 聽 聽 break;
聽 聽 聽 聽 聽}

聽 聽 聽 聽 聽case WM_NCDESTROY:
聽 聽 聽 聽 聽{
聽 聽 聽 聽 聽 聽 PHB_ITEM pSelf;
聽 聽 聽 聽 聽 聽 pSelf = 聽(PHB_ITEM) GetProp( hWnd, "C5OBJECT" );
聽 聽 聽 聽 聽 聽 if( pSelf )
聽 聽 聽 聽 聽 聽 {
聽 聽 聽 聽 聽 聽 聽 聽hb_vmPushSymbol( hb_dynsymSymbol( hb_dynsymFind( "ONNCDESTROY" ) ) );
聽 聽 聽 聽 聽 聽 聽 聽hb_vmPush( pSelf );
聽 聽 聽 聽 聽 聽 聽 聽hb_vmDo( 0 );
聽 聽 聽 聽 聽 聽 }
聽 聽 聽 聽 聽 聽 break;
聽 聽 聽 聽 聽}

聽 聽 聽 聽 聽case WM_LBUTTONDOWN:
聽 聽 聽 聽 聽{
聽 聽 聽 聽 聽 聽 PHB_ITEM pSelf;
聽 聽 聽 聽 聽 聽 pSelf = 聽(PHB_ITEM) GetProp( hWnd, "C5OBJECT" );
聽 聽 聽 聽 聽 聽 if( pSelf )
聽 聽 聽 聽 聽 聽 {
聽 聽 聽 聽 聽 聽 聽 聽hb_vmPushSymbol( hb_dynsymSymbol( hb_dynsymFind( "ONLBUTTONDOWN" ) ) );
聽 聽 聽 聽 聽 聽 聽 聽hb_vmPush( pSelf );
聽 聽 聽 聽 聽 聽 聽 聽hb_vmDo( 0 );
聽 聽 聽 聽 聽 聽 }
聽 聽 聽 聽 聽 聽 break;
聽 聽 聽 聽 聽}

聽 聽 聽 聽 聽case WM_LBUTTONUP:
聽 聽 聽 聽 聽{
聽 聽 聽 聽 聽 聽 PHB_ITEM pSelf;
聽 聽 聽 聽 聽 聽 pSelf = 聽(PHB_ITEM) GetProp( hWnd, "C5OBJECT" );
聽 聽 聽 聽 聽 聽 if( pSelf )
聽 聽 聽 聽 聽 聽 {
聽 聽 聽 聽 聽 聽 聽 聽hb_vmPushSymbol( hb_dynsymSymbol( hb_dynsymFind( "ONLBUTTONUP" ) ) );
聽 聽 聽 聽 聽 聽 聽 聽hb_vmPush( pSelf );
聽 聽 聽 聽 聽 聽 聽 聽hb_vmDo( 0 );
聽 聽 聽 聽 聽 聽 }
聽 聽 聽 聽 聽 聽 break;
聽 聽 聽 聽 聽}

聽 聽 聽 聽 聽case WM_MOUSEMOVE:
聽 聽 聽 聽 聽{
聽 聽 聽 聽 聽 聽 PHB_ITEM pSelf;
聽 聽 聽 聽 聽 聽 pSelf = 聽(PHB_ITEM) GetProp( hWnd, "C5OBJECT" );
聽 聽 聽 聽 聽 聽 if( pSelf )
聽 聽 聽 聽 聽 聽 {
聽 聽 聽 聽 聽 聽 聽 聽hb_vmPushSymbol( hb_dynsymSymbol( hb_dynsymFind( "ONMOUSEMOVE" ) ) );
聽 聽 聽 聽 聽 聽 聽 聽hb_vmPush( pSelf );
聽 聽 聽 聽 聽 聽 聽 聽hb_vmPushInteger( LOWORD( lParam ) );
聽 聽 聽 聽 聽 聽 聽 聽hb_vmPushInteger( HIWORD( lParam ) );
聽 聽 聽 聽 聽 聽 聽 聽hb_vmDo( 2 );
聽 聽 聽 聽 聽 聽 }
聽 聽 聽 聽 聽 聽 break;
聽 聽 聽 聽 聽}

聽 聽 聽 }

聽 聽 聽 if ( GetProp( hWnd, "C5OLDPROC" ) )
聽 聽 聽 聽 聽CallWindowProc( (WNDPROC) GetProp( hWnd, "C5OLDPROC" ), hWnd, iMsg, wParam, lParam );

聽 聽 聽 return DefWindowProc( hWnd, iMsg, wParam, lParam );
聽 聽}

/*-----------------------------------------------------------------------------------------------*/
聽 聽HB_FUNC_STATIC( REGISTERCLASS )
聽 聽{
聽 聽 聽 WNDCLASS wndClass;
聽 聽 聽 ZeroMemory(&wndClass, sizeof(WNDCLASS));
聽 聽 聽 wndClass.style 聽 聽 聽 聽 = CS_HREDRAW | CS_VREDRAW;
聽 聽 聽 wndClass.lpfnWndProc 聽 = ImageGdiPlus_WindowProcedure;
聽 聽 聽 wndClass.cbClsExtra 聽 聽= 0;
聽 聽 聽 wndClass.cbWndExtra 聽 聽= 0;
聽 聽 聽 wndClass.hCursor 聽 聽 聽 = LoadCursor(0,IDC_ARROW);
聽 聽 聽 wndClass.hbrBackground = NULL;
聽 聽 聽 wndClass.lpszClassName = "C5IMAGEGDIPLUS";
聽 聽 聽 hb_retnl( RegisterClass(&wndClass) );
聽 聽}

/*-----------------------------------------------------------------------------------------------*/
聽 聽HB_FUNC_STATIC( TIMAGEGDIPLUS_LINK )
聽 聽{
聽 聽 聽 SetProp( (HWND)hb_parnl( 1 ), "C5OBJECT", hb_itemNew( hb_param( 0, HB_IT_OBJECT ) ) );
聽 聽 聽 SetProp( (HWND)hb_parnl( 1 ), "C5OLDPROC", (HANDLE)SetWindowLong( (HWND)hb_parnl( 1 ), GWL_WNDPROC,
聽 聽 聽 聽 聽(long)ImageGdiPlus_WindowProcedure ) );
聽 聽}

/*-----------------------------------------------------------------------------------------------*/
聽 聽HB_FUNC_STATIC( CREATEWINDOWEX )
聽 聽{
聽 聽 聽 hb_retnl( (long) CreateWindowEx( 0, "C5IMAGEGDIPLUS", "", WS_CHILD | WS_VISIBLE | WS_BORDER,
聽 聽 聽 聽 聽hb_parni( 1 ), hb_parni( 2 ), hb_parni( 3 ), hb_parni( 4 ), (HWND)hb_parnl( 5 ),
聽 聽 聽 聽 聽(HMENU)-1, GetModuleHandle( 0 ), hb_param( 6, HB_IT_OBJECT ) ) );
聽 聽}


y este es el fuente donde se encuentra la clase image (Gdiplus.prg)

Code (fw): Select all Collapse
/*
聽* Gdi+
聽* Lira Lira Oscar Joel [oSkAr]
聽* Francisco Garcia Fernandez [Paco]
聽* Julio 6 del 2007
聽* CopyRight Todos los Derechos Reservados CanalFive 2007
聽* Ultima Actualizacion: :>: 11/15/2007 14:07 by :(Oscar):
聽*
聽* <!-- m --><a class="postlink" href="http://msdn2.microsoft.com/en-us/library/ms533799.aspx">http://msdn2.microsoft.com/en-us/library/ms533799.aspx</a><!-- m -->
聽*/

#include "hbclass.ch"
#include "GdiPlus.ch"

#xcommand DEFAULT <uVar> := <uVal> => IF <uVar> == NIL; <uVar> := <uVal>; ENDIF

INIT PROC GdiPlus
聽 聽C5GP_StartUp()
聽 聽RETURN

/*
聽* GdiPlusBase
/*-----------------------------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------------------------*/
CLASS GdiPlusBase
聽 聽PROTECTED:
聽 聽 聽 DATA 聽 聽 聽pObj
聽 聽 聽 DATA 聽 聽 聽aObj 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽INIT {}
聽 聽 聽 METHOD 聽 聽AddObj( oObj ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽INLINE AAdd( ::aObj, oObj ), oObj
聽 聽 聽 CLASSDATA nCls
聽 聽PUBLIC:
聽 聽 聽 METHOD nGetCls() 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽INLINE ::nCls
聽 聽 聽 METHOD End() 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽INLINE AEval( ::aObj, { |o| o:END() } ), C5GP_DELETE( ::pObj, ::nCls )
聽 聽 聽 METHOD GetLastStatus() 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽INLINE C5GP_GETLASTSTATUS( ::pObj, ::nCls )
聽 聽 聽 METHOD AdjustableArrowCap( nHeight, nWidth, lIsFilled ) 聽 聽 聽 聽 INLINE ::AddObj( AdjustableArrowCap( nHeight, nWidth, lIsFilled ) 聽 聽)
聽 聽 聽 METHOD Font( oFFcFN, nSize, nStyle, nUnit, oCollection ) 聽 聽 聽 聽INLINE ::AddObj( Font( oFFcFN, nSize, nStyle, nUnit, oCollection ) 聽 )
聽 聽 聽 METHOD RectF( nL, nT, nW, nH ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽INLINE ::AddObj( RectF( nL, nT, nW, nH ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 )
聽 聽 聽 METHOD Color( nA, nR, nG, nB ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽INLINE ::AddObj( Color( nA, nR, nG, nB ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 )
聽 聽 聽 METHOD LinearGradientBrush( oRectF, oC1, oC2, iMode, p5 ) 聽 聽 聽 INLINE ::AddObj( LinearGradientBrush( oRectF, oC1, oC2, iMode, p5 ) 聽)
聽 聽 聽 METHOD StringFormat() 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 INLINE ::AddObj( StringFormat() 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽)
聽 聽 聽 METHOD SolidBrush( oColor ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 INLINE ::AddObj( SolidBrush( oColor ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽)
聽 聽 聽 METHOD Image( cImage ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽INLINE ::AddObj( Image( cImage ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 )
聽 聽 聽 METHOD Pen( oColor_oBrush, nWidth ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 INLINE ::AddObj( Pen( oColor_oBrush, nWidth ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽)
聽 聽 聽 METHOD HatchBrush( nType, oColor1, oColor2 ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽INLINE ::AddObj( HatchBrush( nType, oColor1, oColor2 ) 聽 聽 聽 聽 聽 聽 聽 )
聽 聽 聽 METHOD PointF( nX, nY ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 INLINE ::AddObj( PointF( nX, nY ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽)
聽 聽 聽 METHOD Matrix( p1, p2, p3, p4, p5, p6 ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 INLINE ::AddObj( Matrix( p1, p2, p3, p4, p5, p6 ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽)
聽 聽 聽 METHOD FontFamily( cFamily, oFontCollection ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 INLINE ::AddObj( FontFamily( cFamily, oFontCollection ) 聽 聽 聽 聽 聽 聽 聽)
聽 聽 聽 METHOD GraphicsPath( nFillMode ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽INLINE ::AddObj( GraphicsPath( nFillMode ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 )
聽 聽 聽 METHOD TextureBrush( p1, p2, p3, p4, p5, p6 ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 INLINE ::AddObj( TextureBrush( p1, p2, p3, p4, p5, p6 ) 聽 聽 聽 聽 聽 聽 聽)
聽 聽 聽 METHOD BITMAP( p1, p2, p3 ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 INLINE ::AddObj( BITMAP( p1, p2, p3 ) )
聽 聽 聽 METHOD ImageAttributes() 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽INLINE ::AddObj( ImageAttributes() )
ENDCLASS

/*
聽* Font
/*-----------------------------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------------------------*/
CLASS Font From GdiPlusBase
聽 聽PROTECTED:
聽 聽 聽 CLASSDATA nCls 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽INIT 聽 C5CLS_FONT
聽 聽PUBLIC:
聽 聽 聽 METHOD New( cFam, nSize, nStyle, nUnit ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽CONSTRUCTOR
ENDCLASS

/*-----------------------------------------------------------------------------------------------*/
METHOD New( oFontFamily_cFontFamily, nSize, nStyle, nUnit, oFontCollection )
聽 聽DEFAULT nStyle := FontStyleRegular
聽 聽DEFAULT nUnit 聽:= UnitPoint
聽 聽IF ValType( oFontFamily_cFontFamily ) == "C"
聽 聽 聽 oFontFamily_cFontFamily := ::FontFamily( oFontFamily_cFontFamily, oFontCollection )
聽 聽ENDIF
聽 聽::pObj := C5GP_FONT( oFontFamily_cFontFamily:pObj, nSize, nStyle, nUnit )
聽 聽RETURN SELF

/*
聽* RectF
/*-----------------------------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------------------------*/
CLASS RectF From GdiPlusBase
聽 聽PROTECTED:
聽 聽 聽 CLASSDATA nCls 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽INIT 聽 C5CLS_RECTF
聽 聽PUBLIC:
聽 聽 聽 METHOD New( nL, nT, nW, nH ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽CONSTRUCTOR
ENDCLASS

/*-----------------------------------------------------------------------------------------------*/
METHOD New( nL, nT, nW, nH )
聽 聽::pObj := C5GP_RECTF( nL, nT, nW, nH )
聽 聽RETURN SELF

/*
聽* LinearGradientBrush
/*-----------------------------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------------------------*/
CLASS LinearGradientBrush From Brush
聽 聽PROTECTED:
聽 聽 聽 CLASSDATA nCls 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽INIT 聽 C5CLS_LINEARGRADIENTBRUSH
聽 聽PUBLIC:
聽 聽 聽 METHOD New( oRF, oC1, oC2, nMode ) 聽CONSTRUCTOR
聽 聽 聽 METHOD SetTransform( oMatrix ) 聽 聽 聽INLINE C5GP_LINEARGRADIENTBRUSH_SETTRANSFORM( ::pObj, oMatrix:pObj )
ENDCLASS

/*-----------------------------------------------------------------------------------------------*/
METHOD New( oRF, oC1, oC2, nMode, p5 )
聽 聽IF p5 != NIL
聽 聽 聽 ::pObj := C5GP_LINEARGRADIENTBRUSH( 0x001, oRF:pObj, oC1:pObj, oC2:pObj, nMode, p5 )
聽 聽ELSE
聽 聽 聽 ::pObj := C5GP_LINEARGRADIENTBRUSH( 0x002, oRF:pObj, oC1:pObj, oC2:pObj, nMode )
聽 聽ENDIF
聽 聽RETURN SELF

/*
聽* StringFormat
/*-----------------------------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------------------------*/
CLASS StringFormat From GdiPlusBase
聽 聽PROTECTED:
聽 聽 聽 CLASSDATA nCls 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽INIT 聽 C5CLS_STRINGFORMAT
聽 聽PUBLIC:
聽 聽 聽 METHOD New( nFormatFlag ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 CONSTRUCTOR
聽 聽 聽 METHOD SetAlignMent( nAlig ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 INLINE IF( Empty( ::pObj ), ::New(), NIL ), C5GP_SETALIGNMENT( ::pObj, ::nCls, nAlig )
聽 聽 聽 METHOD SetLineAlignMent( nAlig ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 INLINE IF( Empty( ::pObj ), ::New(), NIL ), C5GP_STRINGFORMAT_SETLINEALIGNMENT( ::pObj, nAlig )
聽 聽 聽 METHOD END() 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽INLINE IF( Empty( ::pObj ), ::New(), NIL ), Super():END()
ENDCLASS

/*-----------------------------------------------------------------------------------------------*/
METHOD New( nFormatFlag )
聽 聽::pObj := C5GP_STRINGFORMAT( nFormatFlag )
聽 聽RETURN SELF

/*
聽* Image
/*-----------------------------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------------------------*/
CLASS Image From GdiPlusBase
聽 聽PROTECTED:
聽 聽 聽 CLASSDATA nCls 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 INIT 聽 C5CLS_IMAGE
聽 聽PUBLIC:
聽 聽 聽 METHOD New( cImage ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 CONSTRUCTOR
聽 聽 聽 METHOD GetWidth() 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽INLINE C5GP_IMAGE_GETWIDTH( ::pObj )
聽 聽 聽 METHOD GetHeight() 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 INLINE C5GP_IMAGE_GETHEIGHT( ::pObj )
聽 聽 聽 METHOD GetThumbnailImage()
聽 聽 聽 METHOD GetFrameDimensionsCount() 聽 聽 聽 聽 聽 聽 聽 聽 INLINE C5GP_IMAGE_GETFRAMEDIMENSIONSCOUNT( ::pObj )
聽 聽 聽 METHOD GetFrameDimensionsList( pList, nCount ) 聽 INLINE C5GP_IMAGE_GETFRAMEDIMENSIONSLIST( ::pObj, @pList, nCount )
聽 聽 聽 METHOD GetFrameCount( pList, nIndex ) 聽 聽 聽 聽 聽 聽INLINE C5GP_IMAGE_GETFRAMECOUNT( ::pObj, pList, nIndex )
聽 聽 聽 METHOD SelectActiveFrame( pList, nList, nFrame ) INLINE C5GP_IMAGE_SELECTACTIVEFRAME( ::pObj, pList, nList, nFrame )
聽 聽 聽 METHOD FreeDimensionList( pList ) 聽 聽 聽 聽 聽 聽 聽 聽INLINE C5GP_IMAGE_FREEDIMENSIONLIST( pList )
聽 聽 聽 METHOD CountFrames()
聽 聽 聽 METHOD SetFrame( nFrame )
聽 聽 聽 METHOD RotateFlip( nType ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 INLINE C5GP_IMAGE_ROTATEFLIP( ::pObj, nType )
ENDCLASS

/*-----------------------------------------------------------------------------------------------*/
METHOD CountFrames()
聽 聽LOCAL pList, nDims, nFrames := 0
聽 聽nDims := ::GetFrameDimensionsCount()
聽 聽IF nDims > 0
聽 聽 聽 ::GetFrameDimensionsList( @pList, 1 )
聽 聽 聽 nFrames := ::GetFrameCount( pList, 1 )
聽 聽 聽 ::FreeDimensionList( pList )
聽 聽ENDIF
聽 聽RETURN nFrames

/*-----------------------------------------------------------------------------------------------*/
METHOD SetFrame( nFrame )
聽 聽LOCAL pList, nDims, nFrames := 0
聽 聽nDims := ::GetFrameDimensionsCount()
聽 聽IF nDims > 0
聽 聽 聽 ::GetFrameDimensionsList( @pList, 1 )
聽 聽 聽 ::SelectActiveFrame( pList, 1, nFrame )
聽 聽 聽 ::FreeDimensionList( pList )
聽 聽ENDIF

/*-----------------------------------------------------------------------------------------------*/
METHOD GetThumbnailImage( nWidth, nHeight )
聽 聽LOCAL oImage := Image()
聽 聽oImage:pObj := C5GP_IMAGE_GETTHUMBNAILIMAGE( ::pObj, nWidth, nHeight )
聽 聽RETURN oImage

/*-----------------------------------------------------------------------------------------------*/
METHOD New( cImage )
聽 聽::pObj = C5GP_IMAGE( cImage )
聽 聽RETURN SELF

/*
聽* Pen
/*-----------------------------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------------------------*/
CLASS Pen From GdiPlusBase
聽 聽PROTECTED:
聽 聽 聽 CLASSDATA nCls 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 INIT 聽 C5CLS_PEN
聽 聽PUBLIC:
聽 聽 聽 METHOD New( oColor_oBrush, nWidth ) 聽 聽 聽 聽CONSTRUCTOR
聽 聽 聽 METHOD SetAlignment( nAlig ) 聽 聽 聽 聽 聽 聽 聽 INLINE C5GP_SETALIGNMENT( ::pObj, ::nCls, nAlig )
聽 聽 聽 METHOD SetCustomEndCap( oCustomLineCap ) 聽 INLINE C5GP_PEN_SETCUSTOMENDCAP 聽( ::pObj, oCustomLineCap:pObj )
聽 聽 聽 METHOD SetCustomStartCap( oCustomLineCap ) INLINE C5GP_PEN_SETCUSTOMSTARTCAP( ::pObj, oCustomLineCap:pObj )
聽 聽 聽 METHOD SetStartCap( nCap ) 聽 聽 聽 聽 聽 聽 聽 聽 INLINE C5GP_PEN_SETSTARTCAP( ::pObj, nCap )
聽 聽 聽 METHOD SetEndCap( nCap ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 INLINE C5GP_PEN_SETENDCAP 聽( ::pObj, nCap )
聽 聽 聽 METHOD SetLineJoin( nModeJoin ) 聽 聽 聽 聽 聽 聽INLINE C5GP_PEN_SETLINEJOIN( ::pObj, nModeJoin )
聽 聽 聽 METHOD SetDashPattern( aDash, nCount ) 聽 聽 INLINE C5GP_PEN_SetDashPattern( ::pObj, aDash, nCount )
ENDCLASS

/*-----------------------------------------------------------------------------------------------*/
METHOD New( oColor_oBrush, nWidth )
聽 聽::pObj := C5GP_PEN( oColor_oBrush:pObj, oColor_oBrush:nGetCls(), nWidth )
聽 聽RETURN SELF

/*
聽* CustomLineCap
/*-----------------------------------------------------------------------------------------------*/
CLASS CustomLineCap From GdiPlusBase
ENDCLASS

/*
聽* PointF
/*-----------------------------------------------------------------------------------------------*/
CLASS PointF From GdiPlusBase
聽 聽PROTECTED:
聽 聽 聽 CLASSDATA nCls INIT 聽 C5CLS_POINTF
聽 聽PUBLIC:
聽 聽 聽 METHOD New() 聽 CONSTRUCTOR
ENDCLASS

/*-----------------------------------------------------------------------------------------------*/
METHOD New( nX, nY )
聽 聽::pObj := C5GP_POINTF( nX, nY )
聽 聽RETURN SELF

/*
聽* Matrix
/*-----------------------------------------------------------------------------------------------*/
CLASS Matrix From GdiPlusBase
聽 聽PROTECTED:
聽 聽 聽 CLASSDATA nCls INIT 聽 C5CLS_MATRIX
聽 聽PUBLIC:
聽 聽 聽 METHOD New() 聽 CONSTRUCTOR
ENDCLASS

/*-----------------------------------------------------------------------------------------------*/
METHOD New( p1, p2, p3, p4, p5, p6 )
聽 聽::pObj := C5GP_MATRIX( p1, p2, p3, p4, p5, p6 )
聽 聽RETURN SELF

/*
聽* FontFamily
/*-----------------------------------------------------------------------------------------------*/
CLASS FontFamily From GdiPlusBase
聽 聽PROTECTED:
聽 聽 聽 CLASSDATA nCls INIT 聽 C5CLS_FONTFAMILY
聽 聽PUBLIC:
聽 聽 聽 METHOD New() 聽 聽 聽 聽 聽 CONSTRUCTOR
ENDCLASS

/*-----------------------------------------------------------------------------------------------*/
METHOD New( cFamily, oFontCollection )
聽 聽::pObj := C5GP_FONTFAMILY( cFamily, oFontCollection )
聽 聽RETURN SELF

/*
聽* GraphicsPath
/*-----------------------------------------------------------------------------------------------*/
CLASS GraphicsPath From GdiPlusBase
聽 聽PROTECTED:
聽 聽 聽 CLASSDATA nCls INIT 聽 聽 聽 聽 聽C5CLS_GRAPHICSPATH
聽 聽 聽 METHOD Ck() 聽 聽 聽 聽 聽 聽 聽 聽 聽INLINE IF( ::pObj == NIL, ::New(), NIL )
聽 聽PUBLIC:
聽 聽 聽 METHOD New() 聽 聽 聽 聽 聽 聽 聽 聽 CONSTRUCTOR
聽 聽 聽 METHOD StartFigure() 聽 聽 聽 聽 INLINE ::Ck(), C5GP_GraphicsPath_StartFigure( ::pObj )
聽 聽 聽 METHOD AddLine( oRF1, oRF2 ) INLINE ::Ck(), C5GP_GraphicsPath_AddLine( ::pObj, oRF1:pObj, oRF2:pObj )
ENDCLASS

/*-----------------------------------------------------------------------------------------------*/
METHOD New( nFillMode )
聽 聽DEFAULT nFillMode := FillModeAlternate
聽 聽::pObj := C5GP_GRAPHICSPATH( nFillMode )
聽 聽RETURN SELF

/*-----------------------------------------------------------------------------------------------*/
CLASS TextureBrush From Brush
聽 聽PROTECTED:
聽 聽 聽 CLASSDATA nCls 聽 聽 聽 聽 聽 聽 聽 聽 INIT 聽 聽 聽 聽 聽C5CLS_TEXTUREBRUSH
聽 聽PUBLIC:
聽 聽 聽 METHOD New() 聽 聽 聽 聽 聽 聽 聽 聽 聽 CONSTRUCTOR
聽 聽 聽 METHOD SetTransForm( oMatrix ) INLINE 聽 聽 聽 聽C5GP_TEXTUREBRUSH_SETTRANSFORM( ::pObj, oMatrix:pObj )
聽 聽 聽 METHOD SetWrapMode( nMode ) 聽 聽INLINE 聽 聽 聽 聽C5GP_TEXTUREBRUSH_SETWRAPMODE( ::pObj, nMode )
ENDCLASS

/*-----------------------------------------------------------------------------------------------*/
METHOD New( p1, p2, p3, p4, p5, p6 )
聽 聽DO CASE
聽 聽 聽 CASE ValType( p3 ) == "O" .AND. p3:nGetCls == C5CLS_RECTF
聽 聽 聽 聽 聽::pObj := C5GP_TEXTUREBRUSH( 3, p1:pObj, p2, p3:pObj )
聽 聽 聽 CASE p6 != NIL
聽 聽 聽 聽 聽p3 := ::RectF( p3, p4, p5, p6 )
聽 聽 聽 聽 聽::pObj := C5GP_TEXTUREBRUSH( 3, p1:pObj, p2, p3:pObj )
聽 聽 聽 CASE ValType( p2 ) == "O" .AND. p2:nGetCls == C5CLS_RECTF
聽 聽 聽 聽 聽::pObj := C5GP_TEXTUREBRUSH( 2, p1:pObj, p2:pObj, p3 )
聽 聽 聽 OTHERWISE
聽 聽 聽 聽 聽DEFAULT p2 := WrapModeTile
聽 聽 聽 聽 聽::pObj := C5GP_TEXTUREBRUSH( 1, p1:pObj, p2 )
聽 聽ENDCASE
聽 聽RETURN SELF

// Bitmap
/*-----------------------------------------------------------------------------------------------*/
CLASS BITMAP From Image
聽 聽PROTECTED:
聽 聽 聽 CLASSDATA nCls 聽 聽 聽 聽 聽 聽 聽 聽 INIT 聽 聽 聽 聽 聽C5CLS_BITMAP
聽 聽PUBLIC:
聽 聽 聽 METHOD New() 聽 聽 聽 聽 聽 聽 聽 聽 聽 CONSTRUCTOR
聽 聽 聽 METHOD GetPixel( nX, nY, oColor ) INLINE C5GP_BITMAP_GETPIXEL( ::pObj, nX, nY, oColor:pObj )
聽 聽 聽 METHOD SetPixel( nX, nY, oColor ) INLINE C5GP_BITMAP_SETPIXEL( ::pObj, nX, nY, oColor:pObj )
ENDCLASS

/*-----------------------------------------------------------------------------------------------*/
METHOD New( p1, p2, p3 )
聽 聽DEFAULT p3 := PixelFormat32bppARGB
聽 聽IF ValType( p1 ) == "C"
聽 聽 聽 DEFAULT p2 := .F.
聽 聽 聽 ::pObj := C5GP_BITMAP( 1, p1, p2 )
聽 聽ELSE
聽 聽 聽 ::pObj := C5GP_BITMAP( 2, p1, p2, p3 )
聽 聽ENDIF
聽 聽RETURN SELF

// ImageAtributes
/*-----------------------------------------------------------------------------------------------*/
CLASS ImageAttributes From GdiPlusBase
聽 聽PROTECTED:
聽 聽 聽 CLASSDATA nCls 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽INIT 聽 聽 聽 聽 聽C5CLS_IMAGEATTRIBUTES
聽 聽 聽 METHOD Ck() 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 INLINE IF( ::pObj == NIL, ::New(), NIL )
聽 聽PUBLIC:
聽 聽 聽 METHOD New() 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽CONSTRUCTOR
聽 聽 聽 METHOD SetColorMatrix( aClrMatrix, nMode, nType ) 聽 INLINE ::Ck(), C5GP_IMAGEATTRIBUTES_SETCOLORMATRIX( ::pObj, aClrMatrix, nMode, nType )
ENDCLASS

/*-----------------------------------------------------------------------------------------------*/
METHOD New()
聽 聽::pObj := C5GP_IMAGEATTRIBUTES()
聽 聽RETURN SELF
Saludos

Quique
Posts: 408
Joined: Sun Aug 13, 2006 05:38 AM
Re: actualizar o substituto de gdiplus de canalfive
Posted: Thu Jan 30, 2014 04:22 PM

驴Entonces si se puede Antonio?

Saludos

Quique
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: actualizar o substituto de gdiplus de canalfive
Posted: Thu Jan 30, 2014 09:31 PM

Si te funcionan bien esas clases porque deseas reemplazarlas ?

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 408
Joined: Sun Aug 13, 2006 05:38 AM
Re: actualizar o substituto de gdiplus de canalfive
Posted: Thu Jan 30, 2014 09:47 PM

No me funcionan con una versi贸n mas reciente, la idea es hacer pruebas con una versi贸n mas reciente y si funciona, lo mas seguro es que actualicemos a 64 bits, que es lo que quiere el jefe.

Saludos

Quique

Continue the discussion