In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Otra vez RMChart
-
- Mensajes: 103
- Registrado: Mié Dic 15, 2010 4:45 pm
Otra vez RMChart
Hola a todos
Pues aqui molestandolos con otra pregunta mas sobre RMChart que me trae
loco.
Alguien sabe como puedo recuperar los valores de tInfo del evento DobleClik
del Raton en la grafica?
Me interesa recuperar nDateIndex que es el numero de dato denrto del string
en el que estaria dando un DobleClik.
Con ese numero, recuperaria y mostraria información sobre ese punto en una
Grafica XY
¿Alguine me podria ayudar? ya estuve buscando esa información en internet y
no la encontre. El ToolTips no me sirvio porque necesito mas datos.
Muchas gracias
Moises Leon Rosas
Data Compensation
Pues aqui molestandolos con otra pregunta mas sobre RMChart que me trae
loco.
Alguien sabe como puedo recuperar los valores de tInfo del evento DobleClik
del Raton en la grafica?
Me interesa recuperar nDateIndex que es el numero de dato denrto del string
en el que estaria dando un DobleClik.
Con ese numero, recuperaria y mostraria información sobre ese punto en una
Grafica XY
¿Alguine me podria ayudar? ya estuve buscando esa información en internet y
no la encontre. El ToolTips no me sirvio porque necesito mas datos.
Muchas gracias
Moises Leon Rosas
Data Compensation
-
- Mensajes: 291
- Registrado: Jue Ene 31, 2013 1:10 pm
Otra vez RMChart
Moises,
he mirado la documentación de RMChart y veo que en p5 devuelve un puntero,
puedes comprobarlo con MsgInfo( Valtype( p5 ) ).
Lo que necesitamos es saber cómo está definida esa estructura para acceder
a sus miembros.
Saludos,
José Lalín
he mirado la documentación de RMChart y veo que en p5 devuelve un puntero,
puedes comprobarlo con MsgInfo( Valtype( p5 ) ).
Lo que necesitamos es saber cómo está definida esa estructura para acceder
a sus miembros.
Saludos,
José Lalín
-
- Mensajes: 103
- Registrado: Mié Dic 15, 2010 4:45 pm
Otra vez RMChart
Ya tambien habia revisado la documentacion pero dice del 5o elemento:
"TINFO holds an instance of User Defined Type tRMC_INFO."
dice tambien:
"The fifth parameter in these events hold instead of TINFO an object oInfo
of the clInfo class."
Quise hacer algo como esto "p5:nDataIndex" pero no resulto.
En "Defined Type tRMC_INFO" dice de estos datos:
"Every time a mouse event happens on the chart control, the appropriate
mouse event in your source code gets as fifth parameter an instance of the
User Defined Type tRMC_INFO with the following type members"
y en esa lista viene nSeriesIndex y nDataIndex pero no encuentro como
rescatar esos valores.
"José Lalín" <joselalinf@gmail.com> escribió en el mensaje de noticias
news:5179499d$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
Moises,
he mirado la documentación de RMChart y veo que en p5 devuelve un puntero,
puedes comprobarlo con MsgInfo( Valtype( p5 ) ).
Lo que necesitamos es saber cómo está definida esa estructura para acceder
a sus miembros.
Saludos,
José Lalín
"TINFO holds an instance of User Defined Type tRMC_INFO."
dice tambien:
"The fifth parameter in these events hold instead of TINFO an object oInfo
of the clInfo class."
Quise hacer algo como esto "p5:nDataIndex" pero no resulto.
En "Defined Type tRMC_INFO" dice de estos datos:
"Every time a mouse event happens on the chart control, the appropriate
mouse event in your source code gets as fifth parameter an instance of the
User Defined Type tRMC_INFO with the following type members"
y en esa lista viene nSeriesIndex y nDataIndex pero no encuentro como
rescatar esos valores.
"José Lalín" <joselalinf@gmail.com> escribió en el mensaje de noticias
news:5179499d$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
Moises,
he mirado la documentación de RMChart y veo que en p5 devuelve un puntero,
puedes comprobarlo con MsgInfo( Valtype( p5 ) ).
Lo que necesitamos es saber cómo está definida esa estructura para acceder
a sus miembros.
Saludos,
José Lalín
-
- Mensajes: 291
- Registrado: Jue Ene 31, 2013 1:10 pm
Otra vez RMChart
Moises,
en algún sitio tiene que estar la declaración de la estructura TINFO. Si
tuviésemos acceso a ella entonces se podría hacer una función en C para leerla:
HB_FUNC( TESTTINFO )
{
TINFO * tinfo = (TINFO *) hb_parptr( 1 );
MsgDebug( Dec( tinfo->nDataIndex ) );
}
Y podrías llamarla así: TestTInfo( p5 ) pero es necesario saber cómo está
definida la estructura TINFO, sino no podemos hacer nada.
Saludos,
José Lalín
en algún sitio tiene que estar la declaración de la estructura TINFO. Si
tuviésemos acceso a ella entonces se podría hacer una función en C para leerla:
HB_FUNC( TESTTINFO )
{
TINFO * tinfo = (TINFO *) hb_parptr( 1 );
MsgDebug( Dec( tinfo->nDataIndex ) );
}
Y podrías llamarla así: TestTInfo( p5 ) pero es necesario saber cómo está
definida la estructura TINFO, sino no podemos hacer nada.
Saludos,
José Lalín
-
- Mensajes: 103
- Registrado: Mié Dic 15, 2010 4:45 pm
Otra vez RMChart
Llevo 5 dias y lo que va de este buscando eso en internet y en la ayuda de
RMChart y no lo encuentro.
:(
"José Lalín" <joselalinf@gmail.com> escribió en el mensaje de noticias
news:[email=51794eac@svctag-j7w3v3j....]51794eac@svctag-j7w3v3j....[/email]
Moises,
en algún sitio tiene que estar la declaración de la estructura TINFO. Si
tuviésemos acceso a ella entonces se podría hacer una función en C para
leerla:
HB_FUNC( TESTTINFO )
{
TINFO * tinfo = (TINFO *) hb_parptr( 1 );
MsgDebug( Dec( tinfo->nDataIndex ) );
}
Y podrías llamarla así: TestTInfo( p5 ) pero es necesario saber cómo está
definida la estructura TINFO, sino no podemos hacer nada.
Saludos,
José Lalín
RMChart y no lo encuentro.
:(
"José Lalín" <joselalinf@gmail.com> escribió en el mensaje de noticias
news:[email=51794eac@svctag-j7w3v3j....]51794eac@svctag-j7w3v3j....[/email]
Moises,
en algún sitio tiene que estar la declaración de la estructura TINFO. Si
tuviésemos acceso a ella entonces se podría hacer una función en C para
leerla:
HB_FUNC( TESTTINFO )
{
TINFO * tinfo = (TINFO *) hb_parptr( 1 );
MsgDebug( Dec( tinfo->nDataIndex ) );
}
Y podrías llamarla así: TestTInfo( p5 ) pero es necesario saber cómo está
definida la estructura TINFO, sino no podemos hacer nada.
Saludos,
José Lalín
-
- Mensajes: 103
- Registrado: Mié Dic 15, 2010 4:45 pm
Otra vez RMChart
He visto algo como esto:
Procedure MyCallback(hWnd, CBMSG, CBWPARAM, CBLPARAM)
Protected *TINFO.RMC_INFO
Protected CBCTL.w,CBCTLMSG.w
Protected Text$
Static z.l
CBCTL = PeekW(@CBWPARAM+0)
CBCTLMSG = PeekW(@CBWPARAM+2)
Select 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
Text$="X-Pos in the dialog:"+Str(PeekW(@CBLPARAM+0))+Chr(13)
Text$+"Y-Pos in the dialog:"+Str(PeekW(@CBLPARAM+2))
MessageRequester("RMChart",Text$,0)
Case #WM_COMMAND
Select CBCTL
Case #ID_CHART ;message from the chart control
Select 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
Text$="X-Pos in the chart:"+Str(*TINFOnXPos)+Chr(13)
Text$+"Y-Pos in the chart:"+Str(*TINFOnYPos)
MessageRequester("RMChart",Text$,0)
Case #RMC_MOUSEMOVE ;mouse was moved in the chart
control
Debug "#RMC_MOUSEMOVE"
*TINFO = CBLPARAM ;CBLPARAM holds a pointer to a
tRMC_INFO structure
If z ;if the left mouse button is
pressed
;move the chart control within your dialog
RMC_SetCtrlPos(#ID_CHART,*TINFOnXMove,*TINFOnYMove,1)
EndIf
EndSelect
EndSelect
EndSelect
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
"José Lalín" <joselalinf@gmail.com> escribió en el mensaje de noticias
news:[email=51794eac@svctag-j7w3v3j....]51794eac@svctag-j7w3v3j....[/email]
Moises,
en algún sitio tiene que estar la declaración de la estructura TINFO. Si
tuviésemos acceso a ella entonces se podría hacer una función en C para
leerla:
HB_FUNC( TESTTINFO )
{
TINFO * tinfo = (TINFO *) hb_parptr( 1 );
MsgDebug( Dec( tinfo->nDataIndex ) );
}
Y podrías llamarla así: TestTInfo( p5 ) pero es necesario saber cómo está
definida la estructura TINFO, sino no podemos hacer nada.
Saludos,
José Lalín
Procedure MyCallback(hWnd, CBMSG, CBWPARAM, CBLPARAM)
Protected *TINFO.RMC_INFO
Protected CBCTL.w,CBCTLMSG.w
Protected Text$
Static z.l
CBCTL = PeekW(@CBWPARAM+0)
CBCTLMSG = PeekW(@CBWPARAM+2)
Select 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
Text$="X-Pos in the dialog:"+Str(PeekW(@CBLPARAM+0))+Chr(13)
Text$+"Y-Pos in the dialog:"+Str(PeekW(@CBLPARAM+2))
MessageRequester("RMChart",Text$,0)
Case #WM_COMMAND
Select CBCTL
Case #ID_CHART ;message from the chart control
Select 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
Text$="X-Pos in the chart:"+Str(*TINFOnXPos)+Chr(13)
Text$+"Y-Pos in the chart:"+Str(*TINFOnYPos)
MessageRequester("RMChart",Text$,0)
Case #RMC_MOUSEMOVE ;mouse was moved in the chart
control
Debug "#RMC_MOUSEMOVE"
*TINFO = CBLPARAM ;CBLPARAM holds a pointer to a
tRMC_INFO structure
If z ;if the left mouse button is
pressed
;move the chart control within your dialog
RMC_SetCtrlPos(#ID_CHART,*TINFOnXMove,*TINFOnYMove,1)
EndIf
EndSelect
EndSelect
EndSelect
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
"José Lalín" <joselalinf@gmail.com> escribió en el mensaje de noticias
news:[email=51794eac@svctag-j7w3v3j....]51794eac@svctag-j7w3v3j....[/email]
Moises,
en algún sitio tiene que estar la declaración de la estructura TINFO. Si
tuviésemos acceso a ella entonces se podría hacer una función en C para
leerla:
HB_FUNC( TESTTINFO )
{
TINFO * tinfo = (TINFO *) hb_parptr( 1 );
MsgDebug( Dec( tinfo->nDataIndex ) );
}
Y podrías llamarla así: TestTInfo( p5 ) pero es necesario saber cómo está
definida la estructura TINFO, sino no podemos hacer nada.
Saludos,
José Lalín
-
- Mensajes: 291
- Registrado: Jue Ene 31, 2013 1:10 pm
Otra vez RMChart
Moises,
creo que eso sólo sirve cuando se usa la DLL en vez del OCX.
Saludos,
José Lalín
creo que eso sólo sirve cuando se usa la DLL en vez del OCX.
Saludos,
José Lalín
Otra vez RMChart
La estructura de tRM_INFO (con sintaxis C#) es:
public struct tRMC_INFO
{
public int nXPos;
public int nYPos;
public int nXMove;
public int nYMove;
public int nRegionIndex;
public int nRLeft;
public int nRTop;
public int nRRight;
public int nRBottom;
public int nSeriesIndex;
public int nDataIndex;
public int nChartType;
public int nSLeft;
public int nSTop;
public int nSRight;
public int nSBottom;
public int nSTop2;
public int nSBottom2;
public int nGLeft;
public int nGTop;
public int nGRight;
public int nGBottom;
public int nGCol;
public int nGRow;
public double nData1;
public double nData2;
public double nData3;
public double nData4;
public double nVirtData1;
public double nVirtData2;
public double nVirtData3;
public double nVirtData4;
}
La descripcion de cada campo viene en la ayuda de RMChart
Lo que no se es como acceder a la estructura directamente desde harbour (A primera vista no existe el acceso a estructuras C integrado, ni siquiera esta disponible cStruct.ch)
-
- Mensajes: 291
- Registrado: Jue Ene 31, 2013 1:10 pm
Otra vez RMChart
Victor,
muchas gracias.
muchas gracias.
-
- Mensajes: 291
- Registrado: Jue Ene 31, 2013 1:10 pm
Otra vez RMChart
Moises,
si la información de Victor es buena, podría definirse la estructura en C y
luego usar el parámetro p5 desde una función C para ver si es posible
manipularla:
typedef struct {
int nXPos;
int nYPos;
etc.
} tRM_INFO;
HB_FUNC( TESTTINFO )
{
tRM_INFO * tinfo = (tRM_INFO *) hb_parptr( 1 );
MsgDebug( Dec( tinfo->nDataIndex ) );
}
Si tienes un momento, completa la estructura con todos los miembros que ha
puesto Victor y compila a ver si funciona.
Saludos,
José Lalín
si la información de Victor es buena, podría definirse la estructura en C y
luego usar el parámetro p5 desde una función C para ver si es posible
manipularla:
typedef struct {
int nXPos;
int nYPos;
etc.
} tRM_INFO;
HB_FUNC( TESTTINFO )
{
tRM_INFO * tinfo = (tRM_INFO *) hb_parptr( 1 );
MsgDebug( Dec( tinfo->nDataIndex ) );
}
Si tienes un momento, completa la estructura con todos los miembros que ha
puesto Victor y compila a ver si funciona.
Saludos,
José Lalín
-
- Mensajes: 103
- Registrado: Mié Dic 15, 2010 4:45 pm
Otra vez RMChart
Hola José
No se usar C
pero con lo que vi lo construi asi, pero me manda un
GPF
#pragma BEGINDUMP
#include "windows.h"
#include "wininet.h"
#include "Xailer.h"
typedef struct {
int nXPos;
int nYPos;
int nXMove;
int nYMove;
int mRegionIndex;
int nRLeft;
int nRTop;
int nRRight;
int nRBottom;
int nSeriesIndex;
int nDataIndex;
int nChartType;
int nSLeft;
int nSTop;
int nSRight;
int nSBottom;
int nSTop2;
int nSBottom2;
int nGLeft;
int nGTop;
int nGRight;
int nGBottom;
int nGCol;
int nGRow;
double nData1;
double nData2;
double nData3;
double nData4;
double nVirtData1;
double nVirtData2;
double nVirtData3;
double nVirtData4;
} tRM_INFO;
HB_FUNC( TESTTINFO )
{
tRM_INFO * tinfo = (tRM_INFO *) hb_parptr( 1 );
MsgDebug( Dec( tinfo->nDataIndex ) );
}
#pragma ENDDUMP
"José Lalín" <joselalinf@gmail.com> escribió en el mensaje de noticias
news:517e941b$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
Moises,
si la información de Victor es buena, podría definirse la estructura en C y
luego usar el parámetro p5 desde una función C para ver si es posible
manipularla:
typedef struct {
int nXPos;
int nYPos;
etc.
} tRM_INFO;
HB_FUNC( TESTTINFO )
{
tRM_INFO * tinfo = (tRM_INFO *) hb_parptr( 1 );
MsgDebug( Dec( tinfo->nDataIndex ) );
}
Si tienes un momento, completa la estructura con todos los miembros que ha
puesto Victor y compila a ver si funciona.
Saludos,
José Lalín
--
Attached files
No se usar C

GPF
#pragma BEGINDUMP
#include "windows.h"
#include "wininet.h"
#include "Xailer.h"
typedef struct {
int nXPos;
int nYPos;
int nXMove;
int nYMove;
int mRegionIndex;
int nRLeft;
int nRTop;
int nRRight;
int nRBottom;
int nSeriesIndex;
int nDataIndex;
int nChartType;
int nSLeft;
int nSTop;
int nSRight;
int nSBottom;
int nSTop2;
int nSBottom2;
int nGLeft;
int nGTop;
int nGRight;
int nGBottom;
int nGCol;
int nGRow;
double nData1;
double nData2;
double nData3;
double nData4;
double nVirtData1;
double nVirtData2;
double nVirtData3;
double nVirtData4;
} tRM_INFO;
HB_FUNC( TESTTINFO )
{
tRM_INFO * tinfo = (tRM_INFO *) hb_parptr( 1 );
MsgDebug( Dec( tinfo->nDataIndex ) );
}
#pragma ENDDUMP
"José Lalín" <joselalinf@gmail.com> escribió en el mensaje de noticias
news:517e941b$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
Moises,
si la información de Victor es buena, podría definirse la estructura en C y
luego usar el parámetro p5 desde una función C para ver si es posible
manipularla:
typedef struct {
int nXPos;
int nYPos;
etc.
} tRM_INFO;
HB_FUNC( TESTTINFO )
{
tRM_INFO * tinfo = (tRM_INFO *) hb_parptr( 1 );
MsgDebug( Dec( tinfo->nDataIndex ) );
}
Si tienes un momento, completa la estructura con todos los miembros que ha
puesto Victor y compila a ver si funciona.
Saludos,
José Lalín
--
Attached files
-
- Mensajes: 291
- Registrado: Jue Ene 31, 2013 1:10 pm
Otra vez RMChart
Moises,
¿le estás pasando a la función en C el parámetro p5 de damedato()?
Saludos,
José Lalín
¿le estás pasando a la función en C el parámetro p5 de damedato()?
Saludos,
José Lalín
-
- Mensajes: 291
- Registrado: Jue Ene 31, 2013 1:10 pm
Otra vez RMChart
Victor,
tienes forma de probar en C# qué devuelve esto:
console.write( sizeof( tRM_INFO ) )
Saludos,
José Lalín
tienes forma de probar en C# qué devuelve esto:
console.write( sizeof( tRM_INFO ) )
Saludos,
José Lalín
-
- Mensajes: 291
- Registrado: Jue Ene 31, 2013 1:10 pm
Otra vez RMChart
Moises,
esto funciona sin GPF pero no devuelve el dato correctamente. Es muy
posible que la definición de la estructura no sea correcta o que ni
siquiera sea una estructura:
#pragma BEGINDUMP
#include <windows.h>
#include <xailer.h>
typedef struct {
int nXPos;
int nYPos;
int nXMove;
int nYMove;
int nRegionIndex;
int nRLeft;
int nRTop;
int nRRight;
int nRBottom;
int nSeriesIndex;
int nDataIndex;
LONG nChartType;
LONG nSLeft;
LONG nSTop;
LONG nSRight;
LONG nSBottom;
LONG nSTop2;
LONG nSBottom2;
LONG nGLeft;
LONG nGTop;
LONG nGRight;
LONG nGBottom;
LONG nGCol;
LONG nGRow;
double nData1;
double nData2;
double nData3;
double nData4;
double nVirtData1;
double nVirtData2;
double nVirtData3;
double nVirtData4;
} RMC_INFO;
//---------------------------------------------------------- ----------------
HB_FUNC( PARSE_RMCINFO )
{
if( HB_ISPOINTER( 1 ) )
{
RMC_INFO * rmc = (RMC_INFO *) hb_parptr( 1 );
hb_retnl( rmc->nXPos );
}
else
hb_retnl( 0 );
}
#pragma ENDDUMP
//---------------------------------------------------------- ----------------
Desde tu aplicación puedes llamarlo con MsgInfo( Parse_RMCInfo( p5 ) )
Saludos,
José Lalín
esto funciona sin GPF pero no devuelve el dato correctamente. Es muy
posible que la definición de la estructura no sea correcta o que ni
siquiera sea una estructura:
#pragma BEGINDUMP
#include <windows.h>
#include <xailer.h>
typedef struct {
int nXPos;
int nYPos;
int nXMove;
int nYMove;
int nRegionIndex;
int nRLeft;
int nRTop;
int nRRight;
int nRBottom;
int nSeriesIndex;
int nDataIndex;
LONG nChartType;
LONG nSLeft;
LONG nSTop;
LONG nSRight;
LONG nSBottom;
LONG nSTop2;
LONG nSBottom2;
LONG nGLeft;
LONG nGTop;
LONG nGRight;
LONG nGBottom;
LONG nGCol;
LONG nGRow;
double nData1;
double nData2;
double nData3;
double nData4;
double nVirtData1;
double nVirtData2;
double nVirtData3;
double nVirtData4;
} RMC_INFO;
//---------------------------------------------------------- ----------------
HB_FUNC( PARSE_RMCINFO )
{
if( HB_ISPOINTER( 1 ) )
{
RMC_INFO * rmc = (RMC_INFO *) hb_parptr( 1 );
hb_retnl( rmc->nXPos );
}
else
hb_retnl( 0 );
}
#pragma ENDDUMP
//---------------------------------------------------------- ----------------
Desde tu aplicación puedes llamarlo con MsgInfo( Parse_RMCInfo( p5 ) )
Saludos,
José Lalín
Otra vez RMChart
Moises,
lo he estado probando, y por lo que he visto, la estructura no es
exactamente com habéis puesto. No sé exactamente lo que es, pero hay un
total de 52 bytes antes del primer miembro (nXPos) que habéis puesto.
Teniendo eso en cuenta, si cambias esto te funciona:
> typedef struct {
char algo[52];
> int nXPos;
> int nYPos;
> int nXMove;
> int nYMove;
> int nRegionIndex;
.... el resto como estaba.
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
lo he estado probando, y por lo que he visto, la estructura no es
exactamente com habéis puesto. No sé exactamente lo que es, pero hay un
total de 52 bytes antes del primer miembro (nXPos) que habéis puesto.
Teniendo eso en cuenta, si cambias esto te funciona:
> typedef struct {
char algo[52];
> int nXPos;
> int nYPos;
> int nXMove;
> int nYMove;
> int nRegionIndex;
.... el resto como estaba.
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
-
- Mensajes: 291
- Registrado: Jue Ene 31, 2013 1:10 pm
Otra vez RMChart
Jose,
> lo he estado probando, y por lo que he visto, la estructura no es
> exactamente com habéis puesto. No sé exactamente lo que es, pero hay un
> total de 52 bytes antes del primer miembro (nXPos) que habéis puesto.
Ese era el problema.
> Teniendo eso en cuenta, si cambias esto te funciona:
Confirmado. Probado y funcionando.
Saludos,
José Lalín
> lo he estado probando, y por lo que he visto, la estructura no es
> exactamente com habéis puesto. No sé exactamente lo que es, pero hay un
> total de 52 bytes antes del primer miembro (nXPos) que habéis puesto.
Ese era el problema.
> Teniendo eso en cuenta, si cambias esto te funciona:
Confirmado. Probado y funcionando.
Saludos,
José Lalín
-
- Mensajes: 103
- Registrado: Mié Dic 15, 2010 4:45 pm
Otra vez RMChart
Hola Jose
He tratado de seguirlos pero a mi no me ha dado resultado, algo he de haber
hecho mal. Espero no agotar tu paciencia.
Estoy con la version 4.12 del RMChart, Xailer 2.7.5. y Harbour
Tengo la linea:
:MouseUp = "DameDato"
que me manda al Metodo:
METHOD DameDato( oSender, p1, p2, p3, p4, p5 ) CLASS TGrafica
MsgInfo(oSender)
MsgInfo(p1)
MsgInfo(p2)
MsgInfo(p3)
MsgInfo(p4)
MsgInfo(p5) <--- Este valor me indica que es NIL (es
probable que por eso Parse_RMCInfo(p5) mande 0 siempre)
MsgInfo( Parse_RMCInfo( p5 ) )
RETURN NIL
Esta es la definicion de la funcion Parse_RMCInfo
//---------------------------------------------------------- --------
#pragma BEGINDUMP
#include <windows.h>
#include <xailer.h>
typedef struct {
char algo[52];
int nXPos;
int nYPos;
int nXMove;
int nYMove;
int nRegionIndex;
int nRLeft;
int nRTop;
int nRRight;
int nRBottom;
int nSeriesIndex;
int nDataIndex;
LONG nChartType;
LONG nSLeft;
LONG nSTop;
LONG nSRight;
LONG nSBottom;
LONG nSTop2;
LONG nSBottom2;
LONG nGLeft;
LONG nGTop;
LONG nGRight;
LONG nGBottom;
LONG nGCol;
LONG nGRow;
double nData1;
double nData2;
double nData3;
double nData4;
double nVirtData1;
double nVirtData2;
double nVirtData3;
double nVirtData4;
} RMC_INFO;
//---------------------------------------------------------- ----------------
HB_FUNC( PARSE_RMCINFO )
{
if( HB_ISPOINTER( 1 ) )
{
RMC_INFO * rmc = (RMC_INFO *) hb_parptr( 1 );
hb_retnl( rmc->nXPos );
}
else
hb_retnl( 0 );
}
#pragma ENDDUMP
//---------------------------------------------------------- ----------------
Y el RMChartX.prg esta asi:
#include "Xailer.ch"
#include "RMChartX.ch"
CLASS TRMChartX FROM TOcx
PROPERTY cCLSID INIT "RMChart.RMChartX"
METHOD Free() INLINE ::ocx:Reset(), ::Super:Free()
PUBLISHED:
EVENT MouseDown( @nButton, @nShift, @nx, @ny, @utINFO )
EVENT MouseUp( @nButton, @nShift, @nx, @ny, @utINFO )
EVENT MouseMove( @nButton, @nShift, @nx, @ny, @utINFO )
EVENT DblClick()
EVENT MouseDownA( @nButton, @nShift, @nx, @ny, poInfo )
EVENT MouseUpA( @nButton, @nShift, @nx, @ny, poInfo )
EVENT MouseMoveA( @nButton, @nShift, @nx, @ny, poInfo )
PUBLIC:
ENDCLASS
//---------------------------------------------------------- ----------------
"José Lalín" <joselalinf@gmail.com> escribió en el mensaje de noticias
news:517f85e4$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
Jose,
> lo he estado probando, y por lo que he visto, la estructura no es
> exactamente com habéis puesto. No sé exactamente lo que es, pero hay un
> total de 52 bytes antes del primer miembro (nXPos) que habéis puesto.
Ese era el problema.
> Teniendo eso en cuenta, si cambias esto te funciona:
Confirmado. Probado y funcionando.
Saludos,
José Lalín
He tratado de seguirlos pero a mi no me ha dado resultado, algo he de haber
hecho mal. Espero no agotar tu paciencia.
Estoy con la version 4.12 del RMChart, Xailer 2.7.5. y Harbour
Tengo la linea:
:MouseUp = "DameDato"
que me manda al Metodo:
METHOD DameDato( oSender, p1, p2, p3, p4, p5 ) CLASS TGrafica
MsgInfo(oSender)
MsgInfo(p1)
MsgInfo(p2)
MsgInfo(p3)
MsgInfo(p4)
MsgInfo(p5) <--- Este valor me indica que es NIL (es
probable que por eso Parse_RMCInfo(p5) mande 0 siempre)
MsgInfo( Parse_RMCInfo( p5 ) )
RETURN NIL
Esta es la definicion de la funcion Parse_RMCInfo
//---------------------------------------------------------- --------
#pragma BEGINDUMP
#include <windows.h>
#include <xailer.h>
typedef struct {
char algo[52];
int nXPos;
int nYPos;
int nXMove;
int nYMove;
int nRegionIndex;
int nRLeft;
int nRTop;
int nRRight;
int nRBottom;
int nSeriesIndex;
int nDataIndex;
LONG nChartType;
LONG nSLeft;
LONG nSTop;
LONG nSRight;
LONG nSBottom;
LONG nSTop2;
LONG nSBottom2;
LONG nGLeft;
LONG nGTop;
LONG nGRight;
LONG nGBottom;
LONG nGCol;
LONG nGRow;
double nData1;
double nData2;
double nData3;
double nData4;
double nVirtData1;
double nVirtData2;
double nVirtData3;
double nVirtData4;
} RMC_INFO;
//---------------------------------------------------------- ----------------
HB_FUNC( PARSE_RMCINFO )
{
if( HB_ISPOINTER( 1 ) )
{
RMC_INFO * rmc = (RMC_INFO *) hb_parptr( 1 );
hb_retnl( rmc->nXPos );
}
else
hb_retnl( 0 );
}
#pragma ENDDUMP
//---------------------------------------------------------- ----------------
Y el RMChartX.prg esta asi:
#include "Xailer.ch"
#include "RMChartX.ch"
CLASS TRMChartX FROM TOcx
PROPERTY cCLSID INIT "RMChart.RMChartX"
METHOD Free() INLINE ::ocx:Reset(), ::Super:Free()
PUBLISHED:
EVENT MouseDown( @nButton, @nShift, @nx, @ny, @utINFO )
EVENT MouseUp( @nButton, @nShift, @nx, @ny, @utINFO )
EVENT MouseMove( @nButton, @nShift, @nx, @ny, @utINFO )
EVENT DblClick()
EVENT MouseDownA( @nButton, @nShift, @nx, @ny, poInfo )
EVENT MouseUpA( @nButton, @nShift, @nx, @ny, poInfo )
EVENT MouseMoveA( @nButton, @nShift, @nx, @ny, poInfo )
PUBLIC:
ENDCLASS
//---------------------------------------------------------- ----------------
"José Lalín" <joselalinf@gmail.com> escribió en el mensaje de noticias
news:517f85e4$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
Jose,
> lo he estado probando, y por lo que he visto, la estructura no es
> exactamente com habéis puesto. No sé exactamente lo que es, pero hay un
> total de 52 bytes antes del primer miembro (nXPos) que habéis puesto.
Ese era el problema.
> Teniendo eso en cuenta, si cambias esto te funciona:
Confirmado. Probado y funcionando.
Saludos,
José Lalín
-
- Mensajes: 291
- Registrado: Jue Ene 31, 2013 1:10 pm
Otra vez RMChart
Moises,
acabo de ver porqué no te funciona:
> :MouseUp = "DameDato"
Cámbialo por :MouseUpA := "DameDato"
> typedef struct {
> LONG nChartType;
También habría que cambiar los LONG de la estructura por int. Yo he hecho
las pruebas con ambos pero creo que es mejor normalizarla.
Saludos,
José Lalín
acabo de ver porqué no te funciona:
> :MouseUp = "DameDato"
Cámbialo por :MouseUpA := "DameDato"
> typedef struct {
> LONG nChartType;
También habría que cambiar los LONG de la estructura por int. Yo he hecho
las pruebas con ambos pero creo que es mejor normalizarla.
Saludos,
José Lalín
-
- Mensajes: 103
- Registrado: Mié Dic 15, 2010 4:45 pm
Otra vez RMChart
Listo !!!!!!!
Victor, Ignacio y Jose , Muchisimas gracias
Moises Leon
Data Compensation
"José Lalín" <joselalinf@gmail.com> escribió en el mensaje de noticias
news:517fdd68$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
Moises,
acabo de ver porqué no te funciona:
> :MouseUp = "DameDato"
Cámbialo por :MouseUpA := "DameDato"
> typedef struct {
> LONG nChartType;
También habría que cambiar los LONG de la estructura por int. Yo he hecho
las pruebas con ambos pero creo que es mejor normalizarla.
Saludos,
José Lalín
Victor, Ignacio y Jose , Muchisimas gracias
Moises Leon
Data Compensation
"José Lalín" <joselalinf@gmail.com> escribió en el mensaje de noticias
news:517fdd68$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
Moises,
acabo de ver porqué no te funciona:
> :MouseUp = "DameDato"
Cámbialo por :MouseUpA := "DameDato"
> typedef struct {
> LONG nChartType;
También habría que cambiar los LONG de la estructura por int. Yo he hecho
las pruebas con ambos pero creo que es mejor normalizarla.
Saludos,
José Lalín
-
- Mensajes: 291
- Registrado: Jue Ene 31, 2013 1:10 pm
Otra vez RMChart
Moises,
olvidé comentarte algo.
En MiraDato( oSender, p1, p2, ... ) recibes en p1 el botón que se ha
pulsado así que puedes usarlo para por ejemplo mostrar un menú contextual:
METHOD DameDato( oSender, p1, p2, p3, p4, p5 )
LOCAL x, y
LOCAL oPop, nOption
IF p1 == 1 // Botón izquierdo
MsgInfo( RMC_ParseInfo( p5 ) )
ELSEIF p1 == 2 // Botón derecho
GetCursorPos( @x, @y )
MENU oPop POPUP
MENUITEM "Copia imagen" ACTION MsgInfo( "Imagen" )
MENUITEM "Copia datos" ACTION MsgInfo( "Datos" )
SEPARATOR
MENUITEM "Imprimir" ACTION MsgInfo( "Imprimir" )
ENDMENU
nOption := TrackPopupMenu( oPop:Handle, TPM_RETURNCMD, x, y,
::oChart1:hWnd )
IF nOption > 0
oPop:DoAction( nOption )
ENDIF
ENDIF
RETURN Nil
Saludos,
José Lalín
olvidé comentarte algo.
En MiraDato( oSender, p1, p2, ... ) recibes en p1 el botón que se ha
pulsado así que puedes usarlo para por ejemplo mostrar un menú contextual:
METHOD DameDato( oSender, p1, p2, p3, p4, p5 )
LOCAL x, y
LOCAL oPop, nOption
IF p1 == 1 // Botón izquierdo
MsgInfo( RMC_ParseInfo( p5 ) )
ELSEIF p1 == 2 // Botón derecho
GetCursorPos( @x, @y )
MENU oPop POPUP
MENUITEM "Copia imagen" ACTION MsgInfo( "Imagen" )
MENUITEM "Copia datos" ACTION MsgInfo( "Datos" )
SEPARATOR
MENUITEM "Imprimir" ACTION MsgInfo( "Imprimir" )
ENDMENU
nOption := TrackPopupMenu( oPop:Handle, TPM_RETURNCMD, x, y,
::oChart1:hWnd )
IF nOption > 0
oPop:DoAction( nOption )
ENDIF
ENDIF
RETURN Nil
Saludos,
José Lalín
-
- Mensajes: 103
- Registrado: Mié Dic 15, 2010 4:45 pm
Otra vez RMChart
Excelente Jose lo tomare en cuenta.
Muchas gracias
Moises
"José Lalín" <joselalinf@gmail.com> escribió en el mensaje de noticias
news:51800b2d$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
Moises,
olvidé comentarte algo.
En MiraDato( oSender, p1, p2, ... ) recibes en p1 el botón que se ha
pulsado así que puedes usarlo para por ejemplo mostrar un menú contextual:
METHOD DameDato( oSender, p1, p2, p3, p4, p5 )
LOCAL x, y
LOCAL oPop, nOption
IF p1 == 1 // Botón izquierdo
MsgInfo( RMC_ParseInfo( p5 ) )
ELSEIF p1 == 2 // Botón derecho
GetCursorPos( @x, @y )
MENU oPop POPUP
MENUITEM "Copia imagen" ACTION MsgInfo( "Imagen" )
MENUITEM "Copia datos" ACTION MsgInfo( "Datos" )
SEPARATOR
MENUITEM "Imprimir" ACTION MsgInfo( "Imprimir" )
ENDMENU
nOption := TrackPopupMenu( oPop:Handle, TPM_RETURNCMD, x, y,
::oChart1:hWnd )
IF nOption > 0
oPop:DoAction( nOption )
ENDIF
ENDIF
RETURN Nil
Saludos,
José Lalín
Muchas gracias
Moises
"José Lalín" <joselalinf@gmail.com> escribió en el mensaje de noticias
news:51800b2d$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
Moises,
olvidé comentarte algo.
En MiraDato( oSender, p1, p2, ... ) recibes en p1 el botón que se ha
pulsado así que puedes usarlo para por ejemplo mostrar un menú contextual:
METHOD DameDato( oSender, p1, p2, p3, p4, p5 )
LOCAL x, y
LOCAL oPop, nOption
IF p1 == 1 // Botón izquierdo
MsgInfo( RMC_ParseInfo( p5 ) )
ELSEIF p1 == 2 // Botón derecho
GetCursorPos( @x, @y )
MENU oPop POPUP
MENUITEM "Copia imagen" ACTION MsgInfo( "Imagen" )
MENUITEM "Copia datos" ACTION MsgInfo( "Datos" )
SEPARATOR
MENUITEM "Imprimir" ACTION MsgInfo( "Imprimir" )
ENDMENU
nOption := TrackPopupMenu( oPop:Handle, TPM_RETURNCMD, x, y,
::oChart1:hWnd )
IF nOption > 0
oPop:DoAction( nOption )
ENDIF
ENDIF
RETURN Nil
Saludos,
José Lalín