Progressgadget wie beim Booten

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag 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 :D
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag 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.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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!
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

@edel
Danke
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag 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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
HeX0R
Beiträge: 3040
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag 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.
Benutzeravatar
roherter
Beiträge: 1407
Registriert: 10.04.2005 18:58
Kontaktdaten:

Beitrag von roherter »

@Hexor:Cooler Code. :allright:
Purebasic 5.0 32bit und 64 bit

I'm back from hell
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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. :allright:

[edit]
weitergegebenes empfangen. :D
Zuletzt geändert von Kaeru Gaman am 10.10.2006 10:32, insgesamt 4-mal geändert.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
HeX0R
Beiträge: 3040
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

Also eigentlich hab ich nur den Code von Kaeru Gaman entsprechend verfeinert.
Ich gebe also den Dank einfach mal weiter <)
Antworten