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