Seite 4 von 5
Verfasst: 09.10.2006 23:22
von RSBasic
@edel
Bei 3.30 funktioniert nicht als Flag und irgendwie selber coden weis ich nicht wie das geht, ich hoffe es klappt bei 4.00

Verfasst: 09.10.2006 23:40
von edel
Noe , da auch nicht. Musst schon selber einbauen. Sollte auch mit 3.30 funktionieren.
Informationen zur Progressbar findest du ueber Google
(
http://www.google.com/codesearch ist sehr gut dafuer geeignet

)
oder direkt bei Microsoft auf MSDN (
http://windowssdk.msdn.microsoft.com/en ... 70343.aspx )
Hier noch der Link fuer das AnimationsControl
http://windowssdk.msdn.microsoft.com/en ... 73600.aspx
Damit kannst du simple Avidateien abspielen lassen.
ts-soft hatte da auch mal was fuer 'CreateGadget' (ab V4.0) gebastelt,
damit ist das abspielen solcher Animationen ein Kinderspiel.
Verfasst: 09.10.2006 23:53
von AND51
Kaeru Gaman hat geschrieben:> Refresh für nen Image? Einfach alles mit Rec... ich meine Box() übermalen?! Entspricht einem FlipBuffers()
ne, eben nicht. technisch, auf pixelebene ja, aber nicht auf win-ebene,
das fenster muss noch gesagt bekommen, dass das Image sich verändert hat.
Wenn du das Bild einem
ImageGadget() zuweist, musst du deinem eigenen Programm über Windows vorgaukeln, dass ein event eintritt, welches Windows veranlasst, das
ImageGadget() wiederherzustellen/neu zu zeichnen.
Keine Ahnung, welche Ereignisse das sind, aber z. B. das Wiederherstellungsereignis: Gaukel deinem Fenster vor, es sei minimiert und danach
wiederhergestellt bzw. maximiert worden! Oder versuchs mal mit
UpdateWindow_() oder
InvalidateRect(0, 0, 0). Sonst wüsst ich nichts... Außer, das Image mit SetGadgetState()
erneut dem ImageGadget()
zuzuweisen!
Verfasst: 09.10.2006 23:59
von RSBasic
@edel
Danke
Verfasst: 10.10.2006 00:10
von edel
Hier noch ein kleines Beispiel mit einem AnimationsControl.
Beispiel :
Code: Alles auswählen
hwnd = OpenWindow(0,0,0,220,40,"")
CreateGadgetList(hwnd)
anim = CreateWindowEx_(0,"SysAnimate32","",#WS_CHILD|#WS_VISIBLE,10,10,120,16,hwnd,0,0,0)
SendMessage_(anim,#ACM_OPEN,0,"loading.avi")
SendMessage_(anim,#ACM_PLAY,-1,-1) ; Makelong(0,-1)
;SendMessage_(anim,#ACM_STOP,0,0)
Repeat
e = WaitWindowEvent()
Until e = #WM_CLOSE
Verfasst: 10.10.2006 01:49
von Kaeru Gaman
@edel
geht das animationscontrol auch auf 2k? der XP-progressbar wohl kaum.
auch wenns geht, ein AVI braucht man dafür auf jeden fall.
...dann erklär RSB mal, wie er sichn AVI selber macht...
außerdem, was spricht gegen selberzeichnen?
Verfasst: 10.10.2006 09:26
von HeX0R
Mit einem simplen
SetGadgetState() wird das Pic im Gadget erneuert:
Code: Alles auswählen
Procedure MyProgress(StripeX.l)
If IsImage(0) = 0
CreateImage(0,120,20)
EndIf
StartDrawing(ImageOutput(0))
Box(0,0,120,20,$FFFFFF)
Box(StripeX,5,60,10,$0000FF)
Box(StripeX-120,5,60,10,$0000FF)
For n=10 To 110 Step 10
Line(n,5,0,10,$FFFFFF)
Next
For n=0 To 4
Line(n,5,0,10,$FFFFFF)
Line(119-n,5,0,10,$FFFFFF)
Next
DrawingMode(4)
Box(2,2,116,16,$000000)
StopDrawing()
ProcedureReturn ImageID(0)
EndProcedure
OpenWindow(0,0,0,200,100,"Progressor",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
CreateGadgetList(WindowID(0))
ImageGadget(1,20,20,120,20,MyProgress(0))
Repeat
EventID = WaitWindowEvent(20)
If EventID = 0
StripeX + 2
If StripeX >= 120
StripeX = 0
EndIf
SetGadgetState(1, MyProgress(StripeX))
EndIf
Until EventID = #PB_Event_CloseWindow
Allerdings wäre hier ein Timer zu bevorzugen.
Verfasst: 10.10.2006 09:41
von roherter
@Hexor:Cooler Code.

Verfasst: 10.10.2006 09:52
von Kaeru Gaman
@HeXOR
ich habe mit absicht mit
zwei images gearbeitet,
nämlich um einem möglichen flackern vorzubeugen.
[edit2]
ist aber wohl unnötig, wenn das bild erst nach dem zeichnen aktualisiert wird.
SetGadgetState... mist.. hätt ich auch selber drauf kommen können...
...ich mach halt viel zu selten was mit Fensterl....
also danke fürs lösung finden.
[edit]
weitergegebenes empfangen.

Verfasst: 10.10.2006 09:52
von HeX0R
Also eigentlich hab ich nur den Code von Kaeru Gaman entsprechend verfeinert.
Ich gebe also den Dank einfach mal weiter
