Hi
Irgendwie bin ich schon betriebsblind!
Was ist die huebscheste Methode ein paar Leuchtdioden am Schirm graphisch zu simulieren,
sowas wie helle und dunkle Farbe fuer ein/aus?
Helft mir mal bitte auf die Spruenge. Ich will eine meiner Frontplatten als Simulator an einer RS232 der echten Baugruppe nachbauen.
Ich habe mir fest eingeblidet da gabs mal was Fertiges (a la Gadget sogar mit Blinken)
Aber ev. war das eine andere Sprache bzw. Tool? Man wird eben alt!
Danke schon mal im Voraus!
(PB4.51, Linux, x86)
wie einzlene LED im Window darstellen?
-
- Beiträge: 13
- Registriert: 07.06.2011 19:19
- Wohnort: Wien
- Kontaktdaten:
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: wie einzlene LED im Window darstellen?
http://www.purebasic.fr/english/viewtop ... 383#p88383
etwas älter und evtl. muß da was angepaßt werden, aber sollte helfen.
Ansonsten in der 2D Drawing Lib ist alles was man benötigt. Circle usw.
Gruß
Thomas
etwas älter und evtl. muß da was angepaßt werden, aber sollte helfen.
Ansonsten in der 2D Drawing Lib ist alles was man benötigt. Circle usw.
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: wie einzlene LED im Window darstellen?
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
"Papa, ich laufe schneller - dann ist es nicht so weit."