AddImageFrame macht was es will !
Verfasst: 04.08.2020 20:06
Ich will nicht viel dazu sagen, probiert es einfach aus, und schaut euch die Kommentare
im Code an, und ihr werdet schnell merken das sie unlogisches Verhalten hat. Egal ob Möglichkeit
a) Müll Frame vorne abschneiden (wenn mann da nicht aufpasst, verliert mann schnell ein nützliches Frame)
oder
b) Müll Frame am Ende abschneiden.
PB 5.72 32Bit unter Windows
im Code an, und ihr werdet schnell merken das sie unlogisches Verhalten hat. Egal ob Möglichkeit
a) Müll Frame vorne abschneiden (wenn mann da nicht aufpasst, verliert mann schnell ein nützliches Frame)
oder
b) Müll Frame am Ende abschneiden.
PB 5.72 32Bit unter Windows
Code: Alles auswählen
#pic = 0
#gd = 0
#Win = 0
OpenWindow(#Win,0,0,500,400,"New Prog",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget)
If CreateImage(#pic, 200, 200)
StartDrawing(ImageOutput(#pic))
Box(0,0,200,200,#blue)
DrawText(5,5,"Bla",#yellow)
StopDrawing()
ImageGadget(#gd, 0, 0, 200, 200, ImageID(#pic))
EndIf
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
EventGadget = EventGadget()
If EventGadget = #gd And EventType() = #PB_EventType_LeftClick
x = ImageFrameCount(#pic)
Debug x ; 1 ? Wirklich ? Ok dann schmeissen wir eins drauf
;AddImageFrame(#pic,2) ; HMM liegt ausserhalb des gültigen bereichs. Schon klar, fängt ja auch bei 0 an, dann probieren wir die 1.
;AddImageFrame(#pic,1) ; Was immer noch ein Fehler ? Wieso ? Das ist total unlogisch. Ok dann halt 0 !
AddImageFrame(#pic,0) ; Das geht ? Warum ist dann x schon davor 1 gewesen ?
; Ok ein Bild drin, aber die erste Pos ist 0 !
; warum ist dann AddImageFrame(#pic,1) out of bounds ? Und was passiert wenn ich vor schon direkt nach CreateImage
; auf #pic zeichnen würde, und dann AddImageFrame(#pic,0) benutze ? geht dann der Inhalt flöten ? Probieren wir es aus.
SetImageFrame(#pic,0)
SetGadgetState(#gd,ImageID(#pic)) ; Ja geht es oder ? ! Wo ist dann die Bla Box hin ?
MessageRequester("ImageFramePos=0","Wo ist sie die Box ?")
SetImageFrame(#pic,1) ; Setzen wir mal auf 1 !
SetGadgetState(#gd,ImageID(#pic)) ; Da ist sie wieder ? WTF ? Und was ist dann die 0 ?
;ein unnötiges schwarzes Frame ! Gut dann schneiden wir das halt raus. Aber davor fügen wir noch ein paar Frames dazu.
MessageRequester("ImageFramePos=1","Da ist sie ja. Auf der 1. Wurde also einfach so von 0 auf 1 verschoben")
For p = 1 To 4 ; Ok da BLA jetzt auf 1 ist, überschreiben wir gerade BLA
AddImageFrame(#pic,p)
StartDrawing(ImageOutput(#pic))
Box(0,0,200,200,#blue)
DrawText(5,5,Str(p),#yellow)
StopDrawing()
Next
MessageRequester("","Nach Draw: for p = 1 to 4")
For p = 0 To 4
SetImageFrame(#pic,p)
SetGadgetState(#gd,ImageID(#pic))
MessageRequester("",Str(p))
Next
y = ImageFrameCount(#pic)
Debug y ; 6 ????? Wirklich ? Wir haben 4 hinzugefügt (p = 1 to 4) und die erste Position ist 0 !
;RemoveImageFrame(#pic,6) ; Out of bounds, war ja klar.
RemoveImageFrame(#pic,5) ; OK
;SetImageFrame(#pic,5) ; Natürlich nicht ok ! Wir haben 4 hinzugefügt, und 0 ist das erste, nur ist das erste Schwarz !
; Und was ist wenn wir jetzt das erste enfernen ?
RemoveImageFrame(#pic,0)
h = ImageFrameCount(#pic)
Debug h ; Aha also 5
SetImageFrame(#pic,0)
SetGadgetState(#gd,ImageID(#pic))
MessageRequester("","Wieso kommt wenn p = 4 ist out of bounds ? Sagte das Ding nicht gerade das h = 5 ist ?"+Chr(10)+"Wir schaffen es ja nicht mal bis zur 4 !")
For p = 0 To 4
SetImageFrame(#pic,p)
SetGadgetState(#gd,ImageID(#pic))
MessageRequester("p="+Str(p),"")
Next
; Und wenn mann AddFrameImage(#pic) benutzt ohne id hinten, dann ist halt das letzte Frame ein schwarzes unnötiges
; (das mann löschen sollte) aber immerhin geht nichts durch das WirWar verhalten das bei einem selbst auch für WirWar sorgt verloren !
; Die Funktion ist fast unbrauchbar, total unberechenbares verhalten, machste mit Zähler, macht sie vorne Müll, machste ohne
; dann hinten, setzt du sie über eine CopyImage Funtion benimmt sie sich wieder anders als direkt drunter ! Alles schon gehabt.
EndIf
EndIf
If Event = #PB_Event_CloseWindow
End
EndIf
ForEver