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

Da Gambas-it.org - Wikipedia.

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