RMChart

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

Moderador: Moderadores

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 »

Vamos fazer este gráfico sem usar RMChart pra ver quanto tempo demora?
grafico (2).png
Só vou mexer amanhã no final do dia, mas parece fácil.
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 »

Como deve lembrar, a rotina do DOS imprimia um caractere por vez no gráfico.
Tive que alterar os cálculos, mas ainda não estão certos.

Vou ter que verificar como colocar um controle encima do outro, pra poder aparecer o zebrado de fundo.
E a cor gradiente, com várias tonalidades, também tenho que checar, é um recurso do Windows.

O primeiro rascunho, com cálculos errados. (capturei as mesmas cores do RMChart)
Não se engane, aí não tem nenhum SAY. Até alterei o fonte pra ficar um pouquinho diferente.
Já dá pra perceber que a questão é só ajustar cálculos e alguns detalhes.
Comparado com a briga pra fazer o RMChart funcionar.... rs
graficowvg.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 »

No final, talvez os retângulos até simplifiquem os cálculos pra montar o gráfico.
Digamos que os retângulos serão a largura da tela / 12
O gráfico pode usar os retângulos de referência, então os internos seriam largura do retângulo / 3
E a posição, seria a mesma do retângulo + coluna
Isso descontando o espaço nas laterais.

Ainda não pensei quando misturar valor negativo e positivo.

Mas pra altura das barras, também simples: pegar o maior valor pra referência, multiplicar por 1.2 pra ter margem de reserva no gráfico.
A altura da barra pode ser calculada por: ValorMaximo / altura da tela * ValorDaColuna

Tanto faz calcular por linhas/colunas ou coordenadas, no Harbour 3.4 já aceita decimais.
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 »

Não vai acreditar:
Problema parecido com o do RMChart.
Ao que parece, a janela da GTWVG não trata cada controle como deveria.

Ao montar a tela
wvg1.png
E ao mover a janela, os controles que deveriam ficar na frente ficam aparecendo/sumindo.
wvg2.png
Tudo indica que a janela console atualiza sempre tudo.
Na prática, deveria atualizar somente os controles dentro dela, e os controles dentro dela atualizarem os que estão dentro deles.

É provável que tenha atualização desativada, pra evitar algo como "sobrecarga" de atualizações de tela.

Isso pode ser uma boa notícia, porque se isso for resolvido, já resolve o activex também.
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 »

Valeu Quintas,

Se você poder contribuir algo mais simples que rmchart, facilita muito.
►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 »

Estou tentando achar uma fórmula legal pra não ficar mostrando números quebrados na lateral mas ainda não cheguei numa ideal.
Exemplo, para os números:

Código: Selecionar todos

 FOR nCont = 1 TO 12
      AAdd( oGrafico:aValues[ 1 ], 125 )
      AAdd( oGrafico:aValues[ 2 ], 240 )
      AAdd( oGrafico:aValues[ 3 ], 215 )
   NEXT
grafico1.png
mas para os números:

Código: Selecionar todos

   FOR nCont = 1 TO 12
      AAdd( oGrafico:aValues[ 1 ], 125 )
      AAdd( oGrafico:aValues[ 2 ], 240 )
      AAdd( oGrafico:aValues[ 3 ], 300 )
   NEXT
grafico2.png
Os parâmetros passados são estes:

Código: Selecionar todos

PROCEDURE Test

   LOCAL nCont, oGrafico

   SetMode(40,80)
   CLS

   oGrafico              := BarChart():New()
   oGrafico:cTxtTitle    := "TESTE DE GRAFICO 2016"
   oGrafico:aTxtBarList  := { "JANEIRO", "FEVEREIRO", "MARCO", "ABRIL", "MAIO", "JUNHO", "JULHO", "AGOSTO", "SETEMBRO", "OUTUBRO", "NOVEMBRO", "DEZEMBRO" }
   oGrafico:aTxtSubList  := { "ENTRADA", "SAIDA", "OUTRA" }
   oGrafico:aValues := { {}, {}, {} }
   FOR nCont = 1 TO 12
      AAdd( oGrafico:aValues[ 1 ], 125 )
      AAdd( oGrafico:aValues[ 2 ], 240 )
      AAdd( oGrafico:aValues[ 3 ], 300 )
   NEXT
   oGrafico:Show()
   Inkey(0)
   RETURN
Não queria ficar mostrando números muito "quebrados". nessa barra.
No segundo gráfico sobrou muito espaço.

Nota: no RMChart o próprio usuário define um valor, e sai "quebrado".
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 »

Por enquanto, após muito trabalho tentando eliminar partes inúteis e que não tem nada a ver com o RMChart, cheguei a uma versão que....
que.... digamos que "funciona"..... tem o mesmo bug do demo completo.

coisa à toa... rs... 6 threads durante o uso do programa, e SETE threads ao fechar tudo, sendo necessário o gerenciador de tarefas pra fechar essas threads.
rmchart2.png
rmchart2.png (9.27 KiB) Exibido 9637 vezes
Ainda tentando reduzir mais.
Por exemplo... ao retirar a toolbar da tela, trava tudo.
Que raios tem a ver a toolbar com o restante?
Se tem a ver, porque -w3 -es2 não acusou o uso dessa variável em outro lugar?

Nota:
O demowvg faz uso intensivo de funções wvt* e wvg_* (com traço).
Sempre achei essas coisas esquisitas, e nunca usei.
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 toolbar é o único controle que causa a "pausa", impede que o dialog contendo o gráfico seja fechado.
E uma messagebox() não vinculada à janela permite que ela seja movida ou redimensionada.
Por enquanto foi o que deu.
Dá pra dizer que está melhor que o original, porque agora basta clicar no Ok, sem precisar do gerenciador de tarefas pra fechar a força.
gtwvggrafico.png

Código: Selecionar todos

#include "inkey.ch"
#include "setcurs.ch"
#include "hbgtinfo.ch"
#include "hbver.ch"
#define RMC_CTRLSTYLEFLAT          0
#define RMC_PIE_GRADIENT           52
#define RMC_FULL                   1
#define RMC_EXPLODE_NONE           0
#define RMC_VLABEL_ABSOLUTE        6
#define RMC_HATCHBRUSH_OFF         0

PROCEDURE Main()

   LOCAL oCrt, oTBar, oRMChart, oDA, oRegion, oChart, oCaption

   oCrt := WvgDialog():new( , , { 30, 30 }, { 800, 600 }, , .T. )
   oCrt:closable := .T.
   oCrt:create()

   oDA := oCrt:drawingArea

   oTBar := BuildWvgToolBar( oDA )

   oDA:resize := {|| ResizeDialog( oCrt, oTBar, oRMChart ) }

   oRMChart := WvgActiveXControl():New( oDA, , { 0, 0 }, { 100, 100 }, , .T. )
   hb_gtInfo( HB_GTI_WINTITLE, "RM Chart [ <F12> Attributes  <F11> Next Charts ]" )
   oRMChart:CLSID := "RMChart.RMChartX"
   oRMChart:create()
   oCrt:sendMessage( WIN_WM_SIZE, 0, 0 )
   oCrt:show()

   oRmChart:Font             := "Tahoma"
   oRmChart:RMCStyle         := RMC_CTRLSTYLEFLAT

   oRmChart:AddRegion()

   oRegion := oRmChart:Region( 1 )
   oRegion:Footer := hb_Version( HB_VERSION_URL_BASE )
   oRegion:AddCaption()

   oCaption := oRegion:Caption()
   oCaption:Titel     := "RMChart Demo"
   oCaption:FontSize  := 10
   oCaption:Bold      := .T.

   oRegion:AddGridlessSeries()

   oChart := oRegion:GridLessSeries
   oChart:SeriesStyle      := RMC_PIE_GRADIENT
   oChart:Alignment        := RMC_FULL
   oChart:Explodemode      := RMC_EXPLODE_NONE
   oChart:Lucent           := .F.
   oChart:ValueLabelOn     := RMC_VLABEL_ABSOLUTE
   oChart:HatchMode        := RMC_HATCHBRUSH_OFF
   oChart:StartAngle       := 0
   oChart:DataString       := "10*5*20*25"

   wapi_MessageBox( , "fechar Grafico", "Fechar Grafico", WIN_MB_ICONASTERISK )
   oCrt:Destroy()

   RETURN

STATIC FUNCTION ResizeDialog( oCrt, oTBar, oRMChart )

   LOCAL aCrt    := oCrt:currentSize()
   LOCAL aTBar   := oTBar:currentSize()

   LOCAL nT := aTBar[ 2 ]
   LOCAL nH := aCrt[ 2 ] - aTBar[ 2 ]

   oRMChart:setPosAndSize( { 0, nT }, { aCrt[ 1 ], nH }, .T. )

   RETURN 1

FUNCTION BuildWvgToolBar( oDA )

   LOCAL oTBar := WvgToolBar():new( oDA, , { 0, 0 }, { oDA:currentSize()[ 1 ], 30 }, , .T. )

   oTBar:style        := WVGTOOLBAR_STYLE_FLAT
   oTBar:borderStyle  := WVGFRAME_RECT
   oTBar:buttonWidth  := 40 // 28
   oTBar:buttonHeight := 26
   oTBar:imageWidth   := 26
   oTBar:imageHeight  := 24
   oTBar:showToolTips := .T.
   oTBar:create()
   RETURN oTBar

PROCEDURE hb_GTSYS()

   REQUEST HB_GT_WVG_DEFAULT
   REQUEST HB_GT_WGU

   RETURN
A título de curiosidade, existem cinco tipos de "tela" na GTWVG:
sem janela, que é o default, nenhuma janela até que ocorra alguma operação de tela.
WVG - a janela estilo console, que é a default após alguma alteração de tela, e que não tem controle total sobre componentes gráficos
WGU - a janela usada pra dialog, que não tem teclado/tela estilo console, portanto nem Inkey(0) tem
WVT - a janela dos controles WVT.
janela normal Windows - a janela usada para os controles WVG
Esse exemplo mistura "sem janela" com "WGU" e janela comum Windows, apesar de não parecer.
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 »

Como é que eu sei dessas janelas, é de tanto ficar pesquisando os fontes:

Criação de wvgCrt:

Código: Selecionar todos

hb_gtReload( "WVG" )
criação de wvgDialog:

Código: Selecionar todos

hb_gtReload( "WGU" )
criação dos demais controles:

Código: Selecionar todos

   hWnd := wapi_CreateWindowEx( ;
      ::exStyle, ;
      ::className(), ;
      "", ;                              /* window name */
      ::style, ;
      aPosSz[ 1 ], aPosSz[ 2 ], ;
      aPosSz[ 3 ], aPosSz[ 4 ], ;
      ::oParent:hWnd, ;
      ::nID, ;                           /* hMenu       */
      NIL, ;                             /* hInstance   */
      NIL )                              /* lParam      */
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,

Então temos duas situações com relação ao rmchart:

Usando a dll não temos o problema de mover e redimensionar a tela, mas não conseguimos resolver o problema da AddBarSeries, provavelmente com outros métodos.

Com activex

Temos o problema de movimento de tela
►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 »

Este último funciona 100%
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,

Não dá pra entender esse parâmetro nFirstDataValue, diz que tem que ser o primeiro valor de um array de uma dimensão ???? já tentei vários e nada, inclusive aquele com typedef struct { CTYPE_DOUBLE nDouble[12] } DataStructD12
Isso só funciona com fivewin? que meleca.

The first element of an one-dimensional array, which holds the series data.
RMC_AddBarSeries function.
Add a bar chart series to a region of an existing chart

--------------------------------------------------------------------------------

Syntax
nResult (LONG) = RMC_AddBarSeries(
ByVal nCtrlId (LONG),
ByVal nRegion (LONG),
Optional ByRef nFirstDataValue (DOUBLE),
Optional ByVal nDataValuesCount (LONG),
Optional ByVal nType (LONG),
Optional ByVal nStyle (LONG),
Optional ByVal nIsLucent (LONG),
Optional Byval nColor (LONG),
Optional ByVal nIsHorizontal (LONG),
Optional ByVal nWhichDataAxis (LONG),
Optional ByVal nValueLabelOn (LONG),
Optional ByVal nPointsPerColumn (LONG),
Optional ByVal nHatchMode (LONG)
)


Parameter
nCtrlId (LONG)
Unique ID of the chart control, to which the series belongs.
nRegion (LONG)
Region to which the series belongs.
nFirstDataValue (DOUBLE)
The first element of an one-dimensional array, which holds the series data. If you want to add the data later with RMC_SetSeriesData(), simply pass 0.
Please note one anomaly: If the type of the series is RMC_FLOATINGBAR or RMC_FLOATINGBARGROUP, you must pass for each single bar a pair of two data values, where the first value holds the starting point of the bar and the second value holds the data which determines the length of the bar. Example: Imagine the data axis has a range from 1 to 10 and you want to draw a floating bar which starts at 2 and ends at 9. In this case you must pass the data pair 2,7 for this bar.
►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
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

RMChart

Mensagem por asimoes »

Agora eu não entendi mais nada, passei uma string pro campo, aceitou e fez uma barra maluca

aData[1]:="10.5"

oChart:AddBarSeries( ID_CHART, 1, aData[1], 5, RMC_BARSINGLE, RMC_BAR_FLAT_GRADIENT2, .F., 0, .F., 1, RMC_VLABEL_NONE, 1, RMC_HATCHBRUSH_OFF )
Screen Shot 05-15-16 at 07.41 PM.PNG
►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 »

Se pesquisar array double em C, os valores são armazenados na memória em sequencial.
Então a partir da posição do primeiro elemento já encontra todos.
O double deve ser composto de determinada quantidade de bytes, e talvez tenha gerado isso sem querer... rs
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 »

É pessoal,

Foi bola na trave usando dll sem o sData

A solução por enquanto é utilizando sData

Código: Selecionar todos

       sData:=""
       sData += "00003600|00004450|000051|000061|000071|00008-984833|00009412|00011Tahoma|100011|"
       sData += "100021|100035|100045|10005-5|10006-5|1000910|100101|100111|100131|100181|1002010|"
       sData += "10021100|1002211|100238|100331|100341|1003520|100378|100482|100491|10051-8388652|"
       sData += "10052-16777216|10053-657956|100541|100558|10056-16777216|10057-16777216|10060-"
       sData += "16777216|10061-16777216|10063-1|100651|10181 *** Gráfico Teste ***|10184Em Milhões de Reais|102010.00*10."
       sData += "00*20.00*30.00*40.00*50.00*60.00*70.00*80.00*90.00*100.00|110011|1100221|110035|"
       sData += "1100424|110051|110062|110071|110091|110121|110131|1101421|110152|110171|11019-16"
       sData += "776961|1102115|110221|110235|110261|11053"
       sData += "15*25*30*22*75"
       sData += "|120011|1200221|1200424|120062|120121|1201421|12019-65536|1202115|120221|120235|120261|12053"
       sData += "10*15*40*20*31"
       nWidth :=600  
       nHeight:=450  

RmChart22( "Grafico", sData, nWidth, nHeight )

[code]
#include "windows.ch"
#include "hwgui.ch"
#include "common.ch"
#include "guilib.ch"
#include "rmchart.ch"
#include "hbdyn.ch"

#define ID_CHART      1001
#define RMC_DEFAULT   0
#define RMC_PORTRAIT  1
#define RMC_LANDSCAPE 2


FUNCTION RmChart22( cTitulo, sData, nWidth, nHeight )

LOCAL nHandleDLL 

LOCAL oIcon    := HIcon():AddResource("ICON_A")


   hb_Default(@cTitulo, "Gráfico")
   
   nHandleDLL:=hb_LibLoad("rmchart.dll")

   oFont := HFont():Add( "Courier New", 9)

   nStyle := DS_CENTER + WS_SYSMENU + WS_VISIBLE
 
   INIT DIALOG oModDlg TITLE cTitulo ;
               ICON oIcon ;
               AT 0, 0 ;
               SIZE nWidth + 30, nHeight + 100 ;
               STYLE nStyle ;
               FONT oFont ;
               CLIPPER ;
               ON INIT { | oDlg | oDlg:nInitFocus := oSair, ViewChart(oDlg, nHandleDLL, sData) } 

      x1 := Int( oModDlg:nWidth/2 ) - 110
      
      y1 := Int( oModDlg:nHeight) - 70
      
      @ x1, y1       OWNERBUTTON oOk SIZE 100, 30 ;
                                 TEXT "Imprimir" COORDINATES 35, 0, 0, 0 ;
                                 FONT HFont():Add( "Arial", 0, -13,550 ) ;
                                 BITMAP "IMG\IOK.BMP" COORDINATES 5, 0, 0, 0 TRANSPARENT ;
                                 ON CLICK { || ChartPrint(nHandleDLL), oModDlg:lResult := .T. } ;
                                 TOOLTIP "Ir para a página selecionada." ;
                                 THEMED

      @ x1 + 115, y1 OWNERBUTTON oSair SIZE 100, 30 ;
                                 TEXT "RmChart" COORDINATES 35, 0, 0, 0 ;
                                 FONT HFont():Add( "Arial", 0, -13, 550 ) ;
                                 BITMAP "IMG\IEXIT.BMP" COORDINATES 5, 0, 0, 0 TRANSPARENT ;
                                 ON CLICK { || ViewChart(oModDlg, nHandleDLL, sData) } ;
                                 TOOLTIP "Abandonar a seleção." ;
                                 THEMED
   oModDlg:Activate(.F.) // .T. = NOMODAL, .F. ou () = MODAL

RETURN oModDlg

FUNCTION ViewChart(oDlg, nHandleDLL, sData)
   nRetVal:=hb_dynCall( { "RMC_CREATECHARTFROMFILE", nHandleDLL, hb_bitOr( HB_DYN_CTYPE_LONG , HB_DYN_CALLCONV_STDCALL ) }, oDlg:handle, ID_CHART, 10, 10, 0, sData)
   nRetVal:=hb_dynCall( { "RMC_DRAW", nHandleDLL, hb_bitOr( HB_DYN_CTYPE_LONG , HB_DYN_CALLCONV_STDCALL ) }, ID_CHART)
   nRetVal:=hb_dynCall( { "RMC_DRAW2CLIPBOARD", nHandleDLL, hb_bitOr( HB_DYN_CTYPE_LONG , HB_DYN_CALLCONV_STDCALL ) }, ID_CHART, RMC_BMP )
 
RETURN Nil
                     
FUNCTION ChartPrint(nHandleDLL)
   // Para imprimir:
   nRetVal:=hb_dynCall( { "RMC_DRAW2PRINTER", nHandleDLL, hb_bitOr( HB_DYN_CTYPE_LONG , HB_DYN_CALLCONV_STDCALL ) }, ID_CHART, RMC_LANDSCAPE, 10, 10, 250, 150, RMC_EMF )
RETURN nRetVal
Anexos
Screen Shot 05-16-16 at 08.53 AM.PNG
►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)
Responder