351
Is it possible to reorder just the series by drag and drop
#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph
	LOCAL oSerie,oSerie1
	LOCAL oSeries

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:AutoFit := .T.
		oGraph:AllowMoveValue := 257/*0x100+exLeftClick*/
		oGraph:CategoryAxis():MajorGridLines():Color := "lightgray"
		oSeries := oGraph:Series()
			oSerie := oSeries:Add("Electronics(350),Clothing(200),Books(150)",2001)
				oSerie:Stack := "A"
				oSerie:ShowValue := 1/*exPoint*/
			oSerie1 := oSeries:Add("Electronics(500),Clothing(150),Books(180)",2002)
				oSerie1:Stack := "A"
				oSerie1:ShowValue := 1/*exPoint*/
		oGraph:ValuePoint := "16,white,black"
		oGraph:Legend():Visible := .T.
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
350
Is it possible to reorder just the values by drag and drop (method 2)
#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph
	LOCAL oSerie,oSerie1
	LOCAL oSeries

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:AutoFit := .T.
		oGraph:AllowMoveValue := 513/*0x200+exLeftClick*/
		oGraph:CategoryAxis():MajorGridLines():Color := "lightgray"
		oSeries := oGraph:Series()
			oSerie := oSeries:Add("Electronics(350),Clothing(200),Books(150)",2001)
				oSerie:Stack := "A"
				oSerie:ShowValue := 1/*exPoint*/
			oSerie1 := oSeries:Add("Electronics(500),Clothing(150),Books(180)",2002)
				oSerie1:Stack := "A"
				oSerie1:ShowValue := 1/*exPoint*/
		oGraph:ValuePoint := "16,white,black"
		oGraph:Legend():Visible := .T.
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
349
Is it possible to reorder just the values by drag and drop (method 1)
#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph
	LOCAL oSerie,oSerie1
	LOCAL oSeries

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:AutoFit := .T.
		oGraph:AllowMoveValue := 1/*exLeftClick*/
		oGraph:CategoryAxis():MajorGridLines():Color := "lightgray"
		oSeries := oGraph:Series()
			oSerie := oSeries:Add("Electronics(350),Clothing(200),Books(150)",2001)
				oSerie:Stack := "A"
			oSerie1 := oSeries:Add("Electronics(500),Clothing(150),Books(180)",2002)
				oSerie1:Stack := "A"
				oSerie1:ShowValue := 1/*exPoint*/
		oGraph:ValuePoint := "16,white,black"
		oGraph:Legend():Visible := .T.
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
348
Is it possible to reorder the series and values by drag and drop
#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph
	LOCAL oSerie,oSerie1
	LOCAL oSeries

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:AutoFit := .T.
		oGraph:AllowMoveValue := 1/*exLeftClick*/
		oGraph:CategoryAxis():MajorGridLines():Color := "lightgray"
		oSeries := oGraph:Series()
			oSerie := oSeries:Add("Electronics(350),Clothing(200),Books(150)",2001)
				oSerie:Stack := "A"
				oSerie:ShowValue := 1/*exPoint*/
			oSerie1 := oSeries:Add("Electronics(500),Clothing(150),Books(180)",2002)
				oSerie1:Stack := "A"
				oSerie1:ShowValue := 1/*exPoint*/
		oGraph:ValuePoint := "16,white,black"
		oGraph:Legend():Visible := .T.
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
347
Is it possible to reorder the values by drag and drop
#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph
	LOCAL oSerie

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:AutoFit := .T.
		oGraph:ValueAxis():Format := "value/100000"
		oSerie := oGraph:Series():Add("Tokyo(37833000), Delhi(30290000), Shanghai(27058000), São Paulo(22043000), Mumbai(20668000), Beijing(20384000), Karachi(20000000), Dhaka(17072000), Istanbul(15029000), Los Angeles(13131000)")
			oSerie:ShowValue := 1/*exPoint*/
		oGraph:ValuePoint := "12,white,black"
		oGraph:AllowMoveValue := 1/*exLeftClick*/
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
346
Reorder multiple values
#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:AutoFit := .T.
		oGraph:MultiColorSerie := .F.
		oGraph:Series():Add("1960(1.4),1980(11.2),2000(33.5),2010(65.8),2020(84.7)","GDP")
		oGraph:Order := ",4,,3"
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
345
Move a value to an earlier or later position
#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:AutoFit := .T.
		oGraph:MultiColorSerie := .F.
		oGraph:Series():Add("1960(1.4),1980(11.2),2000(33.5),2010(65.8),2020(84.7)","GDP")
		oGraph:Order := ",,3"
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
344
Place one value at a specified position
#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:AutoFit := .T.
		oGraph:MultiColorSerie := .F.
		oGraph:Series():Add("1960(1.4),1980(11.2),2000(33.5),2010(65.8),2020(84.7)","GDP")
		oGraph:Order := "3"
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
343
Configure the Y-axis so that it always displays exactly 5 labels (fixed-ticks), regardless of the data range

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph
	LOCAL oValueAxis

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:AutoFit := .T.
		oGraph:MultiColorSerie := .F.
		oValueAxis := oGraph:ValueAxis()
			oValueAxis:AsPercent := .T.
			oValueAxis:MajorUnit := 0.2
			oValueAxis:Format := "value*5 array (``,`A`,`B`,`C`,`D`,`E`)"
		oGraph:Series():Add("1960(1.4),1980(11.2),2000(33.5),2010(65.8),2020(84.7)","GDP")
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
342
Define the style(solid, dash, dot, dash-dot, dash-dot-dot) of the line to show the serie

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph
	LOCAL oSerie

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:AutoFit := .T.
		oSerie := oGraph:Series():Add("1920(1.8),1945(2.3),1970(13.7),1995(5.7),2020(7.8)","Population")
			oSerie:Type := "Line"
			oSerie:SetProperty("Misc",8/*exLineStyle*/,2)
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
341
I'm using the logarithmic scale, but it's not displaying any values. How can I adjust the settings to show very small values

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph
	LOCAL oSerie
	LOCAL oValueAxis
	LOCAL sFormat

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		sFormat := "(value and value < 1) ? (value format `%.1E` replace `-00` with ``) : (value format `0`)"
		oGraph:AutoFit := .T.
		oGraph:SetProperty("Misc",32/*exEpsilon*/,0.000000001)
		oGraph:MultiColorSerie := .F.
		oGraph:CategoryAxis():Format := "`<bgcolor white>` + value"
		oValueAxis := oGraph:ValueAxis()
			oValueAxis:Type := 1/*exLogarithmic*/
			oValueAxis:Format := Transform(sFormat,"")
			oValueAxis:CursorFormat := Transform(sFormat,"")
		oSerie := oGraph:Series():Add("12:54:28(3.14E-09),12:54:44(2.59E-09),13:03:53(4.25E-09),13:03:58(4.20E-09),13:05:00(5.10E-09),13:06:12(6.25E-09)")
			oSerie:Type := "line"
			oSerie:CursorFormat := Transform(sFormat,"")
		oGraph:Cursor():Visible := .T.
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
340
My data contains no values below 1. How can I prevent the logarithmic value axis from displaying the range between 0 and 1

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph
	LOCAL oSerie
	LOCAL oValueAxis

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:AutoFit := .T.
		oGraph:MultiColorSerie := .F.
		oGraph:ValuePoint := ",,,,,,,black,transparent"
		oGraph:CategoryAxis():Format := "`<bgcolor white>` + value"
		oValueAxis := oGraph:ValueAxis()
			oValueAxis:Type := 1/*exLogarithmic*/
			oValueAxis:Min := 1
			oValueAxis:Format := "value format `0`"
		oSerie := oGraph:Series():Add("Small village(8),Hamlet(14),Small town(22),Medium town(39),Growing town(2118),Small city(6523),Large city(31245),Capital city(431245),Mega city(65431245)")
			oSerie:ShowValue := 4/*exValue*/
			oSerie:ValueFormat := "`<fgcolor white> ` + (value format `0`) + ` `"
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
339
Display logarithmic scale

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph
	LOCAL oValueAxis

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:AutoFit := .T.
		oGraph:MultiColorSerie := .F.
		oGraph:CategoryAxis():Format := "`<bgcolor white>` + value"
		oValueAxis := oGraph:ValueAxis()
			oValueAxis:Type := 1/*exLogarithmic*/
			oValueAxis:Format := "value format `0`"
		oGraph:Series():Add("Sterile Water(0.0001),Treated Tap Water(0.001),Bottled Water(0.01),Clean Pond(0.1),River(1),Swamp(100),Sewage(10000),Wastewater Treatment Inlet(1000000)"):CursorFormat := "value < 1 ? value : (value format `0`) "
		oGraph:Cursor():Visible := .T.
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
338
Can the values be shown in scientific notation (e.g., 1E+4, 5E-10) rather than full decimal form

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph
	LOCAL oSerie

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:AutoFit := .T.
		oGraph:ValueAxis():Format := "value/100000"
		oSerie := oGraph:Series():Add("Tokyo(37833000), Delhi(30290000), Shanghai(27058000), São Paulo(22043000), Mumbai(20668000), Beijing(20384000), Karachi(20000000), Dhaka(17072000), Istanbul(15029000), Los Angeles(13131000)")
			oSerie:ShowValue := -1/*0xffffff78+exHideIfEmpty+exValue+exLine+exPoint*/
			oSerie:ValueFormat := "value format `%.1E` replace `+00` with `+`"
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
337
Highlight the value on both the chart and the axis

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:Import("C:\Program Files\Exontrol\ExGraph\Sample\Data/aapl.txt")
		oGraph:SerieType := "line"
		oGraph:Series():Add("open"):Data := "AAPL (open)"
		oGraph:ValueAxis():Mark := "red[axis,chart](74.25-75.75),black[axis,chart](76.5)"
		oGraph:Refresh()
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
336
Highlight the categories on both the chart and the axis

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph
	LOCAL oCategoryAxis

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:Import("C:\Program Files\Exontrol\ExGraph\Sample\Data/aapl.txt")
		oGraph:SerieType := "line"
		oGraph:ValueSize := 6
		oGraph:Series():Add("open"):Data := "AAPL (open)"
		oCategoryAxis := oGraph:CategoryAxes():Add("0")
			oCategoryAxis:Format := "value left 7"
			oCategoryAxis:Split := .T.
			oCategoryAxis:Mark := "#F8F8F8[axis,chart](label = `2014-02`)"
		oGraph:Refresh()
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
335
Highlight values on axis only

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:Import("C:\Program Files\Exontrol\ExGraph\Sample\Data/aapl.txt")
		oGraph:SerieType := "line"
		oGraph:Series():Add("open"):Data := "AAPL (open)"
		oGraph:ValueAxis():Mark := "red[axis](74.25-75.75),black[axis](76.5)"
		oGraph:Refresh()
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
334
Highlight the categories on axis only

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph
	LOCAL oCategoryAxis

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:Import("C:\Program Files\Exontrol\ExGraph\Sample\Data/aapl.txt")
		oGraph:SerieType := "line"
		oGraph:ValueSize := 6
		oGraph:Series():Add("open"):Data := "AAPL (open)"
		oCategoryAxis := oGraph:CategoryAxes():Add("0")
			oCategoryAxis:Format := "value left 7"
			oCategoryAxis:Split := .T.
			oCategoryAxis:Mark := "#F8F8F8[axis](label = `2014-02`)"
		oGraph:Refresh()
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
333
Highlight values

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:Import("C:\Program Files\Exontrol\ExGraph\Sample\Data/aapl.txt")
		oGraph:SerieType := "line"
		oGraph:Series():Add("open"):Data := "AAPL (open)"
		oGraph:ValueAxis():Mark := "red(74.25-75.75),black[chart,axis](76.5)"
		oGraph:Refresh()
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
332
Highlight the categories using an expression

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph
	LOCAL oCategoryAxis

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:Import("C:\Program Files\Exontrol\ExGraph\Sample\Data/aapl.txt")
		oGraph:SerieType := "line"
		oGraph:Series():Add("open"):Data := "AAPL (open)"
		oCategoryAxis := oGraph:CategoryAxes():Add("0")
			oCategoryAxis:Format := "`Wno<off-4>` + week(date(value left 10))"
			oCategoryAxis:Split := .T.
			oCategoryAxis:Mark := "#F8F8F8(index in (1,3))"
		oGraph:Refresh()
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
331
Highlight the categories using an expression

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph
	LOCAL oCategoryAxis

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:Import("C:\Program Files\Exontrol\ExGraph\Sample\Data/aapl.txt")
		oGraph:SerieType := "line"
		oGraph:ValueSize := 6
		oGraph:Series():Add("open"):Data := "AAPL (open)"
		oCategoryAxis := oGraph:CategoryAxes():Add("0")
			oCategoryAxis:Format := "value left 7"
			oCategoryAxis:Split := .T.
			oCategoryAxis:Mark := "#F8F8F8(label = `2014-02`)"
		oGraph:Refresh()
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
330
Highlight the categories based on the index

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph
	LOCAL oCategoryAxis

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:Import("C:\Program Files\Exontrol\ExGraph\Sample\Data/aapl.txt")
		oGraph:SerieType := "line"
		oGraph:Series():Add("open"):Data := "AAPL (open)"
		oCategoryAxis := oGraph:CategoryAxes():Add("0")
			oCategoryAxis:Format := "`Wno<off-4>` + week(date(value left 10))"
			oCategoryAxis:Split := .T.
			oCategoryAxis:Mark := "#F8F8F8(2)"
		oGraph:Refresh()
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
329
IdemmM {string}, specifies the name of another value-axis to synchronize min, max, and major-unit values from when scrolling. If omitted or the value-axis with the given name is not found, these values are synchronized with the default value-axis

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph
	LOCAL oSerie
	LOCAL oValueAxes
	LOCAL oValueAxis,oValueAxis1

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:Import("C:\Program Files\Exontrol\ExGraph\Sample\Data/aapl.txt")
		oSerie := oGraph:Series():Add("open")
			oSerie:Data := "AAPL (open)"
			oSerie:Type := "line"
		oValueAxes := oGraph:ValueAxes()
			oValueAxes:Add("1st")
			oValueAxis := oValueAxes:Add("2nd")
				oValueAxis:Align := 2/*exAlignRight*/
				oValueAxis:IdemmM := "1st"
			oValueAxis1 := oValueAxes:Add("3rd")
				oValueAxis1:Format := "120 + value * 2.5"
				oValueAxis1:MajorGridLines():Color := "transparent"
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
328
Adds multiple value-axes

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph
	LOCAL oSerie
	LOCAL oValueAxes

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:Import("C:\Program Files\Exontrol\ExGraph\Sample\Data/aapl.txt")
		oSerie := oGraph:Series():Add("open")
			oSerie:Data := "AAPL (close)"
			oSerie:Type := "line"
			oSerie:Style := 1/*exSpline*/
		oValueAxes := oGraph:ValueAxes()
			oValueAxes:Add("1st")
			oValueAxes:Add("2nd"):Align := 2/*exAlignRight*/
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
327
Split the chart in weeks

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph
	LOCAL oCategoryAxis
	LOCAL oFormatGridLinesOptions
	LOCAL oSerie

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:ValueSize := 18
		oGraph:Import("C:\Program Files\Exontrol\ExGraph\Sample\Data/aapl.txt")
		oSerie := oGraph:Series():Add("open")
			oSerie:Data := "AAPL (open)"
			oSerie:Type := "line"
			oSerie:Style := 1/*exSpline*/
		oCategoryAxis := oGraph:CategoryAxes():Add("0")
			oCategoryAxis:Format := "value mid 9 left 2"
			oFormatGridLinesOptions := oCategoryAxis:ChartGridLines()
				oFormatGridLinesOptions:Format := "`<fgcolor gray>Wno <off 4>` + week(date(value left 10))"
				oFormatGridLinesOptions:Color := "gray"
				oFormatGridLinesOptions:Align := 0/*exTextAlignLeft*/
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
326
Resets the series, category axes and value axes without affecting the control's data
PROCEDURE OnClick(oGraph)
	oGraph:Reset()
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph
	LOCAL oCategoryAxis,oCategoryAxis1
	LOCAL oSerie

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:Click := {|| OnClick(oGraph)} /*Occurs when the user presses and then releases the left mouse button over the control.*/

		oGraph:BeginUpdate()
		oGraph:ValueSize := 18
		oGraph:Import("C:\Program Files\Exontrol\ExGraph\Sample\Data/aapl.txt")
		oGraph:SerieType := "line"
		oSerie := oGraph:Series():Add()
			oSerie:Name := "aapl"
			oSerie:Data := "AAPL (open),AAPL (high),AAPL (low),AAPL (close)"
		oCategoryAxis := oGraph:CategoryAxes():Add("0")
			oCategoryAxis:Format := "value mid 9 left 2"
		oCategoryAxis1 := oGraph:CategoryAxes():Add("0")
			oCategoryAxis1:Format := "value left 7"
			oCategoryAxis1:Split := .T.
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
325
Define the representation method for the data in all series where the type property is not specified, determining how these series are visually displayed

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph
	LOCAL oSeries

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:Pad := 18
		oGraph:AutoFit := .T.
		oGraph:SerieType := "rangeArea"
		oSeries := oGraph:Series()
			oSeries:Add("Chinese(14.1),Spanish(6.7),English(4.9),Hindi(4.2),Arabic(4.1),Bengali(3.3),Portuguese(2.9),Russian(2.8),Japanese(1.7),Lahnda(1.6)","Worldwide")
			oSeries:Add("Chinese(13.2),Spanish(6.6),English(4.8),Hindi(4.1),Arabic(4.0),Bengali(3.2),Portuguese(2.8),Russian(2.7),Japanese(1.6),Lahnda(1.5)","Native")
		oGraph:Legend():Visible := .T.
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
324
How can I prevent the labels from rotating around the chart when using the radarColumn type

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph
	LOCAL oSeries

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:Pad := 18
		oGraph:AutoFit := .T.
		oGraph:SerieType := "radarCol"
		oGraph:SetProperty("Misc",16/*exRadialRotateLabels*/,.F.)
		oSeries := oGraph:Series()
			oSeries:Add("Chinese(14.1),Spanish(6.7),English(4.9),Hindi(4.2),Arabic(4.1),Bengali(3.3),Portuguese(2.9),Russian(2.8),Japanese(1.7),Lahnda(1.6)","Worldwide")
			oSeries:Add("Chinese(13.2),Spanish(6.6),English(4.8),Hindi(4.1),Arabic(4.0),Bengali(3.2),Portuguese(2.8),Russian(2.7),Japanese(1.6),Lahnda(1.5)","Native")
		oGraph:Legend():Visible := .T.
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
323
Disable stacking for all series at once

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph
	LOCAL oSeries

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:Pad := 18
		oGraph:AutoFit := .T.
		oGraph:AllowStack := .F.
		oSeries := oGraph:Series()
			oSeries:Add("Chinese(14.1),Spanish(6.7),English(4.9),Hindi(4.2),Arabic(4.1),Bengali(3.3),Portuguese(2.9),Russian(2.8),Japanese(1.7),Lahnda(1.6)","Worldwide"):Stack := "group"
			oSeries:Add("Chinese(13.2),Spanish(6.6),English(4.8),Hindi(4.1),Arabic(4.0),Bengali(3.2),Portuguese(2.8),Russian(2.7),Japanese(1.6),Lahnda(1.5)","Native"):Stack := "group"
		oGraph:Legend():Visible := .T.
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
322
How can I stack more than three data series across multiple columns

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph
	LOCAL oSeries

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:Pad := 18
		oGraph:AutoFit := .T.
		oSeries := oGraph:Series()
			oSeries:Add("Chinese(9.165),Spanish(4.355),English(3.185),Hindi(2.73),Arabic(2.665),Bengali(2.145),Portuguese(1.885),Russian(1.82),Japanese(1.105),Lahnda(1.04)","Male"):Stack := "G1"
			oSeries:Add("Chinese(4.935),Spanish(2.345),English(1.715),Hindi(1.47),Arabic(1.435),Bengali(1.155),Portuguese(1.015),Russian(0.98),Japanese(0.595),Lahnda(0.56)","Female"):Stack := "G1"
			oSeries:Add("Chinese(3.5),Spanish(2.0),English(1.8),Hindi(0.5),Arabic(0.4),Bengali(0.3),Portuguese(0.7),Russian(1.2),Japanese(0.4),Lahnda(0.2)","Europe"):Stack := "G2"
			oSeries:Add("Chinese(8.0),Spanish(0.5),English(1.0),Hindi(3.0),Arabic(2.5),Bengali(2.0),Portuguese(0.2),Russian(1.0),Japanese(1.0),Lahnda(0.5)","Asia"):Stack := "G2"
			oSeries:Add("Chinese(1.0),Spanish(3.5),English(1.5),Hindi(0.2),Arabic(0.5),Bengali(0.1),Portuguese(1.5),Russian(0.1),Japanese(0.1),Lahnda(0.1)","America"):Stack := "G2"
			oSeries:Add("Chinese(0.1),Spanish(0.1),English(0.3),Hindi(0.1),Arabic(0.1),Bengali(0.1),Portuguese(0.1),Russian(0.1),Japanese(0.1),Lahnda(0.1)","Australia"):Stack := "G2"
			oSeries:Add("Chinese(1.5),Spanish(0.6),English(0.3),Hindi(0.4),Arabic(0.6),Bengali(0.8),Portuguese(0.4),Russian(0.4),Japanese(0.1),Lahnda(0.5)","Others"):Stack := "G2"
		oGraph:Legend():Visible := .T.
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
321
How can I stack data more than three series

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph
	LOCAL oSeries

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:Pad := 18
		oGraph:AutoFit := .T.
		oSeries := oGraph:Series()
			oSeries:Add("Chinese(14.1),Spanish(6.7),English(4.9),Hindi(4.2),Arabic(4.1),Bengali(3.3),Portuguese(2.9),Russian(2.8),Japanese(1.7),Lahnda(1.6)","Worldwide"):Stack := "group"
			oSeries:Add("Chinese(13.2),Spanish(6.6),English(4.8),Hindi(4.1),Arabic(4.0),Bengali(3.2),Portuguese(2.8),Russian(2.7),Japanese(1.6),Lahnda(1.5)","Native"):Stack := "group"
			oSeries:Add("Chinese(1.5),Spanish(10.2),English(2.1),Hindi(0.5),Arabic(0.8),Bengali(0.3),Portuguese(3.5),Russian(0.4),Japanese(0.2),Lahnda(0.1)","Regional"):Stack := "group"
		oGraph:Legend():Visible := .T.
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
320
I use the legend, but clicking a series mostly rearranges them instead of hiding it
#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:AutoFit := .T.
		oGraph:SetProperty("Misc",17/*exNewLayoutOnVisibleChange*/,.F.)
		oGraph:Series():Add("50,150,150,300","A1")
		oGraph:Series():Add("180,40,60,160","A2")
		oGraph:Legend():Visible := .T.
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
319
Adjusts the column/bar size so that the entire chart fits within the client rectangle
#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:CategoryAxis():Categories := "Asia,Africa,Europe,North America,Antarctica,South America,Australia/Oceania"
		oGraph:Series():Add("4600,1300,747,579,0,422,42")
		oGraph:ValueAutoFit()
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
318
The categories overlap, making the text unreadable

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph
	LOCAL oCategoryAxis

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:ValueSize := 32
		oCategoryAxis := oGraph:CategoryAxis()
			oCategoryAxis:Categories := "Asia,Africa,Europe,North America,Antarctica,South America,Australia/Oceania"
			oCategoryAxis:Format := "`<bgcolor white>` + value"
		oGraph:Series():Add("4600,1300,747,579,0,422,42")
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
317
Represents a single serie with single color (prevent multiple colors for single-serie)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:AutoFit := .T.
		oGraph:MultiColorSerie := .F.
		oGraph:CategoryAxis():MajorGridLines():Color := "lightgray"
		oGraph:Series():Add("Electronics(350),Clothing(200),Books(150)",2001)
		oGraph:Legend():Visible := .T.
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
316
How can I replace or add an icon at runtime

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:ReplaceIcon("gAAAABgYACEHgUJFEEAAWhUJCEJEEJggEhMCYEXjUbjkJQECj8gj8hAEjkshYEpk8kf8ClsulsvAExmcvf83js5nU7nkCeEcn8boMaocXosCB9Hn09pkzcEuoL/fE+OkYB0gB9YhIHrddgVcr9aktZADAD8+P8CgIA==")
		oGraph:ReplaceIcon("C:\images\favicon.ico",0)
		oGraph:AutoFit := .T.
		oGraph:Series():Add("<img>1</img>Asia(4600),<img>2</img>Africa(1300),<img>3</img>Europe(747),<img>4</img>North America(579),<img>5</img>South America(433),<img>6</img>Australia/Oceania(42)")
		oGraph:SeriesColors := "blue"
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
315
No grid lines are shown even I set the Color and Format properties of ChartGridLines/OverviewGridLines
#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph
	LOCAL oFormatGridLinesOptions

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:Series():Add("100,200,200,400","S1")
		oGraph:Series():Add("210,20,20,120","S2")
		oFormatGridLinesOptions := oGraph:CategoryAxes():Add("A,B,C,D","1st"):ChartGridLines()
			oFormatGridLinesOptions:Color := "red"
			oFormatGridLinesOptions:Format := "value"
		oGraph:CategoryAxes():Add("E,F","2nd")
		oGraph:Refresh()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
314
Occasionally, the margins of the axes may not align perfectly with the view

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph
	LOCAL oSerie

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:ValueSize := 18
		oGraph:Pad := 24
		oGraph:ValueAxis():Format := "value format `0`"
		oSerie := oGraph:Series():Add("Hulunbuir{China}(263068),Abu Dhabi{United Arab Emirates}(97200),Jiuquan{China}(167996),Altamira{Brazil}(159891),Brasília{Brazil}(5784),Mumbai{India}(603.4),Delhi{India}(1484),Chongqing{China}(82400),Hulunbuir{China}(263068),Sao Paulo{Brazil}(1522),Linfen{China}(20527),Santiago{Chile}(641),Mexico City{Mexico}(1485),Belo Horizonte{Brazil}(313),Hangzhou{China}(16817),Nairobi{Kenya}(696),Berlin{Germany}(891.68),Montreal{Canada}(431.5),Cordoba{Argentina}(576),Manaus{Brazil}(11401),Astana{Kazakhstan}(810),Goiâni" +;
			"a{Brazil}(741),Cali{Colombia}(564),Sao Paulo{Brazil}(1522),Goiania{Brazil}(781)")
			oSerie:Type := "Col"
			oSerie:Vertical := .T.
		oGraph:Sort := "0:D"
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
313
"candlestick" explained, an [open,high,low,close] chart

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph
	LOCAL oSerie

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:ValueSize := 32
		oGraph:ValuePoint := "0,,,,lightgray,1"
		oGraph:ValueAxis():MajorGridLines():Step := 4
		oSerie := oGraph:Series():Add("One(79.38 79.57 78.86 79.01)")
			oSerie:Type := "candlestick"
			oSerie:ShowValue := 7/*exValue+exLine+exPoint*/
			oSerie:ValueFormat := "(inner array (`<b>open`,`<fgcolor gray>high`,`<fgcolor gray>low`,`<b>close`)) + ` ` + value"
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
312
"candlestick", a candlestick chart (also called Japanese candlestick chart or K-line) is a style of financial chart used to describe price movements of a security, derivative, or currency. While similar in appearance to a bar chart, each candleStick represents four important pieces of information for that day: open and close in the thick body, and high and low in the "candle wick". Being densely packed with information, it tends to represent trading patterns over short periods of time, often a few days or a few trading sessions. (data requires array of array of four-numbers, such as [[open, high, low and close]], supports vertical field, scrollable)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph
	LOCAL oCategoryAxis

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:ValueSize := 18
		oCategoryAxis := oGraph:CategoryAxis()
			oCategoryAxis:Categories := "Date"
			oCategoryAxis:Format := "value mid 9 left 2"
		oGraph:Data := "C:\Program Files\Exontrol\ExGraph\Sample\Data/msft.csv"
		oGraph:Series():Add("Open,High,Low,Close","msft"):Type := "candlestick"
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
311
"ohlc" explained, an [open,high,low,close] chart

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph
	LOCAL oSerie

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:ValueSize := 32
		oGraph:ValuePoint := "0,,,,lightgray,1"
		oGraph:ValueAxis():MajorGridLines():Step := 4
		oSerie := oGraph:Series():Add("One(79.38 79.57 78.86 79.01)")
			oSerie:Type := "ohlc"
			oSerie:ShowValue := 7/*exValue+exLine+exPoint*/
			oSerie:ValueFormat := "(inner array (`<b>open`,`<fgcolor gray>high`,`<fgcolor gray>low`,`<b>close`)) + ` ` + value"
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
310
"ohlc", an open-high-low-close chart (also OHLC) is a type of chart typically used to illustrate movements in the price of a financial instrument over time. Each vertical line on the chart shows the price range (the highest and lowest prices) over one unit of time, e.g., one day or one hour. Tick marks project from each side of the line indicating the opening price (e.g., for a daily bar chart this would be the starting price for that day) on the left, and the closing price for that time period on the right. The bars may be shown in different hues depending on whether prices rose or fell in that period. (data requires array of array of four-numbers, such as [[open, high, low and close]], supports vertical field, scrollable)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph
	LOCAL oCategoryAxis

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:ValueSize := 18
		oCategoryAxis := oGraph:CategoryAxis()
			oCategoryAxis:Categories := "Date"
			oCategoryAxis:Format := "value mid 9 left 2"
		oGraph:Data := "C:\Program Files\Exontrol\ExGraph\Sample\Data/msft.csv"
		oGraph:Series():Add("Open,High,Low,Close","msft"):Type := "ohlc"
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
309
"bubble", a bubble chart or bubble plot is a type of chart that displays three dimensions of data (a bubble chart is an extension of the scatter plot used to look at relationships between three numeric variables.). Each entity with its triplet (v1, v2, v3) of associated data is plotted as a disk that expresses two of the vi values through the disk's xy location and the third through its size. Bubble charts can facilitate the understanding of social, economical, medical, and other scientific relationships. (data requires array of array of three-numbers, such as [[x, y, size]], supports vertical field, non-scrollable)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph
	LOCAL oSerie,oSerie1

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:Pad := 18
		oSerie := oGraph:Series():Add("1 25 1,2 49 2,3 70 3,4 86 4,5 96 5,6 100 4,7 96 3,8 86 2,9 70 1,10 49 1,11 25 1","Bell<b>1")
			oSerie:Type := "bubble"
			oSerie:SetProperty("Misc",1/*exScatterPlotSize*/,32)
		oSerie1 := oGraph:Series():Add("1 -25 1,2 -49 2,3 -70 3,4 -86 4,5 -96 5,6 -100 6,7 -96 5,8 -86 4,9 -70 3,10 -49 2,11 -25 1","Bell<b>2")
			oSerie1:Type := "bubble"
			oSerie1:SetProperty("Misc",1/*exScatterPlotSize*/,32)
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
308
"scatter", a scatter plot (also called a scatterplot, scatter graph, scatter chart, scattergram, or scatter diagram) is a type of plot or mathematical diagram using Cartesian coordinates to display values for typically two variables for a set of data. (data requires array of array of two-numbers, such as [[x, y]], supports vertical field, non-scrollable)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:Pad := 18
		oGraph:Series():Add("1 25,2 49,3 70,4 86,5 96,6 100,7 96,8 86,9 70,10 49,11 25","Bell<b>1"):Type := "scatter"
		oGraph:Series():Add("1 -25,2 -49,3 -70,4 -86,5 -96,6 -100,7 -96,8 -86,9 -70,10 -49,11 -25","Bell<b>2"):Type := "scatter"
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
307
"scatterline", curved

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph
	LOCAL oSerie

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:Pad := 18
		oSerie := oGraph:Series():Add("1 25,2 49,3 70,4 86,5 96,6 100,7 96,8 86,9 70,10 49,11 25","Bell")
			oSerie:Type := "scatterline"
			oSerie:Style := 1/*exSpline*/
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
306
"scatterline", a scatter line chart is similar with "scatter" type, excepts that lines are shown between scatter plots. (data requires array of array of two-numbers, such as [[x, y]], supports vertical field, non-scrollable)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:Pad := 18
		oGraph:Series():Add("1 25,2 49,3 70,4 86,5 96,6 100,7 96,8 86,9 70,10 49,11 25","Bell<b>1"):Type := "scatterline"
		oGraph:Series():Add("1 -25,2 -49,3 -70,4 -86,5 -96,6 -100,7 -96,8 -86,9 -70,10 -49,11 -25","Bell<b>2"):Type := "scatterline"
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
305
"scatterarea", curved

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph
	LOCAL oSerie

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:Pad := 18
		oSerie := oGraph:Series():Add("1 25,2 49,3 70,4 86,5 96,6 100,7 96,8 86,9 70,10 49,11 25","Bell")
			oSerie:Type := "scatterarea"
			oSerie:Style := 1/*exSpline*/
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
304
"scatterarea", a scatter area chart is similar with "scatterLine" type, excepts that scatter plots zone is filled. (data requires array of array of two-numbers, such as [[x, y]], supports vertical field, non-scrollable)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:Pad := 18
		oGraph:Series():Add("1 25,2 49,3 70,4 86,5 96,6 100,7 96,8 86,9 70,10 49,11 25","Bell<b>1"):Type := "scatterarea"
		oGraph:Series():Add("1 -25,2 -49,3 -70,4 -86,5 -96,6 -100,7 -96,8 -86,9 -70,10 -49,11 -25","Bell<b>2"):Type := "scatterarea"
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
303
"polarscatter", shows the serie as non-connected data points (data requires array of array of two-numbers, such as [[angle, value]], non-scrollable)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph
	LOCAL oCategoryAxis
	LOCAL oSerie

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:SetProperty("Misc",16/*exRadialRotateLabels*/,.F.)
		oCategoryAxis := oGraph:CategoryAxis()
			oCategoryAxis:Categories := "45,90,135,180,225,270,315,360"
			oCategoryAxis:MajorGridLines():Color := "lightgray"
		oSerie := oGraph:Series():Add("0 0,15 2,30 4,45 6,60 8,75 10,90 12,105 14,120 16,135 18,150 20,165 22,180 24,195 26,210 28,225 30,240 32,255 34,270 36,285 38,300 40,315 42,330 44,345 46,360 48,15 50,30 52,45 54,60 56,75 58,90 60","Spiral")
			oSerie:Type := "polarscatter"
			oSerie:Color := "red"
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
302
"polarline", represents data points connected with straight line segments (data requires array of array of two-numbers, such as [[angle, value]], non-scrollable)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph
	LOCAL oCategoryAxis
	LOCAL oSerie

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:SetProperty("Misc",16/*exRadialRotateLabels*/,.F.)
		oCategoryAxis := oGraph:CategoryAxis()
			oCategoryAxis:Categories := "45,90,135,180,225,270,315,360"
			oCategoryAxis:MajorGridLines():Color := "lightgray"
		oSerie := oGraph:Series():Add("0 0,15 2,30 4,45 6,60 8,75 10,90 12,105 14,120 16,135 18,150 20,165 22,180 24,195 26,210 28,225 30,240 32,255 34,270 36,285 38,300 40,315 42,330 44,345 46,360 48,15 50,30 52,45 54,60 56,75 58,90 60","Spiral")
			oSerie:Type := "polarLine"
			oSerie:Color := "red"
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
301
"polararea", represents data points connected with straight line segments that enclose a filled area together with the chart pole (data requires array of array of two-numbers, such as [[angle, value]], non-scrollable)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGraph
	LOCAL oCategoryAxis
	LOCAL oSerie

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGraph := XbpActiveXControl():new( oForm:drawingArea )
	oGraph:CLSID  := "Exontrol.Graph.1" /*{FE177A66-2B4E-48E1-ADAD-E5C17BE47660}*/
	oGraph:create(,, {10,60},{610,370} )

		oGraph:BeginUpdate()
		oGraph:SetProperty("Misc",16/*exRadialRotateLabels*/,.F.)
		oCategoryAxis := oGraph:CategoryAxis()
			oCategoryAxis:Categories := "45,90,135,180,225,270,315,360"
			oCategoryAxis:MajorGridLines():Color := "lightgray"
		oSerie := oGraph:Series():Add("0 0,15 2,30 4,45 6,60 8,75 10,90 12,105 14,120 16,135 18,150 20,165 22,180 24,195 26,210 28,225 30,240 32,255 34,270 36,285 38,300 40,315 42,330 44,345 46,360 48,15 50,30 52,45 54,60 56,75 58,90 60","Spiral")
			oSerie:Type := "polarArea"
			oSerie:Color := "lime"
		oGraph:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN