RMChart

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

RMChart

Mensagem por ANDRIL »

José, Asimões e todos que participaram, Parabéns pelo Projeto!

Eu uso a GTWVG como lib gráfica, ela tem um "problema" quando exibe elementos como imagens, ou seja, se estiver exibindo a imagem e mudar o foco da janela, ao voltar some a imagem, com o gráfico acontece o mesmo? Conseguiram imprimir o gráfico gerado em PDF ou mesmo na impressora?
Ate+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

RMChart

Mensagem por asimoes »

Andril,

Eu iniciei o tópico obtive êxito para exibir o gráfico, mas quem desvendou os problemas e criou a classe para o rmChart foi o Quintas, sim, respondendo as suas perguntas:

Mostra o gráfico,

Não tem o problema de sumir a imagem.
Pode imprimir (impressora pdf, impressora jato de tinta)
Pode gerar um arquivo de imagem do gráfico (jpg, png, bmp, etc)
Pode fazer um clipboard do gráfico (imagem) e colar em qualquer outro aplicativo (word, excel, etc)

Maiores explicações deixo a cargo do Quintas para exemplificar o seu uso.

Nota: provavelmente fará parte da GTWVG em breve. Houve interesse do Pritpal Bedi
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Daniel
Usuário Nível 3
Usuário Nível 3
Mensagens: 373
Registrado em: 13 Ago 2003 22:42
Localização: Apucarana - PR

RMChart

Mensagem por Daniel »

Uma má notícia, apesar de não impedir o uso:
A conversão de array de cores não dá erro, pareceu dar certo, mas não deu.
Reparem que as cores não são as mesmas.
Quintas eu também vi este erro e tentei arrumar o array mais não consegui.
Mais pode ser usado assim

Código: Selecionar todos

	aColors := {LightGreen, Yellow, Goldenrod, Crimson}
   aData   := { 40, 30, 60, 20 }
   CreateChart(GetFormHandle("Win_1"), ID_CHART,10,10,600,450,MidnightBlue,RMC_CTRLSTYLEIMAGE,0,"seasky.jpg","Tahoma", 0, 0 )
	AddRegion(ID_CHART,5,5,-5,-5,"",0)
	AddLegend(ID_CHART, 1,"Apples*Citrons*Bananas*Cherries",RMC_LEGEND_CUSTOM_CENTER,0,RMC_LEGENDNORECT,WHITE,8,0)
   AddGridlessSeries(ID_CHART,1, FDouble(aData), 4, FDouble(aColors), FTamanho(aColors), RMC_DONUT_GRADIENT,RMC_FULL,0,.F.,RMC_VLABEL_TWIN,RMC_HATCHBRUSH_OFF, 0)
   For x:= 1 To Len(aColors)
		SetSeriesColor(ID_CHART,1,1, aColors[x],x)
	Next x
	DrawChart(ID_CHART)

sobre as limitações são:
9 cores no modo automático,
6 gráfico por região,
15 em Series (pode ser que as cores fica limitada em 15 também) e
20 Instâncias abertas
Daniel

Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

RMChart

Mensagem por JoséQuintas »

Resolvido com L2Bin()

Código: Selecionar todos

CREATE CLASS RmChart

   VAR    nHandle

   METHOD New()                            INLINE ::nHandle := hb_libLoad( "RMChart.dll" ), SELF
   METHOD Destroy()                        INLINE hb_libFree( ::nHandle )
   METHOD CreateChart( ... )               INLINE ::CallDllStd( "RMC_CREATECHART", ... )
   METHOD CreateChartOnDc( ... )           INLINE ::CallDllStd( "RMC_CREATECHARONDC", ... )
   METHOD AddBarSeries(a,b,c, ... )        INLINE ::CallDllStd( "RMC_ADDBARSERIES", a, b, ::ToDouble(c), ... )
   METHOD AddRegion( ... )                 INLINE ::CallDllStd( "RMC_ADDREGION", ... )
   METHOD AddCaption( ... )                INLINE ::CallDllStd( "RMC_ADDCAPTION", ... )
   METHOD AddDataAxis(a,b,c,d,e, ... )     INLINE ::CallDllStd( "RMC_ADDDATAAXIS", a, b, c, ::ToDecimal(d), ::ToDecimal(e), ... )
   METHOD AddGrid( ... )                   INLINE ::CallDllStd( "RMC_ADDGRID", ... )
   METHOD AddGridLessSeries(a,b,c,d,e,...) INLINE ::CallDllStd( "RMC_ADDGRIDLESSSERIES", a, b, ::ToDouble(c), d, ::ToSignedLong(e), ... )
   METHOD AddLabelAxis( ... )              INLINE ::CallDllStd( "RMC_ADDLABELAXIS", ... )
   METHOD AddLegend( ... )                 INLINE ::CallDllStd( "RMC_ADDLEGEND", ... )
   METHOD AddLineSeries( a,b,c, ... )      INLINE ::CallDllStd( "RMC_ADDLINESERIES", a, b, ::ToDouble(c), ... )
   METHOD CoText( ... )                    INLINE ::CallDllStd( "RMC_COTEXT", ... )
   METHOD DeleteChart( ... )               INLINE ::CallDllStd( "RMC_DELETECHART", ... )
   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 Reset( ... )                     INLINE ::CallDllStd( "RMC_RESET", ... )
   METHOD SetWaterMark( ... )              INLINE ::CallDllStd( "RMC_SETWATERMARK", ... )
   METHOD WriteRMCFile( ... )              INLINE ::CallDllStd( "RMC_WRITERMCFILE", ... )
   METHOD CallDllStd( cName, ... )         INLINE hb_DynCall( { cName, ::nHandle, HB_DYN_CALLCONV_STDCALL }, ... )
   METHOD ToDecimal( xValue )              INLINE xValue + 1.01 - 1.01
   METHOD ToDouble( xValue )
   METHOD ToSignedLong( xValue )

   ENDCLASS

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

METHOD RMChart:ToSignedLong( xValue )

   LOCAL cLong := "", oElement

   IF ValType( xValue ) == "N"
      RETURN xValue
   ENDIF
   FOR EACH oElement IN xValue
      cLong += L2Bin( oElement )
   NEXT
   RETURN cLong
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

RMChart

Mensagem por JoséQuintas »

A janela da GTWVG é sempre coberta por texto, não dá pra fazer o gráfico direto nela.
Tem que usar um controle intermediário.

No teste usei um controle daqueles que eu criei, pra colocar na janela da gtwvg, era o que estava "na mão".
Não testei com outro tipo de controle ainda.
Tem ainda alguns detalhes pra descobrir no re-uso ou várias janelas (simultâneas ou não).
Um teste rápido foi este, com multithread:

Código: Selecionar todos

#include "inkey.ch"

PROCEDURE Main

   hb_ThreadStart( { || tstRmChart() } )
   hb_ThreadStart( { || tstRmChart() } )
   hb_ThreadWaitForAll()
   RETURN
Como a IDChart é a mesma, ao mostrar o gráfico numa janela, desaparece o gráfico da outra.
E deu GPF no final, na hora de encerrar.
test.png
É como eu disse antes:
Dá a impressão que o RMChart lembra do uso, provavelmente uma área onde ele armazena os dados.
Ao contrário de outras DLLs, hb_LibFree() parece não ser suficiente.
Algumas informações são passadas como ponteiro: posição de memória
Precisa cuidado em não deixar a DLL presa a essas posições de memória, ou gera GPF.

Por enquanto foram testes.
Ajudaram:

RMChart:Reset() limpa os dados sem apagar o gráfico
RMChart:DeleteChart( id ) limpa tudo
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

RMChart

Mensagem por JoséQuintas »

Uma coisa importante nos exemplos do VB, e nas declarações de DLL que mencionei:
Os parâmetros opcionais, são opcionais para o VB, não para a DLL.
Quando se declara no VB que o parâmetro é opcional numérico, automaticamente o VB acrescenta ZERO se não for informado.
Então tem este detalhe a mais na hora de aproveitar fontes VB6.
Uma opção é detalhar os parâmetros na classe, e testar o valor default de cada um.

O arquivo rmchart.ch não existe no rmchart.
Cada um que existe foi criado por alguém.
O programa exemplo em VB6 usa declarações que não existem no rmchart.ch, mas existem no fonte VB.

Dicas pra quem precisar de algum gráfico que não tem no fonte que foi criado pra Harbour:

Código: Selecionar todos

' Custom Objects
Enum COType
    RMC_CO_TEXT = 1
    RMC_CO_BOX = 2
    RMC_CO_CIRCLE = 3
    RMC_CO_LINE = 4
    RMC_CO_IMAGE = 5
    RMC_CO_SYMBOL = 6
    RMC_CO_POLYGON = 7
End Enum
Isso se trata de #define, apenas agrupado por tipo de uso

Código: Selecionar todos

Declare Function RMC_AddDataAxis Lib "RMCHART.DLL" Alias "RMC_ADDDATAAXIS" ( _
                            ByVal nCtrlId As Long, _
                            ByVal nRegion As Long, _
                            Optional ByVal nAlignment As DAxisAlignment, _
                            Optional ByVal nMinValue As Double, _
                            Optional ByVal nMaxValue As Double, _
                            Optional ByVal nTickCount As Long, _
                            Optional ByVal nFontSize As Long, _
                            Optional ByVal nTextColor As RMC_Colors, _
                            Optional ByVal nLineColor As RMC_Colors, _
                            Optional ByVal nLinestyle As AxisLineStyle, _
                            Optional ByVal nDecimalDigits As Long, _
                            Optional ByVal sUnit As String, _
                            Optional ByVal sText As String, _
                            Optional ByVal sLabels As String, _
                            Optional ByRef nLabelAlignment As Long _
                            ) As RMCError
Aqui um detalhe importante que esqueci, por isso alguns GPFs, : opcional, significa opcional pro fonte Visual Basic.
Singifica que o fonte VB pode conter RMC_AddDataAxis( 1, 2 )
Se fizer isso no Harbour, é GPF, porque pra DLL não é opcional.

Opções:
- Alterar a classe, colocar cada parâmetro desses, e atribuir valor default.
- Alterar a chamada ao método, acrescentando o que faltar.

Não precisa se preocupar com isso, mas precisa lembrar disso.
Pra todos os exemplos/gráficos até agora, isso não tinha feito falta.
Agora é que apareceu um exemplo que não preenche todos os parâmetros.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

RMChart

Mensagem por JoséQuintas »

Se for se preocupar com tudo isso agora, serão meses de digitação.

Fora as opções usadas até agora, tem as que não foram usadas.
Pra quem quer mais opções..... rs

Código: Selecionar todos

#require hbct.hbc
#include "hbclass.ch"
#include "hbdyn.ch"

CREATE CLASS RmChart

   VAR    nHandle

   METHOD New()                            INLINE ::nHandle := hb_libLoad( "RMChart.dll" ), SELF
   METHOD Destroy()                        INLINE hb_libFree( ::nHandle )
   METHOD AddBarSeries(a,b,c, ... )        INLINE ::CallDllStd( "RMC_ADDBARSERIES", a, b, ::ToDouble(c), ... )
   METHOD AddRegion( ... )                 INLINE ::CallDllStd( "RMC_ADDREGION", ... )
   METHOD AddCaption( ... )                INLINE ::CallDllStd( "RMC_ADDCAPTION", ... )
   METHOD AddDataAxis(a,b,c,d,e, ... )     INLINE ::CallDllStd( "RMC_ADDDATAAXIS", a, b, c, ::ToDecimal(d), ::ToDecimal(e), ... )
   METHOD AddGrid( ... )                   INLINE ::CallDllStd( "RMC_ADDGRID", ... )
   METHOD AddGridLessSeries(a,b,c,d,e,...) INLINE ::CallDllStd( "RMC_ADDGRIDLESSSERIES", a, b, ::ToDouble(c), d, ::ToSignedLong(e), ... )
   METHOD AddHightLowSeries(a,b,c,...)     INLINE ::CallDllStd( "RMC_ADDHIGHTLOWSERIES", a, b, ::ToDouble(c), ... )
   METHOD AddLabelAxis( ... )              INLINE ::CallDllStd( "RMC_ADDLABELAXIS", ... )
   METHOD AddLegend( ... )                 INLINE ::CallDllStd( "RMC_ADDLEGEND", ... )
   METHOD AddLineSeries( a,b,c, ... )      INLINE ::CallDllStd( "RMC_ADDLINESERIES", a, b, ::ToDouble(c), ... )
   METHOD AddToolTips( ... )               INLINE ::CallDllStd( "RMC_ADDTOOLTIPS", ... )
   METHOD AddVolumeBarSeries(a,b,c,...)    INLINE ::CallDllStd( "RMC_ADDVOLUMEBARSERIES", a, b, ::ToDouble(c), ... )
   METHOD AddXAxis(a,b,c,d,e,...)          INLINE ::CallDllStd( "RMC_ADDXAXIS", a, b, c, ::ToDouble(d), ::ToDouble(e), ... )
   METHOD AddXSeries(a,b,c,d,e,...)        INLINE ::CallDllStd( "RMC_ADDXSERIES", a, b, ::ToDouble(c), d, ::ToDouble(e), ... )
   METHOD AddYAxis(a,b,c,d,e,...)          INLINE ::CallDllStd( "RMC_ADDYAXIS", a, b, c, ::ToDouble(d), ::ToDouble(e), ... )
   METHOD AddYSeries(a,b,c,d,e,...)        INLINE ::CallDllStd( "RMC_ADDYSERIES", a, b, ::ToDouble(c), d, ::ToDouble(e), ... )
   METHOD CalcAverage(a,b,c,d,...)         INLINE ::CallDllStd( "RMC_CALCAVERAGE", a, b, c, ::ToDouble(d), ... )
   METHOD CalcTrend(a,b,c,d,e,... )        INLINE ::CallDllStd( "RMC_CALLTREND", a, b, c, ::ToDouble(d), ::ToDouble(e), ... )
   METHOD CoBox( ... )                     INLINE ::CallDllStd( "RMC_COBOX", ... )
   METHOD CoCircle( ... )                  INLINE ::CallDllStd( "RMC_COCIRCLE", ... )
   METHOD CoDash( ... )                    INLINE ::CallDllStd( "RMC_CODASH", ... )
   METHOD CoDelete( ... )                  INLINE ::CallDllStd( "RMC_CODELETE", ... )
   METHOD CoImage( ... )                   INLINE ::CallDllStd( "RMC_COIMAGE", ... )
   METHOD CoLine( a, b, c, d, ... )        INLINE ::CallDllStd( "RMC_COLINE", a, b, ::ToSignedLong( c ), ::ToSignedLong( d ), ... )
   METHOD CoPolygon( ... )                 INLINE ::CallDllStd( "RMC_COPOLYGON", ... )
   METHOD CoSymbol( ... )                  INLINE ::CallDllStd( "RMC_COSYMBOL", ... )
   METHOD CoText( ... )                    INLINE ::CallDllStd( "RMC_COTEXT", ... )
   METHOD CoVisible( ... )                 INLINE ::CallDllStd( "RMC_COVISIBLE", ... )
   METHOD CreateChart( ... )               INLINE ::CallDllStd( "RMC_CREATECHART", ... )
   /* METHOD CreateChartOnDc( ... )           INLINE ::CallDllStd( "RMC_CREATECHARONDC", ... )  // uncomment if you know what you are doing */
   METHOD DeleteChart( ... )               INLINE ::CallDllStd( "RMC_DELETECHART", ... )
   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 GetChartSizeFromFile( ... )      INLINE ::CallDllStd( "RMC_GETCHARTSIZEFROMFILE", ... )
   METHOD GetCtrlHeight( ... )             INLINE ::CallDllStd( "RMC_GETCTRLHEIGHT", ... )
   METHOD GetCtrlWidth( ... )              INLINE ::CallDllStd( "RMC_GETCTRLWIDTH", ... )
   METHOD GetData( ... )                   INLINE ::CallDllStd( "RMC_GETDATA", ... )
   METHOD GetDataCount( ... )              INLINE ::CallDllStd( "RMC_GRETDATACOUNT", ... )
   METHOD GetDataLocation( ... )           INLINE ::CallDllStd( "RMC_GETDATALOCATION", ... )
   METHOD GetDataLocationXY( ... )         INLINE ::CallDllStd( "RMC_GETDATALOCATIONXY", ... )
   METHOD GetGridLocation( ... )           INLINE ::CallDllStd( "RMC_GETGRIDLOCATION", ... )
   METHOD GetHighPart( ... )               INLINE ::CallDllStd( "RMC_GETHIGHPART", ... )
   METHOD GetImageSizeFromFile( ... )      INLINE ::CallDllStd( "RMC_GETIMAGESIZEFROMFILE", ... )
   METHOD GetInfo( ... )                   INLINE ::CallDllStd( "RMC_GETINFO", ... )
   METHOD GetInfoXY( ... )                 INLINE ::CallDllStd( "RMC_GETINFOXY", ... )
   METHOD GeTLowPart( ... )                INLINE ::CallDllStd( "RMC_GETLOWPART", ... )
   METHOD GetSeriesDataRange( ... )        INLINE ::CallDllStd( "RMC_GETSERIESDATARANGE", ... )
   METHOD GetVersion( ... )                INLINE ::CallDllStd( "RMC_GETVERSION", ... )
   METHOD Magnifier( ... )                 INLINE ::CallDllStd( "RMC_MAGNIFIER", ... )
   METHOD Paint( ... )                     INLINE ::CallDllStd( "RMC_PAINT", ... )
   METHOD Reset( ... )                     INLINE ::CallDllStd( "RMC_RESET", ... )
   METHOD Rnd( ... )                       INLINE ::CallDllStd( "RMC_RND", ... )
   METHOD SetCaptionText( ... )            INLINE ::CallDllStd( "RMC_SETCAPTIONTEXT", ... )
   METHOD SetCaptionBGColor( ... )         INLINE ::CallDllStd( "RMC_SETCAPTIONBGCOLOR", ... )
   METHOD SetCaptionTextColor( ... )       INLINE ::CallDllStd( "RMC_SETCAPTIONTEXTCOLOR", ... )
   METHOD SetCaptionFontBold( ... )        INLINE ::CallDllStd( "RMC_SETCAPTIONFONTBOLD", ... )
   METHOD SetCaptionFontSize( ... )        INLINE ::CallDllStd( "RMC_SETCAPTIONFONTSIZE", ... )
   METHOD SetCtrlBGColor( ... )            INLINE ::CallDllStd( "RMC_SETCTRLBGCOLOR", ... )
   METHOD SetCtrlBGImage( ... )            INLINE ::CallDllStd( "RMC_SETCTRLBGIMAGE", ... )
   METHOD SetCtrlFont( ... )               INLINE ::CallDllStd( "RMC_SETCTRLFONT", ... )
   METHOD SetCtrlSize( ... )               INLINE ::CallDllStd( "RMC_SETCTRLSIZE", ... )
   METHOD SetCtrlStyle( ... )              INLINE ::CallDllStd( "RMC_SETCTRLSTYLE", ... )
   METHOD SetCustomTooltipText( ... )      INLINE ::CallDllStd( "RMC_SETCUSTOMTOOLTIPTEXT", ... )
   METHOD SetDataXAlignment( ... )         INLINE ::CallDllStd( "RMC_SETDATAXALIGNMENT", ... )
   METHOD SetDaXDecimalDigits( ... )       INLINE ::CallDllStd( "RMC_SETDAXDECIMALDIGITS", ... )
   METHOD SetDaXFontSize( ... )            INLINE ::CallDllStd( "RMC_SETDAXFONTSIZE", ... )
   METHOD SetDaXLineColor( ... )           INLINE ::CallDllStd( "RMC_SETDAXLINECOLOR", ... )
   METHOD SetDaXLineStyle( ... )           INLINE ::CallDllStd( "RMC_SETDAXLINESTLE", ... )
   METHOD SetDaXMaxValue( ... )            INLINE ::CallDllStd( "RMC_SETDAXMAXVALUE", ... )
   METHOD SetDaXMinValue( ... )            INLINE ::CallDllStd( "RMC_SETDAXMINVALUE", ... )
   METHOD SetDaXText( ... )                INLINE ::CallDllStd( "RMC_SETDAXTEXT", ... )
   METHOD SetDaXTextColor( ... )           INLINE ::CallDllStd( "RMC_SETDAXTEXTCOLOR", ... )
   METHOD SetDaXTickCount( ... )           INLINE ::CallDllStd( "RMC_SETDAXTICKCOLOR", ... )
   METHOD SetDaXUnit( ... )                INLINE ::CallDllStd( "RMC_SETDAXUNIT", ... )
   METHOD SetGridBGColor( ... )            INLINE ::CallDllStd( "RMC_SETGRIDBGCOLOR", ... )
   METHOD SetGridBIColor( ... )            INLINE ::CallDllStd( "RMC_SETGRIDBICOLOR", ... )
   METHOD SetGridGradient( ... )           INLINE ::CallDllStd( "RMC_SETGRIDGRADIENT", ... )
   METHOD SetGridMargin( ... )             INLINE ::CallDllStd( "RMC_SETGRIDMARGIN", ... )
   METHOD SetHelpIngGrid( ... )            INLINE ::CallDllStd( "RMC_SETHELPINGGRID", ... )
   METHOD SetLAXAlignment( ... )           INLINE ::CallDllStd( "RMC_SETLAXALIGNMENT", ... )
   METHOD SetLAXCount( ... )               INLINE ::CallDllStd( "RMC_SETLAXCOUNT", ... )
   METHOD SetLAXFontSize( ... )            INLINE ::CallDllStd( "RMC_SETLAXFONTSIZE", ... )
   METHOD SetAXLabelAlignment( ... )       INLINE ::CallDllStd( "RMC_SETAXLABELALIGNMENT", ... )
   METHOD SetAXLabels( ... )               INLINE ::CallDllStd( "RMC_SETAXLABELS", ... )
   METHOD SetAXLabelsFile( ... )           INLINE ::CallDllStd( "RMC_SETAXLABELSFILE", ... )
   METHOD SetAxLabelsRange( ... )          INLINE ::CallDllStd( "RMC_SETAXLABELSRANGE", ... )
   METHOD SetAXLineColor( ... )            INLINE ::CallDllStd( "RMC_SETAXLINECOLOR", ... )
   METHOD SetAXLineStyle( ... )            INLINE ::CallDllStd( "RMC_SETAXLINESTYLE", ... )
   METHOD SetLAXText( ... )                INLINE ::CallDllStd( "RMC_SETLAXTEXT", ... )
   METHOD SetLAXTickCount( ... )           INLINE ::CallDllStd( "RMC_SETLAXTICKCOUNT", ... )
   METHOD SetLegendAlignment( ... )        INLINE ::CallDllStd( "RMC_SETLEGENDALIGNMENT", ... )
   METHOD SetLegendBGColor( ... )          INLINE ::CallDllStd( "RMC_SETLEGENDBGCOLOR", ... )
   METHOD SetLegendFontBold( ... )         INLINE ::CallDllStd( "RMC_SETLEGENDFONTBOLD", ... )
   METHOD SetLegendFontSize( ... )         INLINE ::CallDllStd( "RMC_SETLEGENDFONTSIZE", ... )
   METHOD SetLegendHide( ... )             INLINE ::CallDllStd( "RMC_SETLEGENDHIDE", ... )
   METHOD SetLegendStyle( ... )            INLINE ::CallDllStd( "RMC_SETLEGENDSTYLE", ... )
   METHOD SetLegendText( ... )             INLINE ::CallDllStd( "RMC_SETLEGENDTEXT", ... )
   METHOD SetLegendTextColor( ... )        INLINE ::CallDllStd( "RMC_SETLEGENDTEXTCOLOR", ... )
   METHOD SetMouseClick( ... )             INLINE ::CallDllStd( "RMC_SETMOUSECLICK", ... )
   METHOD SetRegionFooter( ... )           INLINE ::CallDllStd( "RMC_SETREGIONFOOTER", ... )
   METHOD SetRegionMargin( ... )           INLINE ::CallDllStd( "RMC_SETREGIONMARGIN", ... )
   METHOD SetRegionBorder( ... )           INLINE ::CallDllStd( "RMC_SETREGIONBORDER", ... )
   METHOD SetRMCFile( ... )                INLINE ::CallDllStd( "RMC_SETRMCFILE", ... )
   METHOD SetSeriesColor( ... )            INLINE ::CallDllStd( "RMC_SETSERIESCOLOR", ... )
   METHOD SetSeriesExplodeMode( ... )      INLINE ::CallDllStd( "RMC_SETSERIESEXPLODEMODE", ... )
   METHOD SetSeriesStartAngle( ... )       INLINE ::CallDllStd( "RMC_SETSERIESSTARTANGLE", ... )
   METHOD SetSeriesData( ... )             INLINE ::CallDllStd( "RMC_SETSERIESDATA", ... )
   METHOD SetSeriesDataFile( ... )         INLINE ::CallDllStd( "RMC_SETSERIESDATAFILE", ... )
   METHOD SetSeriesDataRange( ... )        INLINE ::CallDllStd( "RMC_SETSERIESDATARANGE", ... )
   METHOD SetSeriesSingleData( ... )       INLINE ::CallDllStd( "RMC_SETSERIESSINGLEDATA", ... )
   METHOD SetSeriesDataAxis( ... )         INLINE ::CallDllStd( "RMC_SETSERIESDATAAXIS", ... )
   METHOD SetSeriesHarchMode( ... )        INLINE ::CallDllStd( "RMC_SETSERIESHARCHMODE", ... )
   METHOD SetSeriesHide( ... )             INLINE ::CallDllStd( "RMC_SETSERIESHIDE", ... )
   METHOD SetSeriesHightLowColor( ... )    INLINE ::CallDllStd( "RMC_SETSERIESHIGHLOWCOLOR", ... )
   METHOD SetSeriesLineStyle( ... )        INLINE ::CallDllStd( "RMC_SETSERIESLINESTYLE", ... )
   METHOD SetSeriesLucent( ... )           INLINE ::CallDllStd( "RMC_SETSERIESLUCENT", ... )
   METHOD SetSeriesPPColumn( ... )         INLINE ::CallDllStd( "RMC_SETSERIESPPCOUMN", ... )
   METHOD SetSeriesPPColumnArray( ... )    INLINE ::CallDllStd( "RMC_SETSERIESPPCOLUMNARRAY", ... )
   METHOD SetSeriesVertical( ... )         INLINE ::CallDllStd( "RMC_SETSERIESVERTICAL", ... )
   METHOD SetSeriesStyle( ... )            INLINE ::CallDllStd( "RMC_SETSERIESSTYLE", ... )
   METHOD SetSeriesSymbol( ... )           INLINE ::CallDllStd( "RMC_SETSERIESSYMBOL", ... )
   METHOD SetSeriesValueLabel( ... )       INLINE ::CallDllStd( "RMC_SETSERIESVALUELABEL", ... )
   METHOD SetSeriesXAxis( ... )            INLINE ::CallDllStd( "RMC_SETSERIESXAXIS", ... )
   METHOD SetSeriesYAxis( ... )            INLINE ::CallDllStd( "RMC_SETSERIESYAXIS", ... )
   METHOD SetSingleBarColors( ... )        INLINE ::CallDllStd( "RMC_SETSINGLEBARCOLORS", ... )
   METHOD SetTooltipWidth( ... )           INLINE ::CallDllStd( "RMC_SETTOOLTIPWIDTH", ... )
   METHOD SetWaterMark( ... )              INLINE ::CallDllStd( "RMC_SETWATERMARK", ... )
   METHOD SetXAXAlignment( ... )           INLINE ::CallDllStd( "RMC_SETXYALIGNMENT", ... )
   METHOD SetYAXAlignment( ... )           INLINE ::CallDllStd( "RMC_SETYAXALIGNMENT", ... )
   METHOD SetXAXDecimalDigits( ... )       INLINE ::CallDllStd( "RMC_SETXAXDECIMALDIGITS", ... )
   METHOD SetYAXDecimalDigits( ... )       INLINE ::CallDllStd( "RMC_SETYAXDECIMALDIGITS", ... )
   METHOD SetXAXFontSize( ... )            INLINE ::CallDllStd( "RMC_SETXAXFONTSIZE", ... )
   METHOD SetYAXFontSize( ... )            INLINE ::CallDllStd( "RMC_SETYAXFONTSIZE", ... )
   METHOD SetXAXLabels( ... )              INLINE ::CallDllStd( "RMC_SETXAXLABELS", ... )
   METHOD SetYAXLabels( ... )              INLINE ::CallDllStd( "RMC_SETYAXLABELS", ... )
   METHOD SetXAXLabelAlignment( ... )      INLINE ::CallDllStd( "RMC_SETXAXLABELALIGNMENT", ... )
   METHOD SetYAXLabelAlignment( ... )      INLINE ::CallDllStd( "RMC_SETYAXLABELALIGNMENT", ... )
   METHOD SetXAXLineColor( ... )           INLINE ::CallDllStd( "RMC_SETXAXLINECOLOR", ... )
   METHOD SetYAXLineCOlor( ... )           INLINE ::CallDllStd( "RMC_SETYAXLINECOLOR", ... )
   METHOD SetXAXLineStyle( ... )           INLINE ::CallDllStd( "RMC_SETXAXLINESTYLE", ... )
   METHOD SetYAXLineStyle( ... )           INLINE ::CallDllStd( "RMC_SETYAXLINESTYLE", ... )
   METHOD SetXAXMaxValue( ... )            INLINE ::CallDllStd( "RMC_SETXAXMAXVALUE", ... )
   METHOD SetYAXMaxValue( ... )            INLINE ::CallDllStd( "RMC_SETYAXMAXVALUE", ... )
   METHOD SetXAXMinValue( ... )            INLINE ::CallDllStd( "RMC_SETXAXMINVALUE", ... )
   METHOD SetYAXMinValue( ... )            INLINE ::CallDllStd( "RMC_SETYAXMINVALUE", ... )
   METHOD SetXAXText( ... )                INLINE ::CallDllStd( "RMC_SETXAXTEXT", ... )
   METHOD SetYAXText( ... )                INLINE ::CallDllStd( "RMC_SETYAXTEXT", ... )
   METHOD SetXAXTextColor( ... )           INLINE ::CallDllStd( "RMC_SETXAXTEXTCOLOR", ... )
   METHOD SetYAXTextColor( ... )           INLINE ::CallDllStd( "RMC_SETYAXTEXTCOLOR", ... )
   METHOD SetXAXTickCount( ... )           INLINE ::CallDllStd( "RMC_SETXAXTICKCOUNT", ... )
   METHOD SetYAXTickCount( ... )           INLINE ::CallDllStd( "RMC_SETYAXTICKCOUNT", ... )
   METHOD SetXAXUnit( ... )                INLINE ::CallDllStd( "RMC_SETXAXUNIT", ... )
   METHOD SetYAXUnit( ... )                INLINE ::CallDllStd( "RMC_SETYAXUNIT", ... )
   METHOD ShowTooltips( ... )              INLINE ::CallDllStd( "RMC_SHOWTOOLTIPS", ... )
   METHOD WriteRMCFile( ... )              INLINE ::CallDllStd( "RMC_WRITERMCFILE", ... )
   METHOD Zoom( ... )                      INLINE ::CallDllStd( "RMC_ZOOM", ... )
   METHOD CallDllStd( cName, ... )         INLINE hb_DynCall( { cName, ::nHandle, HB_DYN_CALLCONV_STDCALL }, ... )
   METHOD ToDecimal( xValue )              INLINE xValue + 1.01 - 1.01
   METHOD ToDouble( xValue )
   METHOD ToSignedLong( xValue )

   ENDCLASS

METHOD RMChart:ToDouble( xValue )

   LOCAL cDouble := "", oElement

   DO CASE
   CASE ValType( xValue ) == "N"
      RETURN xValue
   CASE ValType( xValue ) == "A"
      FOR EACH oElement IN xValue
         cDouble += FToC( oElement )
      NEXT
   OTHERWISE
      RETURN 0
   ENDCASE
   RETURN cDouble

METHOD RMChart:ToSignedLong( xValue )

   LOCAL cLong := "", oElement

   DO CASE
   CASE ValType( xValue ) == "N"
      RETURN xValue
   CASE ValType( xValue ) == "A"
      FOR EACH oElement IN xValue
         cLong += L2Bin( oElement )
      NEXT
   OTHERWISE
      RETURN 0
   ENDIF
   RETURN cLong
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

RMChart

Mensagem por asimoes »

Quintas

:-Y
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

RMChart

Mensagem por JoséQuintas »

Naquele fonte de VB6 tem tudo.
Está na pasta VB6_DLL, é o arquivo rmchartvb.bas
Ele contém todos os #defines (sintaxe VB, não Harbour), e as declarações pra DLL (também sintaxe VB, igual postado acima).

Já atualizei o CH com todas as declarações a mais que encontrei.
E na classe apenas acrescentei os outros métodos, sem as conversões.

Como deu pra ver, é muuuuita coisa, vai longe isso.
Melhor deixar pra quando for usar um gráfico diferente.

Fui mexer em algumas aqui, e parou de funcionar... rs
O que seria pra melhorar, estragou, então não acrescentei validação adicional.

Agora meu programa de teste contém um PROMPT pra selecionar cada gráfico.

Tem uma diferença quanto aos gráficos originais:
Os originais tem tamanho fixo em pixels e, por exemplo, legendas numa determinada posição em pixels.
Como aqui as imagens são redimensionadas conforme a janela, esses ítens fixos ficam em posição diferente do original.
Por exemplo a legenda da média neste gráfico.
teste.png
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

RMChart

Mensagem por JoséQuintas »

Parece este outro, parece exemplo inútil... mas não é.
O outro mostra a opção de uma coluna em VERMELHO.
De repente, destacar aonde houve prejuízo.

Justamente pelo outro usar um detalhe diferente é que exigiu uma conversão que faltava.
teste2.png

Agora é só alegria.
Quando tem GPF, é porque falta algum parâmetro ou alguma conversão.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

RMChart

Mensagem por JoséQuintas »

Esqueci de avisar:

Comentei a linha do CreateChartOnDc()
É porque os exemplos em VB6 vém com ele.
Melhor assim, porque vai dar erro, e vamos lembrar que é pra alterar pra CreateChart().
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

RMChart

Mensagem por fladimir »

Parabéns galera... vendo a empolgação de vcs da gosto...

resolvi entrar na dança... baixei a dll e a ocx..

baixei o exemplo do Quintas testrmchart

ele roda beleza...

MAS se coloco ele no meu sistema console (tive q acrescentar o meu HBP as linhas abaixo) e chamo o TSTRMCHART percebo q roda aparece e some muito rapidamente o gráfico mesmo se chamo via Thread.

Outra dúvida pq o o OCX? Não seria só ter a dll na pasta? Não tinha dado tive q registrar o OCX para aparentemente funcionar (pelo q entendi)

Código: Selecionar todos

*.prg
hbwin.hbc

#--------------- Necessario RMChart
gtwvg.hbc
hbct.hbc
hbmisc.hbc
#--------------------------

-lxhb
-lhbct
-lhbtip
-lhbwin
-lhbxpp 
-lhbhpdf
-lhbcomm
-lhbzebra
-llibhpdf
-lpng

-llibmysql
-lhbmysql
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

RMChart

Mensagem por fladimir »

No Xailer foi de boa... deu certo...
Anexos
ExemploRmChartDllXailer.png
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

RMChart

Mensagem por JoséQuintas »

O uso da OCX não deu muito certo na GTWVG.
Tudo que fizemos por aqui foi usar a DLL. Usando a DLL não precisa de mais nada.

Não entendi no final das contas o que está usando no aplicativo, é console ou gtwvg?

Código: Selecionar todos

PROCEDURE Main
   SetMode( 25, 80 )
   CLS
   ? "Ola mundo"
   Inkey(0)
   RETURN
Console:

Código: Selecionar todos

hbmk2 test.prg
gtwvg:

Código: Selecionar todos

hbmk2 test.prg gtwvg.hbc
Sendo que, se retirar o Inkey(0), a tela console ainda aparece após finalizar o programa, mas se for gtwvg a tela some.
Console usa a própria janela de console, enquanto gtwvg usa uma janela windows que é encerrada no final.
Por isso o inkey(0), pra ter uma pausa ao mostrar a janela. (isso considerando que trata-se apenas deste fonte).

Da mesma forma, se for mostrar gráfico:

Código: Selecionar todos

PROCEDURE Main
   SetMode( 25, 80 )
   CLS
   ? "Ola mundo"
   MostraGrafico()
   Inkey(0)  // ---------> precisa pausa
   RETURN
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

RMChart

Mensagem por JoséQuintas »

Atualizei o arquivo de exemplos e deixei mais simples.

http://www.jpatecnologia.com.br/arquivo ... mchart.zip

Como já embuti no aplicativo, o nome do arquivo da classe mudou pra ze_rmchart.prg
Deixo toda minha biblioteca como ze_* pra em ordem alfabética ficar no final da lista.

Trata-se apenas de um prompt e um retângulo pro gráfico.
Só escolher o gráfico e teclar ENTER.
Tela comum da GTWVG, só o retângulo pro gráfico.

Código: Selecionar todos

FUNCTION Main()

   LOCAL oRmChart, oCrt1, nOpc := 1, nTemp

   SetMode(40,100)
   SET WRAP ON
   SetColor( "W/B" )
   CLS
   oRmChart := RMChart():New()
   oCrt1 := TstRectangle():New( , , { 0, -20 }, { -MaxRow() - 1, -MaxCol() + 19 } )
   oCrt1:Create()

   DO WHILE .T.
      @ 0, 0 SAY ""
      @ Row() + 1, 1 PROMPT " Single Bars (10)"
      @ Row() + 1, 1 PROMPT " Grouped Bars (1)"
      @ Row() + 1, 1 PROMPT " Four Regions (2) "
      @ Row() + 1, 1 PROMPT " Pyramid (3) "
      @ Row() + 1, 1 PROMPT " Single Bars (4) "
      @ Row() + 1, 1 PROMPT " Donut (5) "
      @ Row() + 1, 1 PROMPT " Stacked Bars (6) "
      @ Row() + 1, 1 PROMPT " Grouped Bars (7) "
      @ Row() + 1, 1 PROMPT " Single Bars (8) "
      @ Row() + 1, 1 PROMPT " Pie (9) "
      MENU TO nOpc
      nTemp := 1
      DO CASE
      CASE LastKey() == K_ESC ; EXIT
      CASE nOpc == nTemp++ ; Graphic10( oCrt1, oRMChart, 1 )
      CASE nOpc == nTemp++ ; Graphic1(  oCrt1, oRMChart, 1 )
      CASE nOpc == nTemp++ ; Graphic2(  oCrt1, oRMChart, 1 )
      CASE nOpc == nTemp++ ; Graphic3(  oCrt1, oRMChart, 1 )
      CASE nOpc == nTemp++ ; Graphic4(  oCrt1, oRmChart, 1 )
      CASE nOpc == nTemp++ ; Graphic5(  oCrt1, oRmChart, 1 )
      CASE nOpc == nTemp++ ; Graphic6(  oCrt1, oRmChart, 1 )
      CASE nOpc == nTemp++ ; Graphic7(  oCrt1, oRmChart, 1 )
      CASE nOpc == nTemp++ ; Graphic8(  oCrt1, oRmChart, 1 )
      CASE nOpc == nTemp++ ; Graphic9(  oCrt1, oRMChart, 1 )
      CASE nOpc == nTemp // dummy
      ENDCASE
   ENDDO

   RETURN NIL
Reduzi a janela antes do print-screen. O post já tem bastante gráfico.... rs
tela.png
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder