Adattare la SpinBar a valori in virgola mobile con più di tre decimali

Da Gambas-it.org - Wikipedia.
Versione del 26 dic 2023 alle 11:16 di Vuott (Discussione | contributi) (Creata pagina con "La '''SpinBar''' può rappresentare soltanto valori in virgola mobile con tre decimali a destra della virgola. <BR>Per ottenere un valore con più di tre decimali a destra del...")

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

La SpinBar può rappresentare soltanto valori in virgola mobile con tre decimali a destra della virgola.
Per ottenere un valore con più di tre decimali a destra della virgola, dovremo manipolare la SpinBar, tenendo conto che essa è basata su un Oggetto DrawingArea. Dovremo aggiungere una ulteriore DrawingArea, sincronizzando l'avanzamento o la retrocessione della colorazione turchese della SpinBar alla colorazione che daremo alla nuova DrawingArea.

Mostriamo un esempio, nel quale otterremo una SpinBar capace di rappresentare valori in virgola mobile con quattro decimali a destra della virgola (ovviamente è possibile assegnare un numero di decimali superiore a quattro):

Private da As DrawingArea
Private DECIMALI As Byte = 4   ' Qui si imposta il numero di decimali a destra della virgola
Private tw As Integer
Private th As Integer


Public Sub Form_Open()

 With SpinBar1
   .W = 100
   .H = 50
   .X = 0
   .MinValue = 0.0
   .MaxValue = 0.1 * 10 ^ DECIMALI
   .Font.Size = 11
 End With

 With da = New DrawingArea(SpinBar1.Children[0]) As "DASpin"
   .W = SpinBar1.W - 19
   .H = SpinBar1.H - 2
   .X = 1
   .Y = 1
   .Background = Color.White
   .Font.Size = 11
 End With

End


Public Sub DASpin_Draw()

 With Paint
   .Brush = .Color(&2f8cc5)
   .Rectangle(0, 0, (SpinBar1.W * SpinBar1.Value) / SpinBar1.MaxValue, da.H)
   .Fill
   tw = .Font.TextWidth("0," & String(DECIMALI, "0"))
   th = .Font.TextHeight("0,")
   .Brush = .Color(Color.Black)
   .DrawText(Format(SpinBar1.Value / (0.1 * 10 ^ DECIMALI), "#." & String(DECIMALI, "0")), da.W - tw, (da.H / 2) - (th / 2), tw, th)
   .End
 End With
 
End


Public Sub SpinBar1_Change()

 Me.Title = Format(SpinBar1.Value / (10 ^ (DECIMALI - 1)), "#." & String(DECIMALI, "0"))

End