Newsgroup: it.comp.lang.visual-basic
Titolo: Semicirconferenza e spicchi colorati

Salve,
devo modificare un grafico composto da una semicirconferenza, suddivisa in
spicchi colorati.
Ogni spicchio ha una suo colore,  nome e un valore intero.
In questo momento, da sx verso destra ho
A (valore 1 )
B (valore 2 )
....
Q (valore14)
Vorrei che si invertisse l'ordine e cioè che, sempre da sx verso destra,
comparisse
Q (valore14)
.....
B (valore 2 )
A (valore 1 )
Il colore non importa, l'importante è che ogni spicchio resti di un colore
differente dagli altri (come già è adesso).
Il codice è il seguente:
--------------------------------
Private Sub disegna_mappa()
Mappa.Cls
For j = 1 To Val(Etic(0).Tag)
Unload Etic(j)
Next j
Etic(0).Tag = 0
Etic(0).Visible = False
Mappa.Refresh
ScaleMode = 3
DrawMode = 13
af = 0.001
Col = 1
Sim.Par.Col = 0
yp = 0
azz_yp = True
For j = 0 To Sim.NPar.ListCount - 1
If j > Val(Etic(0).Tag) Then
Load Etic(j)
Etic(0).Tag = j
End If
If Sim.NPar.List(j) > 0 Then
Sim.Par.Row = j + 1
FillColor = QBColor(Col Mod 14)
FillStyle = 0
ap = af
af = ap + 3.1416 * Sim.NPar.List(j) / 100
If af > ap Then
Circle (320, 300), 200, QBColor(Col Mod 14), -ap, -af
angolo = (ap + af) / 2
rmin = 220
rmax = 280
r = (rmin + rmax) / 2
X1 = 320 + r * Cos(angolo)
Y1 = 300 - r * Sin(angolo)
If X1 < 320 Then
If azz_yp Then
yp = 0
azz_yp = False
End If
r = rmax
Do
r = r - 5
X1 = 320 + r * Cos(angolo)
Y1 = 300 - r * Sin(angolo)
Loop While (Y1 < yp + 12) And (r > rmin)
yp = Y1
Line (320, 300)-(X1, Y1), QBColor(Col Mod 14)
Line (10, Y1)-(X1, Y1), QBColor(Col Mod 14)
etichetta j, Sim.Par.Text & " " & Sim.NPar.List(j), 10, Y1, (Col Mod 14)
Else
r = rmin
Do
r = r + 5
X1 = 320 + r * Cos(angolo)
Y1 = 300 - r * Sin(angolo)
Loop While (Y1 > yp - 12) And (r < rmax)
yp = Y1
Line (320, 300)-(X1, Y1), QBColor(Col Mod 14)
Line (580, Y1)-(X1, Y1), QBColor(Col Mod 14)
etichetta j, Sim.Par.Text & " " & Sim.NPar.List(j), 580, Y1, (Col Mod 14)
End If
Col = Col + 1
End If
End If
Next j
End Sub
----------------------------
Premessa: prima che questa Private Sub venga eseguita, ho calcolato  i
singoli valori per ogni spicchio e inserito l'elenco dei nomi che dovrà
avere ogni spicchio.
Grazie a chi vorrà darmi una mano.
Gregor.

 Salve,
[cut]
Scusatemi, sono stato poco chiaro io, oppure è effettivamente un problema
complicato?
Grazie.
Gregor.


Se ho ben capito i tuoi valori sono nella lista Sim.NPar, potresti dunque
fare cosě :
 For j =Sim.NPar.ListCount - 1 to 0 Step -1
oppure metterli nell'ordine che vuoi prima di cominciare la Sub.
Ciao
Sal

  For j =Sim.NPar.ListCount - 1 to 0 Step -1
Adesso me ne disegna solo metà, però è corretto!
Ho modificato così:
--------------------------------
Private Sub disegna_mappa()
Mappa.Cls
For j = 1 To Val(Etic(0).Tag)
Unload Etic(j)
Next j
Etic(0).Tag = 0
Etic(0).Visible = False
Mappa.Refresh
ScaleMode = 3
DrawMode = 13
af = 0.001
Col = 1
Sim.Par.Col = 0
yp = 0
azz_yp = True
For j =Sim.NPar.ListCount - 1 to 0 Step -1
<--------
If j > Val(Etic(0).Tag) Then
Load Etic(j)
Etic(0).Tag = Sim.NPar.ListCount - 1- j
<---------
End If

If X1 < 320 Then






End Sub
----------------------------
Mi rileva un prob qui:
----------------------------
Private Sub etichetta(indice, eti, xc, yc, colo)
ScaleMode = 3
Etic(indice).Left = xc
Etic(indice).Top = yc - Etic(indice).Height \ 2
If DrawMode = 13 Then Etic(indice).ForeColor = QBColor(colo) Else
Etic(indice).ForeColor = 0
Etic(indice).Caption = eti
Etic(indice).Visible = True
End Sub
----------------------------
dicendomi "L'elemento 5 della matrice di controlli non esiste"
5 è il valore di "indice" a questo punto, cioè dopo che metà torta l'ha
ridisegnata correttamente!.
In pratica Etic(0) è una matrice di controlli (è una  label).
Gregor.

 [cut]
Ci sono quasi.....adesso mi disegna tutta la torta tranne l'ultimo spicchio!
In pratica ho modificato il for in
For j =Sim.NPar.ListCount - 1 to 0 Step -1
poi ho eliminato (commentandolo) un ciclo If
' (commenatao) If j > Val(Etic(0).Tag) Then
Load Etic(j)
Etic(0).Tag = j '(Sim.NPar.ListCount - 1) - j
' (commentato)  End If
Adesso non mi disegna solo l'ultimo spicchio! Mi dice che Etic(0) (0 è
l'ultima posizione) è già stato caricato, però non lo vedo.....
Ho provato con Unload Etic(0) prima di disegnare la torta ma non me lo
lascia fare!
Spero in un aiuto.
Grazie.
Gregor

 wrote in message
news:TDAB7.9692$C57.2...@news1.tin.it...
[cut]
Tutto a posto adesso! Ho solo eliminato un IF che bloccava tutto!
Grazie.
Gregor.