Gadgets Aufbau-Reihenfolge

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Gadgets Aufbau-Reihenfolge

Beitrag 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?
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
sibru
Beiträge: 265
Registriert: 15.09.2004 18:11
Wohnort: hamburg

Beitrag 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
Bild Bild
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Beitrag von Mok »

funzt nicht...

Edit
Nach dem 2. Testrun funztz doch :shock: :lol:
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Aber das 'Delay(1)' braucht man nicht. Bzw. es ist sogar besser, wenn's nicht da steht.
Benutzeravatar
HeX0R
Beiträge: 3042
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 »

Eigentlich ist es besser die ganze Schleife so nicht dastehen zu haben.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

:lol:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Beitrag von Mok »

? :?
Das kann doch den Events wurscht sein
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
a²+b²=mc²
Antworten