Habs mal eben für PB 4.6 aktualisiert
Code: Alles auswählen
; Code by Localmotion, English forum
; http://www.purebasic.fr/english/viewtopic.php?p=88383#p88383
; Update for PB 4.6 by dige
Structure gauge
imagegad.l
ImageID.l
Width.l
Height.l
imagehwnd.l
precision.l
ticks.l
EndStructure
Global NewList led.gauge()
ProcedureDLL LEDgadget(number,x,y,Width,Height,display)
AddElement(led())
SelectElement(led(),number)
led()\Width=Width
led()\Height=Height
led()\ImageID=CreateImage(#PB_Any,led()\Width,led()\Height)
StartDrawing(ImageOutput(led()\ImageID))
Box(0,0,led()\Width,led()\Height,#Black)
ledheight=led()\Height-20
boxwidth=(led()\Width-10-1)/2
secondx= 6+boxwidth
tickcount=0
For a=0 To led()\Height-20 Step 4
tickcount=tickcount+1
Box(5,a,boxwidth,3,$7F00)
Box(secondx,a,boxwidth,3,$7F00)
Next
led()\ticks=tickcount
BackColor(#Black)
FrontColor(RGB(0, $FF, 0))
DrawText((led()\Width/2)-10,led()\Height-15, "0%")
StopDrawing()
led()\imagegad=ImageGadget(#PB_Any,x,y,Width,Height,ImageID(led()\ImageID),#PB_Image_Border)
ProcedureReturn led()\imagegad
EndProcedure
ProcedureDLL setLEDstate(led,percent)
SelectElement(led(),led)
tickcount=led()\ticks
perc.f=100/led()\ticks
percents.f=(percent/100)
finalpercent.f=percents*tickcount
stringpercent.s=StrF(finalpercent)
Result.f = Round(finalpercent, 1)
finalresult=led()\ticks-Result
ledheight=led()\Height-20
boxwidth=(led()\Width-10-1)/2
secondx=6+boxwidth
StartDrawing(ImageOutput(led()\ImageID))
tickcount=0
For a=0 To led()\Height-20 Step 4
tickcount=tickcount+1
If tickcount>=finalresult
Box(5,a,boxwidth,3,$FF00)
Box(secondx,a,boxwidth,3,$FF00)
Else
Box(5,a,boxwidth,3,$7F00)
Box(secondx,a,boxwidth,3,$7F00)
EndIf
Next
Box(0,led()\Height-15,led()\Width,15,#Black)
BackColor(#Black)
FrontColor(RGB(0, $FF, 0))
DrawText((led()\Width/2)-10,led()\Height-15, Str(percent)+"%")
StopDrawing()
SetGadgetState(led()\imagegad, ImageID(led()\ImageID))
EndProcedure
#WindowWidth = 390
#WindowHeight = 350
If OpenWindow(0, 100, 200, #WindowWidth, #WindowHeight, "LED", #WS_OVERLAPPEDWINDOW)
led=LEDgadget(0,50,50,75,200,0)
Repeat
setLEDstate(0,Random(100))
EventID = WaitWindowEvent()
If EventID = #PB_Event_Gadget
Select EventGadget()
Case led
EndSelect
EndIf
Until EventID = #PB_Event_CloseWindow
EndIf
End
Code: Alles auswählen
; http://www.purebasic.fr/english/viewtopic.php?p=88383#p88383
; By Localmotion, English forum
; Improved by Tommeh
; Update for PB 4.6 by dige
Structure gauge
imagegad.l
ImageID.l
Width.l
Height.l
imagehwnd.l
precision.l
ticks.l
frontcol.l
backcol.l
cpercent.l
EndStructure
Global NewList led.gauge()
ProcedureDLL setLEDfcol(led,Col)
SelectElement(led(),led)
led()\frontcol = Col
EndProcedure
ProcedureDLL setLEDbcol(led,Col)
SelectElement(led(),led)
led()\backcol = Col
EndProcedure
ProcedureDLL LEDgadget(number,x,y,Width,Height,display)
AddElement(led())
SelectElement(led(),number)
led()\Width=Width
led()\Height=Height
led()\ImageID=CreateImage(#PB_Any,led()\Width,led()\Height)
StartDrawing(ImageOutput(led()\ImageID))
Box(0,0,led()\Width,led()\Height,#Black)
ledheight=led()\Height-20
boxwidth=(led()\Width-10-1)/2
secondx= 6+boxwidth
tickcount=0
For a=0 To led()\Height-20 Step 4
tickcount=tickcount+1
Box(5,a,boxwidth,3,led()\backcol)
Box(secondx,a,boxwidth,3,led()\backcol)
Next
led()\ticks=tickcount
BackColor(#Black)
FrontColor(RGB(0, $FF, 0))
DrawText((led()\Width/2)-10,led()\Height-15, "0%")
StopDrawing()
led()\imagegad=ImageGadget(#PB_Any,x,y,Width,Height, ImageID(led()\ImageID),#PB_Image_Border)
ProcedureReturn led()\imagegad
EndProcedure
ProcedureDLL setLEDstate(led,percent)
SelectElement(led(),led)
led()\cpercent = percent
tickcount=led()\ticks
perc.f=100/led()\ticks
percents.f=(percent/100)
finalpercent.f=percents*tickcount
stringpercent.s=StrF(finalpercent)
Result.f = Round(finalpercent, 1)
finalresult=led()\ticks-Result
ledheight=led()\Height-20
boxwidth=(led()\Width-10-1)/2
secondx=6+boxwidth
StartDrawing(ImageOutput(led()\ImageID))
tickcount=0
For a=0 To led()\Height-20 Step 4
tickcount=tickcount+1
If tickcount>=finalresult
Box(5,a,boxwidth,3,led()\frontcol)
Box(secondx,a,boxwidth,3,led()\frontcol)
Else
Box(5,a,boxwidth,3,led()\backcol)
Box(secondx,a,boxwidth,3,led()\backcol)
EndIf
Next
Box(0,led()\Height-15,led()\Width,15,#Black)
BackColor(#Black)
FrontColor(RGB(0, $FF, 0))
DrawText((led()\Width/2)-10,led()\Height-15, Str(percent)+"%")
StopDrawing()
SetGadgetState(led()\imagegad, ImageID(led()\ImageID))
EndProcedure
ProcedureDLL getLEDstate(led)
SelectElement(led(),led)
ProcedureReturn led()\cpercent
EndProcedure
ProcedureDLL Beep(freq.l, time.l)
n.f = (freq/1000)*100
setLEDfcol(0, RGB(n.f*2.5, 250-(n.f*2.5), 0))
setLEDstate(0, n.f)
Beep_(freq, time)
EndProcedure
ProcedureDLL StartBeep(times)
tempo=180
For t=1 To times
Beep(284,tempo)
Beep(568,tempo)
Beep(426,tempo)
Beep(379,tempo)
Beep(758,tempo)
Beep(426,tempo)
Beep(716,tempo)
Beep(426,tempo)
Beep(284,tempo)
Beep(568,tempo)
Beep(426,tempo)
Beep(379,tempo)
Beep(758,tempo)
Beep(426,tempo)
Beep(716,tempo)
Beep(426,tempo)
Beep(319,tempo)
Beep(568,tempo)
Beep(426,tempo)
Beep(379,tempo)
Beep(758,tempo)
Beep(426,tempo)
Beep(716,tempo)
Beep(426,tempo)
Beep(319,tempo)
Beep(568,tempo)
Beep(426,tempo)
Beep(379,tempo)
Beep(758,tempo)
Beep(426,tempo)
Beep(716,tempo)
Beep(426,tempo)
Beep(379,tempo)
Beep(568,tempo)
Beep(426,tempo)
Next t
EndProcedure
#WindowWidth = 390
#WindowHeight = 350
If OpenWindow(0, 100, 200, #WindowWidth, #WindowHeight, "LED", #WS_OVERLAPPEDWINDOW)
led=LEDgadget(0,50,50,75,200,0)
setLEDbcol(0, RGB(45,60,45))
StartBeep(2)
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_Gadget
Select EventGadget()
Case led
EndSelect
EndIf
Until EventID = #PB_Event_CloseWindow
EndIf
End