RMChart
Enviado: 18 Mai 2016 17:40
Janio,
Dll pura a rmchart.dll
Dll pura a rmchart.dll
Não consegui sucesso na chamada, abortaSyntax
nResult (LONG) = RMC_Draw2File(
ByVal nCtrlId (LONG),
ByRef sFileName (ASCIIZ),
Optional ByVal nWidth (LONG),
Optional ByVal nHeight (LONG),
Optional ByVal nJPGQualityLevel (LONG)
)
Parameter
nCtrlId (LONG)
Unique ID of the chart control, which shall be saved.
sFileName (ASCIIZ)
Path and name of the file, which shall be created. The extension of sFileName can be: png, jpg, emf or emf+. If you want to save the chart as a bitmap, you should use png, because the file size is smaller than with jpg. No rule without exception: I made the experience, that with pies and donuts as well as with thumbnails jpg is smaller then png.
emf is compatible with the GDI's EMF-files (but up to 25 times bigger than emf+), while emf+ works only with GDI+. When saved to disk, both types have the extension *.emf.
nWidth (LONG)
Width of the bitmap, which shall be drawn into the file, in pixel. See Remarks
nHeight (LONG)
Height of the bitmap, which shall be drawn into the file, in pixel. See Remarks
nJPGQualityLevel (LONG)
Compression ratio (and therefore the quality) of the bitmap, if you save it as JPG/JPEG. Valid values are between 1 (highest compression, lowest quality) to 100 (lowest compression, highest quality). If omitted or 0: the standard compression ratio of GDI+ is used, which is something around 75 (I guess).
E depois dei de cara com este fonte, que parece mas não é.... rsNew features in version 4.12 (January 2008)
...
RMCDesigner supports now source code creation for Xailer, a development environment for Xbase
Código: Selecionar todos
CALLBACK FUNCTION ShowDialogRMCCallback
LOCAL TINFO AS tRMC_INFO POINTER
STATIC z&
SELECT CASE CBMSG
CASE %WM_RBUTTONDOWN ' right mouse button was clicked
' CBLPARAM holds always the X/Y-position within the dialog,
' even you've clicked onto the chart
MSGBOX "X-Pos in the dialog:"+STR$(LOWRD(CBLPARAM))+$CRLF+ _
"Y-Pos in the dialog:"+STR$(HIWRD(CBLPARAM))
CASE %WM_COMMAND
SELECT CASE CBCTL
CASE %ID_CLOSE
DIALOG END CBHNDL
CASE %ID_RMC1 'message from the chart control
SELECT CASE CBCTLMSG 'identify the message
CASE %RMC_LBUTTONDOWN 'left mouse button
z = 1 'set flag for left mouse button pressed
CASE %RMC_LBUTTONUP
z = 0 'reset the flag for left mouse button pressed
CASE %RMC_CTRLRBUTTONDOWN 'Ctrl and right mouse button
TINFO = CBLPARAM 'CBLPARAM holds a pointer to a tRMC_INFO structure
MSGBOX "X-Pos in the chart:"+STR$(@TINFO.nXPos)+$CRLF+ _
"Y-Pos in the chart:"+STR$(@TINFO.nYPos)
CASE %RMC_MOUSEMOVE 'mouse was moved in the chart control
TINFO = CBLPARAM 'CBLPARAM holds a pointer to a tRMC_INFO structure
IF z THEN 'if the left mouse button is pressed
'move the chart control within your dialog
RMC_SetCtrlpos %ID_RMC1,@TINFO.nXMove,@TINFO.nYMove,1
END IF
END SELECT
END SELECT
END SELECT
END FUNCTION
Código: Selecionar todos
#include "hbclass.ch"
#include "rmchart.ch"
#include "hbgtinfo.ch"
#include "hbdyn.ch"
#define RMC_USERWM "" // Your watermark
#define RMC_USERWMCOLOR Black // Color for the watermark
#define RMC_USERWMLUCENT 30 // Lucent factor between 1(=not visible) and 255(=opaque)
#define RMC_USERWMALIGN RMC_TEXTCENTER // Alignment for the watermark
#define RMC_USERFONTSIZE 0 // Fontsize; if 0: maximal size is used
FUNCTION Main
LOCAL oCrt, cLegenda, cLabels, cTitulo, aDados, cImagem, cUnidade, cTextoVert, nMax, nIdChart
LOCAL oGrafico := RMChart():New(), nCont, oElement
LOCAL sTemp1, aData1, sTemp2, aData2, aData3, aData4, aData5, aData6, aData7, aData8, sTemp3 := "", ID_RMC1 := 1
oCrt := WvgCrt():New( , , { -1, -1 }, { 25, 85 }, , .T. )
oCrt:lModal := .T.
oCrt:icon := "demo.ico"
oCrt:resizable := .T.
oCrt:create()
hb_gtInfo( HB_GTI_WINTITLE, "Grafico com RmChart - Dll" )
IF .T.
cLegenda := "Entradas*Saidas*Mais Um"
cLabels := "Janeiro*Fevereiro*Março*Abril*Maio*Junho*Julho*Agosto*Setembro*Outubro*Novembro*Dezembro"
cTitulo := "Gráfico de Teste"
aDados := { ;
{ 225.25, 100.00, 100.00, 150.00, 250.00, 300.00, 25.00, 75.00, 300.00, 200.00, 325.00, 300.00 }, ;
{ 220.00, 100.00, 125.00, 300.00, 150.00, 125.00, 85.00, 50.00, 285.00, 275.00, 295.00, 280.00 }, ;
{ 125.25, 100.00, 100.00, 150.00, 250.00, 300.00, 25.00, 75.00, 300.00, 200.00, 325.00, 300.00 } }
cImagem := ""
cUnidade := "R$ "
cTextoVert := ""
nMax := 0
nIdChart := 1
FOR EACH oElement IN aDados
nMax := Max( nMax, aMax( oElement ) )
NEXT
nMax := Round( ( Int( nMax / 10 ) * 10 ) + 10, 2 )
oGrafico:CreateChart( hb_gtInfo( HB_GTI_WINHANDLE ), nIdChart, 0, 0, 770, 400, Azure, RMC_CTRLSTYLE3DLIGHT, .F., cImagem, "", 0, 0 )
oGrafico:AddRegion( nIdChart, 0, 0, 760, 400, "RmChart", .F. )
oGrafico:AddCaption( nIdChart, 1, cTitulo, Transparent, Red, 9, .T. )
oGrafico:AddGrid( nIdChart, 1, LightBlue, .F., 20, 20, 685, 330, RMC_BICOLOR_LABELAXIS )
oGrafico:AddLabelAxis( nIdChart, 1, cLabels, 1, Len( aDados[ 1 ] ), RMC_LABELAXISBOTTOM, 8, Black, RMC_TEXTCENTER, Black, RMC_LINESTYLENONE, "" )
oGrafico:AddDataAxis( nIdChart, 1, RMC_DATAAXISRIGHT, 0.0, nMax, Len( aDados[ 1 ] ), 8, Black, Black, RMC_LINESTYLESOLID, 1, cUnidade, cTextoVert, "", RMC_TEXTCENTER )
oGrafico:AddLegend( nIdChart, 1, cLegenda, RMC_LEGEND_BOTTOM, Transparent, RMC_LEGENDNORECT, Red, 8, .T. )
FOR nCont = 1 TO Len( aDados )
oGrafico:AddBarSeries( nIdChart, 1, aDados[ nCont ], 12, RMC_BARGROUP, RMC_BAR_FLAT_GRADIENT2, .F., 0, .F., 1, RMC_VLABEL_NONE, nCont, RMC_HATCHBRUSH_ONPRINTING )
NEXT
oGrafico:Draw( nIdChart )
ENDIF
IF .F.
sTemp1 := "Label 1*Label 2*Label 3*Label 4*Label 5"
aData1 := { 30,40,70,60,20 }
sTemp2 := "Label 1*Label 2*Label 3*Label 4*Label 5"
aData2 := { 20, 10, 15, 25, 30 }
aData3 := { 25, 30, 10, 20, 15 }
aData4 := { 10, 20, 40, 20, 30 }
aData5 := { 40, 30, 20, 30, 20 }
aData6 := { 30, 50, 20, 40, 60 }
aData7 := { 240, 230, 220, 180, 170, 160, 145, 130, 125, 115 }
aData8 := { 8,1, 6.2, 4.3, 2.2, 1.2, 3.1, 5.2, 11.4, 7.3, 4.2 }
DO CASE
CASE oGrafico:CreateChart( hb_gtInfo( HB_GTI_WINHANDLE ),ID_RMC1,0,0,700,400,AliceBlue,RMC_CTRLSTYLEFLATSHADOW,.F.,"","", 0, 0 ) < 0
CASE .T.
CASE oGrafico:AddRegion(ID_RMC1,2,2,348,248,"",.F.) < 0
CASE oGrafico:AddGrid(ID_RMC1,1,Beige,.F.,0,0,0,0,RMC_BICOLOR_NONE) < 0
CASE oGrafico:AddDataAxis(ID_RMC1,1,RMC_DATAAXISLEFT,0,100,11,8,Black,Black,RMC_LINESTYLESOLID,0,"","","",RMC_TEXTCENTER) < 0
CASE oGrafico:AddLabelAxis(ID_RMC1,1, sTemp1,1,5,RMC_LABELAXISBOTTOM,8,Black,RMC_TEXTCENTER,Black,RMC_LINESTYLESOLID,"")
CASE oGrafico:AddBarSeries(ID_RMC1,1,aData1, 5,RMC_BARSINGLE,RMC_BAR_3D,.F.,Default,.F.,1,RMC_VLABEL_NONE,1,RMC_HATCHBRUSH_OFF) < 0
CASE oGrafico:AddRegion(ID_RMC1,352,2,-2,248,"",.F.) < 0
CASE oGrafico:AddGrid(ID_RMC1,2,Beige,.F.,0,0,0,0,RMC_BICOLOR_NONE) < 0
CASE oGrafico:AddDataAxis(ID_RMC1,2,RMC_DATAAXISBOTTOM,0,100,11,8,Black,Black,RMC_LINESTYLESOLID,0,"","","",RMC_TEXTCENTER) < 0
CASE oGrafico:AddLabelAxis(ID_RMC1,2, sTemp2,1,5,RMC_LABELAXISLEFT,8,Black,RMC_TEXTCENTER,Black,RMC_LINESTYLESOLID,"") < 0
CASE oGrafico:AddBarSeries(ID_RMC1,2,aData2, 5,RMC_BARSTACKED,RMC_COLUMN_FLAT,.F.,Default,.T.,1,RMC_VLABEL_NONE,1,RMC_HATCHBRUSH_OFF) < 0
CASE oGrafico:AddBarSeries(ID_RMC1,2,aData3, 5,RMC_BARSTACKED,RMC_COLUMN_FLAT,.F.,Default,.T.,1,RMC_VLABEL_NONE,1,RMC_HATCHBRUSH_OFF) < 0
CASE oGrafico:AddBarSeries(ID_RMC1,2,aData4, 5,RMC_BARSTACKED,RMC_COLUMN_FLAT,.F.,Default,.T.,1,RMC_VLABEL_NONE,1,RMC_HATCHBRUSH_OFF) < 0
CASE oGrafico:AddBarSeries(ID_RMC1,2,aData5, 5,RMC_BARSTACKED,RMC_COLUMN_FLAT,.F.,Default,.T.,1,RMC_VLABEL_NONE,1,RMC_HATCHBRUSH_OFF) < 0
CASE oGrafico:AddRegion(ID_RMC1,2,252,348,-2,"",.F.) < 0
CASE oGrafico:AddGridlessSeries(ID_RMC1,3, aData6, 5,0,0,RMC_PIE_3D_GRADIENT,RMC_FULL,2,.F.,RMC_VLABEL_DEFAULT,RMC_HATCHBRUSH_OFF, 0) < 0
CASE oGrafico:AddRegion(ID_RMC1,352,252,-2,-2,"",.F.) < 0
CASE oGrafico:AddGrid(ID_RMC1,4,AliceBlue,.T.,0,0,0,0,RMC_BICOLOR_NONE) < 0
CASE oGrafico:AddDataAxis(ID_RMC1,4,RMC_DATAAXISLEFT,100,250,11,8,Blue,Black,RMC_LINESTYLESOLID,0,"$ ","","",RMC_TEXTCENTER) < 0
CASE oGrafico:AddDataAxis(ID_RMC1,4,RMC_DATAAXISRIGHT,0,0,0,0,0,0,0,2," %","") < 0
CASE oGrafico:AddLabelAxis(ID_RMC1,4, sTemp3,1,10,RMC_LABELAXISBOTTOM,8,Black,RMC_TEXTCENTER,Black,RMC_LINESTYLESOLID,"") < 0
CASE oGrafico:AddBarSeries(ID_RMC1,4,aData7, 10,RMC_BARSINGLE,RMC_BAR_FLAT_GRADIENT2,.F.,Gold,.F.,1,RMC_VLABEL_NONE,1,RMC_HATCHBRUSH_OFF) < 0
CASE oGrafico:AddLineSeries(ID_RMC1,4, aData8, 10,0,0,RMC_LINE,RMC_LINE_CABLE,RMC_LSTYLE_LINE,.F., Green,RMC_SYMBOL_NONE,2,RMC_VLABEL_DEFAULT,RMC_HATCHBRUSH_OFF) < 0
CASE oGrafico:SetWatermark(RMC_USERWM,RMC_USERWMCOLOR,RMC_USERWMLUCENT,RMC_USERWMALIGN,RMC_USERFONTSIZE) < 0
CASE oGrafico:Draw(ID_RMC1) < 0
ENDCASE
ENDIF
Inkey( 0 )
oCrt:destroy()
oGrafico:Destroy()
RETURN NIL
FUNCTION AMax( x )
LOCAL nVal, oElement
nVal := x[ 1 ]
FOR EACH oElement IN x
IF oElement > nVal
nVal := oElement
ENDIF
NEXT
RETURN nVal
CREATE CLASS RmChart
VAR nHandle
METHOD New() INLINE ::nHandle := hb_libLoad( "RMChart.dll" ), SELF
METHOD Destroy() INLINE hb_libFree( ::nHandle )
METHOD CallDllStd( cName, ... ) INLINE hb_DynCall( { cName, ::nHandle, HB_DYN_CALLCONV_STDCALL }, ... )
METHOD CreateChart( ... ) INLINE ::CallDllStd( "RMC_CREATECHART", ... )
METHOD AddRegion( ... ) INLINE ::CallDllStd( "RMC_ADDREGION", ... )
METHOD AddCaption( ... ) INLINE ::CallDllStd( "RMC_ADDCAPTION", ... )
METHOD AddGrid( ... ) INLINE ::CallDllStd( "RMC_ADDGRID", ... )
METHOD AddLabelAxis( ... ) INLINE ::CallDllStd( "RMC_ADDLABELAXIS", ... )
METHOD AddDataAxis( ... ) INLINE ::CallDllStd( "RMC_ADDDATAAXIS", ... )
METHOD AddLegend( ... ) INLINE ::CallDllStd( "RMC_ADDLEGEND", ... )
METHOD AddBarSeries( a, b, c, ... ) INLINE ::CallDllStd( "RMC_ADDBARSERIES", a, b, ::ToDouble( c ), ... )
METHOD Draw( ... ) INLINE ::CallDllStd( "RMC_DRAW", ... )
METHOD Draw2Clipboard( ... ) INLINE ::CallDllStd( "RMC_DRAW2CLIPBOARD", ... )
METHOD Draw2Printer( ... ) INLINE ::CallDllStd( "RMC_DRAW2PRINTER", ... )
METHOD Draw2File( ... ) INLINE ::CallDllStd( "RMC_DRAW2FILE", ... )
METHOD ToDouble( c )
ENDCLASS
METHOD ToDouble( c )
LOCAL cDouble := "", oElement
FOR EACH oElement IN c
cDouble += FToC( oElement )
NEXT
RETURN cDouble
Código: Selecionar todos
Dim i AS LONG
Dim nC AS LONG
Dim nDataCount AS LONG
Dim nRetVal AS LONG
Dim sTemp AS STRING
ReDim aData(0) AS DOUBLE
ReDim aData2(0) AS DOUBLE
ReDim aPPC(0) AS LONG
ReDim aColor(0) AS LONG
'************** Create the chart **********************
nRetVal = RMC_CreateChartOnDC(Me.hDC,ID_RMC1,10,10,600,450,Transparent,RMC_CTRLSTYLEIMAGE,FALSE,"seasky.jpg","Tahoma", Default)
IF nRetVal < 0 THEN GOTO IsError
'************** Add Region 1 *****************************
nRetVal = RMC_AddRegion(ID_RMC1,5,5,-5,-5,"",FALSE)
IF nRetVal < 0 THEN GOTO IsError
'************** Add grid to region 1 *****************************
nRetVal = RMC_AddGrid(ID_RMC1,1,Transparent,FALSE,0,0,0,0,RMC_BICOLOR_NONE)
IF nRetVal < 0 THEN GOTO IsError
'************** Add data axis to region 1 *****************************
nRetVal = RMC_AddDataAxis(ID_RMC1,1,RMC_DATAAXISLEFT,0,100,11,8,Chalk,Chalk,RMC_LINESTYLEDOT,0,"","","",RMC_TEXTCENTER)
IF nRetVal < 0 THEN GOTO IsError
'************** Add label axis to region 1 *****************************
sTemp = "Label 1*Label 2*Label 3*Label 4*Label 5"
nRetVal = RMC_AddLabelAxis(ID_RMC1,1, sTemp,1,5,RMC_LABELAXISBOTTOM,8,Yellow,RMC_TEXTCENTER,Chalk,RMC_LINESTYLENONE,"")
IF nRetVal < 0 THEN GOTO IsError
'************** Add Series 1 to region 1 *******************************
'****** Read data values ******
REDIM aData(4)
aData(0) = 50 : aData(1) = 70 : aData(2) = 40 : aData(3) = 60 : aData(4) = 30
nRetVal = RMC_AddBarSeries(ID_RMC1,1,aData(0), 5,RMC_BARSINGLE,RMC_BAR_FLAT_GRADIENT2,TRUE,Transparent,FALSE,1,RMC_VLABEL_NONE,1,RMC_HATCHBRUSH_OFF)
IF nRetVal < 0 THEN GOTO IsError
nRetVal = RMC_SetWatermark(RMC_USERWM,RMC_USERWMCOLOR,RMC_USERWMLUCENT,RMC_USERWMALIGN,RMC_USERFONTSIZE)
nRetVal = RMC_Draw(ID_RMC1)
IF nRetVal < 0 THEN GOTO IsError
Exit SUB
IsError: