23.3.5.2 Komponente Messinstrument

Von Nelson Hoover kommt die Komponente zur Darstellung eines analogen Messinstrumentes:

B1

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()

Download