GaugeGadget - Version 2.1.0

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
MetalOS
Messages : 1510
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: GaugeGadget - Version 2.1.0

Message par MetalOS »

Ouai mais je trouve les gauges vraiment super, alors même si c'est un peut casse pied à gérer c'est pas grave. Autrement maintenant je comprend un peut mieux leurs gestion. Encore Merci.
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: GaugeGadget - Version 2.1.0

Message par G-Rom »

Très beau rendu sous Ubuntu Guimauve ! bien plus rapide !
Merci du partage ! ;)
Avatar de l’utilisateur
MetalOS
Messages : 1510
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: GaugeGadget - Version 2.1.0

Message par MetalOS »

Ouai c vrai que sous Ubuntu c'est super fluide.
Avatar de l’utilisateur
MetalOS
Messages : 1510
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: GaugeGadget - Version 2.1.0

Message par MetalOS »

Quelqu'un a testé sous Mac OS X ? Moi j'ai une erreur ligne 4 ????? Hors la ligne 4 et vide mais PB me trouve une erreur de syntaxe. C'est du pure délire :lol: :lol: :lol: :lol:
Avatar de l’utilisateur
MetalOS
Messages : 1510
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: GaugeGadget - Version 2.1.0

Message par MetalOS »

Ca fessais un petit moment que je n'avais pas testé cette source et sur la version 5.21 de PB j'ai des erreurs sur les CreateImage() ou la profondeur d'image n'est pas valide, hors si je ne me trompe pas ont et bien en 32 bits de profondeur sur ce code. Sur les anciennes versions de PB tous fonctionnaient pourtant bien. Quelqu'un à ce problème ?
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: GaugeGadget - Version 2.1.0

Message par Ar-S »

Testé en 5.21, c'est excellent. Je ne sais plus avec quelle version j'avais testé mais ça passe nikel maintenant.

@MetalOs
Remplace la barre de séparation des createimage par une virgule.

Code : Tout sélectionner

GetGaugeSize(*GaugeA), 32 |

en

Code : Tout sélectionner

GetGaugeSize(*GaugeA), 32 ,


Il faudrait corriger le 1er topic, en attendant
Version fonctionnant sur PB 5.21 LTS

Code : Tout sélectionner

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; 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 <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
MetalOS
Messages : 1510
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: GaugeGadget - Version 2.1.0

Message par MetalOS »

Cool, merci Ar-s. :wink:
Répondre