
But just for information, on my old PC your code is less fluid.
Perhaps much more calculations to perform ...
Thanks for sharing

Hello everyone,Kwaï chang caïne wrote:Cool too![]()
But just for information, on my old PC your code is less fluid.
Perhaps much more calculations to perform ...
Thanks for sharing
Code: Select all
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Project name : GaugeGadget
; File Name : GaugeGadget.pb
; File version: 1.1.0
; Programmation : OK
; Programmed by : Trond
; Modified by : Guimauve
; Date : 20-02-2011
; Mise à jour : 21-02-2011
; PureBasic code : 4.51
; Plateform : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Notes :
;
; Some field in the Gauge Structure has been
; renamed or suppressed.
;
; A layer has been added for the Needle. The size
; for this layer is 4 times larger than other
; layer. This is needed to draw the needle more
; smootly.
;
; Finally, the GaugeGadget shape can be square
; only.
;
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration de la Structure <<<<<
Structure Gauge
PosX.w
PosY.w
Size.w
Center.w
ScaleRadius.w
Min.l
Max.l
BigStep.l
SmallStep.l
SectorDegrees.w
Value.l
Text.s
SubText.s
GadgetID.l
GadgetHandle.l
BackGroundColor.l
ScaleColor.l
ScaleBackGroundColor.l
TextColor.l
SubTextColor.l
NeedleColor.l
ScaleFontHandle.i
TextFontHandle.i
SubTextFontHandle.i
LayerSize.w
NeedleLength.l
NeedlePivotRadius.l
NeedleTipWidth.l
NeedleCenWidth.l
BackGroundLayer.l
ScaleLayer.l
DescriptionLayer.l
NeedleLayer.l
ComposedLayer.l
EndStructure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs <<<<<
Macro GetGaugePosX(GaugeA)
GaugeA\PosX
EndMacro
Macro GetGaugePosY(GaugeA)
GaugeA\PosY
EndMacro
Macro GetGaugeSize(GaugeA)
GaugeA\Size
EndMacro
Macro GetGaugeCenter(GaugeA)
GaugeA\Center
EndMacro
Macro GetGaugeScaleRadius(GaugeA)
GaugeA\ScaleRadius
EndMacro
Macro GetGaugeMin(GaugeA)
GaugeA\Min
EndMacro
Macro GetGaugeMax(GaugeA)
GaugeA\Max
EndMacro
Macro GetGaugeBigStep(GaugeA)
GaugeA\BigStep
EndMacro
Macro GetGaugeSmallStep(GaugeA)
GaugeA\SmallStep
EndMacro
Macro GetGaugeSectorDegrees(GaugeA)
GaugeA\SectorDegrees
EndMacro
Macro GetGaugeValue(GaugeA)
GaugeA\Value
EndMacro
Macro GetGaugeText(GaugeA)
GaugeA\Text
EndMacro
Macro GetGaugeSubText(GaugeA)
GaugeA\SubText
EndMacro
Macro GetGaugeGadgetID(GaugeA)
GaugeA\GadgetID
EndMacro
Macro GetGaugeGadgetHandle(GaugeA)
GaugeA\GadgetHandle
EndMacro
Macro GetGaugeBackGroundColor(GaugeA)
GaugeA\BackGroundColor
EndMacro
Macro GetGaugeScaleColor(GaugeA)
GaugeA\ScaleColor
EndMacro
Macro GetGaugeScaleBackGroundColor(GaugeA)
GaugeA\ScaleBackGroundColor
EndMacro
Macro GetGaugeTextColor(GaugeA)
GaugeA\TextColor
EndMacro
Macro GetGaugeSubTextColor(GaugeA)
GaugeA\SubTextColor
EndMacro
Macro GetGaugeNeedleColor(GaugeA)
GaugeA\NeedleColor
EndMacro
Macro GetGaugeScaleFontHandle(GaugeA)
GaugeA\ScaleFontHandle
EndMacro
Macro GetGaugeTextFontHandle(GaugeA)
GaugeA\TextFontHandle
EndMacro
Macro GetGaugeSubTextFontHandle(GaugeA)
GaugeA\SubTextFontHandle
EndMacro
Macro GetGaugeLayerSize(GaugeA)
GaugeA\LayerSize
EndMacro
Macro GetGaugeNeedleLength(GaugeA)
GaugeA\NeedleLength
EndMacro
Macro GetGaugeNeedlePivotRadius(GaugeA)
GaugeA\NeedlePivotRadius
EndMacro
Macro GetGaugeNeedleTipWidth(GaugeA)
GaugeA\NeedleTipWidth
EndMacro
Macro GetGaugeNeedleCenWidth(GaugeA)
GaugeA\NeedleCenWidth
EndMacro
Macro GetGaugeBackGroundLayer(GaugeA)
GaugeA\BackGroundLayer
EndMacro
Macro GetGaugeScaleLayer(GaugeA)
GaugeA\ScaleLayer
EndMacro
Macro GetGaugeDescriptionLayer(GaugeA)
GaugeA\DescriptionLayer
EndMacro
Macro GetGaugeNeedleLayer(GaugeA)
GaugeA\NeedleLayer
EndMacro
Macro GetGaugeComposedLayer(GaugeA)
GaugeA\ComposedLayer
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs <<<<<
Macro SetGaugePosX(GaugeA, P_PosX)
GetGaugePosX(GaugeA) = P_PosX
EndMacro
Macro SetGaugePosY(GaugeA, P_PosY)
GetGaugePosY(GaugeA) = P_PosY
EndMacro
Macro SetGaugeSize(GaugeA, P_Size)
GetGaugeSize(GaugeA) = P_Size
EndMacro
Macro SetGaugeCenter(GaugeA, P_Center)
GetGaugeCenter(GaugeA) = P_Center
EndMacro
Macro SetGaugeScaleRadius(GaugeA, P_ScaleRadius)
GetGaugeScaleRadius(GaugeA) = P_ScaleRadius
EndMacro
Macro SetGaugeMin(GaugeA, P_Min)
GetGaugeMin(GaugeA) = P_Min
EndMacro
Macro SetGaugeMax(GaugeA, P_Max)
GetGaugeMax(GaugeA) = P_Max
EndMacro
Macro SetGaugeBigStep(GaugeA, P_BigStep)
GetGaugeBigStep(GaugeA) = P_BigStep
EndMacro
Macro SetGaugeSmallStep(GaugeA, P_SmallStep)
GetGaugeSmallStep(GaugeA) = P_SmallStep
EndMacro
Macro SetGaugeSectorDegrees(GaugeA, P_SectorDegrees)
GetGaugeSectorDegrees(GaugeA) = P_SectorDegrees
EndMacro
Macro SetGaugeValue(GaugeA, P_Value)
GetGaugeValue(GaugeA) = P_Value
EndMacro
Macro SetGaugeText(GaugeA, P_Text)
GetGaugeText(GaugeA) = P_Text
EndMacro
Macro SetGaugeSubText(GaugeA, P_SubText)
GetGaugeSubText(GaugeA) = P_SubText
EndMacro
Macro SetGaugeGadgetID(GaugeA, P_GadgetID)
GetGaugeGadgetID(GaugeA) = P_GadgetID
EndMacro
Macro SetGaugeGadgetHandle(GaugeA, P_GadgetHandle)
GetGaugeGadgetHandle(GaugeA) = P_GadgetHandle
EndMacro
Macro SetGaugeBackGroundColor(GaugeA, P_BackGroundColor)
GetGaugeBackGroundColor(GaugeA) = P_BackGroundColor
EndMacro
Macro SetGaugeScaleColor(GaugeA, P_ScaleColor)
GetGaugeScaleColor(GaugeA) = P_ScaleColor
EndMacro
Macro SetGaugeScaleBackGroundColor(GaugeA, P_ScaleBackGroundColor)
GetGaugeScaleBackGroundColor(GaugeA) = P_ScaleBackGroundColor
EndMacro
Macro SetGaugeTextColor(GaugeA, P_TextColor)
GetGaugeTextColor(GaugeA) = P_TextColor
EndMacro
Macro SetGaugeSubTextColor(GaugeA, P_SubTextColor)
GetGaugeSubTextColor(GaugeA) = P_SubTextColor
EndMacro
Macro SetGaugeNeedleColor(GaugeA, P_NeedleColor)
GetGaugeNeedleColor(GaugeA) = P_NeedleColor
EndMacro
Macro SetGaugeScaleFontHandle(GaugeA, P_ScaleFontHandle)
GetGaugeScaleFontHandle(GaugeA) = P_ScaleFontHandle
EndMacro
Macro SetGaugeTextFontHandle(GaugeA, P_TextFontHandle)
GetGaugeTextFontHandle(GaugeA) = P_TextFontHandle
EndMacro
Macro SetGaugeSubTextFontHandle(GaugeA, P_SubTextFontHandle)
GetGaugeSubTextFontHandle(GaugeA) = P_SubTextFontHandle
EndMacro
Macro SetGaugeLayerSize(GaugeA, P_LayerSize)
GetGaugeLayerSize(GaugeA) = P_LayerSize
EndMacro
Macro SetGaugeNeedleLength(GaugeA, P_NeedleLength)
GetGaugeNeedleLength(GaugeA) = P_NeedleLength
EndMacro
Macro SetGaugeNeedlePivotRadius(GaugeA, P_NeedlePivotRadius)
GetGaugeNeedlePivotRadius(GaugeA) = P_NeedlePivotRadius
EndMacro
Macro SetGaugeNeedleTipWidth(GaugeA, P_NeedleTipWidth)
GetGaugeNeedleTipWidth(GaugeA) = P_NeedleTipWidth
EndMacro
Macro SetGaugeNeedleCenWidth(GaugeA, P_NeedleCenWidth)
GetGaugeNeedleCenWidth(GaugeA) = P_NeedleCenWidth
EndMacro
Macro SetGaugeBackGroundLayer(GaugeA, P_BackGroundLayer)
GetGaugeBackGroundLayer(GaugeA) = P_BackGroundLayer
EndMacro
Macro SetGaugeScaleLayer(GaugeA, P_ScaleLayer)
GetGaugeScaleLayer(GaugeA) = P_ScaleLayer
EndMacro
Macro SetGaugeDescriptionLayer(GaugeA, P_DescriptionLayer)
GetGaugeDescriptionLayer(GaugeA) = P_DescriptionLayer
EndMacro
Macro SetGaugeNeedleLayer(GaugeA, P_NeedleLayer)
GetGaugeNeedleLayer(GaugeA) = P_NeedleLayer
EndMacro
Macro SetGaugeComposedLayer(GaugeA, P_ComposedLayer)
GetGaugeComposedLayer(GaugeA) = P_ComposedLayer
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Code généré en : 00.021 secondes (22571.43 lignes/seconde) <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Reset <<<<<
Macro ResetGauge(GaugeA)
SetGaugePosX(GaugeA, 0)
SetGaugePosY(GaugeA, 0)
SetGaugeSize(GaugeA, 0)
SetGaugeScaleRadius(GaugeA, 0)
SetGaugeMin(GaugeA, 0)
SetGaugeMax(GaugeA, 0)
SetGaugeBigStep(GaugeA, 0)
SetGaugeSmallStep(GaugeA, 0)
SetGaugeValue(GaugeA, 0)
SetGaugeText(GaugeA, "")
SetGaugeSubText(GaugeA, "")
SetGaugeGadgetID(GaugeA, 0)
SetGaugeGadgetHandle(GaugeA, 0)
SetGaugeBackGroundColor(GaugeA, 0)
SetGaugeScaleColor(GaugeA, 0)
SetGaugeScaleBackGroundColor(GaugeA, 0)
SetGaugeTextColor(GaugeA, 0)
SetGaugeSubTextColor(GaugeA, 0)
SetGaugeNeedleColor(GaugeA, 0)
SetGaugeLayerSize(GaugeA, 0)
SetGaugeNeedleLength(GaugeA, 0)
SetGaugeNeedlePivotRadius(GaugeA, 0)
SetGaugeNeedleTipWidth(GaugeA, 0)
SetGaugeNeedleCenWidth(GaugeA, 0)
If GetGaugeScaleFontHandle(GaugeA)
FreeFont(GetGaugeScaleFontHandle(GaugeA))
SetGaugeScaleFontHandle(GaugeA, 0)
EndIf
If GetGaugeTextFontHandle(GaugeA)
FreeFont(GetGaugeTextFontHandle(GaugeA))
SetGaugeTextFontHandle(GaugeA, 0)
EndIf
If GetGaugeSubTextFontHandle(GaugeA)
FreeFont(GetGaugeSubTextFontHandle(GaugeA))
SetGaugeSubTextFontHandle(GaugeA, 0)
EndIf
If GetGaugeBackGroundLayer(GaugeA)
FreeImage(GetGaugeBackGroundLayer(GaugeA))
SetGaugeBackGroundLayer(GaugeA, 0)
EndIf
If GetGaugeScaleLayer(GaugeA)
FreeImage(GetGaugeScaleLayer(GaugeA))
SetGaugeScaleLayer(GaugeA, 0)
EndIf
If GetGaugeDescriptionLayer(GaugeA)
FreeImage(GetGaugeDescriptionLayer(GaugeA))
SetGaugeDescriptionLayer(GaugeA, 0)
EndIf
If GetGaugeNeedleLayer(GaugeA)
FreeImage(GetGaugeNeedleLayer(GaugeA))
SetGaugeNeedleLayer(GaugeA, 0)
EndIf
If GetGaugeComposedLayer(GaugeA)
FreeImage(GetGaugeComposedLayer(GaugeA))
SetGaugeComposedLayer(GaugeA, 0)
EndIf
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Initialize <<<<<
Procedure InitializeGauge(*GaugeA.Gauge)
SetGaugePosX(*GaugeA, 0)
SetGaugePosY(*GaugeA, 0)
SetGaugeSize(*GaugeA, 0)
SetGaugeScaleRadius(*GaugeA, 0)
SetGaugeMin(*GaugeA, 0)
SetGaugeMax(*GaugeA, 0)
SetGaugeBigStep(*GaugeA, 0)
SetGaugeSmallStep(*GaugeA, 0)
SetGaugeValue(*GaugeA, 0)
SetGaugeText(*GaugeA, "")
SetGaugeSubText(*GaugeA, "")
SetGaugeGadgetID(*GaugeA, 0)
SetGaugeGadgetHandle(*GaugeA, 0)
SetGaugeBackGroundColor(*GaugeA, 0)
SetGaugeScaleColor(*GaugeA, 0)
SetGaugeScaleBackGroundColor(*GaugeA, 0)
SetGaugeTextColor(*GaugeA, 0)
SetGaugeSubTextColor(*GaugeA, 0)
SetGaugeNeedleColor(*GaugeA, 0)
SetGaugeScaleFontHandle(*GaugeA, 0)
SetGaugeTextFontHandle(*GaugeA, 0)
SetGaugeSubTextFontHandle(*GaugeA, 0)
SetGaugeLayerSize(*GaugeA, 0)
SetGaugeBackGroundLayer(*GaugeA, 0)
SetGaugeScaleLayer(*GaugeA, 0)
SetGaugeDescriptionLayer(*GaugeA, 0)
SetGaugeNeedleLayer(*GaugeA, 0)
SetGaugeComposedLayer(*GaugeA, 0)
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Code généré en : 00.018 secondes (26111.11 lignes/seconde) <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Macro ResizeGaugeGadget(GaugeA)
If GetGaugeGadgetID(GaugeA) <> #PB_Any
ResizeGadget(GetGaugeGadgetID(GaugeA), GetGaugePosX(GaugeA), GetGaugePosY(GaugeA), #PB_Ignore, #PB_Ignore)
Else
ResizeGadget(GetGaugeGadgetHandle(GaugeA), GetGaugePosX(GaugeA), GetGaugePosY(GaugeA), #PB_Ignore, #PB_Ignore)
EndIf
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Dessiner un texte centré en x, y <<<<<
Macro DrawTextCentered(x, y, Text, FrontColor, BackColor)
DrawText(x - TextWidth(Text) >> 1, y - TextHeight("Wg") >> 1, Text, FrontColor, BackColor)
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Trouver la plus grande valeur de type double <<<<<
Procedure.d MaxDouble(P_Number01.d, P_Number02.d)
Biggest_Double.d = P_Number01
If P_Number02 > Biggest_Double
Biggest_Double = P_Number02
EndIf
ProcedureReturn Biggest_Double
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Trouver la plus grande valeur de type long <<<<<
Procedure.l MaxLong(P_Number01.l, P_Number02.l)
Biggest_Long.l = P_Number01
If P_Number02 > Biggest_Long
Biggest_Long = P_Number02
EndIf
ProcedureReturn Biggest_Long
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs spéciaux <<<<<
Macro SetGaugePositionSize(GaugeA, P_X, P_Y, P_Size)
SetGaugePosX(GaugeA, P_X)
SetGaugePosY(GaugeA, P_Y)
SetGaugeSize(GaugeA, P_Size)
EndMacro
Macro SetGaugeTextEx(GaugeA, Text, Color_RGBA)
SetGaugeText(GaugeA, Text)
SetGaugeTextColor(GaugeA, Color_RGBA)
EndMacro
Macro SetGaugeSubTextEx(GaugeA, SubText, Color_RGBA)
SetGaugeSubText(GaugeA, SubText)
SetGaugeSubTextColor(GaugeA, Color_RGBA)
EndMacro
Macro SetGaugeMinMaxSteps(GaugeA, P_Min, P_Max, P_BigStep, P_SmallStep)
SetGaugeMin(GaugeA, P_Min)
SetGaugeMax(GaugeA, P_Max)
SetGaugeBigStep(GaugeA, P_BigStep)
SetGaugeSmallStep(GaugeA, P_SmallStep)
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur PaintGaugeBackground <<<<<
Macro PaintGaugeBackground(GaugeA)
DrawingMode(#PB_2DDrawing_AllChannels)
Box(0, 0, GetGaugeSize(GaugeA), GetGaugeSize(GaugeA), GetGaugeBackGroundColor(GaugeA))
; DrawingMode(#PB_2DDrawing_AllChannels | #PB_2DDrawing_Outlined)
; Box(0, 0, GetGaugeSize(GaugeA), GetGaugeSize(GaugeA), RGBA(0, 0, 0, 32))
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur PaintGaugeScale <<<<<
Macro PaintGaugeScale(GaugeA)
StartDegree.i = ((360 - GetGaugeSectorDegrees(GaugeA)) >> 1)
wpx = GetGaugeSize(GaugeA) / 33
wpx2 = wpx / 4.0 * 3 - 1
SmallStepDegrees.d = GetGaugeSmallStep(GaugeA) / GetGaugeMax(GaugeA) * GetGaugeSectorDegrees(GaugeA)
BigStepDegrees.d = GetGaugeBigStep(GaugeA) / GetGaugeMax(GaugeA) * GetGaugeSectorDegrees(GaugeA)
DrawingMode(#PB_2DDrawing_AllChannels)
For I = 0 To GetGaugeSectorDegrees(GaugeA)
x = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + I)) * GetGaugeScaleRadius(GaugeA)
y = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + I)) * GetGaugeScaleRadius(GaugeA)
Circle(x, y, wpx, GetGaugeScaleColor(GaugeA))
Next
DrawingMode(#PB_2DDrawing_AllChannels)
For I = 0 To GetGaugeSectorDegrees(GaugeA)
x = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + I)) * GetGaugeScaleRadius(GaugeA)
y = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + I)) * GetGaugeScaleRadius(GaugeA)
Circle(x, y, wpx2, GetGaugeScaleBackGroundColor(GaugeA))
Next
dI.d = 0
While dI <= GetGaugeSectorDegrees(GaugeA)
x1 = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - wpx2)
y1 = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - wpx2)
x2 = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - (wpx2 / 2))
y2 = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - (wpx2 / 2))
LineXY(x1, y1, x2, y2, GetGaugeScaleColor(GaugeA))
dI + SmallStepDegrees
Wend
dI = 0
While dI <= GetGaugeSectorDegrees(GaugeA) + 1 ;?!
x1 = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - wpx)
y1 = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - wpx)
x2 = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) + wpx)
y2 = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) + wpx)
LineXY(x1, y1, x2, y2, GetGaugeScaleColor(GaugeA))
dI + BigStepDegrees
Wend
DrawingMode(#PB_2DDrawing_AlphaBlend | #PB_2DDrawing_Transparent)
DrawingFont(FontID(GetGaugeScaleFontHandle(GaugeA)))
dI = 0
I = 0
While dI <= GetGaugeSectorDegrees(GaugeA) + 1 ; not sure why that is needed
Offset.w = MaxLong(3, Len(Str(GetGaugeMax(GaugeA) - I)))
x = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) + wpx * Offset)
y = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) + wpx * Offset)
DrawTextCentered(x, y, Str(GetGaugeMax(GaugeA) - I), GetGaugeTextColor(GaugeA), RGBA(0, 0, 0, 0))
dI + BigStepDegrees
I + GetGaugeBigStep(GaugeA)
Wend
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur PaintGaugeDescription <<<<<
Macro PaintGaugeDescription(GaugeA)
DrawingMode(#PB_2DDrawing_AlphaBlend | #PB_2DDrawing_Transparent)
DrawingFont(FontID(GetGaugeTextFontHandle(GaugeA)))
x = GetGaugeCenter(GaugeA)
y = 8 * GetGaugeSize(GaugeA) / 10
DrawTextCentered(x, y, GetGaugeText(GaugeA), GetGaugeTextColor(GaugeA), RGBA(0, 0, 0, 0))
y + TextHeight("Wg")
DrawingFont(FontID(GetGaugeSubTextFontHandle(GaugeA)))
DrawTextCentered(x, y, GetGaugeSubText(GaugeA), GetGaugeSubTextColor(GaugeA), RGBA(0, 0, 0, 0))
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur PaintGaugeHand <<<<<
Macro PaintGaugeNeedle(GaugeA)
DrawingMode(#PB_2DDrawing_AllChannels)
HalfSize = GetGaugeLayerSize(GaugeA) >> 1
StartDegree.i = ((360 - GetGaugeSectorDegrees(GaugeA)) >> 1)
DirDegrees.d = StartDegree + (GetGaugeMax(GaugeA) - GetGaugeValue(GaugeA)) / GetGaugeMax(GaugeA) * GetGaugeSectorDegrees(GaugeA)
SinAngle.d = Sin(Radian(-DirDegrees))
CosAngle.d = Cos(Radian(-DirDegrees))
x1 = HalfSize + (GetGaugeNeedleCenWidth(GaugeA) * CosAngle); - 0 * SinAngle)
y1 = HalfSize + (GetGaugeNeedleCenWidth(GaugeA) * SinAngle); + 0 * CosAngle)
x2 = HalfSize + (-GetGaugeNeedleCenWidth(GaugeA) * CosAngle); - 0 * SinAngle)
y2 = HalfSize + (-GetGaugeNeedleCenWidth(GaugeA) * SinAngle); + 0 * CosAngle)
x3 = HalfSize + (-GetGaugeNeedleTipWidth(GaugeA) * CosAngle - GetGaugeNeedleLength(GaugeA) * SinAngle)
y3 = HalfSize + (-GetGaugeNeedleTipWidth(GaugeA) * SinAngle + GetGaugeNeedleLength(GaugeA) * CosAngle)
x4 = HalfSize + (GetGaugeNeedleTipWidth(GaugeA) * CosAngle - GetGaugeNeedleLength(GaugeA) * SinAngle)
y4 = HalfSize + (GetGaugeNeedleTipWidth(GaugeA) * SinAngle + GetGaugeNeedleLength(GaugeA) * CosAngle)
x5 = HalfSize + (-15 * SinAngle); + 0 * CosAngle)
y5 = HalfSize + (15 * CosAngle); + 0 * SinAngle)
LineXY(x1, y1, x2, y2, GetGaugeNeedleColor(GaugeA))
LineXY(x2, y2, x3, y3, GetGaugeNeedleColor(GaugeA))
LineXY(x3, y3, x4, y4, GetGaugeNeedleColor(GaugeA))
LineXY(x4, y4, x1, y1, GetGaugeNeedleColor(GaugeA))
FillArea(x5, y5, GetGaugeNeedleColor(GaugeA), GetGaugeNeedleColor(GaugeA))
Circle(HalfSize, HalfSize, GetGaugeNeedlePivotRadius(GaugeA), GetGaugeNeedleColor(GaugeA))
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur LoadGaugeFont <<<<<
Procedure LoadGaugeFont(*GaugeA.Gauge, FontName.s)
If GetGaugeScaleFontHandle(*GaugeA)
FreeFont(GetGaugeScaleFontHandle(*GaugeA))
EndIf
If GetGaugeTextFontHandle(*GaugeA)
FreeFont(GetGaugeTextFontHandle(*GaugeA))
EndIf
If GetGaugeSubTextFontHandle(*GaugeA)
FreeFont(GetGaugeSubTextFontHandle(*GaugeA))
EndIf
SetGaugeScaleFontHandle(*GaugeA, LoadFont(#PB_Any, FontName, MaxDouble(8, 0.04 * GetGaugeSize(*GaugeA))))
SetGaugeTextFontHandle(*GaugeA, LoadFont(#PB_Any, FontName, MaxDouble(9, 0.056 * GetGaugeSize(*GaugeA)), #PB_Font_Bold))
SetGaugeSubTextFontHandle(*GaugeA, LoadFont(#PB_Any, FontName, MaxDouble(8, 0.04 * GetGaugeSize(*GaugeA))))
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur GaugeGadget <<<<<
Procedure GaugeGadget(*GaugeA.Gauge, GaugeID.l, x.w, y.w, Size.w, FontName.s = "", Options.l = 0)
SetGaugeGadgetID(*GaugeA, GaugeID)
SetGaugeGadgetHandle(*GaugeA, ImageGadget(GetGaugeGadgetID(*GaugeA), x, y, Size, Size, 0, Options))
SetGaugePositionSize(*GaugeA, x, y, Size)
SetGaugeCenter(*GaugeA, Size >> 1)
SetGaugeScaleRadius(*GaugeA, Size * 3 / 10)
SetGaugeLayerSize(*GaugeA, Size * 4)
SetGaugeNeedleLength(*GaugeA, (1 + GetGaugeScaleRadius(*GaugeA)) * 4)
SetGaugeNeedlePivotRadius(*GaugeA, GetGaugeNeedleLength(*GaugeA) / 10)
SetGaugeNeedleTipWidth(*GaugeA, GetGaugeNeedlePivotRadius(*GaugeA) / 7)
SetGaugeNeedleCenWidth(*GaugeA, GetGaugeNeedlePivotRadius(*GaugeA) / 2)
If FontName <> ""
SetGaugeScaleFontHandle(*GaugeA, LoadFont(#PB_Any, FontName, MaxDouble(8, 0.04 * GetGaugeSize(*GaugeA))))
SetGaugeTextFontHandle(*GaugeA, LoadFont(#PB_Any, FontName, MaxDouble(9, 0.056 * GetGaugeSize(*GaugeA)), #PB_Font_Bold))
SetGaugeSubTextFontHandle(*GaugeA, LoadFont(#PB_Any, FontName, MaxDouble(8, 0.04 * GetGaugeSize(*GaugeA))))
EndIf
SetGaugeSectorDegrees(*GaugeA, 270)
SetGaugeBackGroundColor(*GaugeA, RGBA(0, 0, 0, 0))
SetGaugeScaleColor(*GaugeA, RGBA(62, 62, 128, 192))
SetGaugeScaleBackGroundColor(*GaugeA, RGBA(64, 64, 64, 32))
SetGaugeTextColor(*GaugeA, RGBA(0, 0, 0, 255))
SetGaugeSubTextColor(*GaugeA, RGBA(92, 92, 92, 255))
SetGaugeNeedleColor(*GaugeA, RGBA(255, 000, 000, 255))
SetGaugeMin(*GaugeA, 0)
SetGaugeMax(*GaugeA, 100)
SetGaugeBigStep(*GaugeA, 10)
SetGaugeSmallStep(*GaugeA, 5)
SetGaugeValue(*GaugeA, 0)
SetGaugeText(*GaugeA, "Value")
SetGaugeSubText(*GaugeA, "in units")
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur RefreshGaugeGadget <<<<<
Procedure RefreshGaugeGadget(*GaugeA.Gauge)
If GetGaugeBackGroundLayer(*GaugeA)
FreeImage(GetGaugeBackGroundLayer(*GaugeA))
EndIf
SetGaugeBackGroundLayer(*GaugeA, CreateImage(#PB_Any, GetGaugeSize(*GaugeA), GetGaugeSize(*GaugeA), 32 | #PB_Image_Transparent))
If StartDrawing(ImageOutput(GetGaugeBackGroundLayer(*GaugeA)))
PaintGaugeBackground(*GaugeA)
StopDrawing()
EndIf
If GetGaugeNeedleLayer(*GaugeA)
FreeImage(GetGaugeNeedleLayer(*GaugeA))
EndIf
SetGaugeNeedleLayer(*GaugeA, CreateImage(#PB_Any, GetGaugeLayerSize(*GaugeA), GetGaugeLayerSize(*GaugeA), 32 | #PB_Image_Transparent))
If StartDrawing(ImageOutput(GetGaugeNeedleLayer(*GaugeA)))
PaintGaugeNeedle(*GaugeA)
StopDrawing()
EndIf
ResizeImage(GetGaugeNeedleLayer(*GaugeA), GetGaugeSize(*GaugeA), GetGaugeSize(*GaugeA))
If GetGaugeScaleLayer(*GaugeA)
FreeImage(GetGaugeScaleLayer(*GaugeA))
EndIf
SetGaugeScaleLayer(*GaugeA, CreateImage(#PB_Any, GetGaugeSize(*GaugeA), GetGaugeSize(*GaugeA), 32 | #PB_Image_Transparent))
If StartDrawing(ImageOutput(GetGaugeScaleLayer(*GaugeA)))
PaintGaugeScale(*GaugeA)
StopDrawing()
EndIf
If GetGaugeDescriptionLayer(*GaugeA)
FreeImage(GetGaugeDescriptionLayer(*GaugeA))
EndIf
SetGaugeDescriptionLayer(*GaugeA, CreateImage(#PB_Any, GetGaugeSize(*GaugeA), GetGaugeSize(*GaugeA), 32 | #PB_Image_Transparent))
If StartDrawing(ImageOutput(GetGaugeDescriptionLayer(*GaugeA)))
PaintGaugeDescription(*GaugeA)
StopDrawing()
EndIf
If GetGaugeComposedLayer(*GaugeA)
FreeImage(GetGaugeComposedLayer(*GaugeA))
EndIf
SetGaugeComposedLayer(*GaugeA, CreateImage(#PB_Any, GetGaugeSize(*GaugeA), GetGaugeSize(*GaugeA), 32 | #PB_Image_Transparent))
If StartDrawing(ImageOutput(GetGaugeComposedLayer(*GaugeA)))
DrawingMode(#PB_2DDrawing_AlphaBlend)
DrawImage(ImageID(GetGaugeBackGroundLayer(*GaugeA)), 0, 0)
DrawImage(ImageID(GetGaugeScaleLayer(*GaugeA)), 0, 0)
DrawImage(ImageID(GetGaugeDescriptionLayer(*GaugeA)), 0, 0)
DrawImage(ImageID(GetGaugeNeedleLayer(*GaugeA)), 0, 0)
StopDrawing()
EndIf
If GetGaugeGadgetID(*GaugeA) <> #PB_Any
SetGadgetState(GetGaugeGadgetID(*GaugeA), ImageID(GetGaugeComposedLayer(*GaugeA)))
Else
SetGadgetState(GetGaugeGadgetHandle(*GaugeA), ImageID(GetGaugeComposedLayer(*GaugeA)))
EndIf
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< !!! WARNING - YOU ARE NOW IN A TESTING ZONE - WARNING !!! <<<<<
; <<<<< !!! WARNING - THIS CODE SHOULD BE COMMENTED - WARNING !!! <<<<<
; <<<<< !!! WARNING - BEFORE THE FINAL COMPILATION. - WARNING !!! <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#W = 425
#H = 375
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Linux
FontName.s = "Liberation Sans"
CompilerCase #PB_OS_Windows
FontName.s = "Tahoma"
CompilerEndSelect
If OpenWindow(0, 0, 0, #W, #H, "Gauge Gadget Demo", #PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
TrackBarGadget(0, 5, 5, 20, 360, 0, 360, #PB_TrackBar_Vertical)
TrackBarGadget(1, 30, 5, 20, 360, 1, 360, #PB_TrackBar_Vertical)
GaugeGadget(GaugeA.Gauge, 5, 55, 5, 360, FontName, 1)
SetGaugeMinMaxSteps(GaugeA, 0, 360, 60, 15)
SetGaugeText(GaugeA, "Pressure")
SetGaugeSubText(GaugeA, "in kPa")
RefreshGaugeGadget(GaugeA)
SetGadgetState(0, 0)
SetGadgetState(1, 270)
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case 0 ; Change value
SetGaugeValue(GaugeA, GetGadgetState(0))
; Debug GetGadgetState(0)
RefreshGaugeGadget(GaugeA)
Case 1 ; Change size in degrees
SetGaugeSectorDegrees(GaugeA, GetGadgetState(1))
RefreshGaugeGadget(GaugeA)
EndSelect
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver
ResetGauge(GaugeA)
EndIf
; <<<<<<<<<<<<<<<<<<<<<<<
; <<<<< END OF FILE <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<
Can you try this new version (without an oversized Needle layer) ?Kwaï chang caïne wrote:Always for info and help you...that jerk again
But i'm on a recent notebook, but just for working, not for graphics application, it's perhaps the reason
Code: Select all
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Project name : GaugeGadget
; File Name : GaugeGadget.pb
; File version: 1.1.1
; Programmation : OK
; Programmed by : Trond
; Modified by : Guimauve
; Date : 20-02-2011
; Mise à jour : 22-02-2011
; PureBasic code : 4.51
; Plateform : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Notes :
;
; Some field in the Gauge Structure has been
; renamed or suppressed.
;
; Finally, the GaugeGadget shape can be square
; only.
;
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration de la Structure <<<<<
Structure Gauge
PosX.w
PosY.w
Size.w
Center.w
ScaleRadius.w
Min.l
Max.l
BigStep.l
SmallStep.l
SectorDegrees.w
Value.l
Text.s
SubText.s
GadgetID.l
GadgetHandle.l
BackGroundColor.l
ScaleColor.l
ScaleBackGroundColor.l
TextColor.l
SubTextColor.l
NeedleColor.l
ScaleFontHandle.i
TextFontHandle.i
SubTextFontHandle.i
LayerSize.w
NeedleLength.l
NeedlePivotRadius.l
NeedleTipWidth.l
NeedleCenWidth.l
BackGroundLayer.l
ScaleLayer.l
DescriptionLayer.l
NeedleLayer.l
ComposedLayer.l
EndStructure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs <<<<<
Macro GetGaugePosX(GaugeA)
GaugeA\PosX
EndMacro
Macro GetGaugePosY(GaugeA)
GaugeA\PosY
EndMacro
Macro GetGaugeSize(GaugeA)
GaugeA\Size
EndMacro
Macro GetGaugeCenter(GaugeA)
GaugeA\Center
EndMacro
Macro GetGaugeScaleRadius(GaugeA)
GaugeA\ScaleRadius
EndMacro
Macro GetGaugeMin(GaugeA)
GaugeA\Min
EndMacro
Macro GetGaugeMax(GaugeA)
GaugeA\Max
EndMacro
Macro GetGaugeBigStep(GaugeA)
GaugeA\BigStep
EndMacro
Macro GetGaugeSmallStep(GaugeA)
GaugeA\SmallStep
EndMacro
Macro GetGaugeSectorDegrees(GaugeA)
GaugeA\SectorDegrees
EndMacro
Macro GetGaugeValue(GaugeA)
GaugeA\Value
EndMacro
Macro GetGaugeText(GaugeA)
GaugeA\Text
EndMacro
Macro GetGaugeSubText(GaugeA)
GaugeA\SubText
EndMacro
Macro GetGaugeGadgetID(GaugeA)
GaugeA\GadgetID
EndMacro
Macro GetGaugeGadgetHandle(GaugeA)
GaugeA\GadgetHandle
EndMacro
Macro GetGaugeBackGroundColor(GaugeA)
GaugeA\BackGroundColor
EndMacro
Macro GetGaugeScaleColor(GaugeA)
GaugeA\ScaleColor
EndMacro
Macro GetGaugeScaleBackGroundColor(GaugeA)
GaugeA\ScaleBackGroundColor
EndMacro
Macro GetGaugeTextColor(GaugeA)
GaugeA\TextColor
EndMacro
Macro GetGaugeSubTextColor(GaugeA)
GaugeA\SubTextColor
EndMacro
Macro GetGaugeNeedleColor(GaugeA)
GaugeA\NeedleColor
EndMacro
Macro GetGaugeScaleFontHandle(GaugeA)
GaugeA\ScaleFontHandle
EndMacro
Macro GetGaugeTextFontHandle(GaugeA)
GaugeA\TextFontHandle
EndMacro
Macro GetGaugeSubTextFontHandle(GaugeA)
GaugeA\SubTextFontHandle
EndMacro
Macro GetGaugeLayerSize(GaugeA)
GaugeA\LayerSize
EndMacro
Macro GetGaugeNeedleLength(GaugeA)
GaugeA\NeedleLength
EndMacro
Macro GetGaugeNeedlePivotRadius(GaugeA)
GaugeA\NeedlePivotRadius
EndMacro
Macro GetGaugeNeedleTipWidth(GaugeA)
GaugeA\NeedleTipWidth
EndMacro
Macro GetGaugeNeedleCenWidth(GaugeA)
GaugeA\NeedleCenWidth
EndMacro
Macro GetGaugeBackGroundLayer(GaugeA)
GaugeA\BackGroundLayer
EndMacro
Macro GetGaugeScaleLayer(GaugeA)
GaugeA\ScaleLayer
EndMacro
Macro GetGaugeDescriptionLayer(GaugeA)
GaugeA\DescriptionLayer
EndMacro
Macro GetGaugeNeedleLayer(GaugeA)
GaugeA\NeedleLayer
EndMacro
Macro GetGaugeComposedLayer(GaugeA)
GaugeA\ComposedLayer
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs <<<<<
Macro SetGaugePosX(GaugeA, P_PosX)
GetGaugePosX(GaugeA) = P_PosX
EndMacro
Macro SetGaugePosY(GaugeA, P_PosY)
GetGaugePosY(GaugeA) = P_PosY
EndMacro
Macro SetGaugeSize(GaugeA, P_Size)
GetGaugeSize(GaugeA) = P_Size
EndMacro
Macro SetGaugeCenter(GaugeA, P_Center)
GetGaugeCenter(GaugeA) = P_Center
EndMacro
Macro SetGaugeScaleRadius(GaugeA, P_ScaleRadius)
GetGaugeScaleRadius(GaugeA) = P_ScaleRadius
EndMacro
Macro SetGaugeMin(GaugeA, P_Min)
GetGaugeMin(GaugeA) = P_Min
EndMacro
Macro SetGaugeMax(GaugeA, P_Max)
GetGaugeMax(GaugeA) = P_Max
EndMacro
Macro SetGaugeBigStep(GaugeA, P_BigStep)
GetGaugeBigStep(GaugeA) = P_BigStep
EndMacro
Macro SetGaugeSmallStep(GaugeA, P_SmallStep)
GetGaugeSmallStep(GaugeA) = P_SmallStep
EndMacro
Macro SetGaugeSectorDegrees(GaugeA, P_SectorDegrees)
GetGaugeSectorDegrees(GaugeA) = P_SectorDegrees
EndMacro
Macro SetGaugeValue(GaugeA, P_Value)
GetGaugeValue(GaugeA) = P_Value
EndMacro
Macro SetGaugeText(GaugeA, P_Text)
GetGaugeText(GaugeA) = P_Text
EndMacro
Macro SetGaugeSubText(GaugeA, P_SubText)
GetGaugeSubText(GaugeA) = P_SubText
EndMacro
Macro SetGaugeGadgetID(GaugeA, P_GadgetID)
GetGaugeGadgetID(GaugeA) = P_GadgetID
EndMacro
Macro SetGaugeGadgetHandle(GaugeA, P_GadgetHandle)
GetGaugeGadgetHandle(GaugeA) = P_GadgetHandle
EndMacro
Macro SetGaugeBackGroundColor(GaugeA, P_BackGroundColor)
GetGaugeBackGroundColor(GaugeA) = P_BackGroundColor
EndMacro
Macro SetGaugeScaleColor(GaugeA, P_ScaleColor)
GetGaugeScaleColor(GaugeA) = P_ScaleColor
EndMacro
Macro SetGaugeScaleBackGroundColor(GaugeA, P_ScaleBackGroundColor)
GetGaugeScaleBackGroundColor(GaugeA) = P_ScaleBackGroundColor
EndMacro
Macro SetGaugeTextColor(GaugeA, P_TextColor)
GetGaugeTextColor(GaugeA) = P_TextColor
EndMacro
Macro SetGaugeSubTextColor(GaugeA, P_SubTextColor)
GetGaugeSubTextColor(GaugeA) = P_SubTextColor
EndMacro
Macro SetGaugeNeedleColor(GaugeA, P_NeedleColor)
GetGaugeNeedleColor(GaugeA) = P_NeedleColor
EndMacro
Macro SetGaugeScaleFontHandle(GaugeA, P_ScaleFontHandle)
GetGaugeScaleFontHandle(GaugeA) = P_ScaleFontHandle
EndMacro
Macro SetGaugeTextFontHandle(GaugeA, P_TextFontHandle)
GetGaugeTextFontHandle(GaugeA) = P_TextFontHandle
EndMacro
Macro SetGaugeSubTextFontHandle(GaugeA, P_SubTextFontHandle)
GetGaugeSubTextFontHandle(GaugeA) = P_SubTextFontHandle
EndMacro
Macro SetGaugeLayerSize(GaugeA, P_LayerSize)
GetGaugeLayerSize(GaugeA) = P_LayerSize
EndMacro
Macro SetGaugeNeedleLength(GaugeA, P_NeedleLength)
GetGaugeNeedleLength(GaugeA) = P_NeedleLength
EndMacro
Macro SetGaugeNeedlePivotRadius(GaugeA, P_NeedlePivotRadius)
GetGaugeNeedlePivotRadius(GaugeA) = P_NeedlePivotRadius
EndMacro
Macro SetGaugeNeedleTipWidth(GaugeA, P_NeedleTipWidth)
GetGaugeNeedleTipWidth(GaugeA) = P_NeedleTipWidth
EndMacro
Macro SetGaugeNeedleCenWidth(GaugeA, P_NeedleCenWidth)
GetGaugeNeedleCenWidth(GaugeA) = P_NeedleCenWidth
EndMacro
Macro SetGaugeBackGroundLayer(GaugeA, P_BackGroundLayer)
GetGaugeBackGroundLayer(GaugeA) = P_BackGroundLayer
EndMacro
Macro SetGaugeScaleLayer(GaugeA, P_ScaleLayer)
GetGaugeScaleLayer(GaugeA) = P_ScaleLayer
EndMacro
Macro SetGaugeDescriptionLayer(GaugeA, P_DescriptionLayer)
GetGaugeDescriptionLayer(GaugeA) = P_DescriptionLayer
EndMacro
Macro SetGaugeNeedleLayer(GaugeA, P_NeedleLayer)
GetGaugeNeedleLayer(GaugeA) = P_NeedleLayer
EndMacro
Macro SetGaugeComposedLayer(GaugeA, P_ComposedLayer)
GetGaugeComposedLayer(GaugeA) = P_ComposedLayer
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Code généré en : 00.021 secondes (22571.43 lignes/seconde) <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Reset <<<<<
Macro ResetGauge(GaugeA)
SetGaugePosX(GaugeA, 0)
SetGaugePosY(GaugeA, 0)
SetGaugeSize(GaugeA, 0)
SetGaugeScaleRadius(GaugeA, 0)
SetGaugeMin(GaugeA, 0)
SetGaugeMax(GaugeA, 0)
SetGaugeBigStep(GaugeA, 0)
SetGaugeSmallStep(GaugeA, 0)
SetGaugeValue(GaugeA, 0)
SetGaugeText(GaugeA, "")
SetGaugeSubText(GaugeA, "")
SetGaugeGadgetID(GaugeA, 0)
SetGaugeGadgetHandle(GaugeA, 0)
SetGaugeBackGroundColor(GaugeA, 0)
SetGaugeScaleColor(GaugeA, 0)
SetGaugeScaleBackGroundColor(GaugeA, 0)
SetGaugeTextColor(GaugeA, 0)
SetGaugeSubTextColor(GaugeA, 0)
SetGaugeNeedleColor(GaugeA, 0)
SetGaugeLayerSize(GaugeA, 0)
SetGaugeNeedleLength(GaugeA, 0)
SetGaugeNeedlePivotRadius(GaugeA, 0)
SetGaugeNeedleTipWidth(GaugeA, 0)
SetGaugeNeedleCenWidth(GaugeA, 0)
If GetGaugeScaleFontHandle(GaugeA)
FreeFont(GetGaugeScaleFontHandle(GaugeA))
SetGaugeScaleFontHandle(GaugeA, 0)
EndIf
If GetGaugeTextFontHandle(GaugeA)
FreeFont(GetGaugeTextFontHandle(GaugeA))
SetGaugeTextFontHandle(GaugeA, 0)
EndIf
If GetGaugeSubTextFontHandle(GaugeA)
FreeFont(GetGaugeSubTextFontHandle(GaugeA))
SetGaugeSubTextFontHandle(GaugeA, 0)
EndIf
If GetGaugeBackGroundLayer(GaugeA)
FreeImage(GetGaugeBackGroundLayer(GaugeA))
SetGaugeBackGroundLayer(GaugeA, 0)
EndIf
If GetGaugeScaleLayer(GaugeA)
FreeImage(GetGaugeScaleLayer(GaugeA))
SetGaugeScaleLayer(GaugeA, 0)
EndIf
If GetGaugeDescriptionLayer(GaugeA)
FreeImage(GetGaugeDescriptionLayer(GaugeA))
SetGaugeDescriptionLayer(GaugeA, 0)
EndIf
If GetGaugeNeedleLayer(GaugeA)
FreeImage(GetGaugeNeedleLayer(GaugeA))
SetGaugeNeedleLayer(GaugeA, 0)
EndIf
If GetGaugeComposedLayer(GaugeA)
FreeImage(GetGaugeComposedLayer(GaugeA))
SetGaugeComposedLayer(GaugeA, 0)
EndIf
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Initialize <<<<<
Procedure InitializeGauge(*GaugeA.Gauge)
SetGaugePosX(*GaugeA, 0)
SetGaugePosY(*GaugeA, 0)
SetGaugeSize(*GaugeA, 0)
SetGaugeScaleRadius(*GaugeA, 0)
SetGaugeMin(*GaugeA, 0)
SetGaugeMax(*GaugeA, 0)
SetGaugeBigStep(*GaugeA, 0)
SetGaugeSmallStep(*GaugeA, 0)
SetGaugeValue(*GaugeA, 0)
SetGaugeText(*GaugeA, "")
SetGaugeSubText(*GaugeA, "")
SetGaugeGadgetID(*GaugeA, 0)
SetGaugeGadgetHandle(*GaugeA, 0)
SetGaugeBackGroundColor(*GaugeA, 0)
SetGaugeScaleColor(*GaugeA, 0)
SetGaugeScaleBackGroundColor(*GaugeA, 0)
SetGaugeTextColor(*GaugeA, 0)
SetGaugeSubTextColor(*GaugeA, 0)
SetGaugeNeedleColor(*GaugeA, 0)
SetGaugeScaleFontHandle(*GaugeA, 0)
SetGaugeTextFontHandle(*GaugeA, 0)
SetGaugeSubTextFontHandle(*GaugeA, 0)
SetGaugeLayerSize(*GaugeA, 0)
SetGaugeBackGroundLayer(*GaugeA, 0)
SetGaugeScaleLayer(*GaugeA, 0)
SetGaugeDescriptionLayer(*GaugeA, 0)
SetGaugeNeedleLayer(*GaugeA, 0)
SetGaugeComposedLayer(*GaugeA, 0)
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Code généré en : 00.018 secondes (26111.11 lignes/seconde) <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Macro ResizeGaugeGadget(GaugeA)
If GetGaugeGadgetID(GaugeA) <> #PB_Any
ResizeGadget(GetGaugeGadgetID(GaugeA), GetGaugePosX(GaugeA), GetGaugePosY(GaugeA), #PB_Ignore, #PB_Ignore)
Else
ResizeGadget(GetGaugeGadgetHandle(GaugeA), GetGaugePosX(GaugeA), GetGaugePosY(GaugeA), #PB_Ignore, #PB_Ignore)
EndIf
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Dessiner un texte centré en x, y <<<<<
Macro DrawTextCentered(x, y, Text, FrontColor, BackColor)
DrawText(x - TextWidth(Text) >> 1, y - TextHeight("Wg") >> 1, Text, FrontColor, BackColor)
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Trouver la plus grande valeur de type double <<<<<
Procedure.d MaxDouble(P_Number01.d, P_Number02.d)
Biggest_Double.d = P_Number01
If P_Number02 > Biggest_Double
Biggest_Double = P_Number02
EndIf
ProcedureReturn Biggest_Double
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Trouver la plus grande valeur de type long <<<<<
Procedure.l MaxLong(P_Number01.l, P_Number02.l)
Biggest_Long.l = P_Number01
If P_Number02 > Biggest_Long
Biggest_Long = P_Number02
EndIf
ProcedureReturn Biggest_Long
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs spéciaux <<<<<
Macro SetGaugePositionSize(GaugeA, P_X, P_Y, P_Size)
SetGaugePosX(GaugeA, P_X)
SetGaugePosY(GaugeA, P_Y)
SetGaugeSize(GaugeA, P_Size)
EndMacro
Macro SetGaugeTextEx(GaugeA, Text, Color_RGBA)
SetGaugeText(GaugeA, Text)
SetGaugeTextColor(GaugeA, Color_RGBA)
EndMacro
Macro SetGaugeSubTextEx(GaugeA, SubText, Color_RGBA)
SetGaugeSubText(GaugeA, SubText)
SetGaugeSubTextColor(GaugeA, Color_RGBA)
EndMacro
Macro SetGaugeMinMaxSteps(GaugeA, P_Min, P_Max, P_BigStep, P_SmallStep)
SetGaugeMin(GaugeA, P_Min)
SetGaugeMax(GaugeA, P_Max)
SetGaugeBigStep(GaugeA, P_BigStep)
SetGaugeSmallStep(GaugeA, P_SmallStep)
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur PaintGaugeBackground <<<<<
Macro PaintGaugeBackground(GaugeA)
DrawingMode(#PB_2DDrawing_AllChannels)
Box(0, 0, GetGaugeSize(GaugeA), GetGaugeSize(GaugeA), GetGaugeBackGroundColor(GaugeA))
; DrawingMode(#PB_2DDrawing_AllChannels | #PB_2DDrawing_Outlined)
; Box(0, 0, GetGaugeSize(GaugeA), GetGaugeSize(GaugeA), RGBA(0, 0, 0, 32))
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur PaintGaugeScale <<<<<
Macro PaintGaugeScale(GaugeA)
StartDegree.i = ((360 - GetGaugeSectorDegrees(GaugeA)) >> 1)
wpx = GetGaugeSize(GaugeA) / 33
wpx2 = wpx / 4.0 * 3 - 1
SmallStepDegrees.d = GetGaugeSmallStep(GaugeA) / GetGaugeMax(GaugeA) * GetGaugeSectorDegrees(GaugeA)
BigStepDegrees.d = GetGaugeBigStep(GaugeA) / GetGaugeMax(GaugeA) * GetGaugeSectorDegrees(GaugeA)
DrawingMode(#PB_2DDrawing_AllChannels)
For I = 0 To GetGaugeSectorDegrees(GaugeA)
x = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + I)) * GetGaugeScaleRadius(GaugeA)
y = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + I)) * GetGaugeScaleRadius(GaugeA)
Circle(x, y, wpx, GetGaugeScaleColor(GaugeA))
Next
DrawingMode(#PB_2DDrawing_AllChannels)
For I = 0 To GetGaugeSectorDegrees(GaugeA)
x = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + I)) * GetGaugeScaleRadius(GaugeA)
y = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + I)) * GetGaugeScaleRadius(GaugeA)
Circle(x, y, wpx2, GetGaugeScaleBackGroundColor(GaugeA))
Next
dI.d = 0
While dI <= GetGaugeSectorDegrees(GaugeA)
x1 = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - wpx2)
y1 = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - wpx2)
x2 = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - (wpx2 / 2))
y2 = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - (wpx2 / 2))
LineXY(x1, y1, x2, y2, GetGaugeScaleColor(GaugeA))
dI + SmallStepDegrees
Wend
dI = 0
While dI <= GetGaugeSectorDegrees(GaugeA) + 1 ;?!
x1 = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - wpx)
y1 = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - wpx)
x2 = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) + wpx)
y2 = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) + wpx)
LineXY(x1, y1, x2, y2, GetGaugeScaleColor(GaugeA))
dI + BigStepDegrees
Wend
DrawingMode(#PB_2DDrawing_AlphaBlend | #PB_2DDrawing_Transparent)
DrawingFont(FontID(GetGaugeScaleFontHandle(GaugeA)))
dI = 0
I = 0
While dI <= GetGaugeSectorDegrees(GaugeA) + 1 ; not sure why that is needed
Offset.w = MaxLong(3, Len(Str(GetGaugeMax(GaugeA) - I)))
x = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) + wpx * Offset)
y = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) + wpx * Offset)
DrawTextCentered(x, y, Str(GetGaugeMax(GaugeA) - I), GetGaugeTextColor(GaugeA), RGBA(0, 0, 0, 0))
dI + BigStepDegrees
I + GetGaugeBigStep(GaugeA)
Wend
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur PaintGaugeDescription <<<<<
Macro PaintGaugeDescription(GaugeA)
DrawingMode(#PB_2DDrawing_AlphaBlend | #PB_2DDrawing_Transparent)
DrawingFont(FontID(GetGaugeTextFontHandle(GaugeA)))
x = GetGaugeCenter(GaugeA)
y = 8 * GetGaugeSize(GaugeA) / 10
DrawTextCentered(x, y, GetGaugeText(GaugeA), GetGaugeTextColor(GaugeA), RGBA(0, 0, 0, 0))
y + TextHeight("Wg")
DrawingFont(FontID(GetGaugeSubTextFontHandle(GaugeA)))
DrawTextCentered(x, y, GetGaugeSubText(GaugeA), GetGaugeSubTextColor(GaugeA), RGBA(0, 0, 0, 0))
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur PaintGaugeHand <<<<<
Macro PaintGaugeNeedle(GaugeA)
DrawingMode(#PB_2DDrawing_AllChannels)
HalfSize = GetGaugeLayerSize(GaugeA) >> 1
StartDegree.i = ((360 - GetGaugeSectorDegrees(GaugeA)) >> 1)
DirDegrees.d = StartDegree + (GetGaugeMax(GaugeA) - GetGaugeValue(GaugeA)) / GetGaugeMax(GaugeA) * GetGaugeSectorDegrees(GaugeA)
SinAngle.d = Sin(Radian(-DirDegrees))
CosAngle.d = Cos(Radian(-DirDegrees))
x1 = HalfSize + (GetGaugeNeedleCenWidth(GaugeA) * CosAngle); - 0 * SinAngle)
y1 = HalfSize + (GetGaugeNeedleCenWidth(GaugeA) * SinAngle); + 0 * CosAngle)
x2 = HalfSize + (-GetGaugeNeedleCenWidth(GaugeA) * CosAngle); - 0 * SinAngle)
y2 = HalfSize + (-GetGaugeNeedleCenWidth(GaugeA) * SinAngle); + 0 * CosAngle)
x3 = HalfSize + (-GetGaugeNeedleTipWidth(GaugeA) * CosAngle - GetGaugeNeedleLength(GaugeA) * SinAngle)
y3 = HalfSize + (-GetGaugeNeedleTipWidth(GaugeA) * SinAngle + GetGaugeNeedleLength(GaugeA) * CosAngle)
x4 = HalfSize + (GetGaugeNeedleTipWidth(GaugeA) * CosAngle - GetGaugeNeedleLength(GaugeA) * SinAngle)
y4 = HalfSize + (GetGaugeNeedleTipWidth(GaugeA) * SinAngle + GetGaugeNeedleLength(GaugeA) * CosAngle)
x5 = HalfSize + (-15 * SinAngle); + 0 * CosAngle)
y5 = HalfSize + (15 * CosAngle); + 0 * SinAngle)
LineXY(x1, y1, x2, y2, GetGaugeNeedleColor(GaugeA))
LineXY(x2, y2, x3, y3, GetGaugeNeedleColor(GaugeA))
LineXY(x3, y3, x4, y4, GetGaugeNeedleColor(GaugeA))
LineXY(x4, y4, x1, y1, GetGaugeNeedleColor(GaugeA))
FillArea(x5, y5, GetGaugeNeedleColor(GaugeA), GetGaugeNeedleColor(GaugeA))
Circle(HalfSize, HalfSize, GetGaugeNeedlePivotRadius(GaugeA), GetGaugeNeedleColor(GaugeA))
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur LoadGaugeFont <<<<<
Procedure LoadGaugeFont(*GaugeA.Gauge, FontName.s)
If GetGaugeScaleFontHandle(*GaugeA)
FreeFont(GetGaugeScaleFontHandle(*GaugeA))
EndIf
If GetGaugeTextFontHandle(*GaugeA)
FreeFont(GetGaugeTextFontHandle(*GaugeA))
EndIf
If GetGaugeSubTextFontHandle(*GaugeA)
FreeFont(GetGaugeSubTextFontHandle(*GaugeA))
EndIf
SetGaugeScaleFontHandle(*GaugeA, LoadFont(#PB_Any, FontName, MaxDouble(8, 0.04 * GetGaugeSize(*GaugeA))))
SetGaugeTextFontHandle(*GaugeA, LoadFont(#PB_Any, FontName, MaxDouble(9, 0.056 * GetGaugeSize(*GaugeA)), #PB_Font_Bold))
SetGaugeSubTextFontHandle(*GaugeA, LoadFont(#PB_Any, FontName, MaxDouble(8, 0.04 * GetGaugeSize(*GaugeA))))
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur GaugeGadget <<<<<
Procedure GaugeGadget(*GaugeA.Gauge, GaugeID.l, x.w, y.w, Size.w, FontName.s = "", Options.l = 0)
SetGaugeGadgetID(*GaugeA, GaugeID)
SetGaugeGadgetHandle(*GaugeA, ImageGadget(GetGaugeGadgetID(*GaugeA), x, y, Size, Size, 0, Options))
SetGaugePositionSize(*GaugeA, x, y, Size)
SetGaugeCenter(*GaugeA, Size >> 1)
SetGaugeScaleRadius(*GaugeA, Size * 3 / 10)
SetGaugeLayerSize(*GaugeA, Size)
SetGaugeNeedleLength(*GaugeA, (1 + GetGaugeScaleRadius(*GaugeA)))
SetGaugeNeedlePivotRadius(*GaugeA, GetGaugeNeedleLength(*GaugeA) / 10)
SetGaugeNeedleTipWidth(*GaugeA, GetGaugeNeedlePivotRadius(*GaugeA) / 7)
SetGaugeNeedleCenWidth(*GaugeA, GetGaugeNeedlePivotRadius(*GaugeA) / 2)
If FontName <> ""
SetGaugeScaleFontHandle(*GaugeA, LoadFont(#PB_Any, FontName, MaxDouble(8, 0.04 * GetGaugeSize(*GaugeA))))
SetGaugeTextFontHandle(*GaugeA, LoadFont(#PB_Any, FontName, MaxDouble(9, 0.056 * GetGaugeSize(*GaugeA)), #PB_Font_Bold))
SetGaugeSubTextFontHandle(*GaugeA, LoadFont(#PB_Any, FontName, MaxDouble(8, 0.04 * GetGaugeSize(*GaugeA))))
EndIf
SetGaugeSectorDegrees(*GaugeA, 270)
SetGaugeBackGroundColor(*GaugeA, RGBA(0, 0, 0, 0))
SetGaugeScaleColor(*GaugeA, RGBA(62, 62, 128, 192))
SetGaugeScaleBackGroundColor(*GaugeA, RGBA(64, 64, 64, 32))
SetGaugeTextColor(*GaugeA, RGBA(0, 0, 0, 255))
SetGaugeSubTextColor(*GaugeA, RGBA(92, 92, 92, 255))
SetGaugeNeedleColor(*GaugeA, RGBA(255, 000, 000, 255))
SetGaugeMin(*GaugeA, 0)
SetGaugeMax(*GaugeA, 100)
SetGaugeBigStep(*GaugeA, 10)
SetGaugeSmallStep(*GaugeA, 5)
SetGaugeValue(*GaugeA, 0)
SetGaugeText(*GaugeA, "Value")
SetGaugeSubText(*GaugeA, "in units")
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur RefreshGaugeGadget <<<<<
Procedure RefreshGaugeGadget(*GaugeA.Gauge)
If GetGaugeBackGroundLayer(*GaugeA)
FreeImage(GetGaugeBackGroundLayer(*GaugeA))
EndIf
SetGaugeBackGroundLayer(*GaugeA, CreateImage(#PB_Any, GetGaugeSize(*GaugeA), GetGaugeSize(*GaugeA), 32 | #PB_Image_Transparent))
If StartDrawing(ImageOutput(GetGaugeBackGroundLayer(*GaugeA)))
PaintGaugeBackground(*GaugeA)
StopDrawing()
EndIf
If GetGaugeNeedleLayer(*GaugeA)
FreeImage(GetGaugeNeedleLayer(*GaugeA))
EndIf
SetGaugeNeedleLayer(*GaugeA, CreateImage(#PB_Any, GetGaugeLayerSize(*GaugeA), GetGaugeLayerSize(*GaugeA), 32 | #PB_Image_Transparent))
If StartDrawing(ImageOutput(GetGaugeNeedleLayer(*GaugeA)))
PaintGaugeNeedle(*GaugeA)
StopDrawing()
EndIf
If GetGaugeScaleLayer(*GaugeA)
FreeImage(GetGaugeScaleLayer(*GaugeA))
EndIf
SetGaugeScaleLayer(*GaugeA, CreateImage(#PB_Any, GetGaugeSize(*GaugeA), GetGaugeSize(*GaugeA), 32 | #PB_Image_Transparent))
If StartDrawing(ImageOutput(GetGaugeScaleLayer(*GaugeA)))
PaintGaugeScale(*GaugeA)
StopDrawing()
EndIf
If GetGaugeDescriptionLayer(*GaugeA)
FreeImage(GetGaugeDescriptionLayer(*GaugeA))
EndIf
SetGaugeDescriptionLayer(*GaugeA, CreateImage(#PB_Any, GetGaugeSize(*GaugeA), GetGaugeSize(*GaugeA), 32 | #PB_Image_Transparent))
If StartDrawing(ImageOutput(GetGaugeDescriptionLayer(*GaugeA)))
PaintGaugeDescription(*GaugeA)
StopDrawing()
EndIf
If GetGaugeComposedLayer(*GaugeA)
FreeImage(GetGaugeComposedLayer(*GaugeA))
EndIf
SetGaugeComposedLayer(*GaugeA, CreateImage(#PB_Any, GetGaugeSize(*GaugeA), GetGaugeSize(*GaugeA), 32 | #PB_Image_Transparent))
If StartDrawing(ImageOutput(GetGaugeComposedLayer(*GaugeA)))
DrawingMode(#PB_2DDrawing_AlphaBlend)
DrawImage(ImageID(GetGaugeBackGroundLayer(*GaugeA)), 0, 0)
DrawImage(ImageID(GetGaugeScaleLayer(*GaugeA)), 0, 0)
DrawImage(ImageID(GetGaugeDescriptionLayer(*GaugeA)), 0, 0)
DrawImage(ImageID(GetGaugeNeedleLayer(*GaugeA)), 0, 0)
StopDrawing()
EndIf
If GetGaugeGadgetID(*GaugeA) <> #PB_Any
SetGadgetState(GetGaugeGadgetID(*GaugeA), ImageID(GetGaugeComposedLayer(*GaugeA)))
Else
SetGadgetState(GetGaugeGadgetHandle(*GaugeA), ImageID(GetGaugeComposedLayer(*GaugeA)))
EndIf
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< !!! WARNING - YOU ARE NOW IN A TESTING ZONE - WARNING !!! <<<<<
; <<<<< !!! WARNING - THIS CODE SHOULD BE COMMENTED - WARNING !!! <<<<<
; <<<<< !!! WARNING - BEFORE THE FINAL COMPILATION. - WARNING !!! <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#W = 425
#H = 375
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Linux
FontName.s = "Liberation Sans"
CompilerCase #PB_OS_Windows
FontName.s = "Tahoma"
CompilerEndSelect
If OpenWindow(0, 0, 0, #W, #H, "Gauge Gadget Demo", #PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
TrackBarGadget(0, 5, 5, 20, 360, 0, 360, #PB_TrackBar_Vertical)
TrackBarGadget(1, 30, 5, 20, 360, 1, 360, #PB_TrackBar_Vertical)
GaugeGadget(GaugeA.Gauge, 5, 55, 5, 360, FontName, 1)
SetGaugeMinMaxSteps(GaugeA, 0, 360, 60, 15)
SetGaugeText(GaugeA, "Pressure")
SetGaugeSubText(GaugeA, "in kPa")
RefreshGaugeGadget(GaugeA)
SetGadgetState(0, 0)
SetGadgetState(1, 270)
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case 0 ; Change value
SetGaugeValue(GaugeA, GetGadgetState(0))
; Debug GetGadgetState(0)
RefreshGaugeGadget(GaugeA)
Case 1 ; Change size in degrees
SetGaugeSectorDegrees(GaugeA, GetGadgetState(1))
RefreshGaugeGadget(GaugeA)
EndSelect
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver
ResetGauge(GaugeA)
EndIf
; <<<<<<<<<<<<<<<<<<<<<<<
; <<<<< END OF FILE <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<
Edit: Excuse me i have several PC and several place for works, and i'm not always at the same place.KCC wrote:RGBA() is missed
Code: Select all
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Project name : GaugeGadget
; File Name : GaugeGadget.pb
; File version: 2.0.0
; Programmation : OK
; Programmed by : Trond
; Modified by : Guimauve
; Date : 20-02-2011
; Mise à jour : 21-05-2011
; PureBasic code : 4.51
; Plateform : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Notes :
;
; Some field in the Gauge Structure has been
; renamed or suppressed.
;
; A layer has been added for the Needle. The size
; for this layer is 4 times larger than other
; layer. This is needed to draw the needle more
; smootly.
;
; Finally, the GaugeGadget shape can be square
; only.
;
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration de la Structure <<<<<
Structure Gauge
PosX.w
PosY.w
Size.w
Center.w
ScaleRadius.w
Min.l
Max.l
BigStep.l
SmallStep.l
SectorDegrees.w
Value.l
Text.s
SubText.s
GadgetID.l
GadgetHandle.l
BackGroundColor.l
ScaleColor.l
ScaleBackGroundColor.l
TextColor.l
SubTextColor.l
NeedleColor.l
ScaleFontHandle.i
TextFontHandle.i
SubTextFontHandle.i
LayerSize.w
NeedleLength.l
NeedlePivotRadius.l
NeedleTipWidth.l
NeedleCenWidth.l
BackGroundLayer.l
ScaleLayer.l
DescriptionLayer.l
NeedleLayer.l
ComposedLayer.l
EndStructure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs <<<<<
Macro GetGaugePosX(GaugeA)
GaugeA\PosX
EndMacro
Macro GetGaugePosY(GaugeA)
GaugeA\PosY
EndMacro
Macro GetGaugeSize(GaugeA)
GaugeA\Size
EndMacro
Macro GetGaugeCenter(GaugeA)
GaugeA\Center
EndMacro
Macro GetGaugeScaleRadius(GaugeA)
GaugeA\ScaleRadius
EndMacro
Macro GetGaugeMin(GaugeA)
GaugeA\Min
EndMacro
Macro GetGaugeMax(GaugeA)
GaugeA\Max
EndMacro
Macro GetGaugeBigStep(GaugeA)
GaugeA\BigStep
EndMacro
Macro GetGaugeSmallStep(GaugeA)
GaugeA\SmallStep
EndMacro
Macro GetGaugeSectorDegrees(GaugeA)
GaugeA\SectorDegrees
EndMacro
Macro GetGaugeValue(GaugeA)
GaugeA\Value
EndMacro
Macro GetGaugeText(GaugeA)
GaugeA\Text
EndMacro
Macro GetGaugeSubText(GaugeA)
GaugeA\SubText
EndMacro
Macro GetGaugeGadgetID(GaugeA)
GaugeA\GadgetID
EndMacro
Macro GetGaugeGadgetHandle(GaugeA)
GaugeA\GadgetHandle
EndMacro
Macro GetGaugeBackGroundColor(GaugeA)
GaugeA\BackGroundColor
EndMacro
Macro GetGaugeScaleColor(GaugeA)
GaugeA\ScaleColor
EndMacro
Macro GetGaugeScaleBackGroundColor(GaugeA)
GaugeA\ScaleBackGroundColor
EndMacro
Macro GetGaugeTextColor(GaugeA)
GaugeA\TextColor
EndMacro
Macro GetGaugeSubTextColor(GaugeA)
GaugeA\SubTextColor
EndMacro
Macro GetGaugeNeedleColor(GaugeA)
GaugeA\NeedleColor
EndMacro
Macro GetGaugeScaleFontHandle(GaugeA)
GaugeA\ScaleFontHandle
EndMacro
Macro GetGaugeTextFontHandle(GaugeA)
GaugeA\TextFontHandle
EndMacro
Macro GetGaugeSubTextFontHandle(GaugeA)
GaugeA\SubTextFontHandle
EndMacro
Macro GetGaugeLayerSize(GaugeA)
GaugeA\LayerSize
EndMacro
Macro GetGaugeNeedleLength(GaugeA)
GaugeA\NeedleLength
EndMacro
Macro GetGaugeNeedlePivotRadius(GaugeA)
GaugeA\NeedlePivotRadius
EndMacro
Macro GetGaugeNeedleTipWidth(GaugeA)
GaugeA\NeedleTipWidth
EndMacro
Macro GetGaugeNeedleCenWidth(GaugeA)
GaugeA\NeedleCenWidth
EndMacro
Macro GetGaugeBackGroundLayer(GaugeA)
GaugeA\BackGroundLayer
EndMacro
Macro GetGaugeScaleLayer(GaugeA)
GaugeA\ScaleLayer
EndMacro
Macro GetGaugeDescriptionLayer(GaugeA)
GaugeA\DescriptionLayer
EndMacro
Macro GetGaugeNeedleLayer(GaugeA)
GaugeA\NeedleLayer
EndMacro
Macro GetGaugeComposedLayer(GaugeA)
GaugeA\ComposedLayer
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs <<<<<
Macro SetGaugePosX(GaugeA, P_PosX)
GetGaugePosX(GaugeA) = P_PosX
EndMacro
Macro SetGaugePosY(GaugeA, P_PosY)
GetGaugePosY(GaugeA) = P_PosY
EndMacro
Macro SetGaugeSize(GaugeA, P_Size)
GetGaugeSize(GaugeA) = P_Size
EndMacro
Macro SetGaugeCenter(GaugeA, P_Center)
GetGaugeCenter(GaugeA) = P_Center
EndMacro
Macro SetGaugeScaleRadius(GaugeA, P_ScaleRadius)
GetGaugeScaleRadius(GaugeA) = P_ScaleRadius
EndMacro
Macro SetGaugeMin(GaugeA, P_Min)
GetGaugeMin(GaugeA) = P_Min
EndMacro
Macro SetGaugeMax(GaugeA, P_Max)
GetGaugeMax(GaugeA) = P_Max
EndMacro
Macro SetGaugeBigStep(GaugeA, P_BigStep)
GetGaugeBigStep(GaugeA) = P_BigStep
EndMacro
Macro SetGaugeSmallStep(GaugeA, P_SmallStep)
GetGaugeSmallStep(GaugeA) = P_SmallStep
EndMacro
Macro SetGaugeSectorDegrees(GaugeA, P_SectorDegrees)
GetGaugeSectorDegrees(GaugeA) = P_SectorDegrees
EndMacro
Macro SetGaugeValue(GaugeA, P_Value)
GetGaugeValue(GaugeA) = P_Value
EndMacro
Macro SetGaugeText(GaugeA, P_Text)
GetGaugeText(GaugeA) = P_Text
EndMacro
Macro SetGaugeSubText(GaugeA, P_SubText)
GetGaugeSubText(GaugeA) = P_SubText
EndMacro
Macro SetGaugeGadgetID(GaugeA, P_GadgetID)
GetGaugeGadgetID(GaugeA) = P_GadgetID
EndMacro
Macro SetGaugeGadgetHandle(GaugeA, P_GadgetHandle)
GetGaugeGadgetHandle(GaugeA) = P_GadgetHandle
EndMacro
Macro SetGaugeBackGroundColor(GaugeA, P_BackGroundColor)
GetGaugeBackGroundColor(GaugeA) = P_BackGroundColor
EndMacro
Macro SetGaugeScaleColor(GaugeA, P_ScaleColor)
GetGaugeScaleColor(GaugeA) = P_ScaleColor
EndMacro
Macro SetGaugeScaleBackGroundColor(GaugeA, P_ScaleBackGroundColor)
GetGaugeScaleBackGroundColor(GaugeA) = P_ScaleBackGroundColor
EndMacro
Macro SetGaugeTextColor(GaugeA, P_TextColor)
GetGaugeTextColor(GaugeA) = P_TextColor
EndMacro
Macro SetGaugeSubTextColor(GaugeA, P_SubTextColor)
GetGaugeSubTextColor(GaugeA) = P_SubTextColor
EndMacro
Macro SetGaugeNeedleColor(GaugeA, P_NeedleColor)
GetGaugeNeedleColor(GaugeA) = P_NeedleColor
EndMacro
Macro SetGaugeScaleFontHandle(GaugeA, P_ScaleFontHandle)
GetGaugeScaleFontHandle(GaugeA) = P_ScaleFontHandle
EndMacro
Macro SetGaugeTextFontHandle(GaugeA, P_TextFontHandle)
GetGaugeTextFontHandle(GaugeA) = P_TextFontHandle
EndMacro
Macro SetGaugeSubTextFontHandle(GaugeA, P_SubTextFontHandle)
GetGaugeSubTextFontHandle(GaugeA) = P_SubTextFontHandle
EndMacro
Macro SetGaugeLayerSize(GaugeA, P_LayerSize)
GetGaugeLayerSize(GaugeA) = P_LayerSize
EndMacro
Macro SetGaugeNeedleLength(GaugeA, P_NeedleLength)
GetGaugeNeedleLength(GaugeA) = P_NeedleLength
EndMacro
Macro SetGaugeNeedlePivotRadius(GaugeA, P_NeedlePivotRadius)
GetGaugeNeedlePivotRadius(GaugeA) = P_NeedlePivotRadius
EndMacro
Macro SetGaugeNeedleTipWidth(GaugeA, P_NeedleTipWidth)
GetGaugeNeedleTipWidth(GaugeA) = P_NeedleTipWidth
EndMacro
Macro SetGaugeNeedleCenWidth(GaugeA, P_NeedleCenWidth)
GetGaugeNeedleCenWidth(GaugeA) = P_NeedleCenWidth
EndMacro
Macro SetGaugeBackGroundLayer(GaugeA, P_BackGroundLayer)
GetGaugeBackGroundLayer(GaugeA) = P_BackGroundLayer
EndMacro
Macro SetGaugeScaleLayer(GaugeA, P_ScaleLayer)
GetGaugeScaleLayer(GaugeA) = P_ScaleLayer
EndMacro
Macro SetGaugeDescriptionLayer(GaugeA, P_DescriptionLayer)
GetGaugeDescriptionLayer(GaugeA) = P_DescriptionLayer
EndMacro
Macro SetGaugeNeedleLayer(GaugeA, P_NeedleLayer)
GetGaugeNeedleLayer(GaugeA) = P_NeedleLayer
EndMacro
Macro SetGaugeComposedLayer(GaugeA, P_ComposedLayer)
GetGaugeComposedLayer(GaugeA) = P_ComposedLayer
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Code généré en : 00.010 secondes (49500.00 lignes/seconde) <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Reset <<<<<
Macro ResetGauge(GaugeA)
SetGaugePosX(GaugeA, 0)
SetGaugePosY(GaugeA, 0)
SetGaugeSize(GaugeA, 0)
SetGaugeScaleRadius(GaugeA, 0)
SetGaugeMin(GaugeA, 0)
SetGaugeMax(GaugeA, 0)
SetGaugeBigStep(GaugeA, 0)
SetGaugeSmallStep(GaugeA, 0)
SetGaugeValue(GaugeA, 0)
SetGaugeText(GaugeA, "")
SetGaugeSubText(GaugeA, "")
SetGaugeGadgetID(GaugeA, 0)
SetGaugeGadgetHandle(GaugeA, 0)
SetGaugeBackGroundColor(GaugeA, 0)
SetGaugeScaleColor(GaugeA, 0)
SetGaugeScaleBackGroundColor(GaugeA, 0)
SetGaugeTextColor(GaugeA, 0)
SetGaugeSubTextColor(GaugeA, 0)
SetGaugeNeedleColor(GaugeA, 0)
SetGaugeLayerSize(GaugeA, 0)
SetGaugeNeedleLength(GaugeA, 0)
SetGaugeNeedlePivotRadius(GaugeA, 0)
SetGaugeNeedleTipWidth(GaugeA, 0)
SetGaugeNeedleCenWidth(GaugeA, 0)
If GetGaugeScaleFontHandle(GaugeA)
FreeFont(GetGaugeScaleFontHandle(GaugeA))
SetGaugeScaleFontHandle(GaugeA, 0)
EndIf
If GetGaugeTextFontHandle(GaugeA)
FreeFont(GetGaugeTextFontHandle(GaugeA))
SetGaugeTextFontHandle(GaugeA, 0)
EndIf
If GetGaugeSubTextFontHandle(GaugeA)
FreeFont(GetGaugeSubTextFontHandle(GaugeA))
SetGaugeSubTextFontHandle(GaugeA, 0)
EndIf
If GetGaugeBackGroundLayer(GaugeA)
FreeImage(GetGaugeBackGroundLayer(GaugeA))
SetGaugeBackGroundLayer(GaugeA, 0)
EndIf
If GetGaugeScaleLayer(GaugeA)
FreeImage(GetGaugeScaleLayer(GaugeA))
SetGaugeScaleLayer(GaugeA, 0)
EndIf
If GetGaugeDescriptionLayer(GaugeA)
FreeImage(GetGaugeDescriptionLayer(GaugeA))
SetGaugeDescriptionLayer(GaugeA, 0)
EndIf
If GetGaugeNeedleLayer(GaugeA)
FreeImage(GetGaugeNeedleLayer(GaugeA))
SetGaugeNeedleLayer(GaugeA, 0)
EndIf
If GetGaugeComposedLayer(GaugeA)
FreeImage(GetGaugeComposedLayer(GaugeA))
SetGaugeComposedLayer(GaugeA, 0)
EndIf
EndMacro
Macro ResizeGaugeGadget(GaugeA)
If GetGaugeGadgetID(GaugeA) <> #PB_Any
ResizeGadget(GetGaugeGadgetID(GaugeA), GetGaugePosX(GaugeA), GetGaugePosY(GaugeA), #PB_Ignore, #PB_Ignore)
Else
ResizeGadget(GetGaugeGadgetHandle(GaugeA), GetGaugePosX(GaugeA), GetGaugePosY(GaugeA), #PB_Ignore, #PB_Ignore)
EndIf
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Dessiner un texte centré en x, y <<<<<
Macro DrawTextCentered(x, y, Text, FrontColor, BackColor)
DrawText(x - TextWidth(Text) >> 1, y - TextHeight("Wg") >> 1, Text, FrontColor, BackColor)
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Trouver la plus grande valeur de type double <<<<<
Procedure.d MaxDouble(P_Number01.d, P_Number02.d)
Biggest_Double.d = P_Number01
If P_Number02 > Biggest_Double
Biggest_Double = P_Number02
EndIf
ProcedureReturn Biggest_Double
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Trouver la plus grande valeur de type long <<<<<
Procedure.l MaxLong(P_Number01.l, P_Number02.l)
Biggest_Long.l = P_Number01
If P_Number02 > Biggest_Long
Biggest_Long = P_Number02
EndIf
ProcedureReturn Biggest_Long
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs spéciaux <<<<<
Macro SetGaugePositionSize(GaugeA, P_X, P_Y, P_Size)
SetGaugePosX(GaugeA, P_X)
SetGaugePosY(GaugeA, P_Y)
SetGaugeSize(GaugeA, P_Size)
EndMacro
Macro SetGaugeTextEx(GaugeA, Text, Color_RGBA)
SetGaugeText(GaugeA, Text)
SetGaugeTextColor(GaugeA, Color_RGBA)
EndMacro
Macro SetGaugeSubTextEx(GaugeA, SubText, Color_RGBA)
SetGaugeSubText(GaugeA, SubText)
SetGaugeSubTextColor(GaugeA, Color_RGBA)
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur PaintGaugeBackground <<<<<
Macro PaintGaugeBackground(GaugeA)
DrawingMode(#PB_2DDrawing_AllChannels)
Box(0, 0, GetGaugeSize(GaugeA), GetGaugeSize(GaugeA), GetGaugeBackGroundColor(GaugeA))
; DrawingMode(#PB_2DDrawing_AllChannels | #PB_2DDrawing_Outlined)
; Box(0, 0, GetGaugeSize(GaugeA), GetGaugeSize(GaugeA), RGBA(0, 0, 0, 32))
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur PaintGaugeScale <<<<<
Macro PaintGaugeScale(GaugeA)
StartDegree.i = ((360 - GetGaugeSectorDegrees(GaugeA)) >> 1)
wpx = GetGaugeLayerSize(GaugeA) / 33
wpx2 = wpx / 4.0 * 3 - 1
SmallStepDegrees.d = GetGaugeSmallStep(GaugeA) / GetGaugeMax(GaugeA) * GetGaugeSectorDegrees(GaugeA)
BigStepDegrees.d = GetGaugeBigStep(GaugeA) / GetGaugeMax(GaugeA) * GetGaugeSectorDegrees(GaugeA)
DrawingMode(#PB_2DDrawing_AllChannels)
For I = 0 To GetGaugeSectorDegrees(GaugeA)
x = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + I)) * GetGaugeScaleRadius(GaugeA)
y = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + I)) * GetGaugeScaleRadius(GaugeA)
Circle(x, y, wpx, GetGaugeScaleColor(GaugeA))
Next
DrawingMode(#PB_2DDrawing_AllChannels)
For I = 0 To GetGaugeSectorDegrees(GaugeA)
x = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + I)) * GetGaugeScaleRadius(GaugeA)
y = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + I)) * GetGaugeScaleRadius(GaugeA)
Circle(x, y, wpx2, GetGaugeScaleBackGroundColor(GaugeA))
Next
dI.d = 0
While dI <= GetGaugeSectorDegrees(GaugeA)
x1 = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - wpx2)
y1 = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - wpx2)
x2 = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - (wpx2 / 2))
y2 = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - (wpx2 / 2))
LineXY(x1, y1, x2, y2, GetGaugeScaleColor(GaugeA))
dI + SmallStepDegrees
Wend
dI = 0
While dI <= GetGaugeSectorDegrees(GaugeA) + 1 ;?!
x1 = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - wpx)
y1 = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - wpx)
x2 = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) + wpx)
y2 = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) + wpx)
LineXY(x1, y1, x2, y2, GetGaugeScaleColor(GaugeA))
dI + BigStepDegrees
Wend
DrawingMode(#PB_2DDrawing_AlphaBlend | #PB_2DDrawing_Transparent)
DrawingFont(FontID(GetGaugeScaleFontHandle(GaugeA)))
dI = 0
I = 0
While dI <= GetGaugeSectorDegrees(GaugeA) + 1 ; not sure why that is needed
Offset.w = MaxLong(3, Len(Str(GetGaugeMax(GaugeA) - I)))
x = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) + wpx * Offset)
y = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) + wpx * Offset)
DrawTextCentered(x, y, Str(GetGaugeMax(GaugeA) - I), GetGaugeTextColor(GaugeA), RGBA(0, 0, 0, 0))
dI + BigStepDegrees
I + GetGaugeBigStep(GaugeA)
Wend
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur PaintGaugeDescription <<<<<
Macro PaintGaugeDescription(GaugeA)
DrawingMode(#PB_2DDrawing_AlphaBlend | #PB_2DDrawing_Transparent)
DrawingFont(FontID(GetGaugeTextFontHandle(GaugeA)))
x = GetGaugeCenter(GaugeA)
y = 32 * GetGaugeSize(GaugeA) / 10
DrawTextCentered(x, y, GetGaugeText(GaugeA), GetGaugeTextColor(GaugeA), RGBA(0, 0, 0, 0))
y + TextHeight("Wg")
DrawingFont(FontID(GetGaugeSubTextFontHandle(GaugeA)))
DrawTextCentered(x, y, GetGaugeSubText(GaugeA), GetGaugeSubTextColor(GaugeA), RGBA(0, 0, 0, 0))
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur PaintGaugeHand <<<<<
Macro PaintGaugeNeedle(GaugeA)
DrawingMode(#PB_2DDrawing_AllChannels)
HalfSize = GetGaugeLayerSize(GaugeA) >> 1
StartDegree.i = ((360 - GetGaugeSectorDegrees(GaugeA)) >> 1)
DirDegrees.d = StartDegree + (GetGaugeMax(GaugeA) - GetGaugeValue(GaugeA)) / GetGaugeMax(GaugeA) * GetGaugeSectorDegrees(GaugeA)
SinAngle.d = Sin(Radian(-DirDegrees))
CosAngle.d = Cos(Radian(-DirDegrees))
x1 = HalfSize + (GetGaugeNeedleCenWidth(GaugeA) * CosAngle); - 0 * SinAngle)
y1 = HalfSize + (GetGaugeNeedleCenWidth(GaugeA) * SinAngle); + 0 * CosAngle)
x2 = HalfSize + (-GetGaugeNeedleCenWidth(GaugeA) * CosAngle); - 0 * SinAngle)
y2 = HalfSize + (-GetGaugeNeedleCenWidth(GaugeA) * SinAngle); + 0 * CosAngle)
x3 = HalfSize + (-GetGaugeNeedleTipWidth(GaugeA) * CosAngle - GetGaugeNeedleLength(GaugeA) * SinAngle)
y3 = HalfSize + (-GetGaugeNeedleTipWidth(GaugeA) * SinAngle + GetGaugeNeedleLength(GaugeA) * CosAngle)
x4 = HalfSize + (GetGaugeNeedleTipWidth(GaugeA) * CosAngle - GetGaugeNeedleLength(GaugeA) * SinAngle)
y4 = HalfSize + (GetGaugeNeedleTipWidth(GaugeA) * SinAngle + GetGaugeNeedleLength(GaugeA) * CosAngle)
x5 = HalfSize + (-15 * SinAngle); + 0 * CosAngle)
y5 = HalfSize + (15 * CosAngle); + 0 * SinAngle)
LineXY(x1, y1, x2, y2, GetGaugeNeedleColor(GaugeA))
LineXY(x2, y2, x3, y3, GetGaugeNeedleColor(GaugeA))
LineXY(x3, y3, x4, y4, GetGaugeNeedleColor(GaugeA))
LineXY(x4, y4, x1, y1, GetGaugeNeedleColor(GaugeA))
FillArea(x5, y5, GetGaugeNeedleColor(GaugeA), GetGaugeNeedleColor(GaugeA))
Circle(HalfSize, HalfSize, GetGaugeNeedlePivotRadius(GaugeA), GetGaugeNeedleColor(GaugeA))
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur LoadGaugeFont <<<<<
Procedure LoadGaugeFont(*GaugeA.Gauge, FontName.s)
If GetGaugeScaleFontHandle(*GaugeA)
FreeFont(GetGaugeScaleFontHandle(*GaugeA))
EndIf
If GetGaugeTextFontHandle(*GaugeA)
FreeFont(GetGaugeTextFontHandle(*GaugeA))
EndIf
If GetGaugeSubTextFontHandle(*GaugeA)
FreeFont(GetGaugeSubTextFontHandle(*GaugeA))
EndIf
SetGaugeScaleFontHandle(*GaugeA, LoadFont(#PB_Any, FontName, 4 * MaxDouble(8, 0.04 * GetGaugeSize(*GaugeA))))
SetGaugeTextFontHandle(*GaugeA, LoadFont(#PB_Any, FontName, 4 * MaxDouble(9, 0.056 * GetGaugeSize(*GaugeA)), #PB_Font_Bold))
SetGaugeSubTextFontHandle(*GaugeA, LoadFont(#PB_Any, FontName, 4 * MaxDouble(8, 0.04 * GetGaugeSize(*GaugeA))))
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur RepaintGaugeLayer <<<<<
Procedure RepaintGaugeLayer(*GaugeA.Gauge, Needle.b, Scale.b, Description.b, BackGround.b)
If BackGround = #True
If GetGaugeBackGroundLayer(*GaugeA)
FreeImage(GetGaugeBackGroundLayer(*GaugeA))
EndIf
SetGaugeBackGroundLayer(*GaugeA, CreateImage(#PB_Any, GetGaugeLayerSize(*GaugeA), GetGaugeLayerSize(*GaugeA), 32 | #PB_Image_Transparent))
If StartDrawing(ImageOutput(GetGaugeBackGroundLayer(*GaugeA)))
PaintGaugeBackground(*GaugeA)
StopDrawing()
EndIf
ResizeImage(GetGaugeBackGroundLayer(*GaugeA), GetGaugeSize(*GaugeA), GetGaugeSize(*GaugeA))
EndIf
If Needle = #True
If GetGaugeNeedleLayer(*GaugeA)
FreeImage(GetGaugeNeedleLayer(*GaugeA))
EndIf
SetGaugeNeedleLayer(*GaugeA, CreateImage(#PB_Any, GetGaugeLayerSize(*GaugeA), GetGaugeLayerSize(*GaugeA), 32 | #PB_Image_Transparent))
If StartDrawing(ImageOutput(GetGaugeNeedleLayer(*GaugeA)))
PaintGaugeNeedle(*GaugeA)
StopDrawing()
EndIf
ResizeImage(GetGaugeNeedleLayer(*GaugeA), GetGaugeSize(*GaugeA), GetGaugeSize(*GaugeA))
EndIf
If Scale = #True
If GetGaugeScaleLayer(*GaugeA)
FreeImage(GetGaugeScaleLayer(*GaugeA))
EndIf
SetGaugeScaleLayer(*GaugeA, CreateImage(#PB_Any, GetGaugeLayerSize(*GaugeA), GetGaugeLayerSize(*GaugeA), 32 | #PB_Image_Transparent))
If StartDrawing(ImageOutput(GetGaugeScaleLayer(*GaugeA)))
PaintGaugeScale(*GaugeA)
StopDrawing()
EndIf
ResizeImage(GetGaugeScaleLayer(*GaugeA), GetGaugeSize(*GaugeA), GetGaugeSize(*GaugeA))
EndIf
If Description = #True
If GetGaugeDescriptionLayer(*GaugeA)
FreeImage(GetGaugeDescriptionLayer(*GaugeA))
EndIf
SetGaugeDescriptionLayer(*GaugeA, CreateImage(#PB_Any, GetGaugeLayerSize(*GaugeA), GetGaugeLayerSize(*GaugeA), 32 | #PB_Image_Transparent))
If StartDrawing(ImageOutput(GetGaugeDescriptionLayer(*GaugeA)))
PaintGaugeDescription(*GaugeA)
StopDrawing()
EndIf
ResizeImage(GetGaugeDescriptionLayer(*GaugeA), GetGaugeSize(*GaugeA), GetGaugeSize(*GaugeA))
EndIf
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur RefreshGaugeGadget <<<<<
Macro RefreshGaugeGadget(GaugeA)
If GetGaugeComposedLayer(GaugeA)
FreeImage(GetGaugeComposedLayer(GaugeA))
EndIf
SetGaugeComposedLayer(GaugeA, CreateImage(#PB_Any, GetGaugeSize(GaugeA), GetGaugeSize(GaugeA), 32 | #PB_Image_Transparent))
If StartDrawing(ImageOutput(GetGaugeComposedLayer(GaugeA)))
DrawingMode(#PB_2DDrawing_AlphaBlend)
DrawImage(ImageID(GetGaugeBackGroundLayer(GaugeA)), 0, 0)
DrawImage(ImageID(GetGaugeScaleLayer(GaugeA)), 0, 0)
DrawImage(ImageID(GetGaugeDescriptionLayer(GaugeA)), 0, 0)
DrawImage(ImageID(GetGaugeNeedleLayer(GaugeA)), 0, 0)
StopDrawing()
EndIf
If GetGaugeGadgetID(GaugeA) <> #PB_Any
SetGadgetState(GetGaugeGadgetID(GaugeA), ImageID(GetGaugeComposedLayer(GaugeA)))
Else
SetGadgetState(GetGaugeGadgetHandle(GaugeA), ImageID(GetGaugeComposedLayer(GaugeA)))
EndIf
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur GaugeGadget <<<<<
Procedure GaugeGadget(*GaugeA.Gauge, GaugeID.l, x.w, y.w, Size.w, FontName.s = "", Options.l = 0)
SetGaugeGadgetID(*GaugeA, GaugeID)
SetGaugeGadgetHandle(*GaugeA, ImageGadget(GetGaugeGadgetID(*GaugeA), x, y, Size, Size, 0, Options))
SetGaugePositionSize(*GaugeA, x, y, Size)
SetGaugeCenter(*GaugeA, (4*Size) >> 1)
SetGaugeScaleRadius(*GaugeA, 4 * Size * 3 / 10)
SetGaugeLayerSize(*GaugeA, Size * 4)
SetGaugeNeedleLength(*GaugeA, (1 + GetGaugeScaleRadius(*GaugeA)))
SetGaugeNeedlePivotRadius(*GaugeA, GetGaugeNeedleLength(*GaugeA) / 10)
SetGaugeNeedleTipWidth(*GaugeA, GetGaugeNeedlePivotRadius(*GaugeA) / 7)
SetGaugeNeedleCenWidth(*GaugeA, GetGaugeNeedlePivotRadius(*GaugeA) / 2)
If FontName <> ""
LoadGaugeFont(*GaugeA, FontName)
EndIf
SetGaugeSectorDegrees(*GaugeA, 270)
SetGaugeBackGroundColor(*GaugeA, RGBA(0, 0, 0, 0))
SetGaugeScaleColor(*GaugeA, RGBA(62, 62, 128, 192))
SetGaugeScaleBackGroundColor(*GaugeA, RGBA(64, 64, 64, 32))
SetGaugeTextColor(*GaugeA, RGBA(0, 0, 0, 255))
SetGaugeSubTextColor(*GaugeA, RGBA(92, 92, 92, 255))
SetGaugeNeedleColor(*GaugeA, RGBA(255, 000, 000, 255))
SetGaugeMin(*GaugeA, 0)
SetGaugeMax(*GaugeA, 100)
SetGaugeBigStep(*GaugeA, 10)
SetGaugeSmallStep(*GaugeA, 5)
SetGaugeValue(*GaugeA, 0)
SetGaugeText(*GaugeA, "Value")
SetGaugeSubText(*GaugeA, "in units")
RepaintGaugeLayer(*GaugeA, #True, #True, #True, #True)
RefreshGaugeGadget(*GaugeA)
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur ChangeGaugeGadgetValue <<<<<
Procedure ChangeGaugeGadgetValue(*GaugeA.Gauge, P_Value.l)
SetGaugeValue(*GaugeA, P_Value)
RepaintGaugeLayer(*GaugeA, #True, #False, #False, #False)
RefreshGaugeGadget(*GaugeA)
EndProcedure
Procedure ChangeGaugeGadgetSectorDegrees(*GaugeA.Gauge, P_SectorDegrees.l)
SetGaugeSectorDegrees(*GaugeA, P_SectorDegrees)
RepaintGaugeLayer(*GaugeA, #True, #True, #False, #False)
RefreshGaugeGadget(*GaugeA)
EndProcedure
Procedure ChangeGaugeGadgetMinMaxSteps(*GaugeA.Gauge, P_Min.l, P_Max.l, P_BigStep.l, P_SmallStep.l)
SetGaugeMin(*GaugeA, P_Min)
SetGaugeMax(*GaugeA, P_Max)
SetGaugeBigStep(*GaugeA, P_BigStep)
SetGaugeSmallStep(*GaugeA, P_SmallStep)
RepaintGaugeLayer(*GaugeA, #False, #True, #False, #False)
RefreshGaugeGadget(*GaugeA)
EndProcedure
Procedure ChangeGaugeGadgetDescription(*GaugeA.Gauge, P_Text.s, P_SubText.s)
SetGaugeText(*GaugeA, P_Text)
SetGaugeSubText(*GaugeA, P_SubText)
RepaintGaugeLayer(*GaugeA, #False, #False, #True, #False)
RefreshGaugeGadget(*GaugeA)
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< !!! WARNING - YOU ARE NOW IN A TESTING ZONE - WARNING !!! <<<<<
; <<<<< !!! WARNING - THIS CODE SHOULD BE COMMENTED - WARNING !!! <<<<<
; <<<<< !!! WARNING - BEFORE THE FINAL COMPILATION. - WARNING !!! <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#W = 425
#H = 375
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Linux
FontName.s = "Liberation Sans"
CompilerCase #PB_OS_Windows
FontName.s = "Tahoma"
CompilerEndSelect
If OpenWindow(0, 0, 0, #W, #H, "Gauge Gadget Demo", #PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
TrackBarGadget(0, 5, 5, 20, 360, 0, 360, #PB_TrackBar_Vertical)
TrackBarGadget(1, 30, 5, 20, 360, 1, 360, #PB_TrackBar_Vertical)
GaugeGadget(GaugeA.Gauge, 5, 55, 5, 360, FontName, 1)
ChangeGaugeGadgetMinMaxSteps(GaugeA, 0, 360, 60, 15)
ChangeGaugeGadgetDescription(GaugeA, "Pressure", "in kPa")
SetGadgetState(0, 0)
SetGadgetState(1, 270)
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case 0 ; Change value
ChangeGaugeGadgetValue(GaugeA, GetGadgetState(0))
Case 1 ; Change size in degrees
ChangeGaugeGadgetSectorDegrees(GaugeA, GetGadgetState(1))
EndSelect
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver
ResetGauge(GaugeA)
EndIf
; <<<<<<<<<<<<<<<<<<<<<<<
; <<<<< END OF FILE <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<
Code: Select all
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Project name : GaugeGadget
; File Name : GaugeGadget.pb
; File version: 2.1.0
; Programmation : OK
; Programmed by : Trond
; Modified by : Guimauve
; Date : 20-02-2011
; Mise à jour : 22-05-2011
; PureBasic code : 4.51
; Plateform : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Notes :
;
; Some field in the Gauge Structure has been
; renamed or suppressed.
;
; A layer has been added for the Needle. The size
; for this layer is 4 times larger than other
; layer. This is needed to draw the needle more
; smootly.
;
; Finally, the GaugeGadget shape can be square
; only.
;
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration de la Structure <<<<<
Structure Gauge
PosX.w
PosY.w
Size.w
Center.w
ScaleRadius.w
Min.l
Max.l
BigStep.l
SmallStep.l
SectorDegrees.w
Value.l
Text.s
SubText.s
GadgetID.l
GadgetHandle.l
BackGroundColor.l
ScaleColor.l
ScaleBackGroundColor.l
TextColor.l
SubTextColor.l
NeedleColor.l
ScaleFontHandle.i
TextFontHandle.i
SubTextFontHandle.i
LayerSize.w
NeedleLength.l
NeedlePivotRadius.l
NeedleTipWidth.l
NeedleCenWidth.l
ScaleLayer.l
NeedleLayer.l
ComposedLayer.l
EndStructure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs <<<<<
Macro GetGaugePosX(GaugeA)
GaugeA\PosX
EndMacro
Macro GetGaugePosY(GaugeA)
GaugeA\PosY
EndMacro
Macro GetGaugeSize(GaugeA)
GaugeA\Size
EndMacro
Macro GetGaugeCenter(GaugeA)
GaugeA\Center
EndMacro
Macro GetGaugeScaleRadius(GaugeA)
GaugeA\ScaleRadius
EndMacro
Macro GetGaugeMin(GaugeA)
GaugeA\Min
EndMacro
Macro GetGaugeMax(GaugeA)
GaugeA\Max
EndMacro
Macro GetGaugeBigStep(GaugeA)
GaugeA\BigStep
EndMacro
Macro GetGaugeSmallStep(GaugeA)
GaugeA\SmallStep
EndMacro
Macro GetGaugeSectorDegrees(GaugeA)
GaugeA\SectorDegrees
EndMacro
Macro GetGaugeValue(GaugeA)
GaugeA\Value
EndMacro
Macro GetGaugeText(GaugeA)
GaugeA\Text
EndMacro
Macro GetGaugeSubText(GaugeA)
GaugeA\SubText
EndMacro
Macro GetGaugeGadgetID(GaugeA)
GaugeA\GadgetID
EndMacro
Macro GetGaugeGadgetHandle(GaugeA)
GaugeA\GadgetHandle
EndMacro
Macro GetGaugeBackGroundColor(GaugeA)
GaugeA\BackGroundColor
EndMacro
Macro GetGaugeScaleColor(GaugeA)
GaugeA\ScaleColor
EndMacro
Macro GetGaugeScaleBackGroundColor(GaugeA)
GaugeA\ScaleBackGroundColor
EndMacro
Macro GetGaugeTextColor(GaugeA)
GaugeA\TextColor
EndMacro
Macro GetGaugeSubTextColor(GaugeA)
GaugeA\SubTextColor
EndMacro
Macro GetGaugeNeedleColor(GaugeA)
GaugeA\NeedleColor
EndMacro
Macro GetGaugeScaleFontHandle(GaugeA)
GaugeA\ScaleFontHandle
EndMacro
Macro GetGaugeTextFontHandle(GaugeA)
GaugeA\TextFontHandle
EndMacro
Macro GetGaugeSubTextFontHandle(GaugeA)
GaugeA\SubTextFontHandle
EndMacro
Macro GetGaugeLayerSize(GaugeA)
GaugeA\LayerSize
EndMacro
Macro GetGaugeNeedleLength(GaugeA)
GaugeA\NeedleLength
EndMacro
Macro GetGaugeNeedlePivotRadius(GaugeA)
GaugeA\NeedlePivotRadius
EndMacro
Macro GetGaugeNeedleTipWidth(GaugeA)
GaugeA\NeedleTipWidth
EndMacro
Macro GetGaugeNeedleCenWidth(GaugeA)
GaugeA\NeedleCenWidth
EndMacro
Macro GetGaugeScaleLayer(GaugeA)
GaugeA\ScaleLayer
EndMacro
Macro GetGaugeNeedleLayer(GaugeA)
GaugeA\NeedleLayer
EndMacro
Macro GetGaugeComposedLayer(GaugeA)
GaugeA\ComposedLayer
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs <<<<<
Macro SetGaugePosX(GaugeA, P_PosX)
GetGaugePosX(GaugeA) = P_PosX
EndMacro
Macro SetGaugePosY(GaugeA, P_PosY)
GetGaugePosY(GaugeA) = P_PosY
EndMacro
Macro SetGaugeSize(GaugeA, P_Size)
GetGaugeSize(GaugeA) = P_Size
EndMacro
Macro SetGaugeCenter(GaugeA, P_Center)
GetGaugeCenter(GaugeA) = P_Center
EndMacro
Macro SetGaugeScaleRadius(GaugeA, P_ScaleRadius)
GetGaugeScaleRadius(GaugeA) = P_ScaleRadius
EndMacro
Macro SetGaugeMin(GaugeA, P_Min)
GetGaugeMin(GaugeA) = P_Min
EndMacro
Macro SetGaugeMax(GaugeA, P_Max)
GetGaugeMax(GaugeA) = P_Max
EndMacro
Macro SetGaugeBigStep(GaugeA, P_BigStep)
GetGaugeBigStep(GaugeA) = P_BigStep
EndMacro
Macro SetGaugeSmallStep(GaugeA, P_SmallStep)
GetGaugeSmallStep(GaugeA) = P_SmallStep
EndMacro
Macro SetGaugeSectorDegrees(GaugeA, P_SectorDegrees)
GetGaugeSectorDegrees(GaugeA) = P_SectorDegrees
EndMacro
Macro SetGaugeValue(GaugeA, P_Value)
GetGaugeValue(GaugeA) = P_Value
EndMacro
Macro SetGaugeText(GaugeA, P_Text)
GetGaugeText(GaugeA) = P_Text
EndMacro
Macro SetGaugeSubText(GaugeA, P_SubText)
GetGaugeSubText(GaugeA) = P_SubText
EndMacro
Macro SetGaugeGadgetID(GaugeA, P_GadgetID)
GetGaugeGadgetID(GaugeA) = P_GadgetID
EndMacro
Macro SetGaugeGadgetHandle(GaugeA, P_GadgetHandle)
GetGaugeGadgetHandle(GaugeA) = P_GadgetHandle
EndMacro
Macro SetGaugeBackGroundColor(GaugeA, P_BackGroundColor)
GetGaugeBackGroundColor(GaugeA) = P_BackGroundColor
EndMacro
Macro SetGaugeScaleColor(GaugeA, P_ScaleColor)
GetGaugeScaleColor(GaugeA) = P_ScaleColor
EndMacro
Macro SetGaugeScaleBackGroundColor(GaugeA, P_ScaleBackGroundColor)
GetGaugeScaleBackGroundColor(GaugeA) = P_ScaleBackGroundColor
EndMacro
Macro SetGaugeTextColor(GaugeA, P_TextColor)
GetGaugeTextColor(GaugeA) = P_TextColor
EndMacro
Macro SetGaugeSubTextColor(GaugeA, P_SubTextColor)
GetGaugeSubTextColor(GaugeA) = P_SubTextColor
EndMacro
Macro SetGaugeNeedleColor(GaugeA, P_NeedleColor)
GetGaugeNeedleColor(GaugeA) = P_NeedleColor
EndMacro
Macro SetGaugeScaleFontHandle(GaugeA, P_ScaleFontHandle)
GetGaugeScaleFontHandle(GaugeA) = P_ScaleFontHandle
EndMacro
Macro SetGaugeTextFontHandle(GaugeA, P_TextFontHandle)
GetGaugeTextFontHandle(GaugeA) = P_TextFontHandle
EndMacro
Macro SetGaugeSubTextFontHandle(GaugeA, P_SubTextFontHandle)
GetGaugeSubTextFontHandle(GaugeA) = P_SubTextFontHandle
EndMacro
Macro SetGaugeLayerSize(GaugeA, P_LayerSize)
GetGaugeLayerSize(GaugeA) = P_LayerSize
EndMacro
Macro SetGaugeNeedleLength(GaugeA, P_NeedleLength)
GetGaugeNeedleLength(GaugeA) = P_NeedleLength
EndMacro
Macro SetGaugeNeedlePivotRadius(GaugeA, P_NeedlePivotRadius)
GetGaugeNeedlePivotRadius(GaugeA) = P_NeedlePivotRadius
EndMacro
Macro SetGaugeNeedleTipWidth(GaugeA, P_NeedleTipWidth)
GetGaugeNeedleTipWidth(GaugeA) = P_NeedleTipWidth
EndMacro
Macro SetGaugeNeedleCenWidth(GaugeA, P_NeedleCenWidth)
GetGaugeNeedleCenWidth(GaugeA) = P_NeedleCenWidth
EndMacro
Macro SetGaugeScaleLayer(GaugeA, P_ScaleLayer)
GetGaugeScaleLayer(GaugeA) = P_ScaleLayer
EndMacro
Macro SetGaugeNeedleLayer(GaugeA, P_NeedleLayer)
GetGaugeNeedleLayer(GaugeA) = P_NeedleLayer
EndMacro
Macro SetGaugeComposedLayer(GaugeA, P_ComposedLayer)
GetGaugeComposedLayer(GaugeA) = P_ComposedLayer
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Code généré en : 00.010 secondes (49500.00 lignes/seconde) <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Reset <<<<<
Macro ResetGauge(GaugeA)
SetGaugePosX(GaugeA, 0)
SetGaugePosY(GaugeA, 0)
SetGaugeSize(GaugeA, 0)
SetGaugeScaleRadius(GaugeA, 0)
SetGaugeMin(GaugeA, 0)
SetGaugeMax(GaugeA, 0)
SetGaugeBigStep(GaugeA, 0)
SetGaugeSmallStep(GaugeA, 0)
SetGaugeValue(GaugeA, 0)
SetGaugeText(GaugeA, "")
SetGaugeSubText(GaugeA, "")
SetGaugeGadgetID(GaugeA, 0)
SetGaugeGadgetHandle(GaugeA, 0)
SetGaugeBackGroundColor(GaugeA, 0)
SetGaugeScaleColor(GaugeA, 0)
SetGaugeScaleBackGroundColor(GaugeA, 0)
SetGaugeTextColor(GaugeA, 0)
SetGaugeSubTextColor(GaugeA, 0)
SetGaugeNeedleColor(GaugeA, 0)
SetGaugeLayerSize(GaugeA, 0)
SetGaugeNeedleLength(GaugeA, 0)
SetGaugeNeedlePivotRadius(GaugeA, 0)
SetGaugeNeedleTipWidth(GaugeA, 0)
SetGaugeNeedleCenWidth(GaugeA, 0)
If GetGaugeScaleFontHandle(GaugeA)
FreeFont(GetGaugeScaleFontHandle(GaugeA))
SetGaugeScaleFontHandle(GaugeA, 0)
EndIf
If GetGaugeTextFontHandle(GaugeA)
FreeFont(GetGaugeTextFontHandle(GaugeA))
SetGaugeTextFontHandle(GaugeA, 0)
EndIf
If GetGaugeSubTextFontHandle(GaugeA)
FreeFont(GetGaugeSubTextFontHandle(GaugeA))
SetGaugeSubTextFontHandle(GaugeA, 0)
EndIf
If GetGaugeScaleLayer(GaugeA)
FreeImage(GetGaugeScaleLayer(GaugeA))
SetGaugeScaleLayer(GaugeA, 0)
EndIf
If GetGaugeNeedleLayer(GaugeA)
FreeImage(GetGaugeNeedleLayer(GaugeA))
SetGaugeNeedleLayer(GaugeA, 0)
EndIf
If GetGaugeComposedLayer(GaugeA)
FreeImage(GetGaugeComposedLayer(GaugeA))
SetGaugeComposedLayer(GaugeA, 0)
EndIf
EndMacro
Macro ResizeGaugeGadget(GaugeA)
If GetGaugeGadgetID(GaugeA) <> #PB_Any
ResizeGadget(GetGaugeGadgetID(GaugeA), GetGaugePosX(GaugeA), GetGaugePosY(GaugeA), #PB_Ignore, #PB_Ignore)
Else
ResizeGadget(GetGaugeGadgetHandle(GaugeA), GetGaugePosX(GaugeA), GetGaugePosY(GaugeA), #PB_Ignore, #PB_Ignore)
EndIf
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Dessiner un texte centré en x, y <<<<<
Macro DrawTextCentered(x, y, Text, FrontColor, BackColor)
DrawText(x - TextWidth(Text) >> 1, y - TextHeight("Wg") >> 1, Text, FrontColor, BackColor)
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Trouver la plus grande valeur de type double <<<<<
Procedure.d MaxDouble(P_Number01.d, P_Number02.d)
Biggest_Double.d = P_Number01
If P_Number02 > Biggest_Double
Biggest_Double = P_Number02
EndIf
ProcedureReturn Biggest_Double
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Trouver la plus grande valeur de type long <<<<<
Procedure.l MaxLong(P_Number01.l, P_Number02.l)
Biggest_Long.l = P_Number01
If P_Number02 > Biggest_Long
Biggest_Long = P_Number02
EndIf
ProcedureReturn Biggest_Long
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs spéciaux <<<<<
Macro SetGaugePositionSize(GaugeA, P_X, P_Y, P_Size)
SetGaugePosX(GaugeA, P_X)
SetGaugePosY(GaugeA, P_Y)
SetGaugeSize(GaugeA, P_Size)
EndMacro
Macro SetGaugeTextEx(GaugeA, Text, Color_RGBA)
SetGaugeText(GaugeA, Text)
SetGaugeTextColor(GaugeA, Color_RGBA)
EndMacro
Macro SetGaugeSubTextEx(GaugeA, SubText, Color_RGBA)
SetGaugeSubText(GaugeA, SubText)
SetGaugeSubTextColor(GaugeA, Color_RGBA)
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur PaintGaugeBackground <<<<<
Macro PaintGaugeBackground(GaugeA)
DrawingMode(#PB_2DDrawing_AllChannels)
Box(0, 0, GetGaugeLayerSize(GaugeA), GetGaugeLayerSize(GaugeA), GetGaugeBackGroundColor(GaugeA))
; DrawingMode(#PB_2DDrawing_AllChannels | #PB_2DDrawing_Outlined)
; Box(0, 0, GetGaugeSize(GaugeA), GetGaugeSize(GaugeA), RGBA(0, 0, 0, 32))
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur PaintGaugeScale <<<<<
Macro PaintGaugeScale(GaugeA)
StartDegree.i = ((360 - GetGaugeSectorDegrees(GaugeA)) >> 1)
wpx = GetGaugeLayerSize(GaugeA) / 33
wpx2 = wpx / 4.0 * 3 - 1
SmallStepDegrees.d = GetGaugeSmallStep(GaugeA) / GetGaugeMax(GaugeA) * GetGaugeSectorDegrees(GaugeA)
BigStepDegrees.d = GetGaugeBigStep(GaugeA) / GetGaugeMax(GaugeA) * GetGaugeSectorDegrees(GaugeA)
DrawingMode(#PB_2DDrawing_AllChannels)
For I = 0 To GetGaugeSectorDegrees(GaugeA)
x = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + I)) * GetGaugeScaleRadius(GaugeA)
y = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + I)) * GetGaugeScaleRadius(GaugeA)
Circle(x, y, wpx, GetGaugeScaleColor(GaugeA))
Next
DrawingMode(#PB_2DDrawing_AllChannels)
For I = 0 To GetGaugeSectorDegrees(GaugeA)
x = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + I)) * GetGaugeScaleRadius(GaugeA)
y = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + I)) * GetGaugeScaleRadius(GaugeA)
Circle(x, y, wpx2, GetGaugeScaleBackGroundColor(GaugeA))
Next
dI.d = 0
While dI <= GetGaugeSectorDegrees(GaugeA)
x1 = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - wpx2)
y1 = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - wpx2)
x2 = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - (wpx2 / 2))
y2 = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - (wpx2 / 2))
LineXY(x1, y1, x2, y2, GetGaugeScaleColor(GaugeA))
dI + SmallStepDegrees
Wend
dI = 0
While dI <= GetGaugeSectorDegrees(GaugeA) + 1 ;?!
x1 = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - wpx)
y1 = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - wpx)
x2 = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) + wpx)
y2 = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) + wpx)
LineXY(x1, y1, x2, y2, GetGaugeScaleColor(GaugeA))
dI + BigStepDegrees
Wend
DrawingMode(#PB_2DDrawing_AlphaBlend | #PB_2DDrawing_Transparent)
DrawingFont(FontID(GetGaugeScaleFontHandle(GaugeA)))
dI = 0
I = 0
While dI <= GetGaugeSectorDegrees(GaugeA) + 1 ; not sure why that is needed
Offset.w = MaxLong(3, Len(Str(GetGaugeMax(GaugeA) - I)))
x = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) + wpx * Offset)
y = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) + wpx * Offset)
DrawTextCentered(x, y, Str(GetGaugeMax(GaugeA) - I), GetGaugeTextColor(GaugeA), RGBA(0, 0, 0, 0))
dI + BigStepDegrees
I + GetGaugeBigStep(GaugeA)
Wend
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur PaintGaugeDescription <<<<<
Macro PaintGaugeDescription(GaugeA)
DrawingMode(#PB_2DDrawing_AlphaBlend | #PB_2DDrawing_Transparent)
DrawingFont(FontID(GetGaugeTextFontHandle(GaugeA)))
x = GetGaugeCenter(GaugeA)
y = 32 * GetGaugeSize(GaugeA) / 10
DrawTextCentered(x, y, GetGaugeText(GaugeA), GetGaugeTextColor(GaugeA), RGBA(0, 0, 0, 0))
y + TextHeight("Wg")
DrawingFont(FontID(GetGaugeSubTextFontHandle(GaugeA)))
DrawTextCentered(x, y, GetGaugeSubText(GaugeA), GetGaugeSubTextColor(GaugeA), RGBA(0, 0, 0, 0))
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur PaintGaugeHand <<<<<
Macro PaintGaugeNeedle(GaugeA)
DrawingMode(#PB_2DDrawing_AllChannels)
HalfSize = GetGaugeLayerSize(GaugeA) >> 1
StartDegree.i = ((360 - GetGaugeSectorDegrees(GaugeA)) >> 1)
DirDegrees.d = StartDegree + (GetGaugeMax(GaugeA) - GetGaugeValue(GaugeA)) / GetGaugeMax(GaugeA) * GetGaugeSectorDegrees(GaugeA)
SinAngle.d = Sin(Radian(-DirDegrees))
CosAngle.d = Cos(Radian(-DirDegrees))
x1 = HalfSize + (GetGaugeNeedleCenWidth(GaugeA) * CosAngle); - 0 * SinAngle)
y1 = HalfSize + (GetGaugeNeedleCenWidth(GaugeA) * SinAngle); + 0 * CosAngle)
x2 = HalfSize + (-GetGaugeNeedleCenWidth(GaugeA) * CosAngle); - 0 * SinAngle)
y2 = HalfSize + (-GetGaugeNeedleCenWidth(GaugeA) * SinAngle); + 0 * CosAngle)
x3 = HalfSize + (-GetGaugeNeedleTipWidth(GaugeA) * CosAngle - GetGaugeNeedleLength(GaugeA) * SinAngle)
y3 = HalfSize + (-GetGaugeNeedleTipWidth(GaugeA) * SinAngle + GetGaugeNeedleLength(GaugeA) * CosAngle)
x4 = HalfSize + (GetGaugeNeedleTipWidth(GaugeA) * CosAngle - GetGaugeNeedleLength(GaugeA) * SinAngle)
y4 = HalfSize + (GetGaugeNeedleTipWidth(GaugeA) * SinAngle + GetGaugeNeedleLength(GaugeA) * CosAngle)
x5 = HalfSize + (-15 * SinAngle); + 0 * CosAngle)
y5 = HalfSize + (15 * CosAngle); + 0 * SinAngle)
LineXY(x1, y1, x2, y2, GetGaugeNeedleColor(GaugeA))
LineXY(x2, y2, x3, y3, GetGaugeNeedleColor(GaugeA))
LineXY(x3, y3, x4, y4, GetGaugeNeedleColor(GaugeA))
LineXY(x4, y4, x1, y1, GetGaugeNeedleColor(GaugeA))
FillArea(x5, y5, GetGaugeNeedleColor(GaugeA), GetGaugeNeedleColor(GaugeA))
Circle(HalfSize, HalfSize, GetGaugeNeedlePivotRadius(GaugeA), GetGaugeNeedleColor(GaugeA))
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur LoadGaugeFont <<<<<
Procedure LoadGaugeFont(*GaugeA.Gauge, FontName.s)
If GetGaugeScaleFontHandle(*GaugeA)
FreeFont(GetGaugeScaleFontHandle(*GaugeA))
EndIf
If GetGaugeTextFontHandle(*GaugeA)
FreeFont(GetGaugeTextFontHandle(*GaugeA))
EndIf
If GetGaugeSubTextFontHandle(*GaugeA)
FreeFont(GetGaugeSubTextFontHandle(*GaugeA))
EndIf
SetGaugeScaleFontHandle(*GaugeA, LoadFont(#PB_Any, FontName, 4 * MaxDouble(8, 0.04 * GetGaugeSize(*GaugeA))))
SetGaugeTextFontHandle(*GaugeA, LoadFont(#PB_Any, FontName, 4 * MaxDouble(9, 0.056 * GetGaugeSize(*GaugeA)), #PB_Font_Bold))
SetGaugeSubTextFontHandle(*GaugeA, LoadFont(#PB_Any, FontName, 4 * MaxDouble(8, 0.04 * GetGaugeSize(*GaugeA))))
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur RepaintGaugeLayer <<<<<
Procedure RepaintGaugeLayer(*GaugeA.Gauge, Needle.b, Scale.b)
If Needle = #True
If GetGaugeNeedleLayer(*GaugeA)
FreeImage(GetGaugeNeedleLayer(*GaugeA))
EndIf
SetGaugeNeedleLayer(*GaugeA, CreateImage(#PB_Any, GetGaugeLayerSize(*GaugeA), GetGaugeLayerSize(*GaugeA), 32 | #PB_Image_Transparent))
If StartDrawing(ImageOutput(GetGaugeNeedleLayer(*GaugeA)))
PaintGaugeNeedle(*GaugeA)
StopDrawing()
EndIf
ResizeImage(GetGaugeNeedleLayer(*GaugeA), GetGaugeSize(*GaugeA), GetGaugeSize(*GaugeA))
EndIf
If Scale = #True
If GetGaugeScaleLayer(*GaugeA)
FreeImage(GetGaugeScaleLayer(*GaugeA))
EndIf
SetGaugeScaleLayer(*GaugeA, CreateImage(#PB_Any, GetGaugeLayerSize(*GaugeA), GetGaugeLayerSize(*GaugeA), 32 | #PB_Image_Transparent))
If StartDrawing(ImageOutput(GetGaugeScaleLayer(*GaugeA)))
PaintGaugeBackground(*GaugeA)
PaintGaugeScale(*GaugeA)
PaintGaugeDescription(*GaugeA)
StopDrawing()
EndIf
ResizeImage(GetGaugeScaleLayer(*GaugeA), GetGaugeSize(*GaugeA), GetGaugeSize(*GaugeA))
EndIf
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur RefreshGaugeGadget <<<<<
Procedure RefreshGaugeGadget(*GaugeA.Gauge)
If GetGaugeComposedLayer(*GaugeA)
FreeImage(GetGaugeComposedLayer(*GaugeA))
EndIf
SetGaugeComposedLayer(*GaugeA, CreateImage(#PB_Any, GetGaugeSize(*GaugeA), GetGaugeSize(*GaugeA), 32 | #PB_Image_Transparent))
If StartDrawing(ImageOutput(GetGaugeComposedLayer(*GaugeA)))
DrawingMode(#PB_2DDrawing_AlphaBlend)
DrawImage(ImageID(GetGaugeScaleLayer(*GaugeA)), 0, 0)
DrawImage(ImageID(GetGaugeNeedleLayer(*GaugeA)), 0, 0)
StopDrawing()
EndIf
If GetGaugeGadgetID(*GaugeA) <> #PB_Any
SetGadgetState(GetGaugeGadgetID(*GaugeA), ImageID(GetGaugeComposedLayer(*GaugeA)))
Else
SetGadgetState(GetGaugeGadgetHandle(*GaugeA), ImageID(GetGaugeComposedLayer(*GaugeA)))
EndIf
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur GaugeGadget <<<<<
Procedure GaugeGadget(*GaugeA.Gauge, GaugeID.l, x.w, y.w, Size.w, FontName.s = "", Options.l = 0)
SetGaugeGadgetID(*GaugeA, GaugeID)
SetGaugeGadgetHandle(*GaugeA, ImageGadget(GetGaugeGadgetID(*GaugeA), x, y, Size, Size, 0, Options))
If GetGaugeGadgetID(*GaugeA) <> #PB_Any
SetGadgetData(GetGaugeGadgetID(*GaugeA), *GaugeA)
Else
EndIf
SetGaugePositionSize(*GaugeA, x, y, Size)
SetGaugeCenter(*GaugeA, (4*Size) >> 1)
SetGaugeScaleRadius(*GaugeA, 4 * Size * 3 / 10)
SetGaugeLayerSize(*GaugeA, Size * 4)
SetGaugeNeedleLength(*GaugeA, (1 + GetGaugeScaleRadius(*GaugeA)))
SetGaugeNeedlePivotRadius(*GaugeA, GetGaugeNeedleLength(*GaugeA) / 10)
SetGaugeNeedleTipWidth(*GaugeA, GetGaugeNeedlePivotRadius(*GaugeA) / 7)
SetGaugeNeedleCenWidth(*GaugeA, GetGaugeNeedlePivotRadius(*GaugeA) / 2)
If FontName <> ""
LoadGaugeFont(*GaugeA, FontName)
EndIf
SetGaugeSectorDegrees(*GaugeA, 270)
SetGaugeBackGroundColor(*GaugeA, RGBA(0, 0, 0, 0))
SetGaugeScaleColor(*GaugeA, RGBA(62, 62, 128, 192))
SetGaugeScaleBackGroundColor(*GaugeA, RGBA(64, 64, 64, 32))
SetGaugeTextColor(*GaugeA, RGBA(0, 0, 0, 255))
SetGaugeSubTextColor(*GaugeA, RGBA(92, 92, 92, 255))
SetGaugeNeedleColor(*GaugeA, RGBA(255, 000, 000, 255))
SetGaugeMin(*GaugeA, 0)
SetGaugeMax(*GaugeA, 100)
SetGaugeBigStep(*GaugeA, 10)
SetGaugeSmallStep(*GaugeA, 5)
SetGaugeValue(*GaugeA, 0)
SetGaugeText(*GaugeA, "Value")
SetGaugeSubText(*GaugeA, "in units")
RepaintGaugeLayer(*GaugeA, #True, #True)
RefreshGaugeGadget(*GaugeA)
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur ChangeGaugeGadgetValue <<<<<
Procedure ChangeGaugeGadgetValue(*GaugeA.Gauge, P_Value.l)
SetGaugeValue(*GaugeA, P_Value)
RepaintGaugeLayer(*GaugeA, #True, #False)
RefreshGaugeGadget(*GaugeA)
EndProcedure
Procedure ChangeGaugeGadgetSectorDegrees(*GaugeA.Gauge, P_SectorDegrees.l)
SetGaugeSectorDegrees(*GaugeA, P_SectorDegrees)
RepaintGaugeLayer(*GaugeA, #True, #True)
RefreshGaugeGadget(*GaugeA)
EndProcedure
Procedure ChangeGaugeGadgetMinMaxSteps(*GaugeA.Gauge, P_Min.l, P_Max.l, P_BigStep.l, P_SmallStep.l)
SetGaugeMin(*GaugeA, P_Min)
SetGaugeMax(*GaugeA, P_Max)
SetGaugeBigStep(*GaugeA, P_BigStep)
SetGaugeSmallStep(*GaugeA, P_SmallStep)
RepaintGaugeLayer(*GaugeA, #False, #True)
RefreshGaugeGadget(*GaugeA)
EndProcedure
Procedure ChangeGaugeGadgetDescription(*GaugeA.Gauge, P_Text.s, P_SubText.s)
SetGaugeText(*GaugeA, P_Text)
SetGaugeSubText(*GaugeA, P_SubText)
RepaintGaugeLayer(*GaugeA, #False, #True)
RefreshGaugeGadget(*GaugeA)
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< !!! WARNING - YOU ARE NOW IN A TESTING ZONE - WARNING !!! <<<<<
; <<<<< !!! WARNING - THIS CODE SHOULD BE COMMENTED - WARNING !!! <<<<<
; <<<<< !!! WARNING - BEFORE THE FINAL COMPILATION. - WARNING !!! <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#Size = 200
#W = 2 * #Size + 145
#H = 2 * #Size + 25
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Linux
FontName.s = "Liberation Sans"
CompilerCase #PB_OS_Windows
FontName.s = "Tahoma"
CompilerEndSelect
If OpenWindow(0, 0, 0, #W, #H, "Gauge Gadget Demo", #PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
TrackBarGadget(0, 5, 5, 20, #Size, 0, 3600, #PB_TrackBar_Vertical)
TrackBarGadget(1, 30, 5, 20, #Size, 1, 360, #PB_TrackBar_Vertical)
SetGadgetState(0, 0)
SetGadgetState(1, 270)
GaugeGadget(Pressure.Gauge, 3, 55, 5, #Size, FontName, 1)
ChangeGaugeGadgetMinMaxSteps(Pressure, 0, 3600, 300, 150)
ChangeGaugeGadgetDescription(Pressure, "Pressure", "in kPa")
TrackBarGadget(4, 85 + #Size, 5, 20, #Size, 0, 200, #PB_TrackBar_Vertical)
TrackBarGadget(5, 110 + #Size, 5, 20, #Size, 1, 360, #PB_TrackBar_Vertical)
SetGadgetState(4, 0)
SetGadgetState(5, 250)
GaugeGadget(Temperature.Gauge, 6, 135 + #Size, 5, #Size, FontName, 1)
ChangeGaugeGadgetMinMaxSteps(Temperature, 0, 200, 20, 5)
ChangeGaugeGadgetDescription(Temperature, "Temperature", "in K")
ChangeGaugeGadgetSectorDegrees(Temperature, 250)
TrackBarGadget(7, 5 , 15 + #Size, 20, #Size, 0, 100, #PB_TrackBar_Vertical)
TrackBarGadget(8, 30, 15 + #Size, 20, #Size, 1, 360, #PB_TrackBar_Vertical)
SetGadgetState(7, 0)
SetGadgetState(8, 270)
GaugeGadget(Humidity.Gauge, 9, 55, 15 + #Size, #Size, FontName, 1)
ChangeGaugeGadgetMinMaxSteps(Humidity, 0, 100, 10, 5)
ChangeGaugeGadgetDescription(Humidity, "Humidity", "in %")
TrackBarGadget(10, 85 + #Size, 15 + #Size, 20, #Size, 0, 50, #PB_TrackBar_Vertical)
TrackBarGadget(11, 110 + #Size, 15 + #Size, 20, #Size, 1, 360, #PB_TrackBar_Vertical)
SetGadgetState(10, 0)
SetGadgetState(11, 250)
GaugeGadget(Density.Gauge, 12, 135 + #Size, 15 + #Size, #Size, FontName, 1)
ChangeGaugeGadgetMinMaxSteps(Density, 0, 50, 5, 1)
ChangeGaugeGadgetDescription(Density, "Density", "kg/m³")
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case 0 ; Change value
ChangeGaugeGadgetValue(Pressure, GetGadgetState(0))
Case 1 ; Change size in degrees
ChangeGaugeGadgetSectorDegrees(Pressure, GetGadgetState(1))
Case 4 ; Change value
ChangeGaugeGadgetValue(Temperature, GetGadgetState(4))
Case 5 ; Change size in degrees
ChangeGaugeGadgetSectorDegrees(Temperature, GetGadgetState(5))
Case 7 ; Change value
ChangeGaugeGadgetValue(Humidity, GetGadgetState(7))
Case 8 ; Change size in degrees
ChangeGaugeGadgetSectorDegrees(Humidity, GetGadgetState(8))
Case 10 ; Change value
ChangeGaugeGadgetValue(Density, GetGadgetState(10))
Case 11 ; Change size in degrees
ChangeGaugeGadgetSectorDegrees(Density, GetGadgetState(11))
EndSelect
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver
ResetGauge(Pressure)
ResetGauge(Temperature)
ResetGauge(Humidity)
ResetGauge(Density)
EndIf
; <<<<<<<<<<<<<<<<<<<<<<<
; <<<<< END OF FILE <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<
Code: Select all
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Project name : GaugeGadget
; File Name : GaugeGadget.pb
; File version: 3.0.0
; Programmation : OK
; Programmed by : Trond
; Modified by : Guimauve
; Date : 20-02-2011
; Mise à jour : 10-05-2012
; PureBasic code : 4.61
; Plateform : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Notes :
;
; Some field in the Gauge Structure has been
; renamed or suppressed.
;
; A layer has been added for the Needle. The size
; for this layer is 4 times larger than other
; layer. This is needed to draw the needle more
; smootly.
;
; Finally, the GaugeGadget shape can be square
; only.
;
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration de la Structure <<<<<
Structure Gauge
PosX.w
PosY.w
Size.w
Center.w
ScaleRadius.w
Min.l
Max.l
BigStep.l
SmallStep.l
SectorDegrees.w
Value.l
Text.s
SubText.s
GadgetID.l
GadgetHandle.l
BackGroundColor.l
ScaleColor.l
ScaleBackGroundColor.l
TextColor.l
SubTextColor.l
NeedleColor.l
ScaleFontHandle.i
TextFontHandle.i
SubTextFontHandle.i
DrawingScale.b
LayerSize.w
NeedleLength.l
NeedlePivotRadius.l
NeedleTipWidth.l
NeedleCenWidth.l
ScaleLayer.l
NeedleLayer.l
ComposedLayer.l
EndStructure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs <<<<<
Macro GetGaugePosX(GaugeA)
GaugeA\PosX
EndMacro
Macro GetGaugePosY(GaugeA)
GaugeA\PosY
EndMacro
Macro GetGaugeSize(GaugeA)
GaugeA\Size
EndMacro
Macro GetGaugeCenter(GaugeA)
GaugeA\Center
EndMacro
Macro GetGaugeScaleRadius(GaugeA)
GaugeA\ScaleRadius
EndMacro
Macro GetGaugeMin(GaugeA)
GaugeA\Min
EndMacro
Macro GetGaugeMax(GaugeA)
GaugeA\Max
EndMacro
Macro GetGaugeBigStep(GaugeA)
GaugeA\BigStep
EndMacro
Macro GetGaugeSmallStep(GaugeA)
GaugeA\SmallStep
EndMacro
Macro GetGaugeSectorDegrees(GaugeA)
GaugeA\SectorDegrees
EndMacro
Macro GetGaugeValue(GaugeA)
GaugeA\Value
EndMacro
Macro GetGaugeText(GaugeA)
GaugeA\Text
EndMacro
Macro GetGaugeSubText(GaugeA)
GaugeA\SubText
EndMacro
Macro GetGaugeGadgetID(GaugeA)
GaugeA\GadgetID
EndMacro
Macro GetGaugeGadgetHandle(GaugeA)
GaugeA\GadgetHandle
EndMacro
Macro GetGaugeBackGroundColor(GaugeA)
GaugeA\BackGroundColor
EndMacro
Macro GetGaugeScaleColor(GaugeA)
GaugeA\ScaleColor
EndMacro
Macro GetGaugeScaleBackGroundColor(GaugeA)
GaugeA\ScaleBackGroundColor
EndMacro
Macro GetGaugeTextColor(GaugeA)
GaugeA\TextColor
EndMacro
Macro GetGaugeSubTextColor(GaugeA)
GaugeA\SubTextColor
EndMacro
Macro GetGaugeNeedleColor(GaugeA)
GaugeA\NeedleColor
EndMacro
Macro GetGaugeScaleFontHandle(GaugeA)
GaugeA\ScaleFontHandle
EndMacro
Macro GetGaugeTextFontHandle(GaugeA)
GaugeA\TextFontHandle
EndMacro
Macro GetGaugeSubTextFontHandle(GaugeA)
GaugeA\SubTextFontHandle
EndMacro
Macro GetGaugeDrawingScale(GaugeA)
GaugeA\DrawingScale
EndMacro
Macro GetGaugeLayerSize(GaugeA)
GaugeA\LayerSize
EndMacro
Macro GetGaugeNeedleLength(GaugeA)
GaugeA\NeedleLength
EndMacro
Macro GetGaugeNeedlePivotRadius(GaugeA)
GaugeA\NeedlePivotRadius
EndMacro
Macro GetGaugeNeedleTipWidth(GaugeA)
GaugeA\NeedleTipWidth
EndMacro
Macro GetGaugeNeedleCenWidth(GaugeA)
GaugeA\NeedleCenWidth
EndMacro
Macro GetGaugeScaleLayer(GaugeA)
GaugeA\ScaleLayer
EndMacro
Macro GetGaugeNeedleLayer(GaugeA)
GaugeA\NeedleLayer
EndMacro
Macro GetGaugeComposedLayer(GaugeA)
GaugeA\ComposedLayer
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs <<<<<
Macro SetGaugePosX(GaugeA, P_PosX)
GetGaugePosX(GaugeA) = P_PosX
EndMacro
Macro SetGaugePosY(GaugeA, P_PosY)
GetGaugePosY(GaugeA) = P_PosY
EndMacro
Macro SetGaugeSize(GaugeA, P_Size)
GetGaugeSize(GaugeA) = P_Size
EndMacro
Macro SetGaugeCenter(GaugeA, P_Center)
GetGaugeCenter(GaugeA) = P_Center
EndMacro
Macro SetGaugeScaleRadius(GaugeA, P_ScaleRadius)
GetGaugeScaleRadius(GaugeA) = P_ScaleRadius
EndMacro
Macro SetGaugeMin(GaugeA, P_Min)
GetGaugeMin(GaugeA) = P_Min
EndMacro
Macro SetGaugeMax(GaugeA, P_Max)
GetGaugeMax(GaugeA) = P_Max
EndMacro
Macro SetGaugeBigStep(GaugeA, P_BigStep)
GetGaugeBigStep(GaugeA) = P_BigStep
EndMacro
Macro SetGaugeSmallStep(GaugeA, P_SmallStep)
GetGaugeSmallStep(GaugeA) = P_SmallStep
EndMacro
Macro SetGaugeSectorDegrees(GaugeA, P_SectorDegrees)
GetGaugeSectorDegrees(GaugeA) = P_SectorDegrees
EndMacro
Macro SetGaugeValue(GaugeA, P_Value)
GetGaugeValue(GaugeA) = P_Value
EndMacro
Macro SetGaugeText(GaugeA, P_Text)
GetGaugeText(GaugeA) = P_Text
EndMacro
Macro SetGaugeSubText(GaugeA, P_SubText)
GetGaugeSubText(GaugeA) = P_SubText
EndMacro
Macro SetGaugeGadgetID(GaugeA, P_GadgetID)
GetGaugeGadgetID(GaugeA) = P_GadgetID
EndMacro
Macro SetGaugeGadgetHandle(GaugeA, P_GadgetHandle)
GetGaugeGadgetHandle(GaugeA) = P_GadgetHandle
EndMacro
Macro SetGaugeBackGroundColor(GaugeA, P_BackGroundColor)
GetGaugeBackGroundColor(GaugeA) = P_BackGroundColor
EndMacro
Macro SetGaugeScaleColor(GaugeA, P_ScaleColor)
GetGaugeScaleColor(GaugeA) = P_ScaleColor
EndMacro
Macro SetGaugeScaleBackGroundColor(GaugeA, P_ScaleBackGroundColor)
GetGaugeScaleBackGroundColor(GaugeA) = P_ScaleBackGroundColor
EndMacro
Macro SetGaugeTextColor(GaugeA, P_TextColor)
GetGaugeTextColor(GaugeA) = P_TextColor
EndMacro
Macro SetGaugeSubTextColor(GaugeA, P_SubTextColor)
GetGaugeSubTextColor(GaugeA) = P_SubTextColor
EndMacro
Macro SetGaugeNeedleColor(GaugeA, P_NeedleColor)
GetGaugeNeedleColor(GaugeA) = P_NeedleColor
EndMacro
Macro SetGaugeScaleFontHandle(GaugeA, P_ScaleFontHandle)
GetGaugeScaleFontHandle(GaugeA) = P_ScaleFontHandle
EndMacro
Macro SetGaugeTextFontHandle(GaugeA, P_TextFontHandle)
GetGaugeTextFontHandle(GaugeA) = P_TextFontHandle
EndMacro
Macro SetGaugeSubTextFontHandle(GaugeA, P_SubTextFontHandle)
GetGaugeSubTextFontHandle(GaugeA) = P_SubTextFontHandle
EndMacro
Macro SetGaugeDrawingScale(GaugeA, P_DrawingScale)
GetGaugeDrawingScale(GaugeA) = P_DrawingScale
EndMacro
Macro SetGaugeLayerSize(GaugeA, P_LayerSize)
GetGaugeLayerSize(GaugeA) = P_LayerSize
EndMacro
Macro SetGaugeNeedleLength(GaugeA, P_NeedleLength)
GetGaugeNeedleLength(GaugeA) = P_NeedleLength
EndMacro
Macro SetGaugeNeedlePivotRadius(GaugeA, P_NeedlePivotRadius)
GetGaugeNeedlePivotRadius(GaugeA) = P_NeedlePivotRadius
EndMacro
Macro SetGaugeNeedleTipWidth(GaugeA, P_NeedleTipWidth)
GetGaugeNeedleTipWidth(GaugeA) = P_NeedleTipWidth
EndMacro
Macro SetGaugeNeedleCenWidth(GaugeA, P_NeedleCenWidth)
GetGaugeNeedleCenWidth(GaugeA) = P_NeedleCenWidth
EndMacro
Macro SetGaugeScaleLayer(GaugeA, P_ScaleLayer)
GetGaugeScaleLayer(GaugeA) = P_ScaleLayer
EndMacro
Macro SetGaugeNeedleLayer(GaugeA, P_NeedleLayer)
GetGaugeNeedleLayer(GaugeA) = P_NeedleLayer
EndMacro
Macro SetGaugeComposedLayer(GaugeA, P_ComposedLayer)
GetGaugeComposedLayer(GaugeA) = P_ComposedLayer
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Code généré en : 00.009 secondes (49222.22 lignes/seconde) <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Reset <<<<<
Macro ResetGauge(GaugeA)
SetGaugePosX(GaugeA, 0)
SetGaugePosY(GaugeA, 0)
SetGaugeSize(GaugeA, 0)
SetGaugeScaleRadius(GaugeA, 0)
SetGaugeMin(GaugeA, 0)
SetGaugeMax(GaugeA, 0)
SetGaugeBigStep(GaugeA, 0)
SetGaugeSmallStep(GaugeA, 0)
SetGaugeValue(GaugeA, 0)
SetGaugeText(GaugeA, "")
SetGaugeSubText(GaugeA, "")
SetGaugeGadgetID(GaugeA, 0)
SetGaugeGadgetHandle(GaugeA, 0)
SetGaugeBackGroundColor(GaugeA, 0)
SetGaugeScaleColor(GaugeA, 0)
SetGaugeScaleBackGroundColor(GaugeA, 0)
SetGaugeTextColor(GaugeA, 0)
SetGaugeSubTextColor(GaugeA, 0)
SetGaugeNeedleColor(GaugeA, 0)
SetGaugeDrawingScale(GaugeA, 0)
SetGaugeLayerSize(GaugeA, 0)
SetGaugeNeedleLength(GaugeA, 0)
SetGaugeNeedlePivotRadius(GaugeA, 0)
SetGaugeNeedleTipWidth(GaugeA, 0)
SetGaugeNeedleCenWidth(GaugeA, 0)
If GetGaugeScaleFontHandle(GaugeA)
FreeFont(GetGaugeScaleFontHandle(GaugeA))
SetGaugeScaleFontHandle(GaugeA, 0)
EndIf
If GetGaugeTextFontHandle(GaugeA)
FreeFont(GetGaugeTextFontHandle(GaugeA))
SetGaugeTextFontHandle(GaugeA, 0)
EndIf
If GetGaugeSubTextFontHandle(GaugeA)
FreeFont(GetGaugeSubTextFontHandle(GaugeA))
SetGaugeSubTextFontHandle(GaugeA, 0)
EndIf
If GetGaugeScaleLayer(GaugeA)
FreeImage(GetGaugeScaleLayer(GaugeA))
SetGaugeScaleLayer(GaugeA, 0)
EndIf
If GetGaugeNeedleLayer(GaugeA)
FreeImage(GetGaugeNeedleLayer(GaugeA))
SetGaugeNeedleLayer(GaugeA, 0)
EndIf
If GetGaugeComposedLayer(GaugeA)
FreeImage(GetGaugeComposedLayer(GaugeA))
SetGaugeComposedLayer(GaugeA, 0)
EndIf
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Le Constructeur <<<<<
Procedure.i CreateNewGauge()
*GaugeA.Gauge = AllocateMemory(SizeOf(Gauge))
If *GaugeA = #Null
MessageRequester("Fatal Error", "CreateNewGauge() - Impossible to Allocate Memory !")
End
EndIf
ProcedureReturn *GaugeA
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Dessiner un texte centré en x, y <<<<<
Macro DrawTextCentered(x, y, Text, FrontColor, BackColor)
DrawText(x - TextWidth(Text) >> 1, y - TextHeight("Wg") >> 1, Text, FrontColor, BackColor)
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Trouver la plus grande valeur de type double <<<<<
Procedure.d MaxDouble(P_Number01.d, P_Number02.d)
Biggest_Double.d = P_Number01
If P_Number02 > Biggest_Double
Biggest_Double = P_Number02
EndIf
ProcedureReturn Biggest_Double
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Trouver la plus grande valeur de type long <<<<<
Procedure.l MaxLong(P_Number01.l, P_Number02.l)
Biggest_Long.l = P_Number01
If P_Number02 > Biggest_Long
Biggest_Long = P_Number02
EndIf
ProcedureReturn Biggest_Long
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs spéciaux <<<<<
Macro SetGaugePositionSize(GaugeA, P_X, P_Y, P_Size)
SetGaugePosX(GaugeA, P_X)
SetGaugePosY(GaugeA, P_Y)
SetGaugeSize(GaugeA, P_Size)
EndMacro
Macro SetGaugeTextEx(GaugeA, Text, Color_RGBA)
SetGaugeText(GaugeA, Text)
SetGaugeTextColor(GaugeA, Color_RGBA)
EndMacro
Macro SetGaugeSubTextEx(GaugeA, SubText, Color_RGBA)
SetGaugeSubText(GaugeA, SubText)
SetGaugeSubTextColor(GaugeA, Color_RGBA)
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur PaintGaugeBackground <<<<<
Macro PaintGaugeBackground(GaugeA)
DrawingMode(#PB_2DDrawing_AllChannels)
Box(0, 0, GetGaugeLayerSize(GaugeA), GetGaugeLayerSize(GaugeA), GetGaugeBackGroundColor(GaugeA))
; DrawingMode(#PB_2DDrawing_AllChannels | #PB_2DDrawing_Outlined)
; Box(0, 0, GetGaugeSize(GaugeA), GetGaugeSize(GaugeA), RGBA(0, 0, 0, 32))
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur PaintGaugeScale <<<<<
Macro PaintGaugeScale(GaugeA)
StartDegree.i = ((360 - GetGaugeSectorDegrees(GaugeA)) >> 1)
wpx = GetGaugeLayerSize(GaugeA) / 33
wpx2 = wpx / GetGaugeDrawingScale(GaugeA) * 3 - 1
SmallStepDegrees.d = GetGaugeSmallStep(GaugeA) / GetGaugeMax(GaugeA) * GetGaugeSectorDegrees(GaugeA)
BigStepDegrees.d = GetGaugeBigStep(GaugeA) / GetGaugeMax(GaugeA) * GetGaugeSectorDegrees(GaugeA)
DrawingMode(#PB_2DDrawing_AllChannels)
For I = 0 To GetGaugeSectorDegrees(GaugeA)
x = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + I)) * GetGaugeScaleRadius(GaugeA)
y = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + I)) * GetGaugeScaleRadius(GaugeA)
Circle(x, y, wpx, GetGaugeScaleColor(GaugeA))
Next
DrawingMode(#PB_2DDrawing_AllChannels)
For I = 0 To GetGaugeSectorDegrees(GaugeA)
x = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + I)) * GetGaugeScaleRadius(GaugeA)
y = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + I)) * GetGaugeScaleRadius(GaugeA)
Circle(x, y, wpx2, GetGaugeScaleBackGroundColor(GaugeA))
Next
dI.d = 0
While dI <= GetGaugeSectorDegrees(GaugeA)
x1 = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - wpx2)
y1 = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - wpx2)
x2 = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - (wpx2 / 2))
y2 = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - (wpx2 / 2))
LineXY(x1, y1, x2, y2, GetGaugeScaleColor(GaugeA))
dI + SmallStepDegrees
Wend
dI = 0
While dI <= GetGaugeSectorDegrees(GaugeA) + 1 ;?!
x1 = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - wpx)
y1 = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - wpx)
x2 = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) + wpx)
y2 = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) + wpx)
LineXY(x1, y1, x2, y2, GetGaugeScaleColor(GaugeA))
dI + BigStepDegrees
Wend
DrawingMode(#PB_2DDrawing_AlphaBlend | #PB_2DDrawing_Transparent)
DrawingFont(FontID(GetGaugeScaleFontHandle(GaugeA)))
dI = 0
I = 0
While dI <= GetGaugeSectorDegrees(GaugeA) + 1 ; not sure why that is needed
Offset.w = MaxLong(3, Len(Str(GetGaugeMax(GaugeA) - I)))
x = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) + wpx * Offset)
y = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) + wpx * Offset)
DrawTextCentered(x, y, Str(GetGaugeMax(GaugeA) - I), GetGaugeTextColor(GaugeA), RGBA(0, 0, 0, 0))
dI + BigStepDegrees
I + GetGaugeBigStep(GaugeA)
Wend
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur PaintGaugeDescription <<<<<
Macro PaintGaugeDescription(GaugeA)
DrawingMode(#PB_2DDrawing_AlphaBlend | #PB_2DDrawing_Transparent)
DrawingFont(FontID(GetGaugeTextFontHandle(GaugeA)))
x = GetGaugeCenter(GaugeA)
y = GetGaugeDrawingScale(GaugeA) * 8 * GetGaugeSize(GaugeA) / 10
DrawTextCentered(x, y, GetGaugeText(GaugeA), GetGaugeTextColor(GaugeA), RGBA(0, 0, 0, 0))
y + TextHeight("Wg")
DrawingFont(FontID(GetGaugeSubTextFontHandle(GaugeA)))
DrawTextCentered(x, y, GetGaugeSubText(GaugeA), GetGaugeSubTextColor(GaugeA), RGBA(0, 0, 0, 0))
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur PaintGaugeHand <<<<<
Macro PaintGaugeNeedle(GaugeA)
DrawingMode(#PB_2DDrawing_AllChannels)
HalfSize = GetGaugeLayerSize(GaugeA) >> 1
StartDegree.i = ((360 - GetGaugeSectorDegrees(GaugeA)) >> 1)
DirDegrees.d = StartDegree + (GetGaugeMax(GaugeA) - GetGaugeValue(GaugeA)) / GetGaugeMax(GaugeA) * GetGaugeSectorDegrees(GaugeA)
SinAngle.d = Sin(Radian(-DirDegrees))
CosAngle.d = Cos(Radian(-DirDegrees))
x1 = HalfSize + (GetGaugeNeedleCenWidth(GaugeA) * CosAngle)
y1 = HalfSize + (GetGaugeNeedleCenWidth(GaugeA) * SinAngle)
x2 = HalfSize + (-GetGaugeNeedleCenWidth(GaugeA) * CosAngle)
y2 = HalfSize + (-GetGaugeNeedleCenWidth(GaugeA) * SinAngle)
x3 = HalfSize + (-GetGaugeNeedleTipWidth(GaugeA) * CosAngle - GetGaugeNeedleLength(GaugeA) * SinAngle)
y3 = HalfSize + (-GetGaugeNeedleTipWidth(GaugeA) * SinAngle + GetGaugeNeedleLength(GaugeA) * CosAngle)
x4 = HalfSize + (GetGaugeNeedleTipWidth(GaugeA) * CosAngle - GetGaugeNeedleLength(GaugeA) * SinAngle)
y4 = HalfSize + (GetGaugeNeedleTipWidth(GaugeA) * SinAngle + GetGaugeNeedleLength(GaugeA) * CosAngle)
x5 = HalfSize + (-15 * SinAngle)
y5 = HalfSize + (15 * CosAngle)
LineXY(x1, y1, x2, y2, GetGaugeNeedleColor(GaugeA))
LineXY(x2, y2, x3, y3, GetGaugeNeedleColor(GaugeA))
LineXY(x3, y3, x4, y4, GetGaugeNeedleColor(GaugeA))
LineXY(x4, y4, x1, y1, GetGaugeNeedleColor(GaugeA))
FillArea(x5, y5, GetGaugeNeedleColor(GaugeA), GetGaugeNeedleColor(GaugeA))
Circle(HalfSize, HalfSize, GetGaugeNeedlePivotRadius(GaugeA), GetGaugeNeedleColor(GaugeA))
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur LoadGaugeFont <<<<<
Procedure Private_LoadGaugeFont(*GaugeA.Gauge, FontName.s)
If GetGaugeScaleFontHandle(*GaugeA)
FreeFont(GetGaugeScaleFontHandle(*GaugeA))
EndIf
If GetGaugeTextFontHandle(*GaugeA)
FreeFont(GetGaugeTextFontHandle(*GaugeA))
EndIf
If GetGaugeSubTextFontHandle(*GaugeA)
FreeFont(GetGaugeSubTextFontHandle(*GaugeA))
EndIf
SetGaugeScaleFontHandle(*GaugeA, LoadFont(#PB_Any, FontName, GetGaugeDrawingScale(*GaugeA) * MaxDouble(8, 0.04 * GetGaugeSize(*GaugeA))))
SetGaugeTextFontHandle(*GaugeA, LoadFont(#PB_Any, FontName, GetGaugeDrawingScale(*GaugeA) * MaxDouble(9, 0.056 * GetGaugeSize(*GaugeA)), #PB_Font_Bold))
SetGaugeSubTextFontHandle(*GaugeA, LoadFont(#PB_Any, FontName, GetGaugeDrawingScale(*GaugeA) * MaxDouble(8, 0.04 * GetGaugeSize(*GaugeA))))
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur RepaintGaugeLayer <<<<<
Procedure Private_RepaintGaugeLayer(*GaugeA.Gauge, Needle.b, Scale.b)
If Needle = #True
If GetGaugeNeedleLayer(*GaugeA)
FreeImage(GetGaugeNeedleLayer(*GaugeA))
EndIf
SetGaugeNeedleLayer(*GaugeA, CreateImage(#PB_Any, GetGaugeLayerSize(*GaugeA), GetGaugeLayerSize(*GaugeA), 32 | #PB_Image_Transparent))
If StartDrawing(ImageOutput(GetGaugeNeedleLayer(*GaugeA)))
PaintGaugeNeedle(*GaugeA)
StopDrawing()
EndIf
ResizeImage(GetGaugeNeedleLayer(*GaugeA), GetGaugeSize(*GaugeA), GetGaugeSize(*GaugeA))
EndIf
If Scale = #True
If GetGaugeScaleLayer(*GaugeA)
FreeImage(GetGaugeScaleLayer(*GaugeA))
EndIf
SetGaugeScaleLayer(*GaugeA, CreateImage(#PB_Any, GetGaugeLayerSize(*GaugeA), GetGaugeLayerSize(*GaugeA), 32 | #PB_Image_Transparent))
If StartDrawing(ImageOutput(GetGaugeScaleLayer(*GaugeA)))
PaintGaugeBackground(*GaugeA)
PaintGaugeScale(*GaugeA)
PaintGaugeDescription(*GaugeA)
StopDrawing()
EndIf
ResizeImage(GetGaugeScaleLayer(*GaugeA), GetGaugeSize(*GaugeA), GetGaugeSize(*GaugeA))
EndIf
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur RefreshGaugeGadget <<<<<
Procedure Private_RefreshGaugeGadget(*GaugeA.Gauge)
If GetGaugeComposedLayer(*GaugeA)
FreeImage(GetGaugeComposedLayer(*GaugeA))
EndIf
SetGaugeComposedLayer(*GaugeA, CreateImage(#PB_Any, GetGaugeSize(*GaugeA), GetGaugeSize(*GaugeA), 32 | #PB_Image_Transparent))
If StartDrawing(ImageOutput(GetGaugeComposedLayer(*GaugeA)))
DrawingMode(#PB_2DDrawing_AlphaBlend)
DrawImage(ImageID(GetGaugeScaleLayer(*GaugeA)), 0, 0)
DrawImage(ImageID(GetGaugeNeedleLayer(*GaugeA)), 0, 0)
StopDrawing()
EndIf
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur GaugeGadget <<<<<
Procedure GaugeGadget(GadgetID.l, x.w, y.w, Size.w, FontName.s = "", Options.l = 0)
*GaugeA.Gauge = CreateNewGauge()
If *GaugeA <> #Null
GadgetHandle = ImageGadget(GadgetID, x, y, Size, Size, 0, Options)
If GadgetID = #PB_Any
GadgetID = GadgetHandle
EndIf
SetGaugePositionSize(*GaugeA, x, y, Size)
SetGaugeDrawingScale(*GaugeA, 4)
SetGaugeCenter(*GaugeA, (GetGaugeDrawingScale(*GaugeA) * Size) >> 1)
SetGaugeScaleRadius(*GaugeA, GetGaugeDrawingScale(*GaugeA) * Size * 3 / 10)
SetGaugeLayerSize(*GaugeA, Size * GetGaugeDrawingScale(*GaugeA))
SetGaugeNeedleLength(*GaugeA, (1 + GetGaugeScaleRadius(*GaugeA)))
SetGaugeNeedlePivotRadius(*GaugeA, GetGaugeNeedleLength(*GaugeA) / 10)
SetGaugeNeedleTipWidth(*GaugeA, GetGaugeNeedlePivotRadius(*GaugeA) / 7)
SetGaugeNeedleCenWidth(*GaugeA, GetGaugeNeedlePivotRadius(*GaugeA) / 2)
If FontName <> ""
Private_LoadGaugeFont(*GaugeA, FontName)
EndIf
SetGaugeSectorDegrees(*GaugeA, 270)
SetGaugeBackGroundColor(*GaugeA, RGBA(0, 0, 0, 0))
SetGaugeScaleColor(*GaugeA, RGBA(62, 62, 128, 192))
SetGaugeScaleBackGroundColor(*GaugeA, RGBA(64, 64, 64, 32))
SetGaugeTextColor(*GaugeA, RGBA(0, 0, 0, 255))
SetGaugeSubTextColor(*GaugeA, RGBA(92, 92, 92, 255))
SetGaugeNeedleColor(*GaugeA, RGBA(255, 000, 000, 255))
SetGaugeMin(*GaugeA, 0)
SetGaugeMax(*GaugeA, 100)
SetGaugeBigStep(*GaugeA, 10)
SetGaugeSmallStep(*GaugeA, 5)
SetGaugeValue(*GaugeA, 0)
SetGaugeText(*GaugeA, "Value")
SetGaugeSubText(*GaugeA, "in units")
Private_RepaintGaugeLayer(*GaugeA, #True, #True)
Private_RefreshGaugeGadget(*GaugeA)
SetGadgetData(GadgetID, *GaugeA)
EndIf
ProcedureReturn GadgetID
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur SetGaugeGadgetValue <<<<<
Procedure SetGaugeGadgetValue(GadgetID, P_Value.l)
If IsGadget(GadgetID)
*GaugeA.Gauge = GetGadgetData(GadgetID)
If *GaugeA <> #Null
SetGaugeValue(*GaugeA, P_Value)
Private_RepaintGaugeLayer(*GaugeA, #True, #False)
Private_RefreshGaugeGadget(*GaugeA)
SetGadgetState(GadgetID, ImageID(GetGaugeComposedLayer(*GaugeA)))
EndIf
EndIf
EndProcedure
Procedure SetGaugeGadgetSectorDegrees(GadgetID, P_SectorDegrees.l)
If IsGadget(GadgetID)
*GaugeA.Gauge = GetGadgetData(GadgetID)
If *GaugeA <> #Null
SetGaugeSectorDegrees(*GaugeA, P_SectorDegrees)
Private_RepaintGaugeLayer(*GaugeA, #True, #True)
Private_RefreshGaugeGadget(*GaugeA)
SetGadgetState(GadgetID, ImageID(GetGaugeComposedLayer(*GaugeA)))
EndIf
EndIf
EndProcedure
Procedure SetGaugeGadgetMinMaxSteps(GadgetID, P_Min.l, P_Max.l, P_BigStep.l, P_SmallStep.l)
If IsGadget(GadgetID)
*GaugeA.Gauge = GetGadgetData(GadgetID)
If *GaugeA <> #Null
SetGaugeMin(*GaugeA, P_Min)
SetGaugeMax(*GaugeA, P_Max)
SetGaugeBigStep(*GaugeA, P_BigStep)
SetGaugeSmallStep(*GaugeA, P_SmallStep)
Private_RepaintGaugeLayer(*GaugeA, #False, #True)
Private_RefreshGaugeGadget(*GaugeA)
SetGadgetState(GadgetID, ImageID(GetGaugeComposedLayer(*GaugeA)))
EndIf
EndIf
EndProcedure
Procedure SetGaugeGadgetDescription(GadgetID, P_Text.s, P_SubText.s)
If IsGadget(GadgetID)
*GaugeA.Gauge = GetGadgetData(GadgetID)
If *GaugeA <> #Null
SetGaugeText(*GaugeA, P_Text)
SetGaugeSubText(*GaugeA, P_SubText)
Private_RepaintGaugeLayer(*GaugeA, #False, #True)
Private_RefreshGaugeGadget(*GaugeA)
SetGadgetState(GadgetID, ImageID(GetGaugeComposedLayer(*GaugeA)))
EndIf
EndIf
EndProcedure
Procedure FreeGaugeGadget(GadgetID)
If IsGadget(GadgetID)
*GaugeA.Gauge = GetGadgetData(GadgetID)
If *GaugeA <> #Null
ResetGauge(*GaugeA)
FreeMemory(*GaugeA)
FreeGadget(GadgetID)
EndIf
EndIf
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< !!! WARNING - YOU ARE NOW IN A TESTING ZONE - WARNING !!! <<<<<
; <<<<< !!! WARNING - THIS CODE SHOULD BE COMMENTED - WARNING !!! <<<<<
; <<<<< !!! WARNING - BEFORE THE FINAL COMPILATION. - WARNING !!! <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#Size = 200
#W = 2 * #Size + 145
#H = 2 * #Size + 25
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Linux
FontName.s = "Mint Spirit"
CompilerCase #PB_OS_Windows
FontName.s = "Tahoma"
CompilerCase #PB_OS_MacOS
FontName.s = "Arial"
CompilerEndSelect
If OpenWindow(0, 0, 0, #W, #H, "Gauge Gadget Demo", #PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
TrackBarGadget(0, 5, 5, 20, #Size, 0, 3600, #PB_TrackBar_Vertical)
TrackBarGadget(1, 30, 5, 20, #Size, 1, 360, #PB_TrackBar_Vertical)
SetGadgetState(0, 0)
SetGadgetState(1, 270)
GaugeGadget(3, 55, 5, #Size, FontName, 1)
SetGaugeGadgetMinMaxSteps(3, 0, 3600, 300, 150)
SetGaugeGadgetDescription(3, "Pressure", "in kPa")
TrackBarGadget(4, 85 + #Size, 5, 20, #Size, 0, 200, #PB_TrackBar_Vertical)
TrackBarGadget(5, 110 + #Size, 5, 20, #Size, 1, 360, #PB_TrackBar_Vertical)
SetGadgetState(4, 0)
SetGadgetState(5, 250)
GaugeGadget(6, 135 + #Size, 5, #Size, FontName, 1)
SetGaugeGadgetMinMaxSteps(6, 0, 200, 20, 5)
SetGaugeGadgetDescription(6, "Temperature", "in K")
SetGaugeGadgetSectorDegrees(6, 250)
TrackBarGadget(7, 5 , 15 + #Size, 20, #Size, 0, 100, #PB_TrackBar_Vertical)
TrackBarGadget(8, 30, 15 + #Size, 20, #Size, 1, 360, #PB_TrackBar_Vertical)
SetGadgetState(7, 0)
SetGadgetState(8, 270)
GaugeGadget(9, 55, 15 + #Size, #Size, FontName, 1)
SetGaugeGadgetMinMaxSteps(9, 0, 100, 10, 5)
SetGaugeGadgetDescription(9, "Humidity", "in %")
TrackBarGadget(10, 85 + #Size, 15 + #Size, 20, #Size, 0, 50, #PB_TrackBar_Vertical)
TrackBarGadget(11, 110 + #Size, 15 + #Size, 20, #Size, 1, 360, #PB_TrackBar_Vertical)
SetGadgetState(10, 0)
SetGadgetState(11, 250)
GaugeGadget(12, 135 + #Size, 15 + #Size, #Size, FontName, 1)
SetGaugeGadgetMinMaxSteps(12, 0, 50, 5, 1)
SetGaugeGadgetDescription(12, "Density", "kg/m³")
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case 0 ; Change value
SetGaugeGadgetValue(3, GetGadgetState(0))
Case 1 ; Change size in degrees
SetGaugeGadgetSectorDegrees(3, GetGadgetState(1))
Case 4 ; Change value
SetGaugeGadgetValue(6, GetGadgetState(4))
Case 5 ; Change size in degrees
SetGaugeGadgetSectorDegrees(6, GetGadgetState(5))
Case 7 ; Change value
SetGaugeGadgetValue(9, GetGadgetState(7))
Case 8 ; Change size in degrees
SetGaugeGadgetSectorDegrees(9, GetGadgetState(8))
Case 10 ; Change value
SetGaugeGadgetValue(12, GetGadgetState(10))
Case 11 ; Change size in degrees
SetGaugeGadgetSectorDegrees(12, GetGadgetState(11))
EndSelect
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver
FreeGaugeGadget(3)
FreeGaugeGadget(6)
FreeGaugeGadget(9)
FreeGaugeGadget(12)
EndIf
; <<<<<<<<<<<<<<<<<<<<<<<
; <<<<< END OF FILE <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<
Code: Select all
CompilerCase #PB_OS_MacOS
FontName.s = "Arial"
Done. And sorry about that.jamirokwai wrote:Hey Guimauve,
thanks for sharing
Just add this in line 1026 / the example ...
to make it work on Mac OS XCode: Select all
CompilerCase #PB_OS_MacOS FontName.s = "Arial"