[Erledigt] Problem beim Fensteraufbau

Anfängerfragen zum Programmieren mit PureBasic.
pebo
Beiträge: 66
Registriert: 01.12.2006 21:08
Wohnort: 66450 Bexbach

[Erledigt] Problem beim Fensteraufbau

Beitrag von pebo »

Hallo zusammen,

ich habe ne Frage bezüglich dem Aufbau eines Fensters. Wenn ich den folgenden Code laufen lasse, wird das Fenster erst komplett aufgebaut und angezeigt, sobald die Schleife in der anderen Procedure fertig ist. Dabei müsste doch zuerst das Fenster aufgebaut werden da die Procedure mit der Schleife erst danach aufgerufen wird, oder verstehe ich da was falsch?

Code: Alles auswählen

; PureBasic Visual Designer v3.95 build 1485 (PB4Code)

EnableExplicit

;- Window Constants
;
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Text_0
  #Text_1
  #Frame3D_0
  #Button_0
EndEnumeration

Define Event			;Ereignis
Define WindowID		;Fensternummer
Define GadgetID		;Gadgetnummer
Define EventType		;Ereignis-Typ


Procedure Open_Window_0()
  If OpenWindow(#Window_0, 307, 136, 250, 247, "Testfenster",  #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_WindowCentered )
    If CreateGadgetList(WindowID(#Window_0))
      TextGadget(#Text_0, 50, 65, 55, 25, "Ergebnis:")
      TextGadget(#Text_1, 135, 65, 65, 25, "Ausgabe")
      Frame3DGadget(#Frame3D_0, 30, 30, 180, 100, "Rahmen")
      ButtonGadget(#Button_0, 75, 165, 95, 45, "OK")
    EndIf
  EndIf
EndProcedure

Procedure Durchlaeufe()
	Protected i
	For i = 0 To 25000
		SetGadgetText(#Text_1, Str(i))
	Next
EndProcedure


Open_Window_0()
Durchlaeufe()

Repeat ; Start of the event loop
  
  Event = WaitWindowEvent() ; This line waits until an event is received from Windows
  
  WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
  
  GadgetID = EventGadget() ; 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_Event_Gadget
    
    If GadgetID = #Button_0
    	CloseWindow(#Window_0)
		End
      
    EndIf
    
  EndIf
  
Until Event = #PB_Event_CloseWindow ; End of the event loop

End
;
Gruss
Peter
Zuletzt geändert von pebo am 16.10.2007 16:13, insgesamt 1-mal geändert.
Alle sagten "das geht nicht!" .... und dann kam einer der nichts davon wusste und machte es einfach.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Fenster regieren auf Events, kann also erst richtig
funktionieren wenn du WaitwindowEvent aufrufst.

Beispiel :

Code: Alles auswählen


; PureBasic Visual Designer v3.95 build 1485 (PB4Code)

EnableExplicit

;- Window Constants
;
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Text_0
  #Text_1
  #Frame3D_0
  #Button_0
EndEnumeration

Define Event         ;Ereignis
Define WindowID      ;Fensternummer
Define GadgetID      ;Gadgetnummer
Define EventType      ;Ereignis-Typ
Define TimeOut   = 0
Define Count     = 0

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 307, 136, 250, 247, "Testfenster",  #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_WindowCentered )
    If CreateGadgetList(WindowID(#Window_0))
      TextGadget(#Text_0, 50, 65, 55, 25, "Ergebnis:")
      TextGadget(#Text_1, 135, 65, 65, 25, "Ausgabe")
      Frame3DGadget(#Frame3D_0, 30, 30, 180, 100, "Rahmen")
      ButtonGadget(#Button_0, 75, 165, 95, 45, "OK")
    EndIf
  EndIf
EndProcedure

Open_Window_0()

Repeat ; Start of the event loop
 
  Event = WaitWindowEvent(timeout) ; This line waits until an event is received from Windows
 
  WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
 
  GadgetID = EventGadget() ; 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 count < 25000
    SetGadgetText(#Text_1, Str(count))
    count + 1
  Else
    timeout = #PB_Default 
  EndIf 


 
  If Event = #PB_Event_Gadget
   
    If GadgetID = #Button_0
       CloseWindow(#Window_0)
      End
     
    EndIf
   
  EndIf
 
Until Event = #PB_Event_CloseWindow ; End of the event loop

End
;

Benutzeravatar
#NULL
Beiträge: 2235
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

notfalls kannst du die events auch in 'Durchlaeufe()' abarbeiten:

Code: Alles auswählen

Procedure Durchlaeufe()
   Protected i
   For i = 0 To 25000
      SetGadgetText(#Text_1, Str(i))
      While WindowEvent()
        ;
      Wend
   Next
EndProcedure
kommt darauf an ob in der zeit andere events entstehen, auf die du reagieren willst, hängt also davon ab was du am ende vorhast.
im allgemeinen ist edel's variante aber die saubere(re).
my pb stuff..
Bild..jedenfalls war das mal so.
pebo
Beiträge: 66
Registriert: 01.12.2006 21:08
Wohnort: 66450 Bexbach

Beitrag von pebo »

Alles klar, DANKE für die Hilfe :allright:

Gruss
Peter
Alle sagten "das geht nicht!" .... und dann kam einer der nichts davon wusste und machte es einfach.
Antworten