
Autor: Mike Lewis
www.ml-consult.co.uk [4]
Texto original:
-- Simple Chart Revisited --
http://www.ml-consult.co.uk/foxst-27.htm [5]
Traducido por:
Ana María Bisbé York
amby@telefonica.net [6]
Nuestro agradecimiento a todos ustedes que nos han enviado sus opiniones sobre nuestro control SimpleChart. Desde que nosotros publicamos el control en Marzo 2002, se ha convertido en el elemento más bajado del sitio Foxstuff, y nos da mucho gusto que muchos programadores de FoxPro lo hayan encontrado útil.
En este artículo vamos a contestar algunas de sus preguntas más frecuentes sobre este control y también pasarles algunos consejos útiles de sus usuarios.
Para aquellos que no han visto el control SimpleChart SimpleChart es en esencia una envoltura del control ActiveX Microsoft's MSChart. Su objetivo es simplificar el trabajo en la elaboración de gráficos, histogramas, y otros diagramas bidimensionales y tridimensionales. Para encontrar más información sobre él y para obtener su copia gratis, vea el artículo Add graphs and charts to your VFP applications.
Es su decisión. El control trabaja exactamente igual en ambas situaciones.
SimpleChart admite tipos de gráficos del 0 al 9 y 14 y 16. Puede asignarle solo estos valores a la propiedad. Los otros 16 valores que se ve en la Ventana de propiedades no funcionan en VFP (el gráfico bidimensional de barra horizontal sería el 11). Esta es una limitación del MS Chart, no del SimpleChart.
La explicación más probable es que el gráfico no ha podido encontrar la tabla o cursor. Es necesario asegurarse de que la tabla o cursor está abierta en la sesión de datos actual y el alias correcto ha sido guardado en la propiedad cAlias. Verifique también que la propiedad cData contiene una lista válida de nombres de campos numéricos. El método CreateChart retornará .F. si se detecta un problema con cAlias o cData.
Es necesario distribuir el control ActiveX MS Chart, que es el MSCHRT20.OCX. Este OCX debe ser instalado en la carpeta System del usuario y registrarlo como un Control ActiveX. Si no está seguro de cómo hacerlo, verifique la ayuda del Asistente de Instalación (si utiliza VFP 6.0) o InstallShield Express (VFP 7.0 y VFP 8.0)
Ni MS Chart ni SimpleChart respalda la impresión. Sin embargo, existe un método EditCopy, que permite copiar el gráfico al Portapapeles. Posteriormente se puede pegar el gráfico en otra aplicación y luego imprimirlo desde allí (vea también las dos preguntas siguientes.)
Lo que vio fueron los datos subyacentes en los que se basa el gráfico. Para ver el gráfico seleccione Pegado Especial del Menú Edición de Word, luego seleccione Imagen. Lo mismo ocurrirá en Excel y algunas otras aplicaciones.
Si. La técnica siguiente utiliza ActiveX Automation para hacer eso justamente (nuestro agradecimiento a Ben Hambigde por sugerir la idea y a Jon Barker por su ayuda en la validación)
Primero, crear un formulario con las propiedades del usuario. Le llamaremos oWord. Inicializamos como Null, por ejemplo, para ejecutar este código en el INIT del formulario colocar:
THISFORM.oWord = NULL
Luego, ejecute el siguiente código en el momento en que usted desea imprimir el gráfico. Puede ser el Evento Clic del comando Imprimir
IF ISNULL(THISFORM.oWord)
THISFORM.oWord=CREATEOBJECT("Word.Application")
ENDIF
oDoc=THISFORM.oWord.Documents.Add()
THISFORM.MyChart.EditCopy()
THISFORM.oWord.Selection.PasteSpecial(.F., .F., 0, .F., 3)
oDoc.PrintOut
oDoc.Close(0)
Fundamentalmente, este código va a instanciar Microsoft Word como un servidor de Automatización (a no ser que haya sido instanciado antes), copia el gráfico en el Portapapeles, pega la imagen del gráfico (no los valores) en un nuevo documento de Word, imprime el documento y cierra el documento sin salvar. (En la quinta línea del código que se muestra arriba, MYChart es el nombre del objeto SimpleChart)
Finalmente, adicione este código en el evento Destroy de este formulario.
IF NOT ISNULL(THISFORM.oWord) THISFORM.oWord.Quit ENDIF
En teoría, usted puede hacer esto fijando la propiedad AllowDynamicRotation en .T. Se supone que mostrará un cursor de rotación cuando el usuario presione la tecla Control (el cursor de rotación aparece como una flecha de cuatro puntas y permite al usuario rotar el gráfico 3D interactivamente.) En la práctica, nunca lo hemos logrado obtenere en VFP (recibiremos gustosos sugerencias de alguien que sepa como hacer esto).
Si, existen las propiedades disponibles para ajustar tanto la rotación como la elevación de los gráficos. Para ver esta acción, adicione dos controles spinner a su formulario. Coloque este código en el Evento InteractiveChange del primer spinner
THISFORM.MyChart.Plot.View3d.Rotation=this.Value
Y en el evento InteractiveChange del Segundo control spinner:
THISFORM.MyChart.Plot.View3d.Elevation = this.Value
Cuando usted ejecute el formulario y ajuste los valores de los controles spinner, verá algunos efectos interesantes (Nuestro agradecimiento a Kirk Kelly por suministrar esta información)
Este código va a cambiar la etiqueta del eje X a Fuente = Arial Narrow y su tamaño 14
WITH THISFORM.MyChart.Plot.Axis(0)
FOR EACH olabel IN .Labels
olabel.VtFont.Name = "Arial Narrow"
oLabel.vtFont.Size = 14
ENDFOR
ENDWITH
Alternativamente referencie Axis(1) o Axis(2) en lugar de Axis(0) en la primera línea. Esto le permitirá cambiar la fuente en los ejes verticales izquierdo y derecho respectivamente
Si. SimpleChart puede mostrar un título para ele eje X y para ambos ejes Y Aquí mostramos como su código pudiera ser escrito:
WITH THISFORM.MyChart.Plot.Axis(0) .AxisTitle.Text = "This is the X-axis" .AxisTitle.vtFont.Name = "Arial" .AxisTitle.VtFont.Size = 12 ENDWITH
Esto mostrará un título horizontal para el eje X. Al igual que las etiquetas, usted puede referenciar Axis(1) o Axis(2) para los ejes Y (izquierdo y derecho respectivamente)
El objeto AxisTitle tiene un conjunto de otras propiedades que usted puede utilizar para personalizar el título -- TextLayout.Orientation, por ejemplo, le permite escoger la orientación (1 = horizontal, 2 = vertical). Además el objeto VFont tiene propiedades para Style (1 = negrita, 2 = cursiva, 3 = negritaCursiva) y Effect (256 = tachar, 512 = subrayar)
Mike Lewis Consultants Ltd. Julio 2002. Revisado Septiembre 2002
| SimpleChart revisitado | Entrar/Crear una cuenta [7] | 14 Comentarios | |
|
| |
| Los comentarios son propiedad de sus respectivos autores. No somos responsables de su contenido. |
Re: SimpleChart revisitadopor devilsito en 21 Oct, 2003 - 08:03 (Información del usuario [8] | Enviar un mensaje [9] |
|
Pregunta: Es posible obtener la pantalla de propiedades,( la que aparece cuando le das clic derecho, cuando estas diseñando el formulario) en tiempo de ejecución.?? Asi no tendría que dar todas las propiedades de forma programada. --devilzito-- |
Re: SimpleChart revisitadopor moika en 27 Oct, 2003 - 04:51 (Información del usuario [12] | Enviar un mensaje [13] |
| Quisiera saber como puedo hacer para mostrar los valores arriba de cada barra en el grafico. |
Re: SimpleChart revisitadopor XFOX [18] (ossys@topmail.com.ar) en 08 Mar, 2004 - 12:58 (Información del usuario [19] | Enviar un mensaje [20] http:// [21]) |
| es posible pegar el grafico en excel o word.....y luego seleccionandolo en estos programas, volver a copiar y pegarlo en un campo general de un cursor para imprimirlo con un reporte? ya que pasarlo a un campo general directamente no es posible? |
Re: SimpleChart revisitadopor AlejandroFabian [23] (graduadouba97@hotmail.com) en 13 Jul, 2004 - 04:36 (Información del usuario [24] | Enviar un mensaje [25] http:// [26]) |
|
Sobre la rotación en 3D además de fijar la propiedad AllowDynamicRotation en .T. se tiene que ajustar la propiedad AllowSelections en .T., esto igualará la práctica con la teoría. Pregunta: ¿Cómo puedo incorporar en la visualización del gráfico el valor (en cantidades) de lo representado por ejmplo por cada barra. Gracias. |
Re: SimpleChart revisitadopor javi_garzon en 21 Jul, 2004 - 12:44 (Información del usuario [28] | Enviar un mensaje [29] http:// [30]) |
|
Existe una forma para que la impresion de la grafica ocupe toda la hoja??? Lo estoy enviando a Word..... |
Re: SimpleChart revisitadopor mani14 en 11 Feb, 2005 - 05:54 (Información del usuario [31] | Enviar un mensaje [32] http:// [33]) |
| hola, hay forma para hacer que las lineas salgan discontinuas en vez de continuas? lo que quisiera es que una saliese continua y la otra discontinua |