ProgressCircle (for Linux/Windows & Mac.... evtl. ))

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.
walker
Beiträge: 278
Registriert: 29.08.2004 18:39
Wohnort: Bayern

ProgressCircle (for Linux/Windows & Mac.... evtl. ))

Beitrag von walker »

hier eine Kleinigkeit, die ich für mich selbst gebraucht habe..
ein klein wenig Mathe und 2D Drawing... fertig .. und das Beste.. es ist crossplattform :cool:

ein screenshot:
Bild

und hier der source:

Code: Alles auswählen

; ProgressCircle
; 2008 by walker
; free for everyone and any purposes
; enhancements made by others must be published and posted in the same PB-Forum ;-)
;--------------------------------------------


Procedure ProgressCircle(number.l,x.l,y.l,size.l,segments.l,fg.l,bg.l)
    img=CreateImage(0,size,size)
    StartDrawing(ImageOutput(0))
    FillArea(0,0,1,bg)
    Circle(size/2,size/2,size/2,fg)
    Circle(size/2,size/2,size/2-10,bg)    
    t2=(segments/4);steps 
    t3=size/t2; width per step
    For n = 0 To t2
        LineXY(n*t3,0,size-(n*t3),size,bg)     
        LineXY(size,n*t3,0,size-(n*t3),bg)             
    Next
    StopDrawing()
    ImageGadget(number,x,y,size,size,ImageID(0))
EndProcedure

Procedure SetProgressCircleState(progressbar.l,segments.l, state.l, text.s , color.l, bg.l)
LoadFont(0,"sans",8)
StartDrawing(ImageOutput(0))

If text.s<>""
    BackColor(bg)
    DrawingFont(FontID(0))
    DrawText(ImageWidth(0)/2-(TextWidth(text)/2)-4,(ImageWidth(0)/2-5),"       ")
    DrawText(ImageWidth(0)/2-(TextWidth(text)/2),(ImageWidth(0)/2-5),text)
EndIf   
t2=(segments/4)
t3=ImageWidth(0)/t2
size=ImageWidth(0)

beta.d=(360/segments)*(state)
beta_h.d=(360/segments)/2
beta=beta-beat_h-90
x=ImageWidth(0)/2
y=ImageWidth(0)
cx=ImageWidth(0)/2
cy=ImageWidth(0)/2
r=ImageWidth(0)/2
r-3

beta_in_rad.d=(beta/180)*#PI
x1 = cx+r * Cos(beta_in_rad);
y1 = cy+r * Sin(beta_in_rad);

FillArea(x1,y1,bg,color)
StopDrawing()
SetGadgetState(progressbar,ImageID(0))

While WindowEvent():Wend
ProcedureReturn 1
EndProcedure

;---- DEMO -----<

bg=$D2D8C3; backgroundcolor
fg=$AAB68F; initial color of the circle
stp=12; values  4 , (8,9,10 = 10); 12; 18; 22; 28 for other values the drawing procedure must be changed (and I have no time at present)
size=50;20 is minimum;  maximum... your screen ;-)

Da der Rest Unsinn war... müsst Ihr Euch nun selbst was ausdenken....

END
Es ist noch viel Raum für Verbesserungen (z.B. die Werte für den Kreis,, nicht alle führen zu dem gewünschten Ergebnis.. dafür muß die Drawing-Procedure etwas angepasst werden (die Berechnung) aber dafür habe ich momentan keine Zeit...)

Viel Spaß damit!
Zuletzt geändert von walker am 12.03.2008 16:19, insgesamt 1-mal geändert.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

@walker
Dein ProgressCircle wird nach einigen Sekunden schwarz.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

bei mir erst im letzten durchlauf, allerdings halte ich diesen abschnitt für problematisch:

Code: Alles auswählen

        r=Random(255)-50
        g=Random(255)-100
        b=Random(255)-200
das ist der falsche weg, zufallszahlen für farbkanäle zu erzeugen.
b wird eine zahl zwischen -200 und +55 werden, und damit mit 78%iger wahrscheinlichkeit negativ.
das ist für einen farbkanal ungeeignet.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
walker
Beiträge: 278
Registriert: 29.08.2004 18:39
Wohnort: Bayern

Beitrag von walker »

:freak: ...... ist doch nur 'ne DEMO..... das die Zahlen negativ werden können, ist schon klar.... /:->
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ja tschuldige n paar mal....
unsinn gecoded ist unsinn gecoded, ob demo oder fisch....
Zuletzt geändert von Kaeru Gaman am 12.03.2008 16:17, insgesamt 2-mal geändert.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
walker
Beiträge: 278
Registriert: 29.08.2004 18:39
Wohnort: Bayern

Beitrag von walker »

sonst alles klar?
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

erweckt halt den eindruck, als ob du mit Random nicht umgehen kannst.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
walker
Beiträge: 278
Registriert: 29.08.2004 18:39
Wohnort: Bayern

Beitrag von walker »

:evil: meinen Eindruck verkünde ich jetzt besser nicht... :evil:

da es für die Demo egal war ob die Farbe schwarz, grau oder sonstwas ist, war mir auch eine negative Zahl egal... :shock:
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

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
Dieser Forenteil wird auch von Anfängern genutzt ... und wenn diese so
etwas sehen, wird es von denen falsch übernommen und dann wundern die
sich. Wie von Kaeru Gaman angesprochen, ist die nutzung in deinem Code
nicht unbedingt optimal ... und das ändern sollte ja wohl kein Problem sein.

Und unfreundlichkeit wird hier nicht gern gesehen ... auch wenn das
manchmal den anschein hat /:->

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ich seh jetzt erst, dass er schon um 15:19 den strittigen teil einfach rausgenommen hat...
is ja auch nich die feine englische...
jetzt steht das teil ohne demo da

also, hier ist noch mal der komplette code, die verbesserte version wie sie im englischen forum steht:

Code: Alles auswählen

; ProgressCircle
; 2008 by walker
; free for everyone and any purposes
; enhancements made by others must be published and posted in the same PB-Forum ;-)
;--------------------------------------------


Procedure ProgressCircle(number.l,x.l,y.l,size.l,segments.l,fg.l,bg.l)
    img=CreateImage(0,size,size)
    StartDrawing(ImageOutput(0))
    FillArea(0,0,1,bg)
    Circle(size/2,size/2,size/2,fg)
    Circle(size/2,size/2,size/2-10,bg)   
    t2=(segments/4);steps
    t3=size/t2; width per step
    For n = 0 To t2
        LineXY(n*t3,0,size-(n*t3),size,bg)     
        LineXY(size,n*t3,0,size-(n*t3),bg)             
    Next
    StopDrawing()
    ImageGadget(number,x,y,size,size,ImageID(0))
EndProcedure

Procedure SetProgressCircleState(progressbar.l,segments.l, state.l, text.s , color.l, bg.l)
LoadFont(0,"sans",8)
StartDrawing(ImageOutput(0))

If text.s<>""
    BackColor(bg)
    DrawingFont(FontID(0))
    DrawText(ImageWidth(0)/2-(TextWidth(text)/2)-4,(ImageWidth(0)/2-5),"       ")
    DrawText(ImageWidth(0)/2-(TextWidth(text)/2),(ImageWidth(0)/2-5),text)
EndIf   
t2=(segments/4)
t3=ImageWidth(0)/t2
size=ImageWidth(0)

beta.d=(360/segments)*(state)
beta_h.d=(360/segments)/2
beta=beta-beat_h-90
x=ImageWidth(0)/2
y=ImageWidth(0)
cx=ImageWidth(0)/2
cy=ImageWidth(0)/2
r=ImageWidth(0)/2
r-3

beta_in_rad.d=(beta/180)*#PI
x1 = cx+r * Cos(beta_in_rad);
y1 = cy+r * Sin(beta_in_rad);

FillArea(x1,y1,bg,color)
StopDrawing()
SetGadgetState(progressbar,ImageID(0))

While WindowEvent():Wend
ProcedureReturn 1
EndProcedure

;---- DEMO -----<

bg=$D2D8C3; backgroundcolor
fg=$AAB68F; initial color of the circle
stp=12; values  4 , (8,9,10 = 10); 12; 18; 22; 28 for other values the drawing procedure must be changed (and I have no time at present)
size=50;20 is minimum;  maximum... your screen ;-)

OpenWindow(0,0,0,210,210,"ProgressCircle DEMO")
CreateGadgetList(WindowID(0))
ProgressCircle(0,70,70,size,stp,fg,bg)

r=10
g=150
b=10
count=0
Repeat
    For m= 1 To stp
        SetProgressCircleState(0,stp,m,"",RGB(r, g, b),bg)
        Delay(100)
    Next
    count+1
    r+20
    g+20
    b+10
    If r >240 Or g>240 Or  b>240
        r=Random(255)
        g=Random(255)
        b=Random(255)
    EndIf
Until WaitWindowEvent(1)=#PB_Event_CloseWindow Or count=10
End 
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten