Seite 1 von 1

Problem bei Progausführung

Verfasst: 30.04.2005 20:54
von Defmaster
Also ich habe nen Problem ich schreibe gerade nen Programm mit Menü und Shortcuts.

So nun allerdings reagiert der nich immer, dass heißt wenn ich auf Datei öffnen gehe kommt das manchmal erst nach 3-4 mal.
Und da das ziemlich stört will ich diesen Fehler schnellst möglich beheben.

Hier mal der Grundriss vom Programm.

Code: Alles auswählen

OpenWindow(#Window_0, 96, 266, 640, 480,  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered | #PB_Window_WindowCentered , "Titel")

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_Menu
      Select EventMenuID()
        Case #MENU_9
      close = #PB_Event_CloseWindow
      
      ;- Datei speichern
    Case #MENU_6
      ;EVENT
      If dateiname$ = ""
        ;EVENT
      Else
        If SelectedFilePattern() = 0
          ;EVENT
        Else 
          ;EVENT
        EndIf 
      EndIf 
      
    Case #MENU_4
      ;EVENT
      While WindowEvent():Wend 
      ;EVENT
      If Datei
        While Eof(2)=0 
          ;EVENT
        Wend 
        ;EVENT
      Else 
        ;EVENT
      EndIf

    Case #MENU_14
      ;EVENT
      
    Case #MENU_12
      ;EVENT
      If anzahl > 0
        ;EVENT
      Else
        ;EVENT
      EndIf 
      
    Case #MENU_16
      ;EVENT
   
    Case #MENU_18
      ;EVENT
      Select STRING
      Case "1"
          ;EVENT
      Case "2"
          ;EVENT
      Case "3"
         ;EVENT
        Default
          ;EVENT
      EndSelect
      ;EVENT

    Case #MENU_19
      ;EVENT
      
    Case #MENU_20
      ;EVENT
      
    Case #MENU_17
      Window_Resize()
      
      EndSelect
  Case #PB_Event_SizeWindow
      Select EventWindowID()
        Case 0
        Window_Resize()
    EndSelect 

    EndSelect 
  Until WaitWindowEvent() = #PB_Event_CloseWindow Or  close = #PB_Event_CloseWindow
Das ;EVENT steht für Ereignisse die ich damit ersetzt habe da diese damit hier nichts zu tun haben dürften sondern nur der programm aufbau.

Re: Problem bei Progausführung

Verfasst: 30.04.2005 21:05
von Danilo
Defmaster hat geschrieben:So nun allerdings reagiert der nich immer, dass heißt wenn ich auf Datei öffnen gehe kommt das manchmal erst nach 3-4 mal.
Du hast 2 WaitWindowEvent() drin, also gehen ein paar
Nachrichten verloren.

Verfasst: 30.04.2005 21:15
von Defmaster
Ah gut wenn ich das WaitWindowEvent() bei Until ... wegnehm gehts wunderbar allerdings lässt sich das Fenster dann nicht mehr per X beenden.

Verfasst: 30.04.2005 21:17
von Andre
Defmaster hat geschrieben:Ah gut wenn ich das WaitWindowEvent() bei Until ... wegnehm gehts wunderbar allerdings lässt sich das Fenster dann nicht mehr per X beenden.
Speicher einfach das Ergebnis von WaitWindowEvent() in einer Variable. Ausschnitt aus der Originalanleitung zu WaitWindowEvent():

Code: Alles auswählen

   Repeat
     EventID = WaitWindowEvent()
     
     Select EventID
       Case #PB_Event_Gadget
         ; ....
       Case #PB_Event_Menu
         ; ....
     
     EndSelect
   Until EventID = #PB_Event_CloseWindow

Verfasst: 30.04.2005 21:24
von Danilo
Defmaster hat geschrieben:Ah gut wenn ich das WaitWindowEvent() bei Until ... wegnehm gehts wunderbar allerdings lässt sich das Fenster dann nicht mehr per X beenden.
Du mußt dann logischerweise oben auch ein Case #PB_Event_CloseWindow
einfügen.

Code: Alles auswählen

OpenWindow(#Window_0, 96, 266, 640, 480,  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered | #PB_Window_WindowCentered , "Titel")

Repeat
  Select WaitWindowEvent()

    Case #PB_Event_CloseWindow
      break

    Case #PB_Event_Menu
      Select EventMenuID()

        Case #MENU_9
          break

        Case #MENU_6 ;- Datei speichern
          ;EVENT
          If dateiname$ = ""
            ;EVENT
          Else
            If SelectedFilePattern() = 0
              ;EVENT
            Else
              ;EVENT
            EndIf
          EndIf
     
        Case #MENU_4
          ;EVENT
          While WindowEvent():Wend
          ;EVENT
          If Datei
            While Eof(2)=0
              ;EVENT
            Wend
            ;EVENT
          Else
            ;EVENT
          EndIf

        Case #MENU_14
          ;EVENT
         
        Case #MENU_12
          ;EVENT
          If anzahl > 0
            ;EVENT
          Else
            ;EVENT
          EndIf
         
        Case #MENU_16
          ;EVENT
       
        Case #MENU_18
          ;EVENT
          Select STRING
            Case "1"
                ;EVENT
            Case "2"
                ;EVENT
            Case "3"
               ;EVENT
              Default
                ;EVENT
          EndSelect
          ;EVENT

        Case #MENU_19
          ;EVENT
         
        Case #MENU_20
          ;EVENT
         
        Case #MENU_17
          Window_Resize()
     
      EndSelect
    Case #PB_Event_SizeWindow
      Select EventWindowID()
        Case 0
          Window_Resize()
      EndSelect

  EndSelect
Forever

Verfasst: 30.04.2005 22:33
von Defmaster
Danke euch beiden.

Das mit dem EventID hat ich vorher immer gehabt nur hab ichs damals bei dem Prog anders gemacht naja Danilos lösung funtzt wunderbar.

Danke an die super Hilfe hier im Board :allright:

Verfasst: 30.04.2005 22:46
von Leo
@Andre: Vielleicht sollte mal ein Hinweis in die Hilfe, dass man WaitWindowEvent() nur ein mal pro Schleifendurchlauf aufufen sollte oder so? :|

Verfasst: 01.05.2005 13:22
von Andre
Leo hat geschrieben:@Andre: Vielleicht sollte mal ein Hinweis in die Hilfe, dass man WaitWindowEvent() nur ein mal pro Schleifendurchlauf aufufen sollte oder so? :|
Kann ich schon machen.

Wer sich aber an dem in der Hilfe vorgegbenen Beispiel orientiert, hätte diese Problem auch gar nicht erst gehabt.... :lol: