Seite 1 von 1

Gadgets Aufbau-Reihenfolge

Verfasst: 04.11.2008 20:56
von Mok
Tach!
Sorry, wegen dem Titel, aber mir is nichts besseres eingefallen :)
Also, mein Problem: Ich hab mit dem VD eine kleine GUI mit ProgressBar gebaut. Nachdem (im Code zumindest) die Gadgets aufgezeichnet wurden, will ich im ProgressBar einen Fortschritt einblenden, so ungefähr:

Code: Alles auswählen

For Fortschritt = 0 To 13
  SetGadgetState(#ProgressBar_0, Fortschritt)
  Delay(19)
Next
Das komische ist aber, dass erst nachdem die ProgressBar um 13 gestiegen ist, die restlichen Gadgets gerendert werden. Hier mal der Code:

Code: Alles auswählen

Enumeration
  #Window_0
EndEnumeration

Enumeration
  #ProgressBar_0
  #Text_0
  #Frame3D_0
EndEnumeration

Global Fortschritt

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 216, 0, 571, 153, #PB_Window_TitleBar | #PB_Window_BorderLess | #PB_Window_ScreenCentered , "Export Service")
    If CreateGadgetList(WindowID())
      TextGadget(#Text_0, 30, 30, 90, 20, "Vorbereiten...")
      Frame3DGadget(#Frame3D_0, 10, 130, 550, 10, "VMT Maker v1.00 Beta          Export Service")
      ProgressBarGadget(#ProgressBar_0, 30, 60, 500, 20, 0, 100, #PB_ProgressBar_Smooth)
      
   EndIf
  EndIf
EndProcedure

Open_Window_0()

      For Fortschritt = 0 To 13
        SetGadgetState(#ProgressBar_0, Fortschritt)
        Delay(19)
      Next

Repeat ; Start of the event loop
  
  Event = WaitWindowEvent() ; This line waits until an event is received from Windows
  
  WindowID = EventWindowID() ; The Window where the event is generated, can be used in the gadget procedures
  
  GadgetID = EventGadgetID() ; Is it a gadget event?
  
  EventType = EventType() ; The event type
  
  ;You can place code here, and use the result as parameters for the procedures
  
  If Event = #PB_EventGadget
    
    If GadgetID = #ProgressBar_0
      
    EndIf
    
  EndIf
  
Until Event = #PB_Event_CloseWindow ; End of the event loop
End
Ich hab schon probiert, den Fortschritt in die Procedure zu schreiben, und die ProgressBar ganz ans Ende der Procedure zu schreiben, aber es hat nich gefunzt.

MfG, Mok

P.S.: v3.94
P.P.S.: @Kiffi: Hockt der Bug noch immer vor der Tastatur?

Verfasst: 04.11.2008 21:02
von sibru
so klappt´s:

Code: Alles auswählen

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 216, 0, 571, 153, #PB_Window_TitleBar | #PB_Window_BorderLess | #PB_Window_ScreenCentered , "Export Service")
    If CreateGadgetList(WindowID())
      TextGadget(#Text_0, 30, 30, 90, 20, "Vorbereiten...")
      Frame3DGadget(#Frame3D_0, 10, 130, 550, 10, "VMT Maker v1.00 Beta          Export Service")
      ProgressBarGadget(#ProgressBar_0, 30, 60, 500, 20, 0, 100, #PB_ProgressBar_Smooth)
    EndIf
  EndIf
  While WindowEvent() : Delay(1) : Wend ;<-- erstmal die MessageQueue zur Ruhe kommen lassen...
EndProcedure

Verfasst: 04.11.2008 21:03
von Mok
funzt nicht...

Edit
Nach dem 2. Testrun funztz doch :shock: :lol:

Verfasst: 04.11.2008 21:33
von NicTheQuick
Aber das 'Delay(1)' braucht man nicht. Bzw. es ist sogar besser, wenn's nicht da steht.

Verfasst: 04.11.2008 22:10
von HeX0R
Eigentlich ist es besser die ganze Schleife so nicht dastehen zu haben.

Verfasst: 04.11.2008 22:24
von Kaeru Gaman
> Das komische ist aber, dass erst nachdem die ProgressBar um 13 gestiegen ist, die restlichen Gadgets gerendert werden.

:lol: yo, good joke!


also, wenn du erst bis 13 zählst, und dann die Events verarbeitest,
sollte dich das nicht wundern, wenn erst nach 13 was auf dem window passiert!

mach einen counter in die normale eventschleife, und das auch noch über nen millisekunden-abgleich getimed.

Verfasst: 04.11.2008 22:29
von RSBasic
:lol:

Verfasst: 05.11.2008 00:20
von Mok
? :?
Das kann doch den Events wurscht sein

Verfasst: 05.11.2008 00:26
von Kiffi
Mok hat geschrieben:? :?
Das kann doch den Events wurscht sein
die werden aber nicht abgearbeitet. Das wird von WaitWindowEvent() oder
WindowEvent() erledigt.

Grüße ... Kiffi