@ tornu
ho sfruttato le librerie che Google mette a disposizione, so che i puristi storceranno il naso, sfrutto lavori esterni, ma mi sembra un compromesso accettabile.
Punto di partenza
Si vada all'url
http://code.google.com/intl/it-IT/apis/chart/image/index.html. Un esempio di grafico:
http://chart.apis.google.com/chart?chxr=0,0,46&chxt=y&chs=300x225&cht=lc&chco=3D7930&chd=s:Xhiugtqi&chg=14.3,-1,1,1&chls=2,4,0&chm=B,C5D4B5BB,0,0,0in sostanza con g3 si crea una pagina html del tipo:
<HTML>
<BODY>
<img src='http://chart.apis.google.com/chart?chxr=0,0,46&chxt=y&chs=300x225&cht=lc&chco=3D7930&chd=s:Xhiugtqi&chg=14.3,-1,1,1&chls=2,4,0&chm=B,C5D4B5BB,0,0,0'/>
</BODY>
</HTML>
In alternativa si crea una pagina html con codice javascript (sempre con g3):
<html>
<head>
<title> Example Chart </title>
<script language="javascript" src="http://www.google.com/jsapi"></script>
</head>
<body>
<div id="chart"></div>
<script type="text/javascript">
var queryString = '';
var dataUrl = '';
function onLoadCallback() {
if (dataUrl.length > 0) {
var query = new google.visualization.Query(dataUrl);
query.setQuery(queryString);
query.send(handleQueryResponse);
} else {
var dataTable = new google.visualization.DataTable();
dataTable.addRows(8);
dataTable.addColumn('number');
dataTable.setValue(0, 0, 37.704918032786885);
dataTable.setValue(1, 0, 54.09836065573771);
dataTable.setValue(2, 0, 55.73770491803279);
dataTable.setValue(3, 0, 75.40983606557377);
dataTable.setValue(4, 0, 52.459016393442624);
dataTable.setValue(5, 0, 73.77049180327869);
dataTable.setValue(6, 0, 68.85245901639344);
dataTable.setValue(7, 0, 55.73770491803279);
draw(dataTable);
}
}
function draw(dataTable) {
var vis = new google.visualization.ImageChart(document.getElementById('chart'));
var options = {
chxl: '',
chxp: '',
chxr: '0,0,46',
chxs: '',
chxtc: '',
chxt: 'y',
chs: '300x225',
cht: 'lc',
chco: '3D7930',
chd: 's:Xhiugtqi',
chdl: '',
chg: '14.3,-1,1,1',
chls: '2,4,0',
chm: 'B,C5D4B5BB,0,0,0'
};
vis.draw(dataTable, options);
}
function handleQueryResponse(response) {
if (response.isError()) {
alert('Error in query: ' + response.getMessage() + ' ' + response.getDetailedMessage());
return;
}
draw(response.getDataTable());
}
google.load("visualization", "1", {packages:["imagechart"]});
google.setOnLoadCallback(onLoadCallback);
</script>
</body>
</html>
Sto migliorando una classe che contempla i tag principali x creare la stringa.
In sostanza il grafico pie lo creo cosi':
Dim grafico As New GoogleChart
grafico.arraydati = fDati
grafico.nomefile = "nutrienti.html"
grafico.titolo_linechart = "Nutrienti pasto del " & DateBox1.value
grafico.altezza_linechart = "300"
grafico.larghezza_linechart = "480"
grafico.legendaproteine_piechart = Format$((Round(tp, -2) / totale), "##%")
grafico.legendagrassi_piechart = Format$((Round(tg, -2) / totale), "##%")
grafico.legendacarboidrati_piechart = Format$((Round(tc, -2) / totale), "##%")
grafico.BuildPieChart
webview1.Url = Application.path & "/nutrienti.html"
La classe GoogleChart la allego (è una beta ma funziona, almeno x myZone). Secondo me è un lavoro da sviluppare e migliorare, la qualità dei grafici java e' notevole, dai una guardata agli esempi, e puoi si possono costruire template con i tool di google da utilizzare con g3.