Repeat-Schleife spricht nicht immer an

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
dibro
Beiträge: 143
Registriert: 11.03.2006 12:52
Computerausstattung: Win 10 64 bit
Wohnort: Solingen

Repeat-Schleife spricht nicht immer an

Beitrag 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
Gruß aus Solingen, PB 6.0 Win 10 Pro
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag 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
-.-"
Benutzeravatar
uweb
Beiträge: 461
Registriert: 13.07.2005 08:39

Beitrag 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.
Zuletzt geändert von uweb am 17.04.2006 17:30, insgesamt 1-mal geändert.
Benutzeravatar
dibro
Beiträge: 143
Registriert: 11.03.2006 12:52
Computerausstattung: Win 10 64 bit
Wohnort: Solingen

Beitrag von dibro »

Danke, funzt,
Du kannst Dir gar nicht vorstellen, wo ich überall gesucht habe.
Gruß aus Solingen, PB 6.0 Win 10 Pro
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag 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).
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Benutzeravatar
dibro
Beiträge: 143
Registriert: 11.03.2006 12:52
Computerausstattung: Win 10 64 bit
Wohnort: Solingen

Beitrag 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
Gruß aus Solingen, PB 6.0 Win 10 Pro
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten