PDA

View Full Version : [VB6] Ancora sul controllo MSCHART: come si fa a....


GHz
13-06-2003, 00:08
Ciao,
ho utilizzato in VB6 il controllo MSCHART per tracciare grafici relativi a die dati contenuti in un Database access e tutto funziona benissimo, ma vorrei aggiungere una funzione e non so come fare...mi manca il tempo...se qualcuno mi può dare una manina gli sarei molto grato! :)

Allora, il DB in questione è di tipo access e serve a memorizzare i dati prelevati da una centralina meteorologica ed i campi della tabella sono: temperatura, pressione, umidità, data, ora. Una volta tracciato il grafico relativo ad esempio della temperatura di un certo giorno, vorrei poter visualizzare la data e/o l'ora di un punto spicifico del grafico, ad esempio dove l'utente fa click con il mouse. Il problema è appunto questo, perchè non so come fare... :cry:
Sono riuscito ad arrivare a questo: nel controllo MSCHART c'è la l'evento "PointSelected", che scatta quando l'utente fa click con il mouse su un punto di una serie. Alla sub vengono passati i seguenti parametri:

MSChart1_PointSelected(Series As Integer, DataPoint As Integer, MouseFlags As Integer, Cancel As Integer)


relativi al db: series (l'ho letto nell'MSDN! :D) è il numero relativo al campo (ad es nel mio caso il campo 1 è la temperatura, il 3 è l'umidità, ecc); DataPoint (preso dall'MSDN, non saprei tradurlo) "Integer. Identifies the data point's position in the series. Points are numbered in the order that their rows appear in the data grid, beginning with 1." (non l'ho mica capito tanto sto parametro! :D); gli altri due non servono ad una ceppa (se non mi sbaglio :D).
Il problema è quindi il seguente: sapendo tali parametri, come posso ricavare la data e l'ora di quel record?
Magari per farla apparire nel ToolTipText...boh, vedrò...;)

HELP!HELP!HELP!

Anche consigli, idee, suggerimenti sono accettati! :)

Grazie a tutti per la collaborazione! :)

Ciao,
GHz! :cool: :mc:

GHz
13-06-2003, 17:24
:mc: UP![/siz] :mc:

:D

GHz
14-06-2003, 16:04
http://forum.hwupgrade.it/faccine/21.gif [/siz]

:cry: :cry: :cry:


http://forum.hwupgrade.it/faccine/10.gif

GHz
16-06-2003, 00:33
RAGAAAAAAAAAAAAAA L'ESAME SI AVVICINAAAA!!!!! HELPEEEMEEEE!!!!! :eek:


possibile che nessuno mi sappia dare una mano? :cry:

credevo che fosse un probelma di facile risoluzione per chi ha domestichedda con i db e visual basic..... :(


se ci siete postate.... :rolleyes:

Ciao,
GHz! :mc:

tas
16-06-2003, 12:19
L'evento PointSelected viene inviato quanto l'utente fa click su un punto di una serie ed espone i seguenti parametri:
Series: è l'indice della serie selezionata, con base 1
DataPoint: è l'indice del punto selezionato, con base 1
MouseFlags: indica se è stato premuto il pulsante SHIFT o CTRL
Cancel: non usato

Con Serie e DataPoint puoi far tutto, ma se ho capito bene il problema è estrarre ulteriori dati dal database in base al punto selezionato.

Le strade percorribili sono diverse, anche se non le ho testate in modo approfondito:
1. memorizzi, in una serie nascosta, i valori che vuoi mostrare (data e ora). Quando l'utente fa click su un punto di una serie, estrai il valore dalla serie nascosta:
Private Sub MSChart1_PointSelected(Series As Integer, DataPoint As Integer, MouseFlags As Integer, Cancel As Integer)
MSChart1.Column = 1 'indice della serie nascosta
MSChart1.Row = DataPoint

MsgBox "Data rilevazione: " & MSChart1.Data
End Sub

2. memorizzi, in una serie nascosta, la chiave primaria dei record collegati ai punti. In questo modo puoi estrarre da un recordset tutto quello che vuoi:
Private Sub MSChart1_PointSelected(Series As Integer, DataPoint As Integer, MouseFlags As Integer, Cancel As Integer)
MSChart1.Column = 1 'indice della serie nascosta
MSChart1.Row = DataPoint

rs.FindFirst "ID = " & MSChart1.Data 'rs dichiarato altrove (DAO)
MsgBox "Data rilevazione: " & rs("Data")
End Sub

Dalle mie prove l'evento PointSelected non è comodissimo, in quanto a volte sono necessari diversi click per selezionare il singolo punto della serie. Ti consiglio quindi di impostare la proprietà AllowSeriesSelection = False.

Per visualizzare dei tooltip potresti usare l'evento MouseMove e i metodi TwipsToChartPart e SelectPart:
Private MSChart1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim dx As Long
Dim dy As Long
Dim part As Integer
Dim index1 As Integer
Dim index2 As Integer
Dim index3 As Integer
Dim index4 As Integer

dx = CLng(X)
dy = CLng(Y)

MSChart1.TwipsToChartPart dx, dy, part, index1, index2, index3, index4

If part = VtChPartTypePoint Then
MSChart1.SelectPart part, index1, index2, index3, index4
MSChart1.Column = 1 'indice della serie nascosta
MSChart1.Row = index2
Label1.Caption = "Data rilevazione: " & MSChart1.Data
End If
End Sub

GHz
17-06-2003, 00:37
Tas ti ringrazio un casino per l'aiuto! ;)

Adesso devo andare a letto...domani se posso faccio qualche prova.....ho letto il tuo post, e la terza soluzione mi sembra la migliore! :) Cmq ho qualche dubbio....ad esempio.....se metto la serie della data e dell'ora (perchè devo visualizzare entrambe con l'evento! ) no è che il controllo fa casino? cioè, accetta i valori di data ed ora o senza dare errore? ancora...se una serie viene nascosta, il grafico, o meglio le serie del grafico, non subiscono alcun ridemensionamento? (ad esempio quando una serie ha valori maggiori dell'altra, la prima viene visualizzata schiacciata in basso al grafico. se la serie maggiore venisse nascosta, la serie piccola viene visualizzata lo stesso schiacciata, oppure no? :confused: ). Scusa la confusione...ma sono un pò nel pallone....dopodomani iniziano gli esami...azz....
Ah, un'altra cosa! :D
Dov'è che a queste variabili gli viene inserito un valore?

Dim part As Integer
Dim index1 As Integer
Dim index2 As Integer
Dim index3 As Integer
Dim index4 As Integer


Grazie ancora! :)

Ciao,
GHz! :mc: