Bildschirmschoner mit PB

Für allgemeine Fragen zur Programmierung mit PureBasic.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

nuja.. so'n code muss man sich halt erstmal durchlesen, durchbeissen, verstehen, bevor man was mit anfangen kann...

es ging auch nicht alleine um das snippet von mk / ausm code-archiv,
sondern ganz allgemein um die postings, wo gesagt wurde:

1) exe in scr umbenennen

2) kurzes gerüst von macros, daraus der hinweis:
die unterfuntionen des screensavers werden per ProgramParameter gehandlet.

3) wertvoll der hinweis von zecke, dass das handle des preview windows als 2ter parameter mitgeschickt wird.


ich habs grad mal ausgetestet, mit diesem ober-billigen code (3.94):

Code: Alles auswählen

InitSprite()
InitKeyboard()
OpenScreen(800,600,32,"bla")

x.l = 400
y.l = 300
xs.l = 4
ys.l = 4

Repeat
    ClearScreen(0,0,0)
    ExamineKeyboard()

    StartDrawing(ScreenOutput())
        FrontColor(Random(255),Random(255),Random(255))
        Circle(x,y,16)
    StopDrawing()

    x+xs : If x > 770 Or x < 30 : xs = -xs : EndIf
    y+ys : If y > 570 Or y < 30 : ys = -ys : EndIf

    FlipBuffers()
Until KeyboardPushed(1)

End
daraus ne .exe compilieren, in .scr umbenennen, im systemordner speichern.
(bei mir: WINNT\System32 = 2Kpro)

ergebnis1:
beim auswählen als bildschirmschoner wird die exe mehrfach gestartet (eben mit den options-parametern, die ich nicht prüfe) einfach mit ESC beenden. ganz normal als screensaver einrichten, zeit einstellen, warten.

ergebnis2:
nach der wartezeit wird es ordnungsgemäss gestartet.
der programmabbruch wird intern gehandlet, also, dieser screensaver lässt sich nur mit ESC abbrechen. (Win2Kpro, maybe anders unter XP)
also, vorm weitergeben sollte man noch
a) den übergabe-parameter-check einbauen
b) die EXIT-bedingung auf alles einrichten, was normalerwiese einen SCR beendet

ansonsten scheint es so zu gehen. IT REALLY THAT EASY!


PS:
bitte beim zitieren von posts die code enthalten NICHT! faulerweise den ganzen code mitzitieren, das müllt nur das forum zu! :evil:
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Rattlesnake Entertainment
Beiträge: 34
Registriert: 25.10.2005 16:17

Beitrag von Rattlesnake Entertainment »

Na ja...
Ich hab' einmal versucht, versucht, versucht
und ich find den billigen Bildschirmschoner hab ich zu etwas hal-brauchbaren verarbeitet.

Code: Alles auswählen

InitSprite() 
InitKeyboard()
InitMouse() 
OpenScreen(800,600,32,"bla") 

DefType.l
x1 = 400 
y1 = 300 
xs1 = 4 
ys1 = 4

x2 = 150
y2 = 324
xs2 = 6
ys2 = 6

x3 = 50
y3 = 34
xs3 = 5
ys3 = 5

x4 = 210
y4 = 243
xs4 = 5
ys4 = 5

x01 = 60
y01 = 24
xs01 = 6
ys01 = 6

x02 = 115
y02 = 194
xs02 = 6
ys02 = 6

x03 = 21
y03 = 34
xs03 = 6
ys03 = 6

x04 = 10
y04 = 32
xs04 = 8
ys04 = 8

ExamineMouse()
MX = MouseX()
MY = MouseY()

r = Random(255)
g = Random(255)
b = Random(255)

Repeat
If r < 0 : r = Random(255) : Else : r = r -1 : EndIf
If g < 0 : g = Random(255) : Else : g = g -1 : EndIf
If b < 0 : b = Random(255) : Else : b = b -1 : EndIf
  
    ClearScreen(r,g,b) 
    ExamineKeyboard() 
    ExamineMouse()

    StartDrawing(ScreenOutput()) 
        FrontColor(Random(255),Random(255),Random(255)) 
        Circle(x1,y1,16)
        Box(x2,y2,10,10)
        LineXY(x3,y3,Random(200),Random(200))
        Ellipse(x4,y4,Random(30),Random(30))
        Circle(x01,y01,24)
        Box(x2,y02,22,29)
        LineXY(x03,y03,Random(260),Random(260))
        Ellipse(x04,y04,Random(90),Random(90))
    StopDrawing() 

    x1+xs1 : If x1 > 770 Or x1 < 30 : xs1 = -xs1 : EndIf 
    y1+ys1 : If y1 > 570 Or y1 < 30 : ys1 = -ys1 : EndIf
    
    x2+xs2 : If x2 > 785 Or x2 < 18 : xs2 = -xs2 : EndIf
    y2+ys2 : If y2 > 585 Or y2 < 25 : ys2 = -ys2 : EndIf
    
    x3+xs3 : If x3 > 785 Or x3 < 18 : xs3 = -xs3 : EndIf
    y3+ys3 : If y3 > 585 Or y3 < 25 : ys3 = -ys3 : EndIf
    
    x4+xs4 : If x4 > 785 Or x4 < 18 : xs4 = -xs4 : EndIf
    y4+ys4 : If y4 > 585 Or y4 < 25 : ys4 = -ys4 : EndIf
    
    x01+xs01 : If x01 > 785 Or x01 < 18 : xs01 = -xs01 : EndIf
    y01+ys01 : If y01 > 585 Or y01 < 25 : ys01 = -ys01 : EndIf
    
    x02+xs02 : If x02 > 785 Or x02 < 18 : xs02 = -xs02 : EndIf
    y02+ys02 : If y02 > 585 Or y02 < 25 : ys02 = -ys02 : EndIf
    
    x03+xs03 : If x03 > 785 Or x03 < 18 : xs03 = -xs03 : EndIf
    y03+ys03 : If y03 > 585 Or y03 < 25 : ys03 = -ys03 : EndIf
    
    x04+xs04 : If x04 > 785 Or x04 < 18 : xs04 = -xs04 : EndIf
    y04+ys04 : If y04 > 585 Or y04 < 25 : ys04 = -ys04 : EndIf

    FlipBuffers() 
Until KeyboardPushed(1) Or MX <> MouseX() Or MY <> MouseY()

End
Ich weiß, es wäre angenehmer, nur eine Farbe pro Element zu wählen, aber so ist's eben farbenfroher :D
======================
|| Rattlesnake Entertainment ||
======================
Antworten