Von Nelson Hoover kommt die Komponente zur Darstellung eines analogen Messinstrumentes:
Abbildung 23.3.5.2.1: Zwei Messinstrumente
Von ihm liegt auch die Freigabe vor, den Quelltext seiner Komponente im Gambas-Buch vorzustellen. Die Komponente verwendet für die Zeichnungen des Messinstrumentes und der farbigen Außenbereiche ausschließlich Methoden der Klasse Paint. Im Download-Bereich finden Sie den Original-Quelltext der Komponente sowie ein weiteres Projekt, dass diese Komponente verwendet → Abbildung 23.3.5.2.1 Zwei Messinstrumente.
Hier sehen Sie einen Quelltext-Ausschnitt der Komponente:
Public Sub myGauge_Draw() ' gauge refresh handler ' first, check if we need to reinitialize the gauge If $fullRedraw Or (($width <> gaugeDisp.ClientWidth) And ($height <> gaugeDisp.ClientHeight)) Then InitializeGauge Endif ' Note: I'm not sure how much processing power it saves to skip drawing the background every time ' but with trying to use this on the Raspberry Pi, every little bit helps ' otherwise, just draw the needle over the previously drawn PictureBox If $value > $sMax Then $value = $sMax If $value < $sMin Then $value = $sMin $needleAngle = ScaleConv($sMin, $sMax, $startAngleDeg, ($startAngleDeg + $needleRangeDeg), $value) If $needleAngle > 360 Then $needleAngle = $needleAngle - 360 Endif If $needleAngle < 0 Then $needleAngle = 360 + $needleAngle Endif ' now convert degrees to radians and get the X Y coords $needleAngle = Rad($needleAngle) $needlePosX = (Cos($needleAngle) * (($width / 2) - 24)) + $xMid $needlePosY = (Sin($needleAngle) * (($height / 2) - 24)) + $yMid Paint.Begin(gaugeDisp) Paint.Brush = Paint.Color($needlecolor) Paint.LineWidth = 3 Paint.MoveTo($xMid, $yMid) Paint.LineTo($needlePosX, $needlePosY) Paint.Stroke Paint.Brush = Paint.Color(Color.Black) Paint.Ellipse($xMid - 6, $yMid - 6, 12, 12,,, True) Paint.Fill Paint.Brush = Paint.Color(Color.White) Paint.Ellipse($xMid - 2, $yMid - 2, 4, 4,,, True) Paint.Fill Paint.End End ' myGauge_Draw()