Seite 1 von 1

Repeat-Schleife spricht nicht immer an

Verfasst: 17.04.2006 17:12
von dibro
Hi,
Ich hab ein Problem mit meiner Abfrageschleife.

Code: Alles auswählen

Repeat 
        
        Event = WaitWindowEvent()
        
        If Event = #PB_Event_Menu
          
          Select EventMenuID()  
            Case 1 
              MessageRequester("Neu", 								"1 noch nicht verfügbar",0)
            Case 2
              MessageRequester("Öffnen", 							"2 noch nicht verfügbar",0)
            Case 3
              MessageRequester("Speichern", 					"3 noch nicht verfügbar",0)
            Case 4
              MessageRequester("Speichern unter ..", 	"4 noch nicht verfügbar",0)
            Case 5
              MessageRequester("Drucken", 						"5 noch nicht verfügbar",0)
            Case 6 
            	Quit = 1
          EndSelect	
          
        EndIf
			 

      Until WaitWindowEvent()=#PB_Event_CloseWindow Or Quit =1
   
End 
Nicht jedes Mal, wenn ich ins Menü klicke, spricht es an, z.T. muss ich bis zu 3 Mal klicken.
Das Gleiche gilt auch für das Beenden oder Fenster schließen.
Manchmal geht's aber auch sofort, völlig unvorhersehbar.
Wer kann helfen ?
Danke schon mal im Voraus

Verfasst: 17.04.2006 17:14
von Green Snake
Du darfst pro Loop nur einmal WaitWindowEvent benützen.

Code: Alles auswählen

Until Event=#PB_Event_CloseWindow Or Quit =1
muss es heissen

Verfasst: 17.04.2006 17:30
von uweb
Ich bin etwas langsam - musste es erst ausprobieren und den Fehler suchen. Andere sehen so etwas einfach.
:oops:

Da ich mir die Arbeit aber nun einmal gemacht habe ...
In 4.0 würde das so aussehen :

Code: Alles auswählen

If OpenWindow(0, 100, 150, 195, 260, "PureBasic - Menu")

  ;
  ; Create the menu. The indent is very important here for a good lisibility
  ;

  If CreateMenu(0, WindowID(0))
    MenuTitle("File")
      MenuItem( 1, "Neu")
      MenuItem( 2, "Öffnen")
      MenuItem( 3, "Speichern")
      MenuItem( 4, "Speichern unter ..")
      MenuItem( 5, "Drucken")
      MenuItem( 6, "Ende")
  EndIf

Repeat
       
        Event = WaitWindowEvent()
       
        If Event = #PB_Event_Menu
         
          Select EventMenu() 
            Case 1
              MessageRequester("Neu", "1 noch nicht verfügbar",0)
            Case 2
              MessageRequester("Öffnen", "2 noch nicht verfügbar",0)
            Case 3
              MessageRequester("Speichern", "3 noch nicht verfügbar",0)
            Case 4
              MessageRequester("Speichern unter ..", "4 noch nicht verfügbar",0)
            Case 5
              MessageRequester("Drucken", "5 noch nicht verfügbar",0)
            Case 6
               Quit = 1
          EndSelect   
         
        EndIf
         

      Until Event=#PB_Event_CloseWindow Or Quit =1

  EndIf   
End 
Wobei die 2. letzte Zeile ( um die es geht ) in 3.94 gleich wäre.

Verfasst: 17.04.2006 17:30
von dibro
Danke, funzt,
Du kannst Dir gar nicht vorstellen, wo ich überall gesucht habe.

Verfasst: 17.04.2006 17:47
von Andre
Habe aufgrund dieses doch ab und zu vorkommenden Programmier-Fehlers jetzt nochmal einen extra Hinweis in die Hilfe aufgenommen:
PB v4 Hilfe hat geschrieben:Pro Ereignisschleife darf nur einmal WaitWindowEvent() aufgerufen werden, da andernfalls Ereignisse "verloren" gehen (jedes Ereignis kann nur einmal ausgewertet werden und steht damit nach der ersten Verarbeitung nicht noch ein zweites Mal zur Verfügung).

Verfasst: 18.04.2006 13:49
von dibro
@André
habe da noch zwei Vorschläge für die Hilfe, am zweiten Fehler habe ich lange gesucht.
1.
StrF(String$,Dec) rundet meiner Ansicht nach doch und schneidet nicht ab, wie es in der Hilfe steht.
2.
Wenn man mit Enumeration arbeitet und dann nachträglich aus Faulheit doch noch mit einer Zahl, wird das Gadget oder Fenster etc. welches enummeriert ist, überschrieben und als Anfänger sucht man, warum das plötzlich nicht mehr geht.
Ich habe mir jetzt so geholfen, dass ich die erste Enumerationkonstante mit einer höheren Nummer belegt habe
# StringGadget_MeinGG1 = 20
dann bleiben die ersten 0...19 frei zur gelegentlichen Verwendung

Verfasst: 18.04.2006 13:55
von Kaeru Gaman
@dibro

ich finde, die hilfe ist kein ort für ein tutorial.

wenn man nicht weiß, was Enum tut, soll man halt die finger von lassen!

wird sowieso total überstrapaziert und überbewertet!

ich hab da schon dinger gesehen, wofür leute Enum verwenden wollten,
und nachher wars der reinste horror der code... *koppschüttel*

das ist aber mit jeder feature so:
wenn man sie einfach irgendwie verwendet ohne darauf zu achten,
was sie tut, kanns bös ins auge gehen.