Página 15 de 23

RMChart

Enviado: 27 Mai 2016 21:39
por Daniel
Você poderia por um exemplo onde esta dando erro
com array de cores ? Quintas

pois estou fazendo pra Minigui uns teste aqui
única diferencia que achei da de vocês e, não precisa transformar o valor em decimal na função AddDataAxis

RMChart

Enviado: 28 Mai 2016 08:34
por JoséQuintas

Código: Selecionar todos

#include "rmchart.ch"
#define COLOR_MIDNIGHT_BLUE MidnightBlue
#define COLOR_DEFAULT Default
#define COLOR_WHITE Wite
#define COLOR_LIGHT_GREEN ColorLightGreen
#define COLOR_YELLOW Yellow
#define COLOR_GOLDENROD Goldenrod
#define COLOR_CRIMSON Crimson

FUNCTION Graphic5( oCrt, oRmChart )

LOCAL ID_RMC1 := 6
LOCAL aColors := { COLOR_LIGHT_GREEN, COLOR_YELLOW, COLOR_GOLDENROD, COLOR_CRIMSON }
LOCAL aData   := { 40, 30, 60, 20 }

oRmChart:CreateChart( oCrt:hWnd,ID_RMC1,10,10,600,450,COLOR_MIDNIGHT_BLUE,RMC_CTRLSTYLEIMAGE,.F.,"seasky.jpg","Tahoma", 0, COLOR_DEFAULT )
oRMChart:AddRegion(ID_RMC1,5,5,-5,-5,"",.F.)
oRMChart:AddLegend(ID_RMC1,1,"Apples*Citrons*Bananas*Cherries",RMC_LEGEND_CUSTOM_CENTER,COLOR_DEFAULT,RMC_LEGENDNORECT,COLOR_WHITE,8,.F.)
oRmChart:AddGridlessSeries(ID_RMC1,1, aData, 4, aColors, 4,RMC_DONUT_GRADIENT,RMC_FULL,0,.F.,RMC_VLABEL_TWIN,RMC_HATCHBRUSH_OFF, 0)
oRmChart:SetWatermark(RMC_USERWM,RMC_USERWMCOLOR,RMC_USERWMLUCENT,RMC_USERWMALIGN,RMC_USERFONTSIZE)
oRmChart:Draw(ID_RMC1)

RMChart

Enviado: 28 Mai 2016 10:19
por Daniel
Quintas aqui funcionou tive que trocar o array para double

RMChart

Enviado: 28 Mai 2016 10:37
por JoséQuintas
Valeu, eu estava convertendo o parâmetro errado no teste.... rs

Além disso, estou testando todos os gráficos de uma vez.
Isso gera problema para os demais gráficos.

Mas encontrei uma solução: só converter se for array

Código: Selecionar todos

METHOD RMChart:ToDouble( xValue )

   LOCAL cDouble := "", oElement

   IF ValType( xValue ) == "N"
      RETURN xValue
   ENDIF
   FOR EACH oElement IN xValue
      cDouble += FToC( oElement )
   NEXT

   RETURN cDouble

RMChart

Enviado: 28 Mai 2016 11:48
por JoséQuintas
Meu teste, gerando todos os gráficos em seguida, um de cada vez.
E consegui redimensionar automático, mesmo nos 4 gráficos simultâneos.

Código: Selecionar todos

FUNCTION Main

   LOCAL oCrt1, oRMChart
   SetMode(50,100)
   SetColor( "W/B" )
   CLS
   oCrt1 := tstRetangle():New( , , { 0, 0 }, { -MaxRow()-1, -MaxCol()-1 } )
   oCrt1:Create()
   oRMChart := RMChart():New()
   Graphic1( oCrt1, oRMChart )
   Graphic2( oCrt1, oRMChart )
   Graphic3( oCrt1, oRMChart )
   Graphic4( oCrt1, oRmChart )
   Graphic5( oCrt1, oRmChart )
   // oRMChart:Destroy()

   RETURN NIL
grafico1.png
grafico2.png
grafico3.png
grafico4.png
grafico5.png

RMChart

Enviado: 28 Mai 2016 11:50
por JoséQuintas
O fonte desse último.

Código: Selecionar todos

FUNCTION Graphic5( oCrt, oRmChart )

   LOCAL ID_RMC1 := 6
   LOCAL aColors := { COLOR_LIGHT_GREEN, COLOR_YELLOW, COLOR_GOLDENROD, COLOR_CRIMSON }
   LOCAL aData   := { 40, 30, 60, 20 }

   oRmChart:CreateChart( oCrt:hWnd,ID_RMC1,0,0,MAX_SIZE_ONE,MAX_SIZE_TWO,COLOR_MIDNIGHT_BLUE,RMC_CTRLSTYLEIMAGE,.F.,"seasky.jpg","Tahoma", 0, COLOR_DEFAULT )
   oRMChart:AddRegion(ID_RMC1,5,5,-5,-5,"",.F.)
   oRMChart:AddLegend(ID_RMC1,1,"Apples*Citrons*Bananas*Cherries",RMC_LEGEND_CUSTOM_CENTER,COLOR_DEFAULT,RMC_LEGENDNORECT,COLOR_WHITE,8,.F.)
   oRmChart:AddGridlessSeries(ID_RMC1,1, aData, 4, aColors, 4,RMC_DONUT_GRADIENT,RMC_FULL,0,.F.,RMC_VLABEL_TWIN,RMC_HATCHBRUSH_OFF, 0)
   oRmChart:SetWatermark(RMC_USERWM,RMC_USERWMCOLOR,RMC_USERWMLUCENT,RMC_USERWMALIGN,RMC_USERFONTSIZE)
   oRmChart:Draw(ID_RMC1)
   Inkey(0)
   oRmChart:DeleteChart( ID_RMC1 )
   RETURN NIL
Nota: alterei as cores pra COLOR_ pra evitar conflitos e pra ver depois se é possível usar nas janelas. Além disso, Default não é uma palavra interessante pra colocar no #define, melhor COLOR_DEFAULT

Nota2: parece que linha/coluna é invertido, então usei SIZE_ONE e SIZE_TWO pra não me confundir com a inversão durante testes.

RMChart

Enviado: 28 Mai 2016 12:04
por Daniel
Vai ter que por um função no quinto elemento, para não dar erro quanto passa numero

Código: Selecionar todos

AddGridlessSeries(ID_CHART,1, FDouble(aData), 4, FDouble(aColors), FTamanho(aColors),RMC_DONUT_GRADIENT,RMC_FULL,0,0,RMC_VLABEL_TWIN,RMC_HATCHBRUSH_OFF, 0)

Function FTamanho(Arg)
Return IIf(ValType(Arg) == "N", 0, Len(Arg))

RMChart

Enviado: 28 Mai 2016 12:05
por JoséQuintas
Já comentei que ficou resolvido, e postei o que usei pra resolver que foi praticamente isso mesmo, valeu a intenção.

Mais um, abusando pra ver se realmente está funcionando.... rs
grafico6.png

RMChart

Enviado: 28 Mai 2016 12:08
por JoséQuintas
só alterei o fonte principal, criando uma área pra cada um:

Código: Selecionar todos

FUNCTION Main

   LOCAL oRmChart, oCrt1, oCrt2, oCrt3, oCrt4, oCrt5
   SetMode(50,100)
   SetColor( "W/B" )
   CLS
   @ 30, 5 SAY "Testing"
   @ 31, 5 SAY "RMChart.dll"
   @ 32, 5 SAY "On"
   @ 33, 5 SAY "Modified"
   @ 34, 5 SAY "GTWVG"
   oCrt1 := tstRetangle():New( , , { 0, 0 }, { -25, -25 } )
   oCrt1:Create()
   oCrt2 := TstRetangle():New( , , { 0, -26 }, { -25, -25 } )
   oCrt2:Create()
   oCrt3 := TstRetangle():New( , , { 0, -51 }, { -25, -25 } )
   oCrt3:Create()
   oCrt4 := TstRetangle():New( , , { 0, -76 }, { -25, -25 } )
   oCrt4:Create()
   oCrt5 := TstRetangle():New( , , { -26, 0 }, { -25, -25 } )
   oCrt5:Create()
   oRMChart := RMChart():New()
   Graphic1( oCrt1, oRMChart )
   Graphic2( oCrt2, oRMChart )
   Graphic3( oCrt3, oRMChart )
   Graphic4( oCrt4, oRmChart )
   Graphic5( oCrt5, oRmChart )
   Inkey(0)
   // oRMChart:Destroy()

   RETURN NIL

RMChart

Enviado: 28 Mai 2016 12:13
por Daniel
Legal, Ficou muito bom mesmo

RMChart

Enviado: 28 Mai 2016 12:14
por JoséQuintas
Melhor organizado.
grafico8.png
Tanto faz. Dá pra dividir a tela pelo programa, ou dividir pelo RMChart.
A opção de 4 gráficos agora virou até algo que é mais complicado fazer pelo RMChart.... rs

RMChart

Enviado: 28 Mai 2016 12:19
por Daniel
A função que eu passei e para arrumar erro quanto nao passa array na cor
pois tem que trocar o valor para 0 para rmchart usar alto-comando

AddGridlessSeries(ID_CHART,1, FDouble(aData), 4, FDouble(aColors), FTamanho(aColors),RMC_DONUT_GRADIENT,RMC_FULL,0,0,RMC_VLABEL_TWIN,RMC_HATCHBRUSH_OFF, 0)

RMChart

Enviado: 28 Mai 2016 12:21
por JoséQuintas
O tamanho a ser usado:

Código: Selecionar todos

#define MAX_SIZE_ONE oCrt:CurrentSize[ 1 ]
#define MAX_SIZE_TWO oCrt:CurrentSize[ 2 ]
Nada complicado. Ao invés do tradicional Row/Col Linhas/Colunas, as coordenadas X/Y, praticamente a mesma coisa mas em pixels.

RMChart

Enviado: 28 Mai 2016 12:24
por JoséQuintas
Já postei lá atrás, foi graças a ter falado que funcionou.

Alterei o método que precisou o acerto

Código: Selecionar todos

   METHOD AddGridLessSeries(a,b,c,d,e,...) INLINE ::CallDllStd( "RMC_ADDGRIDLESSSERIES", a, b, ::ToDouble(c), d, ::ToDouble(e), ... )
E alterei a conversão, pra só converter se for array

Código: Selecionar todos

METHOD RMChart:ToDouble( xValue )

   LOCAL cDouble := "", oElement

   IF ValType( xValue ) == "N"
      RETURN xValue
   ENDIF
   FOR EACH oElement IN xValue
      cDouble += FToC( oElement )
   NEXT

   RETURN cDouble
Nos testes que eu tinha feito antes, eu já tinha alterado a rotina, mas não tinha dado certo porque peguei o parâmetro errado.
Antes eu tinha convertido D ao invés de E.

RMChart

Enviado: 28 Mai 2016 12:30
por Daniel
Quintas, outra coisa que eu vi, usar .T. ou .F. não funciona tem que ser 1 ou 0

seria a onde esta em vermelho, testa ai passando uma cor so em vez do array para voce entender