Problem bei Progausführung

Anfängerfragen zum Programmieren mit PureBasic.
Defmaster
Beiträge: 130
Registriert: 26.12.2004 21:38
Kontaktdaten:

Problem bei Progausführung

Beitrag 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.
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Problem bei Progausführung

Beitrag 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.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Defmaster
Beiträge: 130
Registriert: 26.12.2004 21:38
Kontaktdaten:

Beitrag 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.
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 »

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
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag 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
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Defmaster
Beiträge: 130
Registriert: 26.12.2004 21:38
Kontaktdaten:

Beitrag 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:
Leo
Beiträge: 420
Registriert: 26.10.2004 18:26

Beitrag von Leo »

@Andre: Vielleicht sollte mal ein Hinweis in die Hilfe, dass man WaitWindowEvent() nur ein mal pro Schleifendurchlauf aufufen sollte oder so? :|
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 »

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:
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Antworten