PercentBar

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Hroudtwolf
Beiträge: 1416
Registriert: 30.10.2004 23:33
Kontaktdaten:

PercentBar

Beitrag von Hroudtwolf »

Eine etwas andere Progressbar mit einer Prozentanzeige über dem Balken.
Die Prozeduren lassen sich ganz einfach einbauen.

Prozeduren:

Code: Alles auswählen

;PercentBar
;2005 by Hroudtwolf
;Progressbar with percentdisplay
;
;Das Gadget
Procedure.s PercentbarGadget (gadget.l,x.l,y.l,pcwidth.l,pcheight.l,max.l)
gadgetreturn$=Str(pcwidth.l)+"|"+Str(pcheight.l)+"|"+Str(max.l)
Setpercents (gadget.l,0,gadgetreturn$)
ImageGadget (gadget.l,x.l,y.l,pcwidth.l,pcheigth.l,UseImage (800+gadget.l))
ProcedureReturn gadgetreturn$
EndProcedure

;Zum aktualisieren des Gadgets
Procedure Setpercents (gadget.l,position.l,gadgetreturn$)
pcwidth.l=Val(StringField(gadgetreturn$, 1, "|"))
pcheight.l=Val(StringField(gadgetreturn$, 2, "|"))
max.l=Val(StringField(gadgetreturn$, 3, "|"))
;Prozentberechnung
onepercent.f=max/100
If onepercent.f=0:onepercent.f=1:EndIf
percent.l=position.l/onepercent.f
;Systemfarben ermitteln
HFarbe.l=GetSysColor_(#COLOR_BTNFACE )
RFarbe1.l=GetSysColor_(#COLOR_3DHIGHLIGHT)
RFarbe2.l=GetSysColor_(#COLOR_3DSHADOW)
TFarbe.l=GetSysColor_(#COLOR_BTNTEXT )
;Gadgetstyle erstellen
If IsImage (800+gadget.l)=0:CreateImage (800+gadget.l,pcwidth.l,pcheight.l):EndIf
If StartDrawing (ImageOutput ())
DrawingMode(0)
Box (0,0,pcwidth.l,pcheight.l,HFarbe.l)
Line (0,0,0,pcheight.l,RFarbe2.l)
Line (0,0,pcwidth.l,0,RFarbe2.l)
Line (0,pcheight.l-1,pcwidth.l,0,RFarbe1.l)
Line (pcwidth.l-1,0,0,pcheight.l,RFarbe1.l)
Box (1,1,((pcwidth.l*position)/max)-2,pcheight.l-2,RGB(100,100,250))
For x=10 To pcwidth.l-10 Step 10
Line (x,1,0,pcheight.l-2,HFarbe.l)
Next x
DrawingMode(1)
Locate (Int(pcwidth.l/2)-20,2)
rot.l=Red(TFarbe.l)
gruen.l=green(TFarbe.l)
blau.l=Blue(TFarbe.l)
FrontColor (rot.l,gruen.l,blau.l)
text$=Str(percent.l)+ " %"
DrawText (text$)
StopDrawing ()
EndIf
If IsGadget (gadget.l):SetGadgetState (gadget.l,UseImage (800+gadget.l)):EndIf
EndProcedure



Beispielanwendung:

Code: Alles auswählen

;PercentBar
;2005 by Hroudtwolf
;Progressbar with percentdisplay
;
Declare Setpercents (gadget.l,position.l,gadgetreturn$)
Declare.s PercentbarGadget (gadget.l,x.l,y.l,pcwidth.l,pcheigth.l,max.l)
hWnd.l = OpenWindow(0, 100, 100, 300, 60, #PB_Window_titlebar|#pb_Window_screencentered, "PercentBar")
If hwnd.l
If CreateGadgetList (hwnd.l)
info$=PercentbarGadget (1,10,20,280,20,40); PercentGadget erstellen
EndIf
  Repeat
    EventID.l = WindowEvent()
    Setpercents (1,xx,info$); Das PercentGadget aktualisieren
    xx=xx+1
    If xx>40:xx=0:EndIf
    Delay(100)
  Until EventID = #PB_EventCloseWindow

EndIf
End


Procedure.s PercentbarGadget (gadget.l,x.l,y.l,pcwidth.l,pcheight.l,max.l)
gadgetreturn$=Str(pcwidth.l)+"|"+Str(pcheight.l)+"|"+Str(max.l)
Setpercents (gadget.l,0,gadgetreturn$)
ImageGadget (gadget.l,x.l,y.l,pcwidth.l,pcheigth.l,UseImage (800+gadget.l))
ProcedureReturn gadgetreturn$
EndProcedure


Procedure Setpercents (gadget.l,position.l,gadgetreturn$)
pcwidth.l=Val(StringField(gadgetreturn$, 1, "|"))
pcheight.l=Val(StringField(gadgetreturn$, 2, "|"))
max.l=Val(StringField(gadgetreturn$, 3, "|"))
;Prozentberechnung
onepercent.f=max/100
If onepercent.f=0:onepercent.f=1:EndIf
percent.l=position.l/onepercent.f

;Systemfarben ermitteln
HFarbe.l=GetSysColor_(#COLOR_BTNFACE )
RFarbe1.l=GetSysColor_(#COLOR_3DHIGHLIGHT)
RFarbe2.l=GetSysColor_(#COLOR_3DSHADOW)
TFarbe.l=GetSysColor_(#COLOR_BTNTEXT )
;Gadgetstyle erstellen
If IsImage (800+gadget.l)=0:CreateImage (800+gadget.l,pcwidth.l,pcheight.l):EndIf
If StartDrawing (ImageOutput ())
DrawingMode(0)
Box (0,0,pcwidth.l,pcheight.l,HFarbe.l)
Line (0,0,0,pcheight.l,RFarbe2.l)
Line (0,0,pcwidth.l,0,RFarbe2.l)
Line (0,pcheight.l-1,pcwidth.l,0,RFarbe1.l)
Line (pcwidth.l-1,0,0,pcheight.l,RFarbe1.l)
Box (1,1,((pcwidth.l*position)/max)-2,pcheight.l-2,RGB(100,100,250))
For x=10 To pcwidth.l-10 Step 10
Line (x,1,0,pcheight.l-2,HFarbe.l)
Next x
DrawingMode(1)
Locate (Int(pcwidth.l/2)-20,2)
rot.l=Red(TFarbe.l)
gruen.l=green(TFarbe.l)
blau.l=Blue(TFarbe.l)
FrontColor (rot.l,gruen.l,blau.l)
text$=Str(percent.l)+ " %"
DrawText (text$)
StopDrawing ()
EndIf
If IsGadget (gadget.l):SetGadgetState (gadget.l,UseImage (800+gadget.l)):EndIf
EndProcedure
Benutzeravatar
bluejoke
Beiträge: 1244
Registriert: 08.09.2004 16:33
Kontaktdaten:

Beitrag von bluejoke »

Hübsch, aber leider passt sich das Teil nicht dem XP-Stil an, und die Schrift ist ein bischen unleserlich.
Sonst aber Top! :allright:

Ich wusste gar nicht, wie man ein Gadget programmieren kann
Ich bin Ausländer - fast überall
Windows XP Pro SP2 - PB 4.00
Benutzeravatar
Hroudtwolf
Beiträge: 1416
Registriert: 30.10.2004 23:33
Kontaktdaten:

Beitrag von Hroudtwolf »

Stimmt. Wenn ich das mit dem XP_Stil wüsste wie ich das hinbekommen könnte ?!
Zumindest werden die Original Systemfarben des jeweiligen Systems benutzt.
Antworten