Code : Tout sélectionner
; Name: VuMetreGadget.pbi
; Version: 1.2
; Author: BasicallyPure
; Date: 3.29.2013
; OS: Windows, Linux, Mac
; PB ver.: 5.11
; License: Free
;
; Syntaxe: résultat = VuMetreGadget( #Gadget, x, y, taille, [Legende ], [ Options])
; #Gadget | numéro pour identifier le gadget. #PB_Any peut être utilisé pour générer automatiquement.
; X, y | emplacement du gadget mètres.
; Taille | largeur du Vumètre, la hauteur est automatiquement calculée comme taille / 1,5.
; Legende | le texte à afficher sur la face du compteur .
;
; Drapeaux | les drapeaux peuvent être combinés en utilisant | (opérateur Or).
; | #VUMETRE_STYLE_VU, crée un mètre de style VU, par défaut style linéaire.
; | #VUMETRE_STYLE_LED, ajoute une LED à un compteur indicateur de crête.
; | L'aiguille par défaut est dessinée sans lignes lissées.
; | L'utilisation des indicateurs de style d'aiguille suivants vont augmenter l'utilisation du processeur .
; | #VUMETRE_AIGUILLE_VAR1 , Dessine_ l'aiguille avec une ligne épaisse anti-aliasing unique.
; | #VUMETRE_AIGUILLE_VAR2 , Dessine_ l'aiguille décrite avec des lignes anti-aliasing.
; | #VUMETRE_AIGUILLE_VAR3 , Dessine_ l'aiguille remplie de plusieurs appels anti-aliasing.
;
; Utiliser DefinirEtatVuMetre (#Gadget, poste) pour régler la position de l'aiguille.
; La plage de position est de 0 à 100 .Les valeurs hors de cette gamme sont écrêtées.
;
; ObtenirEtatVuMetre (#Gadget) renvoie la position de l'aiguille.
;
; DefinirLissageVuMetre (#Gadget, valeur) applique une fonction smooting au mouvement de l'aiguille.
; et les valeurs de lissage valides sont 0 , 2, 4, 8, 16, 32, 64, 128 .
;
; Si vous voulez changer les options de compteurs par défaut qui utilisent ces procédures.
; Les procédures devraient être appelés à comparaître devant le compteur est créé.
;
; DefinirCouleurGradientVuMetre(C1, C2, C3, C4) | omettre tous les paramètres pour réinitialiser les couleurs par défaut.
; DefinirPoliceLegendeVuMetre(NumPolice) | omettre le paramètre pour revenir à la police par défaut.
; DefinirPoliceEchelleVuMetre(NumPolice) | omettre le paramètre pour revenir à la police par défaut.
; DefinirCouleurLegendeVuMetre(couleur) | omettre le paramètre pour revenir à la couleur par défaut.
; DefinirCouleurEchelleVuMetre(couleur) | omettre le paramètre pour revenir à la couleur par défaut.
; DefinirCouleurAiguilleVuMetre(couleur) | omettre le paramètre pour revenir à la couleur par défaut.
; DefinirCouleurBasVuMetre(couleur) | omettre le paramètre pour revenir à la couleur par défaut.
EnableExplicit
Structure VuMetreType
largeur.i ; largeure Vumètre
hauteur.i ; hauteur Vumètre
drapeaux.i ; drapeaux option, #VUMETRE_STYLE_VU | #VUMETRE_STYLE_LED
position.f ; position aiguille, retourné avec ObtenirEtatVuMetre(NumGad)
PoliceLegende.i ; utiliser cette police pour légende VU-mètre
CouleurLegende.i ; couleur du texte légende
PoliceEchelle.i ; utiliser cette police pour les étiquettes de l'échelle
CouleurEchelle.i ; couleur utilisée pour le dessin de l'échelle et les repères d'échelle
Legende.s ; Légende Vumètre
CouleurGradient_1.i ; première couleur pour le gradient
CouleurGradient_2.i ; deuxième couleur pour le gradient
CouleurGradient_3.i ; troisième couleur pour le gradient
CouleurGradient_4.i ; quatrième couleur pour le gradient
CouleurAiguille.i ; couleur utilisée pour dessiner l'aiguille
CouleurBas.i ; couleur du bas de la région face du Vumètre
clip.i ; indique que l'entrée a dépassé la valeur maximale (100)
Rayon_LED.i ; rayon de la LED
X_LED.i ; emplacement x de la LED de crête
Y_LED.i ; emplacement y de la LED de crête
Lissage.i ; valeur lissage (puissance de 2 à 128)
tampon.f[128] ; tampon lissage
IdxTampon.a ; index tampon lissage
SommeTampon.f ; somme cumulée de tampon lissage
X_Milieu.i ; milieu du compteur (axe des x)
RayonArc.i ; définit la position de l'arc d'échelle
fondImage.i ; image de fond Vumètre
basImage.i ; barre décorative au bas du Vumètre
EndStructure
Structure DefaultType
gradientC_1.i
gradientC_2.i
gradientC_3.i
gradientC_4.i
PoliceLegende.i
CouleurLegende.i
PoliceEchelle.i
CouleurEchelle.i
CouleurAiguille.i
CouleurBas.i
EndStructure
;#VUMETRE_STYLE_STD = %0000
#VUMETRE_STYLE_VU = %0001
#VUMETRE_STYLE_LED = %0010
#VUMETRE_AIGUILLE_STD = %0000
#VUMETRE_AIGUILLE_VAR1 = %0100
#VUMETRE_AIGUILLE_VAR2 = %1000
#VUMETRE_AIGUILLE_VAR3 = %1100
Define VumetreDefaut.DefaultType
VumetreDefaut\gradientC_1 = $60FFFF ;$00FFFF
VumetreDefaut\gradientC_2 = $80DFDF ;$00FF00
VumetreDefaut\gradientC_3 = $A0BFBF ;$00FF80
VumetreDefaut\gradientC_4 = $FFAFAF ;$0000FF
VumetreDefaut\CouleurLegende = 0
VumetreDefaut\PoliceLegende = LoadFont(#PB_Any,"Arial", 10, #PB_Font_Bold)
VumetreDefaut\PoliceEchelle = LoadFont(#PB_Any,"Arial", 8)
VumetreDefaut\CouleurEchelle = $FF0000
VumetreDefaut\CouleurAiguille = $0000FF
VumetreDefaut\CouleurBas = $603030
Define Vumetre_Legende_Police_Defaut = VumetreDefaut\PoliceLegende
Define Vumetre_Echelle_Police_Defaut = VumetreDefaut\PoliceEchelle
Dim VuMetre.VuMetreType(1)
NewMap VuMetreIndex.i() ; une Map pour indexer VuMetre() avec la N° de gadget
Declare Dessiner_VuMetre(IdVuMetre)
Declare DefinirEtatVuMetre(IdVuMetre.i, position.f)
Declare g2D_AA_MelangeCouleur(Couleur1.i, Couleur2.i, Melange.d)
Declare g2D_LineXY(x.i, y.i, x3.i, y3.i, Couleur.i=0, Epaisseur.i=1)
Procedure VuMetreGadget(NumGad.i, x.i, y.i, Taille.i, Legende.s = "", drapeaux.i = 0)
Shared VuMetre() ; tableau structuré
Shared VuMetreIndex() ; Map
Shared VumetreDefaut ; structure
Static CompteurVuMetre = 1
Protected Resultat.i, l.i, h.i
If drapeaux < 0 Or drapeaux > %1111 : ProcedureReturn 0 : EndIf
If Taille < 150 : Taille = 150 : EndIf
l = Taille : h = l / 1.5
Resultat = CanvasGadget(NumGad, x, y, l, h, #PB_Canvas_Border)
If Resultat <> 0
If NumGad = #PB_Any : NumGad = Resultat : EndIf
If CompteurVuMetre > 1 : ReDim VuMetre(CompteurVuMetre) : EndIf
With VuMetre(CompteurVuMetre)
\largeur = l - 4 ; ajusté pour 4 pixel bordure du canvas gadget
\hauteur = h - 4 ; ajusté pour 4 pixel bordure du canvas gadget
\drapeaux = drapeaux
\CouleurGradient_1 = VumetreDefaut\gradientC_1
\CouleurGradient_2 = VumetreDefaut\gradientC_2
\CouleurGradient_3 = VumetreDefaut\gradientC_3
\CouleurGradient_4 = VumetreDefaut\gradientC_4
\CouleurLegende = VumetreDefaut\CouleurLegende
\PoliceLegende = VumetreDefaut\PoliceLegende
\PoliceEchelle = VumetreDefaut\PoliceEchelle
\CouleurEchelle = VumetreDefaut\CouleurEchelle
\CouleurAiguille = VumetreDefaut\CouleurAiguille
\CouleurBas = VumetreDefaut\CouleurBas
\Lissage = 0
\IdxTampon = 0
\SommeTampon = 0
\Rayon_LED = \largeur / 40
\X_LED = \largeur - 13 - 3*\Rayon_LED
\Y_LED = \hauteur - \hauteur * 0.35 - 2*\Rayon_LED
\Legende = Legende
\X_Milieu = \largeur / 2
\RayonArc = h * (l / (l + 50.0)) ; cela permet de localiser l'arc d'échelle
\fondImage = CreateImage(#PB_Any, \largeur, \hauteur, 32)
\basImage = CreateImage(#PB_Any, \largeur, \hauteur * 0.2, 32)
VuMetreIndex(Str(NumGad)) = CompteurVuMetre
Dessiner_VuMetre(CompteurVuMetre)
StartDrawing(CanvasOutput(NumGad))
DrawImage(ImageID(\fondImage),0 ,0)
StopDrawing()
EndWith
DefinirEtatVuMetre(NumGad, 0)
CompteurVuMetre + 1
EndIf
ProcedureReturn Resultat
EndProcedure
Procedure Dessiner_VuMetre(IdVuMetre)
Shared VuMetre()
Protected x.i, y.i, px.i, py.i, angle.f, inc.f
Protected vu.i, sf.f, couleur.i
With VuMetre(IdVuMetre)
StartDrawing(ImageOutput(\basImage))
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0, 0, OutputWidth(), OutputHeight(), $00000000)
DrawingMode(#PB_2DDrawing_AlphaBlend)
RoundBox(0, 0, \largeur, \hauteur * 0.3, \largeur / 20, \largeur / 20, $B0000000 + \CouleurBas)
StopDrawing()
StartDrawing(ImageOutput(\fondImage))
DrawingMode(#PB_2DDrawing_Gradient)
BackColor(\CouleurGradient_4)
GradientColor(0.33, \CouleurGradient_3)
GradientColor(0.66, \CouleurGradient_2)
FrontColor(\CouleurGradient_1)
LinearGradient(0, \hauteur, 0, 0)
Box(0, 0 ,\largeur, \hauteur)
DrawingMode(#PB_2DDrawing_Transparent)
DrawingFont(FontID(\PoliceEchelle))
Circle(\X_Milieu, \hauteur, \largeur * 0.1, 0)
Circle(\X_Milieu, \hauteur - 10, 4, \CouleurAiguille ! 1)
inc = 1000 / \largeur
angle = -45.0 - inc
Repeat ; Dessiner_ échelle arc
angle + inc
If angle > 45.0 : angle = 45.0 : EndIf
x = \X_Milieu + Sin(Radian(angle)) * \RayonArc
y = \hauteur - Cos(Radian(angle)) * \RayonArc
If angle <> -45.0
LineXY(px,py,x,y,\CouleurEchelle)
EndIf
px = x : py = y
Until angle = 45
If \drapeaux & #VUMETRE_STYLE_VU
sf = 100 / Pow(10, 3/20)
vu = 3
Repeat
angle = 0.9 * sf * Pow(10, vu/20) - 45
px = \X_Milieu + Sin(Radian(angle)) * (\RayonArc - 5)
py = \hauteur - Cos(Radian(angle)) * (\RayonArc - 5)
x = \X_Milieu + Sin(Radian(angle)) * (\RayonArc + 5)
y = \hauteur - Cos(Radian(angle)) * (\RayonArc + 5)
LineXY(px, py, x, y, \CouleurEchelle)
Select vu
Case -20, -10, -5, -3, -2, -1, 0, 1, 2, 3
If vu < 0 : couleur = 0 : Else : couleur = $0000FF : EndIf
x = \X_Milieu + Sin(Radian(angle-1)) * (\RayonArc + 22)
y = \hauteur - Cos(Radian(angle-1)) * (\RayonArc + 22)
DrawRotatedText(x, y, Str(Abs(vu)), -angle, couleur)
EndSelect
Select vu
Case -2 To 3 : vu - 1
Case -3 : vu - 2
Case -5 : vu - 5
Case -30 To -10 : vu - 10
EndSelect
Until vu < -30
DrawingFont(FontID(\PoliceLegende))
DrawText(10, \hauteur * 0.4, "_", 0)
DrawText(\largeur - 15, \hauteur * 0.4 + 5, "+", $0000FF)
Else ; style linéaire
angle = -45.0 : inc = 9
Repeat ; Dessiner_ les trais marquant les tics de l'échelle
px = \X_Milieu + Sin(Radian(angle)) * (\RayonArc - 5)
py = \hauteur - Cos(Radian(angle)) * (\RayonArc - 5)
x = \X_Milieu + Sin(Radian(angle)) * (\RayonArc + 5)
y = \hauteur - Cos(Radian(angle)) * (\RayonArc + 5)
LineXY(px, py, x, y, \CouleurEchelle)
DrawingFont(FontID(\PoliceEchelle))
x = \X_Milieu + Sin(Radian(angle-1)) * (\RayonArc + 20)
y = \hauteur - Cos(Radian(angle-1)) * (\RayonArc + 20)
DrawRotatedText(x, y, Str(angle/9 + 5), -angle, \CouleurLegende)
angle + inc
Until angle > 45
EndIf
If \drapeaux & #VUMETRE_STYLE_LED
Circle(\X_LED, \Y_LED, \Rayon_LED + 2, 0)
Circle(\X_LED, \Y_LED, \Rayon_LED , $404080)
DrawingFont(FontID(\PoliceEchelle))
DrawText(\largeur - 27 - 3*\Rayon_LED, \hauteur - \hauteur * 0.35, "CRETE", \CouleurLegende)
EndIf
If \Legende
DrawingFont(FontID(\PoliceLegende))
FrontColor(\CouleurLegende)
x = (\Largeur - TextWidth(\Legende)) / 2
y = (\Hauteur - TextHeight(\Legende))/ 2
DrawText(x, y, \Legende)
EndIf
StopDrawing()
EndWith
EndProcedure
Procedure DefinirEtatVuMetre(NumGad.i, position.f)
; appeler cette procédure pour régler la position de l'aiguille.
; la gamme de mesure est de 0 à 100.
; les valeurs en dehors de cette gamme sont écrêtées.
Shared VuMetre(), VuMetreIndex()
Protected IdVuMetre.i = VuMetreIndex(Str(NumGad))
Protected masque.a, nl.i, x.i, y.i
If IdVuMetre = 0
ProcedureReturn 0 ; Le numéro du compteur n'est pas valide
EndIf
If position < 0 : position = 0 : EndIf
With VuMetre(IdVuMetre)
If position >= 100 : \clip = 8 : position = 100 : EndIf
\position = position
If \Lissage
masque = \Lissage - 1
\SommeTampon - \tampon[\IdxTampon & masque]
\tampon[\IdxTampon & masque] = position
\SommeTampon + position
\IdxTampon + 1
position = \SommeTampon / \Lissage ; il s'agit de la moyenne glissante
EndIf
position = Radian(0.9 * position - 45)
x = \X_Milieu + Sin(position) * (\RayonArc)
y = \hauteur - Cos(position) * (\RayonArc)
StartDrawing(CanvasOutput(NumGad))
; dessiner d'abord le fond du compteur
DrawImage(ImageID(\fondImage),0 ,0)
; Dessiner l'aiguille
Select \drapeaux & %1100
Case #VUMETRE_AIGUILLE_STD
nl.i = 2 + Round(1.35 - Cos(position), #PB_Round_Nearest)
Circle(x, y, 2, \CouleurAiguille)
LineXY(\X_Milieu - 4, \hauteur - 10, x-nl, y, \CouleurAiguille)
LineXY(\X_Milieu + 4, \hauteur - 10, x+nl, y, \CouleurAiguille)
LineXY(\X_Milieu - 4, \hauteur - 10, \X_Milieu + 4, \hauteur - 10, \CouleurAiguille)
FillArea(\X_Milieu, \hauteur - 11, \CouleurAiguille, \CouleurAiguille ! 1)
Case #VUMETRE_AIGUILLE_VAR1 ; dessiner l'aiguille avec une seule ligne épaisse anti-aliasé.
Circle(x, y, 2, \CouleurAiguille)
g2d_LineXY(\X_Milieu, \hauteur - 10, x, y, \CouleurAiguille, 5)
Case #VUMETRE_AIGUILLE_VAR2 ; dessiner l'aiguille décrit avec le lissage.
nl.i = 2 + Round(1.35 - Cos(position), #PB_Round_Nearest)
Circle(x, y, 2, \CouleurAiguille)
g2d_LineXY(\X_Milieu - 4, \hauteur - 10, x-nl, y, \CouleurAiguille)
g2d_LineXY(\X_Milieu + 4, \hauteur - 10, x+nl, y, \CouleurAiguille)
Case #VUMETRE_AIGUILLE_VAR3 ; dessiner l'aiguille remplie avec des appels anti-aliasing multiples.
nl.i = 2 + Round(1.35 - Cos(position), #PB_Round_Nearest)
Circle(x, y, 2, \CouleurAiguille)
LineXY(\X_Milieu - 4, \hauteur - 10, x-nl, y, \CouleurAiguille)
LineXY(\X_Milieu + 4, \hauteur - 10, x+nl, y, \CouleurAiguille)
LineXY(\X_Milieu - 4, \hauteur - 10, \X_Milieu + 4, \hauteur - 10, \CouleurAiguille)
; Appeler FillArea() avant de colorer les bords floutés avec g2d_LineXY()
FillArea(\X_Milieu, \hauteur - 11, \CouleurAiguille, \CouleurAiguille ! 1)
g2d_LineXY(\X_Milieu - 4, \hauteur - 10, x-nl, y, \CouleurAiguille)
g2d_LineXY(\X_Milieu + 4, \hauteur - 10, x+nl, y, \CouleurAiguille)
EndSelect
If \drapeaux & #VUMETRE_STYLE_LED
If \clip : \clip - 1
Circle(\X_LED, \Y_LED, \Rayon_LED, $0000FF)
EndIf
EndIf
; dessiner la région de fond en utilisant une image alpha mélangé
DrawAlphaImage(ImageID(\basImage),0, \hauteur - ImageHeight(\basImage))
StopDrawing()
EndWith
EndProcedure
Procedure ObtenirEtatVuMetre(NumGad.i)
Shared VuMetre(), VuMetreIndex()
Protected IdVuMetre = VuMetreIndex(Str(NumGad))
If IdVuMetre = 0
ProcedureReturn #False ; Numéro de VuMetre non valide
EndIf
ProcedureReturn VuMetre(IdVuMetre)\position
EndProcedure
Procedure DefinirLissageVuMetre(NumGad.i, Valeur.i)
; les valeurs de lissage valides sont 0, 2, 4, 8, 16, 32, 64, 128
; d'autres valeurs auront une gamme limitée et convertis à une puissance de 2
Shared VuMetre(), VuMetreIndex()
Protected n.i, IdVuMetre = VuMetreIndex(Str(NumGad))
If IdVuMetre = 0
ProcedureReturn 0 ; Numéro de VuMetre non valide
EndIf
If Valeur > 128 : Valeur = 128
ElseIf Valeur < 2 : Valeur = 0
Else : Valeur = Pow(2, Round(Log(Valeur) / Log(2),#PB_Round_Nearest))
EndIf
With VuMetre(IdVuMetre)
For n = 0 To Valeur - 1
\tampon[n] = \position
Next n
\IdxTampon = 0
\SommeTampon = \position * Valeur
\Lissage = Valeur
EndWith
EndProcedure
Procedure DefinirPoliceLegendeVuMetre(Police.i = -1)
Shared VumetreDefaut, Vumetre_Legende_Police_Defaut
If Police = -1
Police = Vumetre_Legende_Police_Defaut
EndIf
If IsFont(Police)
VumetreDefaut\PoliceLegende = Police
EndIf
EndProcedure
Procedure DefinirCouleurLegendeVuMetre(couleur.i = 0)
Shared VumetreDefaut
VumetreDefaut\CouleurLegende = couleur
EndProcedure
Procedure DefinirPoliceEchelleVuMetre(Police.i = -1)
Shared VumetreDefaut, Vumetre_Echelle_Police_Defaut
If Police = -1
Police = Vumetre_Echelle_Police_Defaut
EndIf
If IsFont(Police)
VumetreDefaut\PoliceEchelle = Police
EndIf
EndProcedure
Procedure DefinirCouleurEchelleVuMetre(couleur.i = $FF0000)
Shared VumetreDefaut
VumetreDefaut\CouleurEchelle = couleur
EndProcedure
Procedure DefinirCouleurAiguilleVuMetre(couleur.i = $0000FF)
Shared VumetreDefaut
VumetreDefaut\CouleurAiguille = couleur
EndProcedure
Procedure DefinirCouleurBasVuMetre(couleur.i = $603030)
Shared VumetreDefaut
VumetreDefaut\CouleurBas = couleur
EndProcedure
Procedure DefinirCouleurGradientVuMetre(haut.i = $60FFFF, mid1.i = $80DFDF, mid2.i = $A0BFBF, bas.i = $FFAFAF)
Shared VumetreDefaut
VumetreDefaut\gradientC_1 = haut
VumetreDefaut\gradientC_2 = mid1
VumetreDefaut\gradientC_3 = mid2
VumetreDefaut\gradientC_4 = bas
EndProcedure
Procedure.i g2D_AA_MelangeCouleur(Couleur1.i, Couleur2.i, Melange.d)
; RASHAD, lisse les bords de couleur pour produire près de l'anti-aliasing
Protected Rouge, Vert, Bleu, Rouge2, Vert2, Bleu2
Rouge = Couleur1 & $FF
Vert = Couleur1 >> 8 & $FF
Bleu = Couleur1 >> 16
Rouge2 = Couleur2 & $FF
Vert2 = Couleur2 >> 8 & $FF
Bleu2 = Couleur2 >> 16
Rouge = Rouge * Melange + Rouge2 * (1-Melange)
Vert = Vert * Melange + Vert2 * (1-Melange)
Bleu = Bleu * Melange + Bleu2 * (1-Melange)
ProcedureReturn (Rouge | Vert << 8 | Bleu << 16)
EndProcedure
Procedure g2D_LineXY(x.i, y.i, x3.i, y3.i, Couleur.i=0, Epaisseur.i=1)
; RASHAD, Le Soldat Inconnu et les autres
Protected.i Largeur = x3 - X
Protected.i Hauteur = y3 - Y
Protected.i SigneX, SigneY, n, nn, Couleur_Trouvee
Protected.d pEpaisseur, x2, y2, Application, Hypo, CosPhi, SinPhi
If Largeur >= 0
SigneX = 1
Else
SigneX = -1
Largeur = - Largeur
EndIf
If Hauteur >= 0
SigneY = 1
Else
SigneY = -1
Hauteur = -Hauteur
EndIf
pEpaisseur = Epaisseur / 2
Hypo = Sqr(Largeur * Largeur + Hauteur * Hauteur)
CosPhi = Largeur / Hypo
SinPhi = -Sin(ACos(CosPhi))
For n = -Epaisseur To Largeur + Epaisseur
For nn = -Epaisseur To Hauteur + Epaisseur
x2 = n * CosPhi - nn * SinPhi
y2 = Abs(n * SinPhi + nn * CosPhi)
If y2 <= (pEpaisseur + 0.5)
Application = 0.5 + pEpaisseur - y2
If Application > 1
Application = 1
EndIf
If (x2 > -1) And (x2 < (Hypo + 1))
If x2 < 0
Application * (1 + x2)
ElseIf x2 > Hypo
Application * (1 - x2 + Hypo)
EndIf
Else
Application = 0
EndIf
If Application > 0
If Application < 1
Couleur_Trouvee = Point(X + n * SigneX, Y + nn * SigneY)
Plot(X + n * SigneX, Y + nn * SigneY, g2D_AA_MelangeCouleur(Couleur, Couleur_Trouvee, Application))
Else
Plot(X + n * SigneX, Y + nn * SigneY, Couleur)
EndIf
EndIf
EndIf
Next nn
Next n
EndProcedure
DisableExplicit
CompilerIf #PB_Compiler_IsMainFile
EnableExplicit
Declare FAUX_SIGNAL()
Define drapeaux = #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget | #PB_Window_SystemMenu
OpenWindow(0, 0, 0, 800, 600, "Test VuMetre Gadget", drapeaux)
SetWindowColor(0,$300000)
AddWindowTimer(0,0,100)
drapeaux = #VUMETRE_STYLE_VU | #VUMETRE_STYLE_LED
Define Vumetre_VU_L = VuMetreGadget(#PB_Any, 020, 050, 250, "VU - Gauche" , drapeaux)
Define Vumetre_VU_R = VuMetreGadget(#PB_Any, 285, 050, 250, "VU - Droite", drapeaux)
DefinirCouleurAiguilleVuMetre($802020)
DefinirCouleurBasVuMetre($A0A0A0)
Define Vumetre_RPM.i = VuMetreGadget(#PB_Any, 560, 050, 200, "RPM x 1000")
DefinirCouleurGradientVuMetre($B09090, $7090B0, $B09090, $204020)
DefinirCouleurLegendeVuMetre($404000)
DefinirCouleurAiguilleVuMetre($E06060)
DefinirCouleurBasVuMetre()
Define Vumetre_Volts.i = VuMetreGadget(#PB_Any, 020, 330, 150, "Volts")
Define Vumetre_Amps.i = VuMetreGadget(#PB_Any, 180, 330, 150, "Ampères")
DefinirCouleurAiguilleVuMetre($A0D0A0)
DefinirCouleurEchelleVuMetre($80FF00)
DefinirCouleurBasVuMetre($205020)
DefinirCouleurLegendeVuMetre($FFFFFF)
DefinirCouleurGradientVuMetre($40A040, $509050, $40A040, $205050)
Define Vumetre_Watts.i = VuMetreGadget(#PB_Any, 340, 330, 150, "Watts x 10")
Global track_1 = TrackBarGadget(#PB_Any, 020, 450, 470, 30, 0, 100)
Global track_2 = TrackBarGadget(#PB_Any, 560, 195, 200, 30, 0, 100)
SetGadgetState(track_2, 15) : DefinirEtatVuMetre(Vumetre_RPM, 15)
Global track_3 = TrackBarGadget(#PB_Any, 20, 230, 200, 30, 1, 7, #PB_TrackBar_Ticks)
SetGadgetState(track_3, 4)
Global chkBox_Lissage = CheckBoxGadget(#PB_Any,20, 270, 200, 20, " Lissage = 16")
Define amp_L.f = 50
Define amp_R.f = 50
Define Lissage.a = 0
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
Select EventGadget()
Case track_1
DefinirEtatVuMetre(Vumetre_Volts, GetGadgetState(track_1))
DefinirEtatVuMetre(Vumetre_Amps , GetGadgetState(track_1))
DefinirEtatVuMetre(Vumetre_Watts, (ObtenirEtatVuMetre(Vumetre_Volts)/10) * ObtenirEtatVuMetre(Vumetre_Amps)/10)
Case track_2
DefinirEtatVuMetre(Vumetre_RPM, GetGadgetState(track_2))
Case track_3
Lissage = Pow(2, GetGadgetState(track_3))
SetGadgetText(chkBox_Lissage, " Lissage = " + Str(Lissage))
If GetGadgetState(chkBox_Lissage)
DefinirLissageVuMetre(Vumetre_VU_L, Lissage)
EndIf
Case chkBox_Lissage
If GetGadgetState(chkBox_Lissage)
Lissage = Pow(2, GetGadgetState(track_3))
DefinirLissageVuMetre(Vumetre_VU_L, Lissage)
Else
DefinirLissageVuMetre(Vumetre_VU_L, 0)
EndIf
EndSelect
Case #PB_Event_Timer
If EventTimer() = 0
FAUX_SIGNAL()
DefinirEtatVuMetre(Vumetre_VU_L, amp_L)
DefinirEtatVuMetre(Vumetre_VU_R, amp_R)
EndIf
EndSelect
ForEver
End
Procedure FAUX_SIGNAL()
Shared amp_L, amp_R
Static partialite.i = 7
amp_L + Random(16) - partialite
amp_R = amp_L + Random(16) - 8
If amp_L < 0
amp_L = 0 : partialite = 7
ElseIf amp_L > 100
amp_L = 100 : partialite = 9
EndIf
If amp_R < 0
amp_R = 0
ElseIf amp_R > 100
amp_R = 100
EndIf
EndProcedure
CompilerEndIf